@@ -6,15 +6,12 @@ package repository
66import (
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