var put = function(path, content, message, onProgress) { return csp.go(function*() { var data, response, result; data = { message: message || 'automated commit', content: new Buffer(content).toString('base64'), sha : yield shaFor(path) }; response = yield request('PUT', path, data, onProgress); result = response.data; //TODO report an error if these don't match console.log(result.content.sha); console.log(sha1(content)); return { status: response.status, sha : result.content.sha, commit: { sha: result.commit.sha } }; }); };
var shaFor = function(path) { return csp.go(function*() { var parts, dir, file, contents, i; parts = path.split('/'); file = parts.pop(); dir = parts.join('/'); contents = (yield get(dir)).result; for (i = 0; i < contents.length; ++i) if (contents[i].name == file) return contents[i].sha; }); };
var get = function(path) { return csp.go(function*() { var response, result, content; response = yield request('GET', path); result = response.data; if (result.content) content = new Buffer(result.content, 'base64').toString('utf8'); return { status : response.status, result : result, content: content, sha : result.sha }; }); };