caslet
Version:
A simple content addressable system
107 lines (91 loc) • 2.68 kB
JavaScript
// Generated by CoffeeScript 1.4.0
(function() {
var FSCas, crypto, ensureMore, filelet, fs, funclet, loglet, path, run, runGet2, runStore2, runhashGet2, uuid;
loglet = require('loglet');
fs = require('fs');
path = require('path');
crypto = require('crypto');
uuid = require('node-uuid');
funclet = require('funclet');
filelet = require('filelet');
FSCas = require('./cas');
ensureMore = function(args, count, usage) {
if (args.length < count + 1) {
return loglet.croak(usage);
}
};
run = function(argv) {
var command;
command = argv._[0];
return funclet.start(function(next) {
var options;
options = {
baseDir: argv.baseDir || path.join(process.env.HOME, '.caslet')
};
return FSCas.initialize(options, next);
})["catch"](function(err) {
return loglet.croak(err);
}).done(function(cas) {
switch (command) {
case 'store':
ensureMore(argv._, 2, "caslet store <file_to_be_stored> <dest_path>");
return runStore2(cas, argv._[1], argv._[2]);
case 'pathget':
ensureMore(argv._, 1, "caslet pathget <dest_path>");
return runGet2(cas, argv._[1]);
case 'hashget':
ensureMore(argv._, 1, "caslet hashget <hash>");
return runhashGet2(cas, argv._[1]);
default:
return loglet.croak({
error: 'unknown_command',
command: command,
args: argv
});
}
});
};
runGet2 = function(cas, filePath) {
return funclet.start(function(next) {
return cas.get({
path: filePath
}, next);
})["catch"](function(err) {
return loglet.croak(err);
}).done(function(stream) {
stream.on('close', function() {
return stream.close();
});
return stream.pipe(process.stdout);
});
};
runhashGet2 = function(cas, filePath) {
return funclet.start(function(next) {
return cas.get({
hash: filePath
}, next);
})["catch"](function(err) {
return loglet.croak(err);
}).done(function(stream) {
stream.on('close', function() {
return stream.close();
});
return stream.pipe(process.stdout);
});
};
runStore2 = function(cas, filePath, destPath) {
return funclet.start(function(next) {
var stream;
stream = fs.createReadStream(filePath);
return cas.storeWithPath(stream, destPath, next);
})["catch"](function(err) {
return loglet.croak(err);
}).done(function(hash) {
return loglet.log(hash);
});
};
module.exports = {
run: run,
CAS: FSCas
};
}).call(this);