Last active
December 18, 2015 12:39
-
-
Save creationix/5784580 to your computer and use it in GitHub Desktop.
Low Level JS API for local git repos
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var gitRepo = require('../.'); | |
var fs = require('min-fs'); | |
var run = require('gen-run'); | |
var consume = require('../stream-to-string.js'); | |
run(function* main() { | |
// Configure the repo API to work from a local clone. | |
var repo = gitRepo({ fs: fs("./my-repo") }); | |
// Find out what sha1 hash HEAD points to | |
var hash = yield repo.db.read("HEAD"); | |
console.log("HEAD", hash); | |
// Load that commit as an object | |
var head = yield repo.load(hash); | |
console.log(head); | |
// Load the tree it points to | |
var top = yield repo.load(head.commit.tree); | |
console.log(top); | |
// Load the first file in the tree | |
var obj = yield repo.load(top.tree[0].hash); | |
console.log(obj); | |
// Buffer the file stream to a string | |
var text = yield consume(obj.blob.source); | |
// Notice that hash is now defined | |
console.log({ hash: obj.hash, body: text }); | |
// Load an annotated tag | |
hash = yield repo.db.read("/refs/tags/test-tag"); | |
console.log("test-tag", hash); | |
var tag = yield repo.load(hash); | |
console.log(tag); | |
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
tim@localhost:~/Code/git-repo$ cd example/ | |
tim@localhost:~/Code/git-repo/example$ node --harmony-generators sample.js | |
HEAD 168b0147775a6c240893ee7e12671fbd58144ca2 | |
{ hash: '168b0147775a6c240893ee7e12671fbd58144ca2', | |
commit: | |
{ parents: [], | |
message: 'Initial Commit\n', | |
tree: '5e1f1f71e00c3a16333121d492d88556d298e479', | |
author: 'Tim Caswell <[email protected]> 1371196478 -0500', | |
committer: 'Tim Caswell <[email protected]> 1371196478 -0500' } } | |
{ hash: '5e1f1f71e00c3a16333121d492d88556d298e479', | |
tree: | |
[ { mode: 33188, | |
path: 'README.md', | |
hash: 'e7aecb2c038b16c2ef544b1413d41cbe40aa514d' } ] } | |
{ hash: undefined, | |
blob: { length: 44, source: [Function: read] } } | |
{ hash: 'e7aecb2c038b16c2ef544b1413d41cbe40aa514d', | |
body: '# Sample Project\n\nThis is a sample project.\n' } | |
test-tag a58ff6c38f1af29044dd2b5b796b78a8ebd114bc | |
{ hash: 'a58ff6c38f1af29044dd2b5b796b78a8ebd114bc', | |
tag: | |
{ message: 'This is a test tag\n', | |
object: '168b0147775a6c240893ee7e12671fbd58144ca2', | |
type: 'commit', | |
tag: 'test-tag', | |
tagger: 'Tim Caswell <[email protected]> 1371204916 -0500' } } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var gitRepo = require('../.'); | |
var fs = require('min-fs'); | |
var consume = require('../stream-to-string.js'); | |
// Configure the repo API to work from a local clone. | |
var repo = gitRepo({ fs: fs("./my-repo") }); | |
// Find out what sha1 hash HEAD points to | |
repo.db.read("HEAD")(function (err, hash) { | |
if (err) throw err; | |
console.log("HEAD", hash); | |
// Load that commit as an object | |
repo.load(hash)(function (err, head) { | |
if (err) throw err; | |
console.log(head); | |
// Load the tree it points to | |
repo.load(head.commit.tree)(function (err, top) { | |
if (err) throw err; | |
console.log(top); | |
// Load the first file in the tree | |
repo.load(top.tree[0].hash)(function (err, obj) { | |
if (err) throw err; | |
console.log(obj); | |
// Buffer the file stream to a string | |
consume(obj.blob.source)(function (err, text) { | |
if (err) throw err; | |
// Notice that hash is now defined | |
console.log({ hash: obj.hash, body: text }); | |
}); | |
}); | |
}); | |
}); | |
}); | |
// Load an annotated tag | |
repo.db.read("/refs/tags/test-tag")(function (err, hash) { | |
if (err) throw err; | |
console.log("test-tag", hash); | |
repo.load(hash)(function (err, tag) { | |
if (err) throw err; | |
console.log(tag); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment