forked from yystopf/gitea_hat
新增:创建版本逻辑
This commit is contained in:
parent
dc6b0413da
commit
b578e5b990
|
@ -37,7 +37,22 @@ func (p *PullRequest) LoadLatestPullRequestVersion(ctx context.Context) (err err
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
p.LatestPullRequestVersion, err = pull.GetPullRequestLastVersionByPullRequest(ctx, &p.PullRequest)
|
p.LatestPullRequestVersion, err = GetPullRequestLastVersionByPullRequest(ctx, p)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetPullRequestLastVersionByPullRequest(ctx context.Context, pr *PullRequest) (*pull.PullRequestVersion, error) {
|
||||||
|
prv := &pull.PullRequestVersion{
|
||||||
|
RepoID: pr.PullRequest.BaseRepoID,
|
||||||
|
PullID: pr.PullRequest.ID,
|
||||||
|
}
|
||||||
|
has, err := db.GetEngine(ctx).Desc("created_unix").Get(prv)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
} else if !has {
|
||||||
|
return nil, gitea_issues_models.ErrPullRequestNotExist{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return prv, nil
|
||||||
|
}
|
||||||
|
|
|
@ -61,21 +61,6 @@ func PullRequestVersions(ctx context.Context, prID int64, opts *db.ListOptions)
|
||||||
return prvs, maxResults, findSession.Find(&prvs)
|
return prvs, maxResults, findSession.Find(&prvs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetPullRequestLastVersionByPullRequest(ctx context.Context, pr *gitea_issues_model.PullRequest) (*PullRequestVersion, error) {
|
|
||||||
prv := &PullRequestVersion{
|
|
||||||
RepoID: pr.BaseRepoID,
|
|
||||||
PullID: pr.ID,
|
|
||||||
}
|
|
||||||
has, err := db.GetEngine(ctx).Desc("created_unix").Get(prv)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
} else if !has {
|
|
||||||
return nil, gitea_issues_model.ErrPullRequestNotExist{}
|
|
||||||
}
|
|
||||||
|
|
||||||
return prv, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetPullRequestVersionByID(ctx context.Context, prID, id int64) (*PullRequestVersion, error) {
|
func GetPullRequestVersionByID(ctx context.Context, prID, id int64) (*PullRequestVersion, error) {
|
||||||
if id < 1 {
|
if id < 1 {
|
||||||
return nil, gitea_issues_model.ErrPullRequestNotExist{}
|
return nil, gitea_issues_model.ErrPullRequestNotExist{}
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
|
|
||||||
func CreatePrVersion(ctx *context.APIContext) {
|
func CreatePrVersion(ctx *context.APIContext) {
|
||||||
form := web.GetForm(ctx).(*gitea_api.PullRequestPayload)
|
form := web.GetForm(ctx).(*gitea_api.PullRequestPayload)
|
||||||
hat_pull_service.AddToTaskQueue(&issues_model.PullRequest{ID: form.PullRequest.ID})
|
hat_pull_service.AddToTaskQueue(&issues_model.PullRequest{ID: form.PullRequest.ID}, string(form.Action))
|
||||||
ctx.Status(http.StatusNoContent)
|
ctx.Status(http.StatusNoContent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,25 +5,34 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/models/db"
|
||||||
issues_model "code.gitea.io/gitea/models/issues"
|
issues_model "code.gitea.io/gitea/models/issues"
|
||||||
webhook_model "code.gitea.io/gitea/models/webhook"
|
webhook_model "code.gitea.io/gitea/models/webhook"
|
||||||
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/graceful"
|
"code.gitea.io/gitea/modules/graceful"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
"code.gitea.io/gitea/modules/queue"
|
"code.gitea.io/gitea/modules/queue"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/services/gitdiff"
|
||||||
hat_issues_model "code.gitlink.org.cn/Gitlink/gitea_hat.git/models/issues"
|
hat_issues_model "code.gitlink.org.cn/Gitlink/gitea_hat.git/models/issues"
|
||||||
|
hat_pull_model "code.gitlink.org.cn/Gitlink/gitea_hat.git/models/pull"
|
||||||
hat_webhook_model "code.gitlink.org.cn/Gitlink/gitea_hat.git/models/webhook"
|
hat_webhook_model "code.gitlink.org.cn/Gitlink/gitea_hat.git/models/webhook"
|
||||||
)
|
)
|
||||||
|
|
||||||
var hatPrPatchCheckerQueue queue.UniqueQueue
|
var hatPrPatchCheckerQueue queue.UniqueQueue
|
||||||
|
|
||||||
func AddToTaskQueue(pr *issues_model.PullRequest) {
|
func AddToTaskQueue(pr *issues_model.PullRequest, action string) {
|
||||||
err := hatPrPatchCheckerQueue.PushFunc(strconv.FormatInt(pr.ID, 10), func() error {
|
if action == "opened" || action == "synchronized" {
|
||||||
return nil
|
err := hatPrPatchCheckerQueue.PushFunc(strconv.FormatInt(pr.ID, 10), func() error {
|
||||||
})
|
return nil
|
||||||
if err != nil && err != queue.ErrAlreadyInQueue {
|
})
|
||||||
log.Error("Error adding prID %d to the test pull requests queue: %v", pr.ID, err)
|
if err != nil && err != queue.ErrAlreadyInQueue {
|
||||||
|
log.Error("Error adding prID %d to the test pull requests queue: %v", pr.ID, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Error("action type is not found rule.")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// InitializePullRequests checks and tests untested patches of pull requests.
|
// InitializePullRequests checks and tests untested patches of pull requests.
|
||||||
|
@ -66,6 +75,7 @@ func InitializeCheckHook(ctx context.Context) {
|
||||||
ChooseEvents: true,
|
ChooseEvents: true,
|
||||||
HookEvents: webhook_model.HookEvents{
|
HookEvents: webhook_model.HookEvents{
|
||||||
PullRequestSync: true,
|
PullRequestSync: true,
|
||||||
|
PullRequest: true,
|
||||||
},
|
},
|
||||||
BranchFilter: "*",
|
BranchFilter: "*",
|
||||||
}
|
}
|
||||||
|
@ -90,7 +100,94 @@ func InitializeCheckHook(ctx context.Context) {
|
||||||
func handle(data ...queue.Data) []queue.Data {
|
func handle(data ...queue.Data) []queue.Data {
|
||||||
for _, datum := range data {
|
for _, datum := range data {
|
||||||
id, _ := strconv.ParseInt(datum.(string), 10, 64)
|
id, _ := strconv.ParseInt(datum.(string), 10, 64)
|
||||||
fmt.Println(id)
|
pr, err := issues_model.GetPullRequestByID(db.DefaultContext, id)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("GetPullRequestByID[%s]: %v", datum, err)
|
||||||
|
continue
|
||||||
|
} else if pr.HasMerged {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
err = pr.LoadIssue()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("pullrequest load issue error: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
err = pr.LoadBaseRepo()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("pullrequest load base repo error: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
err = pr.LoadHeadRepo()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("pullrequest load head repo error: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
baseGitRepo, err := git.OpenRepository(db.DefaultContext, pr.BaseRepo.RepoPath())
|
||||||
|
if err != nil {
|
||||||
|
log.Error("git.OpenRepository err:%v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
defer baseGitRepo.Close()
|
||||||
|
|
||||||
|
commit, err := baseGitRepo.GetCommit(pr.GetGitRefName())
|
||||||
|
if err != nil {
|
||||||
|
log.Error("GetCommit err:%v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
hpr := &hat_issues_model.PullRequest{PullRequest: *pr}
|
||||||
|
err = hpr.LoadLatestPullRequestVersion(db.DefaultContext)
|
||||||
|
if err != nil && !issues_model.IsErrPullRequestNotExist(err) {
|
||||||
|
log.Error("pullrequest load version error: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if hpr.LatestPullRequestVersion == nil {
|
||||||
|
betweenCommitsCount, err := baseGitRepo.CommitsCountBetween(pr.MergeBase, commit.ID.String())
|
||||||
|
if err != nil {
|
||||||
|
log.Error("CommitsBeforeUntil err: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
diffs, err := gitdiff.GetDiff(baseGitRepo, &gitdiff.DiffOptions{
|
||||||
|
BeforeCommitID: pr.MergeBase,
|
||||||
|
AfterCommitID: commit.ID.String(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Error("GetDiff err: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
err = hat_pull_model.NewPullRequestVersion(db.DefaultContext, pr.HeadRepo, pr, diffs.TotalAddition, int(betweenCommitsCount), diffs.TotalDeletion, diffs.NumFiles, commit.ID.String(), pr.MergeBase, pr.MergeBase)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("models.NewPullRequestVersion err: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if commit.ID.String() == hpr.LatestPullRequestVersion.HeadCommitID {
|
||||||
|
log.Error("This pull version is saved.")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
betweenCommitsCount, err := baseGitRepo.CommitsCountBetween(hpr.LatestPullRequestVersion.HeadCommitID, commit.ID.String())
|
||||||
|
if err != nil {
|
||||||
|
log.Error("CommitsBeforeUntil err: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
diffs, err := gitdiff.GetDiff(baseGitRepo, &gitdiff.DiffOptions{
|
||||||
|
BeforeCommitID: hpr.LatestPullRequestVersion.HeadCommitID,
|
||||||
|
AfterCommitID: commit.ID.String(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Error("GetDiff err: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
err = hat_pull_model.NewPullRequestVersion(db.DefaultContext, pr.HeadRepo, pr, diffs.TotalAddition, int(betweenCommitsCount), diffs.TotalDeletion, diffs.NumFiles, commit.ID.String(), pr.MergeBase, hpr.LatestPullRequestVersion.HeadCommitID)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("models.NewPullRequestVersion err: %v", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue