1
1
mirror of https://github.com/go-gitea/gitea synced 2024-12-23 00:54:28 +00:00
This commit is contained in:
Lunny Xiao 2024-11-21 12:30:36 -08:00
parent e247bfe388
commit 3d3d6c4f86
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
4 changed files with 38 additions and 64 deletions

View File

@ -589,26 +589,27 @@ func (c *Comment) LoadAttachments(ctx context.Context) error {
return nil return nil
} }
// UpdateAttachments update attachments by UUIDs for the comment // UpdateCommentAttachments update attachments by UUIDs for the comment
func (c *Comment) UpdateAttachments(ctx context.Context, uuids []string) error { func UpdateCommentAttachments(ctx context.Context, c *Comment, uuids []string) error {
ctx, committer, err := db.TxContext(ctx) if len(uuids) == 0 {
if err != nil { return nil
return err
} }
defer committer.Close()
attachments, err := repo_model.GetAttachmentsByUUIDs(ctx, uuids) return db.WithTx(ctx, func(ctx context.Context) error {
if err != nil { attachments, err := repo_model.GetAttachmentsByUUIDs(ctx, uuids)
return fmt.Errorf("getAttachmentsByUUIDs [uuids: %v]: %w", uuids, err) if err != nil {
} return fmt.Errorf("getAttachmentsByUUIDs [uuids: %v]: %w", uuids, err)
for i := 0; i < len(attachments); i++ {
attachments[i].IssueID = c.IssueID
attachments[i].CommentID = c.ID
if err := repo_model.UpdateAttachment(ctx, attachments[i]); err != nil {
return fmt.Errorf("update attachment [id: %d]: %w", attachments[i].ID, err)
} }
} for i := 0; i < len(attachments); i++ {
return committer.Commit() attachments[i].IssueID = c.IssueID
attachments[i].CommentID = c.ID
if err := repo_model.UpdateAttachment(ctx, attachments[i]); err != nil {
return fmt.Errorf("update attachment [id: %d]: %w", attachments[i].ID, err)
}
}
c.Attachments = attachments
return nil
})
} }
// LoadAssigneeUserAndTeam if comment.Type is CommentTypeAssignees, then load assignees // LoadAssigneeUserAndTeam if comment.Type is CommentTypeAssignees, then load assignees
@ -875,7 +876,7 @@ func updateCommentInfos(ctx context.Context, opts *CreateCommentOptions, comment
// Check comment type. // Check comment type.
switch opts.Type { switch opts.Type {
case CommentTypeCode: case CommentTypeCode:
if err = updateAttachments(ctx, opts, comment); err != nil { if err = UpdateCommentAttachments(ctx, comment, opts.Attachments); err != nil {
return err return err
} }
if comment.ReviewID != 0 { if comment.ReviewID != 0 {
@ -895,7 +896,7 @@ func updateCommentInfos(ctx context.Context, opts *CreateCommentOptions, comment
} }
fallthrough fallthrough
case CommentTypeReview: case CommentTypeReview:
if err = updateAttachments(ctx, opts, comment); err != nil { if err = UpdateCommentAttachments(ctx, comment, opts.Attachments); err != nil {
return err return err
} }
case CommentTypeReopen, CommentTypeClose: case CommentTypeReopen, CommentTypeClose:
@ -907,23 +908,6 @@ func updateCommentInfos(ctx context.Context, opts *CreateCommentOptions, comment
return UpdateIssueCols(ctx, opts.Issue, "updated_unix") return UpdateIssueCols(ctx, opts.Issue, "updated_unix")
} }
func updateAttachments(ctx context.Context, opts *CreateCommentOptions, comment *Comment) error {
attachments, err := repo_model.GetAttachmentsByUUIDs(ctx, opts.Attachments)
if err != nil {
return fmt.Errorf("getAttachmentsByUUIDs [uuids: %v]: %w", opts.Attachments, err)
}
for i := range attachments {
attachments[i].IssueID = opts.Issue.ID
attachments[i].CommentID = comment.ID
// No assign value could be 0, so ignore AllCols().
if _, err = db.GetEngine(ctx).ID(attachments[i].ID).Update(attachments[i]); err != nil {
return fmt.Errorf("update attachment [%d]: %w", attachments[i].ID, err)
}
}
comment.Attachments = attachments
return nil
}
func createDeadlineComment(ctx context.Context, doer *user_model.User, issue *Issue, newDeadlineUnix timeutil.TimeStamp) (*Comment, error) { func createDeadlineComment(ctx context.Context, doer *user_model.User, issue *Issue, newDeadlineUnix timeutil.TimeStamp) (*Comment, error) {
var content string var content string
var commentType CommentType var commentType CommentType

View File

@ -182,22 +182,22 @@ func AddDeletePRBranchComment(ctx context.Context, doer *user_model.User, repo *
// UpdateIssueAttachments update attachments by UUIDs for the issue // UpdateIssueAttachments update attachments by UUIDs for the issue
func UpdateIssueAttachments(ctx context.Context, issueID int64, uuids []string) (err error) { func UpdateIssueAttachments(ctx context.Context, issueID int64, uuids []string) (err error) {
ctx, committer, err := db.TxContext(ctx) if len(uuids) == 0 {
if err != nil { return nil
return err
} }
defer committer.Close() return db.WithTx(ctx, func(ctx context.Context) error {
attachments, err := repo_model.GetAttachmentsByUUIDs(ctx, uuids) attachments, err := repo_model.GetAttachmentsByUUIDs(ctx, uuids)
if err != nil { if err != nil {
return fmt.Errorf("getAttachmentsByUUIDs [uuids: %v]: %w", uuids, err) return fmt.Errorf("getAttachmentsByUUIDs [uuids: %v]: %w", uuids, err)
}
for i := 0; i < len(attachments); i++ {
attachments[i].IssueID = issueID
if err := repo_model.UpdateAttachment(ctx, attachments[i]); err != nil {
return fmt.Errorf("update attachment [id: %d]: %w", attachments[i].ID, err)
} }
} for i := 0; i < len(attachments); i++ {
return committer.Commit() attachments[i].IssueID = issueID
if err := repo_model.UpdateAttachment(ctx, attachments[i]); err != nil {
return fmt.Errorf("update attachment [id: %d]: %w", attachments[i].ID, err)
}
}
return nil
})
} }
// NewIssueOptions represents the options of a new issue. // NewIssueOptions represents the options of a new issue.
@ -293,19 +293,6 @@ func NewIssueWithIndex(ctx context.Context, doer *user_model.User, opts NewIssue
return err return err
} }
if len(opts.Attachments) > 0 {
attachments, err := repo_model.GetAttachmentsByUUIDs(ctx, opts.Attachments)
if err != nil {
return fmt.Errorf("getAttachmentsByUUIDs [uuids: %v]: %w", opts.Attachments, err)
}
for i := 0; i < len(attachments); i++ {
attachments[i].IssueID = opts.Issue.ID
if _, err = e.ID(attachments[i].ID).Update(attachments[i]); err != nil {
return fmt.Errorf("update attachment [id: %d]: %w", attachments[i].ID, err)
}
}
}
if err = opts.Issue.LoadAttributes(ctx); err != nil { if err = opts.Issue.LoadAttributes(ctx); err != nil {
return err return err
} }

View File

@ -612,7 +612,7 @@ func updateAttachments(ctx *context.Context, item any, files []string) error {
case *issues_model.Issue: case *issues_model.Issue:
err = issues_model.UpdateIssueAttachments(ctx, content.ID, files) err = issues_model.UpdateIssueAttachments(ctx, content.ID, files)
case *issues_model.Comment: case *issues_model.Comment:
err = content.UpdateAttachments(ctx, files) err = issues_model.UpdateCommentAttachments(ctx, content, files)
default: default:
return fmt.Errorf("unknown Type: %T", content) return fmt.Errorf("unknown Type: %T", content)
} }

View File

@ -235,6 +235,9 @@ func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
notify_service.IssueChangeAssignee(ctx, issue.Poster, issue, assignee, false, assigneeCommentMap[assigneeID]) notify_service.IssueChangeAssignee(ctx, issue.Poster, issue, assignee, false, assigneeCommentMap[assigneeID])
} }
permDoer, err := access_model.GetUserRepoPermission(ctx, repo, issue.Poster) permDoer, err := access_model.GetUserRepoPermission(ctx, repo, issue.Poster)
if err != nil {
return err
}
for _, reviewer := range opts.Reviewers { for _, reviewer := range opts.Reviewers {
if _, err = issue_service.ReviewRequest(ctx, pr.Issue, issue.Poster, &permDoer, reviewer, true); err != nil { if _, err = issue_service.ReviewRequest(ctx, pr.Issue, issue.Poster, &permDoer, reviewer, true); err != nil {
return err return err