pj-nodegit
Version:
Node.js libgit2 asynchronous native bindings
58 lines (52 loc) • 2.45 kB
JavaScript
;
var NodeGit = require("../");
var Merge = NodeGit.Merge;
var _commits = Merge.commits;
var _merge = Merge.merge;
var _file = Merge.file;
/**
* Merge two files as they exist in the in-memory data structures, using
* the given common ancestor as the baseline. (git_merge_file)
*
* @param {MergeFileInput} ancestor The contents of the ancestor file
* @param {MergeFileInput} ours The contents of the file in "our" side
* @param {MergeFileInput} theirs The contents of the file in "theirs" side
* @param {MergeFileOptions} [options] The merge file options
* or `NULL` for defaults
*/
Merge.file = function (ancestor, ours, theirs, options) {
ancestor = normalizeOptions(ancestor, NodeGit.MergeFileInput);
ours = normalizeOptions(ours, NodeGit.MergeFileInput);
theirs = normalizeOptions(theirs, NodeGit.MergeFileInput);
options = normalizeOptions(options || {}, NodeGit.MergeFileOptions);
return _file.call(this, ancestor, ours, theirs, options);
};
/**
* Merge 2 commits together and create an new index that can
* be used to create a merge commit.
*
* @param {Repository} repo Repository that contains the given commits
* @param {Commit} ourCommit The commit that reflects the destination tree
* @param {Commit} theirCommit The commit to merge into ourCommit
* @param {MergeOptions} [options] The merge tree options (null for default)
*/
Merge.commits = function (repo, ourCommit, theirCommit, options) {
return Promise.all([repo.getCommit(ourCommit), repo.getCommit(theirCommit)]).then(function (commits) {
return _commits.call(this, repo, commits[0], commits[1], options);
});
};
/**
* Merge a commit into HEAD and writes the results to the working directory.
*
* @param {Repository} repo Repository that contains the given commits
* @param {AnnotatedCommit} theirHead The annotated commit to merge into HEAD
* @param {MergeOptions} [mergeOpts] The merge tree options (null for default)
* @param {CheckoutOptions} [checkoutOpts] The checkout options
* (null for default)
*/
Merge.merge = function (repo, theirHead, mergeOpts, checkoutOpts) {
// Even though git_merge takes an array of annotated_commits, it expects
// exactly one to have been passed in or it will throw an error... ¯\_(ツ)_/¯
var theirHeads = [theirHead];
return _merge.call(this, repo, theirHeads, theirHeads.length, mergeOpts, checkoutOpts);
};