mirror of
https://forgejo.stefka.eu/jiriks74/create-pull-request.git
synced 2025-01-18 16:01:06 +01:00
fix: handle update after force pushing base to a new commit (#1307)
This commit is contained in:
parent
ee93d78b55
commit
d7db273d6c
3 changed files with 188 additions and 13 deletions
29
dist/index.js
vendored
29
dist/index.js
vendored
|
@ -74,18 +74,30 @@ function tryFetch(git, remote, branch) {
|
|||
});
|
||||
}
|
||||
exports.tryFetch = tryFetch;
|
||||
// Return the number of commits that branch2 is ahead of branch1
|
||||
function commitsAhead(git, branch1, branch2) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = yield git.revList([`${branch1}...${branch2}`], ['--right-only', '--count']);
|
||||
return Number(result);
|
||||
});
|
||||
}
|
||||
// Return true if branch2 is ahead of branch1
|
||||
function isAhead(git, branch1, branch2) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = yield git.revList([`${branch1}...${branch2}`], ['--right-only', '--count']);
|
||||
return Number(result) > 0;
|
||||
return (yield commitsAhead(git, branch1, branch2)) > 0;
|
||||
});
|
||||
}
|
||||
// Return the number of commits that branch2 is behind branch1
|
||||
function commitsBehind(git, branch1, branch2) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = yield git.revList([`${branch1}...${branch2}`], ['--left-only', '--count']);
|
||||
return Number(result);
|
||||
});
|
||||
}
|
||||
// Return true if branch2 is behind branch1
|
||||
function isBehind(git, branch1, branch2) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const result = yield git.revList([`${branch1}...${branch2}`], ['--left-only', '--count']);
|
||||
return Number(result) > 0;
|
||||
return (yield commitsBehind(git, branch1, branch2)) > 0;
|
||||
});
|
||||
}
|
||||
// Return true if branch2 is even with branch1
|
||||
|
@ -214,9 +226,16 @@ function createOrUpdateBranch(git, commitMessage, base, branch, branchRemoteName
|
|||
// branches after merging. In particular, it catches a case where the branch was
|
||||
// squash merged but not deleted. We need to reset to make sure it doesn't appear
|
||||
// to have a diff with the base due to different commits for the same changes.
|
||||
// - If the number of commits ahead of the base branch differs between the branch and
|
||||
// temp branch. This catches a case where the base branch has been force pushed to
|
||||
// a new commit.
|
||||
// For changes on base this reset is equivalent to a rebase of the pull request branch.
|
||||
const tempBranchCommitsAhead = yield commitsAhead(git, base, tempBranch);
|
||||
const branchCommitsAhead = yield commitsAhead(git, base, branch);
|
||||
if ((yield git.hasDiff([`${branch}..${tempBranch}`])) ||
|
||||
!(yield isAhead(git, base, tempBranch))) {
|
||||
branchCommitsAhead != tempBranchCommitsAhead ||
|
||||
!(tempBranchCommitsAhead > 0) // !isAhead
|
||||
) {
|
||||
core.info(`Resetting '${branch}'`);
|
||||
// Alternatively, git switch -C branch tempBranch
|
||||
yield git.checkout(branch, tempBranch);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue