Backport #26399
Signed-off-by: a1012112796 <1012112796@qq.com>
Co-authored-by: Giteabot <teabot@gitea.io>
(cherry picked from commit f43df2f820
)
This commit is contained in:
parent
19a49e763a
commit
5abca17b64
1 changed files with 47 additions and 45 deletions
|
@ -2834,53 +2834,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
|
// 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
|
// get head commit of PR
|
||||||
prHeadRef := pull.GetGitRefName()
|
if pull.Flow == issues_model.PullRequestFlowGithub {
|
||||||
if err := pull.LoadBaseRepo(ctx); err != nil {
|
prHeadRef := pull.GetGitRefName()
|
||||||
ctx.ServerError("Unable to load base repo", err)
|
if err := pull.LoadBaseRepo(ctx); err != nil {
|
||||||
return
|
ctx.ServerError("Unable to load base repo", err)
|
||||||
}
|
|
||||||
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
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue