mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 19:38:23 +00:00 
			
		
		
		
	Move GetDiverging functions to gitrepo (#35524)
Extracted from #35469 --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -14,7 +14,7 @@ import ( | ||||
| 	repo_model "code.gitea.io/gitea/models/repo" | ||||
| 	"code.gitea.io/gitea/models/unit" | ||||
| 	user_model "code.gitea.io/gitea/models/user" | ||||
| 	"code.gitea.io/gitea/modules/git" | ||||
| 	"code.gitea.io/gitea/modules/gitrepo" | ||||
| 	"code.gitea.io/gitea/modules/globallock" | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/repository" | ||||
| @@ -34,17 +34,21 @@ func Update(ctx context.Context, pr *issues_model.PullRequest, doer *user_model. | ||||
| 	} | ||||
| 	defer releaser() | ||||
|  | ||||
| 	diffCount, err := GetDiverging(ctx, pr) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} else if diffCount.Behind == 0 { | ||||
| 		return fmt.Errorf("HeadBranch of PR %d is up to date", pr.Index) | ||||
| 	} | ||||
|  | ||||
| 	if err := pr.LoadBaseRepo(ctx); err != nil { | ||||
| 		log.Error("unable to load BaseRepo for %-v during update-by-merge: %v", pr, err) | ||||
| 		return fmt.Errorf("unable to load BaseRepo for PR[%d] during update-by-merge: %w", pr.ID, err) | ||||
| 	} | ||||
|  | ||||
| 	// TODO: FakePR: if the PR is a fake PR (for example: from Merge Upstream), then no need to check diverging | ||||
| 	if pr.ID > 0 { | ||||
| 		diffCount, err := gitrepo.GetDivergingCommits(ctx, pr.BaseRepo, pr.BaseBranch, pr.GetGitHeadRefName()) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} else if diffCount.Behind == 0 { | ||||
| 			return fmt.Errorf("HeadBranch of PR %d is up to date", pr.Index) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if err := pr.LoadHeadRepo(ctx); err != nil { | ||||
| 		log.Error("unable to load HeadRepo for PR %-v during update-by-merge: %v", pr, err) | ||||
| 		return fmt.Errorf("unable to load HeadRepo for PR[%d] during update-by-merge: %w", pr.ID, err) | ||||
| @@ -172,18 +176,13 @@ func IsUserAllowedToUpdate(ctx context.Context, pull *issues_model.PullRequest, | ||||
| 	return mergeAllowed, rebaseAllowed, nil | ||||
| } | ||||
|  | ||||
| // GetDiverging determines how many commits a PR is ahead or behind the PR base branch | ||||
| func GetDiverging(ctx context.Context, pr *issues_model.PullRequest) (*git.DivergeObject, error) { | ||||
| 	log.Trace("GetDiverging[%-v]: compare commits", pr) | ||||
| 	prCtx, cancel, err := createTemporaryRepoForPR(ctx, pr) | ||||
| 	if err != nil { | ||||
| 		if !git_model.IsErrBranchNotExist(err) { | ||||
| 			log.Error("CreateTemporaryRepoForPR %-v: %v", pr, err) | ||||
| 		} | ||||
| 		return nil, err | ||||
| func syncCommitDivergence(ctx context.Context, pr *issues_model.PullRequest) error { | ||||
| 	if err := pr.LoadBaseRepo(ctx); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer cancel() | ||||
|  | ||||
| 	diff, err := git.GetDivergingCommits(ctx, prCtx.tmpBasePath, baseBranch, trackingBranch) | ||||
| 	return &diff, err | ||||
| 	divergence, err := gitrepo.GetDivergingCommits(ctx, pr.BaseRepo, pr.BaseBranch, pr.GetGitHeadRefName()) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return pr.UpdateCommitDivergence(ctx, divergence.Ahead, divergence.Behind) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user