diff --git a/lib/repository.js b/lib/repository.js index 22f10668f..f311900eb 100644 --- a/lib/repository.js +++ b/lib/repository.js @@ -1686,6 +1686,7 @@ Repository.prototype.refreshIndex = function(callback) { * @param {Signature} signature * @param {Merge.PREFERENCE} mergePreference * @param {MergeOptions} mergeOptions + * @param {MergeBranchOptions} mergeBranchOptions * @return {Oid|Index} A commit id for a succesful merge or an index for a * merge with conflicts */ @@ -1695,13 +1696,23 @@ Repository.prototype.mergeBranches = function( signature, mergePreference, mergeOptions, - processMergeMessageCallback + mergeBranchOptions ) { const repo = this; let fromBranch; let toBranch; - processMergeMessageCallback = processMergeMessageCallback || + // Support old parameter `processMergeMessageCallback` + const isOldOptionParameter = typeof mergeBranchOptions === "function"; + if (isOldOptionParameter) { + console.error("DeprecationWarning: Repository#mergeBranches parameter " + + "processMergeMessageCallback, use MergeBranchOptions"); + } + const processMergeMessageCallback = mergeBranchOptions && + (isOldOptionParameter ? + mergeBranchOptions : + mergeBranchOptions.processMergeMessageCallback) || function (message) { return message; }; + const signingCallback = mergeBranchOptions && mergeBranchOptions.signingCb; mergePreference = mergePreference || NodeGit.Merge.PREFERENCE.NONE; mergeOptions = normalizeOptions(mergeOptions, NodeGit.MergeOptions); @@ -1819,6 +1830,17 @@ Repository.prototype.mergeBranches = function( return Promise.all([oid, processMergeMessageCallback(message)]); }) .then(([oid, message]) => { + if (signingCallback) { + return repo.createCommitWithSignature( + toBranch.name(), + signature, + signature, + message, + oid, + [toCommitOid, fromCommitOid], + signingCallback + ); + } return repo.createCommit( toBranch.name(), signature, diff --git a/test/tests/merge.js b/test/tests/merge.js index 80bb0589d..00387da82 100644 --- a/test/tests/merge.js +++ b/test/tests/merge.js @@ -646,9 +646,11 @@ describe("Merge", function() { ourSignature, NodeGit.Merge.PREFERENCE.NO_FASTFORWARD, null, - function(message) { - assert(message === "Merge branch 'theirs' into ours"); - return "We manipulated the message, HAH."; + { + processMergeMessageCallback: function(message) { + assert(message === "Merge branch 'theirs' into ours"); + return "We manipulated the message, HAH."; + } } ); }) @@ -803,9 +805,11 @@ describe("Merge", function() { ourSignature, NodeGit.Merge.PREFERENCE.NO_FASTFORWARD, null, - function(message) { - assert(message === "Merge branch 'theirs' into ours"); - return Promise.resolve("We manipulated the message, HAH."); + { + processMergeMessageCallback: function(message) { + assert(message === "Merge branch 'theirs' into ours"); + return Promise.resolve("We manipulated the message, HAH."); + } } ); })