summaryrefslogtreecommitdiffstats
path: root/services/pull/patch.go
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2023-03-07 20:07:35 +0000
committerGitHub <noreply@github.com>2023-03-07 15:07:35 -0500
commit8598356df1eb21b6e33ecb9f9268ba36c5488e7c (patch)
tree6236ba7c65f06a85a1a20641f4338d4b315cda4b /services/pull/patch.go
parenta2f44463f07cc184b0d6ca1655d1f26d75491896 (diff)
downloadgitea-8598356df1eb21b6e33ecb9f9268ba36c5488e7c.tar.gz
gitea-8598356df1eb21b6e33ecb9f9268ba36c5488e7c.zip
Refactor and tidy-up the merge/update branch code (#22568)
The merge and update branch code was previously a little tangled and had some very long functions. The functions were not very clear in their reasoning and there were deficiencies in their logging and at least one bug in the handling of LFS for update by rebase. This PR substantially refactors this code and splits things out to into separate functions. It also attempts to tidy up the calls by wrapping things in "context"s. There are also attempts to improve logging when there are errors. Signed-off-by: Andrew Thornton <art27@cantab.net> --------- Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: delvh <dev.lh@web.de>
Diffstat (limited to 'services/pull/patch.go')
-rw-r--r--services/pull/patch.go17
1 files changed, 6 insertions, 11 deletions
diff --git a/services/pull/patch.go b/services/pull/patch.go
index c2ccc75bdc..9277355720 100644
--- a/services/pull/patch.go
+++ b/services/pull/patch.go
@@ -22,7 +22,6 @@ import (
"code.gitea.io/gitea/modules/graceful"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/process"
- repo_module "code.gitea.io/gitea/modules/repository"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
@@ -64,25 +63,21 @@ func TestPatch(pr *issues_model.PullRequest) error {
defer finished()
// Clone base repo.
- tmpBasePath, err := createTemporaryRepo(ctx, pr)
+ prCtx, cancel, err := createTemporaryRepoForPR(ctx, pr)
if err != nil {
- log.Error("CreateTemporaryPath: %v", err)
+ log.Error("createTemporaryRepoForPR %-v: %v", pr, err)
return err
}
- defer func() {
- if err := repo_module.RemoveTemporaryPath(tmpBasePath); err != nil {
- log.Error("Merge: RemoveTemporaryPath: %s", err)
- }
- }()
+ defer cancel()
- gitRepo, err := git.OpenRepository(ctx, tmpBasePath)
+ gitRepo, err := git.OpenRepository(ctx, prCtx.tmpBasePath)
if err != nil {
return fmt.Errorf("OpenRepository: %w", err)
}
defer gitRepo.Close()
// 1. update merge base
- pr.MergeBase, _, err = git.NewCommand(ctx, "merge-base", "--", "base", "tracking").RunStdString(&git.RunOpts{Dir: tmpBasePath})
+ pr.MergeBase, _, err = git.NewCommand(ctx, "merge-base", "--", "base", "tracking").RunStdString(&git.RunOpts{Dir: prCtx.tmpBasePath})
if err != nil {
var err2 error
pr.MergeBase, err2 = gitRepo.GetRefCommitID(git.BranchPrefix + "base")
@@ -101,7 +96,7 @@ func TestPatch(pr *issues_model.PullRequest) error {
}
// 2. Check for conflicts
- if conflicts, err := checkConflicts(ctx, pr, gitRepo, tmpBasePath); err != nil || conflicts || pr.Status == issues_model.PullRequestStatusEmpty {
+ if conflicts, err := checkConflicts(ctx, pr, gitRepo, prCtx.tmpBasePath); err != nil || conflicts || pr.Status == issues_model.PullRequestStatusEmpty {
return err
}