From 1d6880b1a66f0053fa82b5116b1e01187e0fc95a Mon Sep 17 00:00:00 2001 From: Michael Kriese <michael.kriese@visualon.de> Date: Mon, 24 Jun 2019 18:28:24 +0200 Subject: [PATCH] fix(bitbucket-server): store pr versions (#3957) --- lib/platform/bitbucket-server/index.ts | 40 +++++++---- .../__snapshots__/index.spec.ts.snap | 72 ------------------- 2 files changed, 27 insertions(+), 85 deletions(-) diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts index d0534d2f36..5cdb3ed318 100644 --- a/lib/platform/bitbucket-server/index.ts +++ b/lib/platform/bitbucket-server/index.ts @@ -18,6 +18,8 @@ interface BbsConfig { repository: string; repositorySlug: string; storage: GitStorage; + + prVersions: Map<number, number>; } let config: BbsConfig = {} as any; @@ -26,6 +28,13 @@ const defaults: any = { hostType: 'bitbucket-server', }; +/* istanbul ignore next */ +function updatePrVersion(pr: number, version: number) { + const res = Math.max(config.prVersions.get(pr) || 0, version); + config.prVersions.set(pr, res); + return res; +} + export function initPlatform({ endpoint, username, @@ -100,7 +109,13 @@ export async function initRepo({ }); const [projectKey, repositorySlug] = repository.split('/'); - config = { projectKey, repositorySlug, gitPrivateKey, repository } as any; + config = { + projectKey, + repositorySlug, + gitPrivateKey, + repository, + prVersions: new Map<number, number>(), + } as any; /* istanbul ignore else */ if (bbUseDefaultReviewers !== false) { @@ -250,13 +265,11 @@ export async function deleteBranch(branchName: string, closePr = false) { // getBranchPr const pr = await getBranchPr(branchName); if (pr) { - await api.post( + const { body } = await api.post( `./rest/api/1.0/projects/${config.projectKey}/repos/${config.repositorySlug}/pull-requests/${pr.number}/decline?version=${pr.version}` ); - // wait for pr change propagation - await delay(1000); - await getPr(pr.number, true); + updatePrVersion(pr, body); } } return config.storage.deleteBranch(branchName); @@ -733,6 +746,8 @@ export async function createPr( ...utils.prInfo(prInfoRes.body), }; + updatePrVersion(pr.number, pr.version); + // istanbul ignore if if (config.prList) { config.prList.push(pr); @@ -761,6 +776,8 @@ export async function getPr(prNo: number, refreshCache?: boolean) { ), }; + pr.version = updatePrVersion(pr.number, pr.version); + if (pr.state === 'open') { const mergeRes = await api.get( `./rest/api/1.0/projects/${config.projectKey}/repos/${config.repositorySlug}/pull-requests/${prNo}/merge`, @@ -841,7 +858,7 @@ export async function updatePr( throw Object.assign(new Error('not-found'), { statusCode: 404 }); } - await api.put( + const { body } = await api.put( `./rest/api/1.0/projects/${config.projectKey}/repos/${config.repositorySlug}/pull-requests/${prNo}`, { body: { @@ -852,9 +869,8 @@ export async function updatePr( }, } ); - // wait for pr change propagation - await delay(1000); - await getPr(prNo, true); + + updatePrVersion(prNo, body.version); } catch (err) { if (err.statusCode === 404) { throw new Error('not-found'); @@ -876,12 +892,10 @@ export async function mergePr(prNo: number, branchName: string) { if (!pr) { throw Object.assign(new Error('not-found'), { statusCode: 404 }); } - await api.post( + const { body } = await api.post( `./rest/api/1.0/projects/${config.projectKey}/repos/${config.repositorySlug}/pull-requests/${prNo}/merge?version=${pr.version}` ); - // wait for pr change propagation - await delay(1000); - await getPr(prNo, true); + updatePrVersion(prNo, body.version); } catch (err) { if (err.statusCode === 404) { throw new Error('not-found'); diff --git a/test/platform/bitbucket-server/__snapshots__/index.spec.ts.snap b/test/platform/bitbucket-server/__snapshots__/index.spec.ts.snap index 998f20b2ef..61e05a9102 100644 --- a/test/platform/bitbucket-server/__snapshots__/index.spec.ts.snap +++ b/test/platform/bitbucket-server/__snapshots__/index.spec.ts.snap @@ -1016,24 +1016,6 @@ Array [ "useCache": true, }, ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/merge", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/commits?withCounts=true", - Object { - "useCache": false, - }, - ], ] `; @@ -1288,24 +1270,6 @@ Array [ "useCache": true, }, ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/merge", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/commits?withCounts=true", - Object { - "useCache": false, - }, - ], ] `; @@ -2506,24 +2470,6 @@ Array [ "useCache": true, }, ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/merge", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/commits?withCounts=true", - Object { - "useCache": false, - }, - ], ] `; @@ -2778,24 +2724,6 @@ Array [ "useCache": true, }, ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/merge", - Object { - "useCache": false, - }, - ], - Array [ - "./rest/api/1.0/projects/SOME/repos/repo/pull-requests/5/commits?withCounts=true", - Object { - "useCache": false, - }, - ], ] `; -- GitLab