修复: pr 版本名修改以及hook新增pr版本

This commit is contained in:
yystopf 2022-07-21 13:54:53 +08:00
parent c1c985e193
commit 727f203fd3
3 changed files with 60 additions and 39 deletions

View File

@ -23,6 +23,21 @@ type PullRequestVersion struct {
UpdatedUnix timeutil.TimeStamp `xorm:"updated INDEX"`
}
func GetPullRequestLastVersionByPullRequest(pr *PullRequest) (*PullRequestVersion, error) {
prv := &PullRequestVersion{
RepoID: pr.BaseRepoID,
PullID: pr.ID,
}
has, err := x.Desc("created_unix").Get(prv)
if err != nil {
return nil, err
} else if !has {
return nil, ErrPullRequestNotExist{}
}
return prv, nil
}
// NewPullRequestDiff creates new pull request diff version for repository.
func NewPullRequestVersion(repo *Repository, pr *PullRequest, addLineNum, commitsCount, delLineNUm, filesCount int, headCommitID, baseCommitID, StartCommitID string) (err error) {
var version PullRequestVersion

View File

@ -23,7 +23,6 @@ import (
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/services/gitdiff"
pull_service "code.gitea.io/gitea/services/pull"
repo_service "code.gitea.io/gitea/services/repository"
)
@ -405,8 +404,6 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
ownerName := ctx.Params(":owner")
repoName := ctx.Params(":repo")
fmt.Println(opts)
var repo *models.Repository
updates := make([]*repo_module.PushUpdateOptions, 0, len(opts.OldCommitIDs))
wasEmpty := false
@ -557,42 +554,6 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) {
URL: fmt.Sprintf("%s/compare/%s...%s", baseRepo.HTMLURL(), util.PathEscapeSegments(baseRepo.DefaultBranch), util.PathEscapeSegments(branch)),
})
} else {
startCommitSha := opts.OldCommitIDs[i]
headCommitSha := opts.NewCommitIDs[i]
baseCommitSha := pr.MergeBase
baseGitRepo, err := git.OpenRepository(baseRepo.RepoPath())
if err != nil {
log.Error("Failed to get Git Repository of Forked repository: %-v Error: %v", repo, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("Failed to get Git Repository of Forked repository: %-v Error: %v", repo, err),
})
return
}
diffs, err := gitdiff.GetDiffRange(baseGitRepo, baseCommitSha, headCommitSha, setting.Git.MaxGitDiffFiles, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles)
if err != nil {
log.Error("Failed to get diffs of repository: %-v Error: %v", baseRepo, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("Failed to get diffs of repository: %-v Error: %v", baseRepo, err),
})
return
}
compareInfo, err := baseGitRepo.GetCompareInfo(baseRepo.RepoPath(),
git.BranchPrefix+pr.BaseBranch, pr.GetGitRefName())
if err != nil {
log.Error("Failed to get compareinfo of repository: %-v Error: %v", baseRepo, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("Failed to get compareinfo of repository: %-v Error: %v", baseRepo, err),
})
return
}
if err := models.NewPullRequestVersion(repo, pr, diffs.TotalAddition, compareInfo.Commits.Len(), diffs.TotalDeletion, compareInfo.NumFiles, headCommitSha, baseCommitSha, startCommitSha); err != nil {
log.Error("Failed to create pulls version of repository: %-v Error: %v", baseRepo, err)
ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{
Err: fmt.Sprintf("Failed to create pull version of repository: %-v Error: %v", baseRepo, err),
})
return
}
results = append(results, private.HookPostReceiveBranchResult{
Message: setting.Git.PullRequestPushMessage && repo.AllowsPulls(),
Create: false,

View File

@ -19,8 +19,10 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/notification"
"code.gitea.io/gitea/modules/queue"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/timeutil"
"code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/services/gitdiff"
)
// prQueue represents a queue to handle update pull request tests
@ -234,6 +236,49 @@ func handle(data ...queue.Data) {
}
continue
}
// 创建pr版本
lastPrv, err := models.GetPullRequestLastVersionByPullRequest(pr)
if err != nil {
log.Error("get pull_request last version error: %v", err)
continue
}
err = pr.LoadIssue()
if err != nil {
log.Error("pullrequest load issue error: %v", err)
continue
}
pull := pr.Issue
pull.PullRequest = pr
baseGitRepo, err := git.OpenRepository(pr.BaseRepo.RepoPath())
if err != nil {
log.Error("git.OpenRepository err:%v", err)
continue
}
defer baseGitRepo.Close()
compareInfo, err := baseGitRepo.GetCompareInfo(pr.BaseRepo.RepoPath(),
git.BranchPrefix+pr.BaseBranch, pr.GetGitRefName())
if err != nil {
log.Error("baseGitRepo.GetCompareInfo err: %v", err)
continue
}
diffs, err := gitdiff.GetDiffRange(baseGitRepo, compareInfo.BaseCommitID, compareInfo.HeadCommitID, setting.Git.MaxGitDiffFiles, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles)
if err != nil {
log.Error("gitdiff.GetDiffRange err: %v", err)
continue
}
err = pull.LoadRepo()
if err != nil {
log.Error("pull.loadRepo err: %v", err)
continue
}
err = models.NewPullRequestVersion(pull.Repo, pr, diffs.TotalAddition, compareInfo.Commits.Len(), diffs.TotalDeletion, compareInfo.NumFiles, compareInfo.HeadCommitID, compareInfo.BaseCommitID, lastPrv.HeadCommitID)
if err != nil {
log.Error("models.NewPullRequestVersion err: %v", err)
continue
}
checkAndUpdateStatus(pr)
}
}