var git = require('../'),
util = require('./util.js'),
Repo = git.Repository,
Tree = git.Tree,
TreeBuilder = git.TreeBuilder,
Reference = git.Reference;
// Backwards compatibility.
Object.defineProperty(git, "Repo", {
value: Repo,
enumerable: false
});
var oldGetReference = Repo.prototype.getReference,
oldGetCommit = Repo.prototype.getCommit,
oldBlob = Repo.prototype.getBlob,
oldGetTree = Repo.prototype.getTree,
oldGetTag = Repo.prototype.getTag,
oldCreateRevWalk = Repo.prototype.createRevWalk,
oldCreateCommit = Repo.prototype.createCommit,
oldCreateBlobFromBuffer = Repo.prototype.createBlobFromBuffer;
/**
* Look up a branch's most recent commit.
*
* @param {String} name Branch name, e.g. 'master'
* @param {Function} callback
* @return {Branch}
*/
Repo.prototype.getBranch = function(name, callback) {
var self = this;
this.getReference('refs/heads/' + name, function referenceLookupCallback(error, reference) {
if (error) return callback(error);
self.getCommit(reference.target(), function commitLookupCallback(error, commit) {
if (error) return callback(error);
callback(null, commit);
});
});
};
util.makeSafe(Repo.prototype, 'getBranch');
/**
* Lookup the reference with the given name.
*
* @param {String} name
* @param {Function} callback
* @return {Reference}
*/
Repo.prototype.getReference = function(name, callback) {
var self = this;
oldGetReference.call(this, name, function(error, reference) {
if (error) return callback(error);
if (reference.type() == Reference.Type.Symbolic) {
reference.resolve(function (error, reference) {
if (error) return callback(error);
reference.repo = self;
callback(null, reference);
});
} else {
reference.repo = self;
callback(null, reference);
}
});
};
util.makeSafe(Repo.prototype, 'getReference');
/**
* Retrieve the commit identified by oid.
*
* @param {String|Oid} String sha or Oid
* @param {Function} callback
* @return {Commit}
*/
Repo.prototype.getCommit = function(oid, callback) {
var self = this;
oldGetCommit.call(this, oid, function(error, commit) {
if (error) return callback(error);
commit.repo = self;
callback(null, commit);
});
};
util.normalizeOid(Repo.prototype, 'getCommit');
util.makeSafe(Repo.prototype, 'getCommit');
/**
* Retrieve the blob represented by the oid.
*
* @param {String|Oid} String sha or Oid
* @param {Function} callback
* @return {Blob}
*/
Repo.prototype.getBlob = function(oid, callback) {
var self = this;
oldBlob.call(this, oid, function(error, blob) {
if (error) return callback(error);
blob.repo = self;
callback(null, blob);
});
};
util.normalizeOid(Repo.prototype, 'getBlob');
util.makeSafe(Repo.prototype, 'getBlob');
/**
* Retrieve the tree represented by the oid.
*
* @param {String|Oid} String sha or Oid
* @param {Function} callback
* @return {Tree}
*/
Repo.prototype.getTree = function(oid, callback) {
var self = this;
oldGetTree.call(this, oid, function(error, tree) {
if (error) return callback(error);
tree.repo = self;
callback(null, tree);
});
};
util.normalizeOid(Repo.prototype, 'getTree');
util.makeSafe(Repo.prototype, 'getTree');
/**
* Retrieve the tag represented by the oid.
*
* @param {String|Oid} String sha or Oid
* @param {Function} callback
* @return {Tag}
*/
Repo.prototype.getTag = function(oid, callback) {
var self = this;
oldGetTag.call(this, oid, callback);
};
util.normalizeOid(Repo.prototype, 'getTag');
util.makeSafe(Repo.prototype, 'getTag');
/**
* Instantiate a new revision walker for browsing the Repo's history.
* See also `Commit.prototype.history()`
*
* @param {String|Oid} String sha or Oid
* @param {Function} callback
* @return {RevWalk}
*/
Repo.prototype.createRevWalk = function() {
var revWalk = oldCreateRevWalk.call(this);
revWalk.repo = this;
return revWalk;
};
/**
* Retrieve the master branch.
*
* @param {Function} callback
* @return {Branch}
*/
Repo.prototype.getMaster = function(callback) {
this.getBranch('master', callback);
};
/**
* Create a commit
*
* @param {String} updateRef
* @param {Signature} author
* @param {Signature} commiter
* @param {String} message
* @param {Tree|Oid|String} Tree
* @param {Array} parents
* @param {Function} callback
* @return {Oid} The oid of the commit
*/
Repo.prototype.createCommit = function(updateRef, author, committer, message, tree, parents, callback) {
if (tree instanceof Tree) {
oldCreateCommit.call(
this,
updateRef,
author,
committer,
null /* use default message encoding */,
message,
tree,
parents.length, parents,
callback);
} else {
var self = this;
this.getTree(tree, function(error, tree) {
if (error) return callback(error);
oldCreateCommit.call(
self,
updateRef,
author,
committer,
null /* use default message encoding */,
message,
tree,
parents.length, parents,
callback);
});
}
};
/**
* Create a blob from a buffer
*
* @param {Buffer} buffer
* @param {Function} callback
* @return {Blob}
*/
Repo.prototype.createBlobFromBuffer = function(buffer, callback) {
oldCreateBlobFromBuffer.call(this, buffer, buffer.length, callback);
};
/**
* Create a new tree builder.
*
* @param {Tree} tree
* @param {Function} callback
*/
Repo.prototype.treeBuilder = function(callback) {
var builder = TreeBuilder.create(null);
builder.root = builder;
builder.repo = this;
return builder;
};