[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/javascript-forks/nodegit.nodegit/emscripten/lib/repository.js [Back]  [Original]

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;
};

Web Proxy Viewer  |  New URL  |  Original Page