var git = require( '../' ) , events = require( 'events' ); var _Commit = function( obj ) { var self = { _cache: {} }; //if( obj instanceof git.raw.Repo ) { // self.commit = new git.raw.Commit( obj ); //} //else if( obj instanceof git.raw.Commit ) { // self.commit = obj; //} if( obj instanceof git.raw.Commit ) { self.commit = obj; } else { self.commit = new git.raw.Commit(); } Object.defineProperty( self, 'id', { get: function() { var oid = new git.raw.Oid(); self.commit.id( oid ); return oid; }, enumerable: true }); Object.defineProperty( self, 'sha', { get: function() { var oid = new git.raw.Oid(); self.commit.id( oid ); return oid.toString( 40 ); }, enumerable: true }); Object.defineProperty( self, 'msg', { get: function() { return self.commit.messageShort(); }, enumerable: true }); Object.defineProperty( self, 'message', { get: function() { return self.commit.message(); }, enumerable: true }); Object.defineProperty( self, 'time', { get: function() { return new Date( self.commit.time() * 1000 ); }, enumerable: true }); Object.defineProperty( self, 'offset', { get: function() { return self.commit.timeOffset(); }, enumerable: true }); Object.defineProperty( self, 'author', { get: function() { var sig = new git.raw.Sig(); self.commit.author( sig ); return git.sig( sig ); }, enumerable: true }); self.lookup = function( repo, oid, callback ) { self.repo = repo; self.commit.lookup( repo, oid, function() { var args = Array.prototype.slice.call( arguments ); args[0] = git.util().error( args[0] ); callback.apply( self, args.concat( self ) ); }); }; self.tree = function() { var tree = new git.raw.Tree( self.repo ); if( tree.error ) { return git.error( tree.error ); } else { self.commit.tree( tree ); } return git.tree( self.repo, tree ); }; self.file = function( path ) { return self.tree().entry( path ); }; self.history = function( start, end ) { var revwalk = git.revwalk( self.repo ), event = new events.EventEmitter(), commits = []; revwalk.walk( self.id, function( err, index, commit ) { if( err ) { event.emit( 'end', commits ); } else { event.emit( 'commit', index, commit ); commits.push( commit ); } }); return event; }; return self; }; exports.commit = _Commit;