Support updating pull requests

This commit is contained in:
Chongyi Zheng 2022-07-12 03:54:01 -04:00
parent 0932caa18a
commit 5ffadebac6
No known key found for this signature in database
GPG Key ID: CC2953E050C19686
2 changed files with 58 additions and 11 deletions

View File

@ -107,7 +107,7 @@ func UpsertIssues(issues ...*issues_model.Issue) error {
defer committer.Close()
for _, issue := range issues {
if err := upsertIssue(ctx, issue); err != nil {
if _, err := upsertIssue(ctx, issue); err != nil {
return err
}
}
@ -175,18 +175,18 @@ func updateIssue(ctx context.Context, issue *issues_model.Issue) error {
return nil
}
func upsertIssue(ctx context.Context, issue *issues_model.Issue) error {
func upsertIssue(ctx context.Context, issue *issues_model.Issue) (isInsert bool, err error) {
sess := db.GetEngine(ctx)
exists, err := sess.Exist(&issues_model.Issue{ID: issue.ID})
if err != nil {
return err
return false, err
}
if !exists {
return insertIssue(ctx, issue)
return true, insertIssue(ctx, issue)
}
return updateIssue(ctx, issue)
return false, updateIssue(ctx, issue)
}
// InsertIssueComments inserts many comments of issues.
@ -250,6 +250,34 @@ func InsertPullRequests(prs ...*issues_model.PullRequest) error {
return committer.Commit()
}
// UpsertPullRequests inserts new pull requests and updates existing pull requests in database
func UpsertPullRequests(prs ...*issues_model.PullRequest) error {
ctx, committer, err := db.TxContext()
if err != nil {
return err
}
defer committer.Close()
sess := db.GetEngine(ctx)
for _, pr := range prs {
isInsert, err := upsertIssue(ctx, pr.Issue)
if err != nil {
return err
}
pr.IssueID = pr.Issue.ID
if isInsert {
if _, err := sess.NoAutoTime().Insert(pr); err != nil {
return err
}
} else {
if _, err := sess.NoAutoTime().ID(pr.ID).Update(pr); err != nil {
return err
}
}
}
return committer.Commit()
}
// InsertReleases migrates release
func InsertReleases(rels ...*Release) error {
ctx, committer, err := db.TxContext()

View File

@ -488,21 +488,29 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
return models.InsertIssueComments(cms)
}
// CreatePullRequests creates pull requests
func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error {
func (g *GiteaLocalUploader) preparePullRequests(prs ...*base.PullRequest) ([]*issues_model.PullRequest, error) {
gprs := make([]*issues_model.PullRequest, 0, len(prs))
for _, pr := range prs {
gpr, err := g.newPullRequest(pr)
gpr, err := g.getPullRequest(pr)
if err != nil {
return err
return nil, err
}
if err := g.remapUser(pr, gpr.Issue); err != nil {
return err
return nil, err
}
gprs = append(gprs, gpr)
}
return gprs, nil
}
// CreatePullRequests creates pull requests
func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error {
gprs, err := g.preparePullRequests(prs...)
if err != nil {
return err
}
if err := models.InsertPullRequests(gprs...); err != nil {
return err
}
@ -617,7 +625,7 @@ func (g *GiteaLocalUploader) updateGitForPullRequest(pr *base.PullRequest) (head
return head, nil
}
func (g *GiteaLocalUploader) newPullRequest(pr *base.PullRequest) (*issues_model.PullRequest, error) {
func (g *GiteaLocalUploader) getPullRequest(pr *base.PullRequest) (*issues_model.PullRequest, error) {
var labels []*issues_model.Label
for _, label := range pr.Labels {
lb, ok := g.labels[label.Name]
@ -867,6 +875,17 @@ func (g *GiteaLocalUploader) PatchComments(comments ...*base.Comment) error {
}
func (g *GiteaLocalUploader) PatchPullRequests(prs ...*base.PullRequest) error {
gprs, err := g.preparePullRequests(prs...)
if err != nil {
return err
}
if err := models.InsertPullRequests(gprs...); err != nil {
return err
}
for _, pr := range gprs {
g.issues[pr.Issue.Index] = pr.Issue
pull.AddToTaskQueue(pr)
}
return nil
}