| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | 
							- "use strict";
 
- module.exports = addCache;
 
- function addCache(repo, cache) {
 
-   var loadAs = repo.loadAs;
 
-   if (loadAs) repo.loadAs = loadAsCached;
 
-   var saveAs = repo.saveAs;
 
-   if (saveAs) repo.saveAs = saveAsCached;
 
-   var createTree = repo.createTree;
 
-   if (createTree) repo.createTree = createTreeCached;
 
-   function loadAsCached(type, hash, callback) {
 
-     // Next check in disk cache...
 
-     cache.loadAs(type, hash, onCacheLoad);
 
-     function onCacheLoad(err, value) {
 
-       if (err) return callback(err);
 
-       // ...and return if it's there.
 
-       if (value !== undefined) {
 
-         return callback(null, value, hash);
 
-       }
 
-       // Otherwise load from real data source...
 
-       loadAs.call(repo, type, hash, onLoad);
 
-     }
 
-     function onLoad(err, value) {
 
-       if (value === undefined) return callback(err);
 
-       // Store it on disk too...
 
-       // Force the hash to prevent mismatches.
 
-       cache.saveAs(type, value, onSave, hash);
 
-       function onSave(err) {
 
-         if (err) return callback(err);
 
-         // Finally return the value to caller.
 
-         callback(null, value, hash);
 
-       }
 
-     }
 
-   }
 
-   function saveAsCached(type, value, callback) {
 
-     saveAs.call(repo, type, value, onSave);
 
-     function onSave(err, hash) {
 
-       if (err) return callback(err);
 
-       // Store in disk, forcing hash to match.
 
-       cache.saveAs(type, value, callback, hash);
 
-     }
 
-   }
 
-   function createTreeCached(entries, callback) {
 
-     createTree.call(repo, entries, onTree);
 
-     function onTree(err, hash, tree) {
 
-       if (err) return callback(err);
 
-       cache.saveAs("tree", tree, callback, hash);
 
-     }
 
-   }
 
- }
 
 
  |