summaryrefslogtreecommitdiffstats
path: root/services/pull
diff options
context:
space:
mode:
authorGusted <williamzijl7@hotmail.com>2022-04-21 23:55:45 +0200
committerGitHub <noreply@github.com>2022-04-21 23:55:45 +0200
commitebe569a268bbe71bf2bc30cd2829227700688b57 (patch)
treee4ba88d01dbaaee73135b8f61f52ae78487c0383 /services/pull
parentFix logging of Transfer API (#19456) (diff)
downloadforgejo-ebe569a268bbe71bf2bc30cd2829227700688b57.tar.xz
forgejo-ebe569a268bbe71bf2bc30cd2829227700688b57.zip
Set correct PR status on 3way on conflict checking (#19457)
* Set correct PR status on 3way on conflict checking - When 3-way merge is enabled for conflict checking, it has a new interesting behavior that it doesn't return any error when it found a conflict, so we change the condition to not check for the error, but instead check if conflictedfiles is populated, this fixes a issue whereby PR status wasn't correctly on conflicted PR's. - Refactor the mergeable property(which was incorrectly set and lead me this bug) to be more maintainable. - Add a dedicated test for conflicting checking, so it should prevent future issues with this. * Fix linter
Diffstat (limited to 'services/pull')
-rw-r--r--services/pull/patch.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/services/pull/patch.go b/services/pull/patch.go
index f86141aa7a..f118ef33d0 100644
--- a/services/pull/patch.go
+++ b/services/pull/patch.go
@@ -444,14 +444,16 @@ func checkConflicts(ctx context.Context, pr *models.PullRequest, gitRepo *git.Re
},
})
- // 9. If there is a conflict the `git apply` command will return a non-zero error code - so there will be a positive error.
- if err != nil {
+ // 9. Check if the found conflictedfiles is non-zero, "err" could be non-nil, so we should ignore it if we found conflicts.
+ // Note: `"err" could be non-nil` is due that if enable 3-way merge, it doesn't return any error on found conflicts.
+ if len(pr.ConflictedFiles) > 0 {
if conflict {
pr.Status = models.PullRequestStatusConflict
log.Trace("Found %d files conflicted: %v", len(pr.ConflictedFiles), pr.ConflictedFiles)
return true, nil
}
+ } else if err != nil {
return false, fmt.Errorf("git apply --check: %v", err)
}
return false, nil