Skip to content

Commit 5eda0e0

Browse files
committed
add hook callbacks for rebase and merge operations
This will help consumers of nodegit-flow that utilize GitHooks operations.
1 parent b7ff2ad commit 5eda0e0

5 files changed

Lines changed: 45 additions & 10 deletions

File tree

src/Feature.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,14 @@ class Feature {
7070
* @return {Commit} The commit created by finishing the feature
7171
*/
7272
static finishFeature(repo, featureName, options = {}) {
73-
const {keepBranch, isRebase, processMergeMessageCallback} = options;
73+
const {
74+
keepBranch,
75+
isRebase,
76+
preRebaseCallback = () => {},
77+
processMergeMessageCallback,
78+
postMergeCallback = () => {},
79+
beforeRebaseFinishCallback = () => {}
80+
} = options;
7481

7582
if (!repo) {
7683
return Promise.reject(new Error('Repo is required'));
@@ -86,10 +93,11 @@ class Feature {
8693
let featureCommit;
8794
let cancelDevelopMerge;
8895
let mergeCommit;
96+
let developBranchName;
8997
let featureBranchName;
9098
return Config.getConfig(repo)
9199
.then((config) => {
92-
const developBranchName = config['gitflow.branch.develop'];
100+
developBranchName = config['gitflow.branch.develop'];
93101
featureBranchName = config['gitflow.prefix.feature'] + featureName;
94102

95103
return Promise.all(
@@ -113,9 +121,11 @@ class Feature {
113121
cancelDevelopMerge = isSameCommit || isRebase;
114122

115123
if (!cancelDevelopMerge) {
116-
return utils.Repo.merge(developBranch, featureBranch, repo, processMergeMessageCallback);
124+
return utils.Repo.merge(developBranch, featureBranch, repo, processMergeMessageCallback)
125+
.then(utils.InjectIntermediateCallback(postMergeCallback));
117126
} else if (isRebase && !isSameCommit) {
118-
return utils.Repo.rebase(developBranch, featureBranch, repo);
127+
return Promise.resolve(preRebaseCallback(developBranchName, featureBranchName))
128+
.then(() => utils.Repo.rebase(developBranch, featureBranch, repo, beforeRebaseFinishCallback));
119129
}
120130
return Promise.resolve();
121131
})

src/Hotfix.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,13 @@ class Hotfix {
6363
* @return {Commit} The commit created by finishing the hotfix
6464
*/
6565
static finishHotfix(repo, hotfixVersion, options = {}) {
66-
const {keepBranch, message, processMergeMessageCallback} = options;
66+
const {
67+
keepBranch,
68+
message,
69+
processMergeMessageCallback,
70+
postDevelopMergeCallback = () => {},
71+
postMasterMergeCallback = () => {}
72+
} = options;
6773

6874
if (!repo) {
6975
return Promise.reject(new Error('Repo is required'));
@@ -116,7 +122,8 @@ class Hotfix {
116122

117123
// Merge hotfix into develop
118124
if (!cancelDevelopMerge) {
119-
return utils.Repo.merge(developBranch, hotfixBranch, repo, processMergeMessageCallback);
125+
return utils.Repo.merge(developBranch, hotfixBranch, repo, processMergeMessageCallback)
126+
.then(utils.InjectIntermediateCallback(postDevelopMergeCallback));
120127
}
121128
return Promise.resolve();
122129
})
@@ -127,6 +134,7 @@ class Hotfix {
127134
// Merge the hotfix branch into master
128135
if (!cancelMasterMerge) {
129136
return utils.Repo.merge(masterBranch, hotfixBranch, repo, processMergeMessageCallback)
137+
.then(utils.InjectIntermediateCallback(postMasterMergeCallback))
130138
.then((oid) => utils.Tag.create(oid, tagName, message, repo));
131139
}
132140

src/Release.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,13 @@ class Release {
7070
* @return {Commit} The commit created by finishing the release
7171
*/
7272
static finishRelease(repo, releaseVersion, options = {}) {
73-
const {keepBranch, message, processMergeMessageCallback} = options;
73+
const {
74+
keepBranch,
75+
message,
76+
processMergeMessageCallback,
77+
postDevelopMergeCallback = () => {},
78+
postMasterMergeCallback = () => {}
79+
} = options;
7480

7581
if (!repo) {
7682
return Promise.reject(new Error('Repo is required'));
@@ -123,7 +129,8 @@ class Release {
123129

124130
// Merge release into develop
125131
if (!cancelDevelopMerge) {
126-
return utils.Repo.merge(developBranch, releaseBranch, repo, processMergeMessageCallback);
132+
return utils.Repo.merge(developBranch, releaseBranch, repo, processMergeMessageCallback)
133+
.then(utils.InjectIntermediateCallback(postDevelopMergeCallback));
127134
}
128135
return Promise.resolve();
129136
})
@@ -134,6 +141,7 @@ class Release {
134141
// Merge the release branch into master
135142
if (!cancelMasterMerge) {
136143
return utils.Repo.merge(masterBranch, releaseBranch, repo, processMergeMessageCallback)
144+
.then(utils.InjectIntermediateCallback(postMasterMergeCallback))
137145
.then((oid) => utils.Tag.create(oid, tagName, message, repo));
138146
}
139147

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
module.exports =
2+
(callback) => (a) => Promise.resolve(callback()).then(() => a);

src/utils/RepoUtils.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,15 @@ const RepoUtils = {
4343
});
4444
},
4545

46-
rebase(toBranch, fromBranch, repo) {
47-
return repo.rebaseBranches(fromBranch.name(), toBranch.name(), undefined, undefined)
46+
rebase(toBranch, fromBranch, repo, beforeRebaseFinish) {
47+
return repo.rebaseBranches(
48+
fromBranch.name(),
49+
toBranch.name(),
50+
undefined,
51+
undefined,
52+
undefined,
53+
beforeRebaseFinish
54+
)
4855
.then((result) => {
4956
if (result.hasConflicts && result.hasConflicts()) {
5057
return Promise.reject(result);

0 commit comments

Comments
 (0)