Skip to content

Commit 777693b

Browse files
authored
Assign back when merge-error has occured after rebase (#34)
1 parent 222e2bd commit 777693b

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/MergeRequestAcceptor.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ const containsAssignedUser = (mergeRequest: MergeRequest, user: User) => {
9090
return userIds.includes(user.id);
9191
};
9292
const defaultPipelineValidationRetries = 5;
93+
const defaultRebasingRetries = 1;
9394

9495
export const filterBotLabels = (labels: BotLabels[]) => {
9596
const values = Object.values(BotLabels);
@@ -100,6 +101,7 @@ export const filterBotLabels = (labels: BotLabels[]) => {
100101
export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: MergeRequest, user: User, options: AcceptMergeRequestOptions): Promise<AcceptMergeRequestResult> => {
101102
let mergeRequestInfo: MergeRequestInfo;
102103
let numberOfPipelineValidationRetries = defaultPipelineValidationRetries;
104+
let numberOfRebasingRetries = defaultRebasingRetries;
103105

104106
while (true) {
105107
const tasks: Array<Promise<any>> = [sleep(options.ciInterval)];
@@ -134,7 +136,7 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
134136
}
135137

136138
if (mergeRequestInfo.rebase_in_progress) {
137-
console.log(`[MR] Still rebasing`);
139+
console.log(`[MR][${mergeRequestInfo.iid}] Still rebasing`);
138140
await Promise.all(tasks);
139141
continue;
140142
}
@@ -148,13 +150,23 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
148150
}
149151

150152
if (mergeRequestInfo.diverged_commits_count > 0) {
153+
if (numberOfRebasingRetries <= 0 && mergeRequestInfo.merge_error !== null) {
154+
console.log(`[MR][${mergeRequestInfo.iid}] Merge error after rebase`);
155+
return {
156+
kind: AcceptMergeRequestResultKind.CanNotBeMerged,
157+
mergeRequestInfo,
158+
user,
159+
};
160+
}
161+
151162
await gitlabApi.updateMergeRequest(mergeRequestInfo.project_id, mergeRequestInfo.iid, {
152163
labels: [...filterBotLabels(mergeRequestInfo.labels), BotLabels.Rebasing].join(','),
153164
});
154-
console.log(`[MR] source branch is not up to date, rebasing`);
165+
console.log(`[MR][${mergeRequestInfo.iid}] source branch is not up to date, rebasing`);
155166
await tryCancelPipeline(gitlabApi, mergeRequestInfo, user);
156167
await gitlabApi.rebaseMergeRequest(mergeRequestInfo.project_id, mergeRequestInfo.iid);
157168
numberOfPipelineValidationRetries = defaultPipelineValidationRetries;
169+
numberOfRebasingRetries--;
158170
await Promise.all(tasks);
159171
continue;
160172
}
@@ -181,8 +193,8 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
181193

182194
if (currentPipelineCandidate === undefined) {
183195
const message = mergeRequestInfo.pipeline === null
184-
? `[MR] Merge request can't be merged. Pipeline does not exist`
185-
: `[MR] Merge request can't be merged. The latest pipeline is not executed on the latest commit`;
196+
? `[MR][${mergeRequestInfo.iid}] Merge request can't be merged. Pipeline does not exist`
197+
: `[MR][${mergeRequestInfo.iid}] Merge request can't be merged. The latest pipeline is not executed on the latest commit`;
186198
console.log(message);
187199

188200
if (numberOfPipelineValidationRetries > 0) {
@@ -212,13 +224,13 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
212224
);
213225
}
214226

215-
console.log(`[MR] Waiting for CI. Current status: ${currentPipeline.status}`);
227+
console.log(`[MR][${mergeRequestInfo.iid}] Waiting for CI. Current status: ${currentPipeline.status}`);
216228
await Promise.all(tasks);
217229
continue;
218230
}
219231

220232
if (currentPipeline.status === PipelineStatus.Canceled) {
221-
console.log(`[MR] pipeline is canceled calling retry`);
233+
console.log(`[MR][${mergeRequestInfo.iid}] pipeline is canceled calling retry`);
222234
await gitlabApi.retryPipeline(mergeRequestInfo.project_id, currentPipeline.id);
223235
numberOfPipelineValidationRetries = defaultPipelineValidationRetries;
224236
await Promise.all(tasks);
@@ -239,7 +251,7 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
239251
}
240252
}
241253

242-
console.log('[MR] Calling merge request');
254+
console.log(`[MR][${mergeRequestInfo.iid}] Calling merge request`);
243255
const response = await gitlabApi.sendRawRequest(`/api/v4/projects/${mergeRequestInfo.project_id}/merge_requests/${mergeRequestInfo.iid}/merge`, RequestMethod.Put, {
244256
should_remove_source_branch: options.removeBranchAfterMerge,
245257
merge_when_pipeline_succeeds: true,
@@ -287,7 +299,7 @@ export const acceptMergeRequest = async (gitlabApi: GitlabApi, mergeRequest: Mer
287299
);
288300
}
289301

290-
console.log(`[MR] Merge request is processing`);
302+
console.log(`[MR][${mergeRequestInfo.iid}] Merge request is processing`);
291303
await Promise.all(tasks);
292304
}
293305
};

0 commit comments

Comments
 (0)