Skip to content

Commit 04c2a5e

Browse files
committed
avoid using tmp remote for comparison to fork branch
1 parent 957aed4 commit 04c2a5e

File tree

1 file changed

+20
-25
lines changed

1 file changed

+20
-25
lines changed

services/repository/merge_upstream.go

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,12 @@ package repository
66
import (
77
"context"
88
"fmt"
9-
"strconv"
10-
"time"
119

1210
git_model "code.gitea.io/gitea/models/git"
1311
issue_model "code.gitea.io/gitea/models/issues"
1412
repo_model "code.gitea.io/gitea/models/repo"
1513
user_model "code.gitea.io/gitea/models/user"
1614
"code.gitea.io/gitea/modules/git"
17-
"code.gitea.io/gitea/modules/log"
1815
repo_module "code.gitea.io/gitea/modules/repository"
1916
"code.gitea.io/gitea/modules/util"
2017
"code.gitea.io/gitea/services/pull"
@@ -105,31 +102,29 @@ func GetUpstreamDivergingInfo(ctx context.Context, gitRepo *git.Repository, repo
105102
return info, nil
106103
}
107104

108-
// Add a temporary remote
109-
tmpRemote := strconv.FormatInt(time.Now().UnixNano(), 10)
110-
if err = gitRepo.AddRemote(tmpRemote, repo.BaseRepo.RepoPath(), false); err != nil {
111-
log.Error("GetUpstreamDivergingInfo: AddRemote: %v", err)
112-
}
113-
defer func() {
114-
if err := gitRepo.RemoveRemote(tmpRemote); err != nil {
115-
log.Error("GetUpstreamDivergingInfo: RemoveRemote: %v", err)
116-
}
117-
}()
118-
119-
var remoteBranch string
120-
_, remoteBranch, err = gitRepo.GetMergeBase(tmpRemote, baseBranch.CommitID, forkBranch.CommitID)
121-
if err != nil {
122-
log.Error("GetMergeBase: %v", err)
123-
}
124-
125-
baseBranch.CommitID, err = git.GetFullCommitID(gitRepo.Ctx, gitRepo.Path, remoteBranch)
126-
if err != nil {
127-
baseBranch.CommitID = remoteBranch
128-
}
129-
130105
diff, err := git.GetDivergingCommits(gitRepo.Ctx, gitRepo.Path, baseBranch.CommitID, forkBranch.CommitID)
131106
if err != nil {
132107
info.BaseIsNewer = baseBranch.UpdatedUnix > forkBranch.UpdatedUnix
108+
if !info.BaseIsNewer {
109+
var (
110+
baseCommitID git.ObjectID
111+
headCommit *git.Commit
112+
)
113+
114+
gitRepo.GetCommit(forkBranch.CommitID)
115+
116+
if baseCommitID, err = gitRepo.ConvertToGitID(baseBranch.CommitID); err != nil {
117+
return info, nil
118+
}
119+
120+
if headCommit, err = gitRepo.GetCommit(forkBranch.CommitID); err != nil {
121+
return info, nil
122+
}
123+
124+
if isAncester, _ := headCommit.HasPreviousCommit(baseCommitID); !isAncester {
125+
info.BaseIsNewer = true
126+
}
127+
}
133128
return info, nil
134129
}
135130
info.CommitsBehind, info.CommitsAhead = diff.Behind, diff.Ahead

0 commit comments

Comments
 (0)