Created by Tim Branyen @tbranyen
Currently under active development, nodegit2 will provide asynchronous native bindings to the libgit2 C API.
To use nodegit2, you will need to have the libgit2 shared library in /usr/local/lib and the NodeJS
framework installed, you will also need git installed and accessible from your PATH to fetch any vendor/ addons.
__ You can skip this step and nodegit2 will automatically fetch and install a fresh copy of libgit2 for you. __
Install libgit2 from http://libgit2.github.com/
[tim@thinkpad Projects]$ cd libgit2
[tim@thinkpad libgit2]$ ./configure
[tim@thinkpad libgit2]$ make
[tim@thinkpad libgit2]$ sudo make install
Install NodeJS from http://nodejs.org/
[tim@thinkpad Projects]$ cd node-v0.4.0
[tim@thinkpad node-v0.4.0]$ ./configure
[tim@thinkpad node-v0.4.0]$ make
[tim@thinkpad node-v0.4.0]$ sudo make install
Install nodegit2 by cloning source from GitHub and running the make and make install commands. (Future will be on NPM)
[tim@thinkpad Projects]$ git clone git@github.com:tbranyen/nodegit2.git
[tim@thinkpad Projects]$ cd nodegit2
[tim@thinkpad nodegit2]$ make
[tim@thinkpad nodegit2]$ make install
nodegit2 has been compiled and tested to work with the setup required to build and run NodeJS itself
Instructions on compiling NodeJS on a Windows platform can be found here:
[https://github.com/ry/node/wiki/Building-node.js-on-Cygwin-(Windows)](https://github.com/ry/node/wiki/Building-node.js-on-Cygwin-(Windows\))
__ To use these bindings you will need to create a symbolic link (unless you installed via NPM) into /usr/local/lib/node/ or wherever NodeJS is installed to the nodegit2 path. __
__ Reading a repository and commit data __
var git = require('nodegit2');
// Read the current repository
git.repo( '.git', function( err, path, repo ) {
// Read a commit
this.commit( '5f2aa9407f7b3aeb531c621c3358953841ccfc98', function( err, details, commit ) {
console.log( 'Message', details.message );
console.log( 'Author name', details.author.name );
console.log( 'Author email', details.author.email );
// Memory cleanup is *not* required, but would be nice if you remembered :)
repo.free();
});
});
__ Accomplishing the same thing as above __
var git = require('nodegit2').git2;
// Create instance of Repo constructor
var repo = new git2.Repo();
// Read the current repository
repo.open( '.git', function( err, path ) {
// Create object id and set hash
var oid = new git.Oid();
oid.mkstr( '5f2aa9407f7b3aeb531c621c3358953841ccfc98' );
// Create commit object
var commit = new git2.Commit();
// Lookup commit
commit.lookup( repo, oid, function( err, details ) {
console.log( 'Message', details.message );
console.log( 'Author name', details.author.name );
console.log( 'Author email', details.author.email );
// Memory cleanup is *not* required, but would be nice if you remembered :)
repo.free();
});
});
__ Ensure the submodules nodeunit and rimraf are located in the /vendor subdirectory. __
If they are not, cd into the nodegit2 dir and run the following git commands to automatically fetch them:
[tim@thinkpad Projects]$ cd nodegit2
[tim@thinkpad nodegit2]$ git submodule init
[tim@thinkpad nodegit2]$ git submodule update
Then simply run make unittest in the project root.
Example of building nodegit2 bindings and running tests:
[tim@thinkpad Projects]$ cd nodegit2
[tim@thinkpad nodegit2]$ make
[tim@thinkpad nodegit2]$ make unittest
You will most likely install nodeunit and rimraf via npm or make an alias to the nodeunit binary in /vendor.
* 1:1 mapping of libgit2 read methods
* An API that can be easily extended with convenience methods in JS
* An API that offers a familiar clean syntax that will make adoption and use much more likely
* Write capabilities
* GitHub landing page
* Custom odb backend
* API coverage in GitHub Wiki
If you find this project of interest, please document all issues and fork if you feel you can provide a patch. Testing is of huge importance; by simply running the unit tests on your system and reporting issues you can contribute!