|
|
@@ -2935,52 +2935,54 @@ 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.JSONError("The origin branch is delete, cannot reopen.") |
|
|
|
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 |
|
|
|
} |
|
|
|
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 |
|
|
|
} |
|
|
|
|
|
|
|
err = pull.LoadIssue(ctx) |
|
|
|
if err != nil { |
|
|
|
ctx.ServerError("load the issue of pull request error", 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.JSONError("The origin branch is delete, cannot reopen.") |
|
|
|
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 |
|
|
|
} |
|
|
|
|
|
|
|
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), |
|
|
|
}) |
|
|
|
err = pull.LoadIssue(ctx) |
|
|
|
if err != nil { |
|
|
|
ctx.ServerError("force push error", err) |
|
|
|
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 |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|