mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Backport #26399 Signed-off-by: a1012112796 <1012112796@qq.com> Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		@@ -2831,53 +2831,55 @@ func NewComment(ctx *context.Context) {
 | 
			
		||||
 | 
			
		||||
				// check whether the ref of PR <refs/pulls/pr_index/head> in base repo is consistent with the head commit of head branch in the head repo
 | 
			
		||||
				// get head commit of PR
 | 
			
		||||
				prHeadRef := pull.GetGitRefName()
 | 
			
		||||
				if err := pull.LoadBaseRepo(ctx); err != nil {
 | 
			
		||||
					ctx.ServerError("Unable to load base repo", err)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
				prHeadCommitID, err := git.GetFullCommitID(ctx, pull.BaseRepo.RepoPath(), prHeadRef)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					ctx.ServerError("Get head commit Id of pr fail", err)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// get head commit of branch in the head repo
 | 
			
		||||
				if err := pull.LoadHeadRepo(ctx); err != nil {
 | 
			
		||||
					ctx.ServerError("Unable to load head repo", err)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
				if ok := git.IsBranchExist(ctx, pull.HeadRepo.RepoPath(), pull.BaseBranch); !ok {
 | 
			
		||||
					// todo localize
 | 
			
		||||
					ctx.Flash.Error("The origin branch is delete, cannot reopen.")
 | 
			
		||||
					ctx.Redirect(fmt.Sprintf("%s/pulls/%d", ctx.Repo.RepoLink, pull.Index))
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
				headBranchRef := pull.GetGitHeadBranchRefName()
 | 
			
		||||
				headBranchCommitID, err := git.GetFullCommitID(ctx, pull.HeadRepo.RepoPath(), headBranchRef)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					ctx.ServerError("Get head commit Id of head branch fail", err)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				err = pull.LoadIssue(ctx)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					ctx.ServerError("load the issue of pull request error", err)
 | 
			
		||||
					return
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				if prHeadCommitID != headBranchCommitID {
 | 
			
		||||
					// force push to base repo
 | 
			
		||||
					err := git.Push(ctx, pull.HeadRepo.RepoPath(), git.PushOptions{
 | 
			
		||||
						Remote: pull.BaseRepo.RepoPath(),
 | 
			
		||||
						Branch: pull.HeadBranch + ":" + prHeadRef,
 | 
			
		||||
						Force:  true,
 | 
			
		||||
						Env:    repo_module.InternalPushingEnvironment(pull.Issue.Poster, pull.BaseRepo),
 | 
			
		||||
					})
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						ctx.ServerError("force push error", err)
 | 
			
		||||
				if pull.Flow == issues_model.PullRequestFlowGithub {
 | 
			
		||||
					prHeadRef := pull.GetGitRefName()
 | 
			
		||||
					if err := pull.LoadBaseRepo(ctx); err != nil {
 | 
			
		||||
						ctx.ServerError("Unable to load base repo", err)
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
					prHeadCommitID, err := git.GetFullCommitID(ctx, pull.BaseRepo.RepoPath(), prHeadRef)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						ctx.ServerError("Get head commit Id of pr fail", err)
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					// get head commit of branch in the head repo
 | 
			
		||||
					if err := pull.LoadHeadRepo(ctx); err != nil {
 | 
			
		||||
						ctx.ServerError("Unable to load head repo", err)
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
					if ok := git.IsBranchExist(ctx, pull.HeadRepo.RepoPath(), pull.BaseBranch); !ok {
 | 
			
		||||
						// todo localize
 | 
			
		||||
						ctx.Flash.Error("The origin branch is delete, cannot reopen.")
 | 
			
		||||
						ctx.Redirect(fmt.Sprintf("%s/pulls/%d", ctx.Repo.RepoLink, pull.Index))
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
					headBranchRef := pull.GetGitHeadBranchRefName()
 | 
			
		||||
					headBranchCommitID, err := git.GetFullCommitID(ctx, pull.HeadRepo.RepoPath(), headBranchRef)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						ctx.ServerError("Get head commit Id of head branch fail", err)
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					err = pull.LoadIssue(ctx)
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						ctx.ServerError("load the issue of pull request error", err)
 | 
			
		||||
						return
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					if prHeadCommitID != headBranchCommitID {
 | 
			
		||||
						// force push to base repo
 | 
			
		||||
						err := git.Push(ctx, pull.HeadRepo.RepoPath(), git.PushOptions{
 | 
			
		||||
							Remote: pull.BaseRepo.RepoPath(),
 | 
			
		||||
							Branch: pull.HeadBranch + ":" + prHeadRef,
 | 
			
		||||
							Force:  true,
 | 
			
		||||
							Env:    repo_module.InternalPushingEnvironment(pull.Issue.Poster, pull.BaseRepo),
 | 
			
		||||
						})
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							ctx.ServerError("force push error", err)
 | 
			
		||||
							return
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user