diff options
author | Gusted <williamzijl7@hotmail.com> | 2022-04-21 21:55:45 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-21 22:55:45 +0100 |
commit | ebe569a268bbe71bf2bc30cd2829227700688b57 (patch) | |
tree | e4ba88d01dbaaee73135b8f61f52ae78487c0383 /services | |
parent | 3ec1b6c2238c9eb46709091567eb2564aec86d99 (diff) | |
download | gitea-ebe569a268bbe71bf2bc30cd2829227700688b57.tar.gz gitea-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')
-rw-r--r-- | services/pull/patch.go | 6 |
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 |