make sure to clone this gist!
then npm install it
then run node example.js
if it doesn't work ping me on twitter (@isntitvacant) or irc (chrisdickinson in #pdxnode on freenode.net)
| var load = require('git-fs-repo') | |
| var parse = require('git-parse-human') | |
| var walkRefs = require('git-walk-refs') | |
| var walkTree = require('git-walk-tree') | |
| var through = require('through') | |
| load('.git', function(err, git) { | |
| // find refs named HEAD | |
| console.log(git.refs('HEAD')) | |
| // get the hash! | |
| var hash = git.refs('HEAD')[0].hash | |
| console.log('HEAD is %s', hash) | |
| // find the commit it corresponds to! | |
| // note: find will return an instance | |
| // of whatever git type it finds by the | |
| // name of the provided hash. in this | |
| // case we *know* it'll be a commit, | |
| // but you can also use it to get trees, etc. | |
| git.find(hash, function(err, commit) { | |
| // parse the human author info into | |
| // a more usable object: | |
| var humanInfo = parse(commit.author()) | |
| console.log( | |
| 'name: ', humanInfo.name, '\n' | |
| , 'time: ', new Date(humanInfo.time + humanInfo.tzoff).toISOString(), '\n' | |
| , 'email: ', humanInfo.email, '\n' | |
| ) | |
| // or find the tree that's associated! | |
| git.find(commit.tree(), function(err, tree) { | |
| // each tree has `entries()`, each of which has a unix file mode (`mode`), | |
| // a name (`name`), and a hash that is an `instanceof Buffer`. | |
| tree.entries().forEach(function(entry) { | |
| console.log( | |
| entry.mode.toString(8), '-', entry.name, '-', entry.hash.toString('hex') | |
| ) | |
| // and you can use git.find to lookup these entries, too. | |
| // git.find works with buffer hashes as well. | |
| git.find(entry.hash, function(err, tree_or_blob) { | |
| if(tree_or_blob.looseType === 'tree') { | |
| // it's a tree | |
| } else { | |
| // it's a blob, take a look at its data. | |
| console.log(entry.name, tree_or_blob.data().toString()) | |
| } | |
| }) | |
| }) | |
| }) | |
| // you can also use git-walk-refs to emit | |
| // commits as a readable stream (like git log might) | |
| walkRefs(git.find, [hash]) | |
| .pipe(through(log_commit)) | |
| function log_commit(commit) { | |
| console.log('streamed commit!', commit.hash) | |
| } | |
| // or use git-walk-tree to walk the tree of a given commit: | |
| walkTree(git.find, commit) | |
| .pipe(through(log_tree_or_blob)) | |
| function log_tree_or_blob(obj) { | |
| console.log('streamed %s!', obj.looseType, obj.hash.toString('hex')) | |
| } | |
| // you can also combine primitives for higher-level operations, | |
| // like getting the contents of a file at a given hash: | |
| // e.g., https://gist.github.com/chrisdickinson/6544035 | |
| }) | |
| }) |