mirror of
https://github.com/go-gitea/gitea.git
synced 2026-06-29 20:46:36 +02:00
fix ctx and doer
This commit is contained in:
parent
500445c170
commit
fb5a42bb92
@ -241,12 +241,6 @@ const (
|
||||
SpecialDoerNameProjectWorkflow SpecialDoerNameType = "PROJECT_WORKFLOW"
|
||||
)
|
||||
|
||||
type ProjectWorkflowCommentMeta struct {
|
||||
ProjectTitle string
|
||||
ProjectWorkflowID int64
|
||||
ProjectWorkflowEvent project_model.WorkflowEvent
|
||||
}
|
||||
|
||||
// CommentMetaData stores metadata for a comment, these data will not be changed once inserted into database
|
||||
type CommentMetaData struct {
|
||||
ProjectColumnID int64 `json:"project_column_id,omitempty"`
|
||||
@ -259,18 +253,25 @@ type CommentMetaData struct {
|
||||
SpecialDoerName SpecialDoerNameType `json:"special_doer_name,omitempty"` // e.g. "CODEOWNERS" for CODEOWNERS-triggered review requests
|
||||
}
|
||||
|
||||
type commentMetaDataKey struct{}
|
||||
|
||||
func WithProjectWorkflowCommentMeta(ctx context.Context, meta ProjectWorkflowCommentMeta) context.Context {
|
||||
if meta.ProjectWorkflowID == 0 {
|
||||
return ctx
|
||||
}
|
||||
return context.WithValue(ctx, commentMetaDataKey{}, meta)
|
||||
type projectWorkflowDoer struct {
|
||||
projectTitle string
|
||||
projectWorkflowID int64
|
||||
projectWorkflowEvent project_model.WorkflowEvent
|
||||
}
|
||||
|
||||
func getProjectWorkflowCommentMeta(ctx context.Context) (ProjectWorkflowCommentMeta, bool) {
|
||||
meta, ok := ctx.Value(commentMetaDataKey{}).(ProjectWorkflowCommentMeta)
|
||||
return meta, ok
|
||||
func (p projectWorkflowDoer) GetDoerUserID() int64 {
|
||||
return -1
|
||||
}
|
||||
|
||||
func NewProjectWorkflowDoer(title string, workflowID int64, workflowEvent project_model.WorkflowEvent) *user_model.User {
|
||||
return &user_model.User{
|
||||
ID: -1,
|
||||
ExtDoerData: &projectWorkflowDoer{
|
||||
projectTitle: title,
|
||||
projectWorkflowID: workflowID,
|
||||
projectWorkflowEvent: workflowEvent,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Comment represents a comment in commit and issue page.
|
||||
@ -836,6 +837,31 @@ func (c *Comment) TimelineRequestedReviewTr(locale translation.Locale, createdSt
|
||||
return locale.Tr("repo.issues.review.add_review_request", teamName, createdStr)
|
||||
}
|
||||
|
||||
func buildCreateCommentMetaData(ctx context.Context, opts *CreateCommentOptions) (commentMetaData *CommentMetaData) {
|
||||
makeCommentMetaData := func() {
|
||||
if commentMetaData == nil {
|
||||
commentMetaData = &CommentMetaData{}
|
||||
}
|
||||
}
|
||||
if opts.ProjectColumnTitle != "" {
|
||||
makeCommentMetaData()
|
||||
commentMetaData.ProjectColumnID = opts.ProjectColumnID
|
||||
commentMetaData.ProjectColumnTitle = opts.ProjectColumnTitle
|
||||
commentMetaData.ProjectTitle = opts.ProjectTitle
|
||||
}
|
||||
if opts.SpecialDoerName != "" {
|
||||
makeCommentMetaData()
|
||||
commentMetaData.SpecialDoerName = opts.SpecialDoerName
|
||||
}
|
||||
if extDoer, ok := opts.Doer.ExtDoerData.(projectWorkflowDoer); ok {
|
||||
makeCommentMetaData()
|
||||
commentMetaData.ProjectWorkflowID = extDoer.projectWorkflowID
|
||||
commentMetaData.ProjectWorkflowEvent = extDoer.projectWorkflowEvent
|
||||
commentMetaData.ProjectTitle = extDoer.projectTitle
|
||||
}
|
||||
return commentMetaData
|
||||
}
|
||||
|
||||
// CreateComment creates comment with context
|
||||
func CreateComment(ctx context.Context, opts *CreateCommentOptions) (_ *Comment, err error) {
|
||||
return db.WithTx2(ctx, func(ctx context.Context) (*Comment, error) {
|
||||
@ -844,29 +870,6 @@ func CreateComment(ctx context.Context, opts *CreateCommentOptions) (_ *Comment,
|
||||
LabelID = opts.Label.ID
|
||||
}
|
||||
|
||||
var commentMetaData *CommentMetaData
|
||||
if opts.ProjectColumnTitle != "" {
|
||||
commentMetaData = &CommentMetaData{
|
||||
ProjectColumnID: opts.ProjectColumnID,
|
||||
ProjectColumnTitle: opts.ProjectColumnTitle,
|
||||
ProjectTitle: opts.ProjectTitle,
|
||||
}
|
||||
}
|
||||
if opts.SpecialDoerName != "" {
|
||||
commentMetaData = &CommentMetaData{
|
||||
SpecialDoerName: opts.SpecialDoerName,
|
||||
}
|
||||
}
|
||||
if workflowMeta, ok := getProjectWorkflowCommentMeta(ctx); ok {
|
||||
if commentMetaData == nil {
|
||||
commentMetaData = &CommentMetaData{}
|
||||
}
|
||||
commentMetaData.ProjectWorkflowID = workflowMeta.ProjectWorkflowID
|
||||
commentMetaData.ProjectWorkflowEvent = workflowMeta.ProjectWorkflowEvent
|
||||
commentMetaData.ProjectTitle = workflowMeta.ProjectTitle
|
||||
commentMetaData.SpecialDoerName = SpecialDoerNameProjectWorkflow
|
||||
}
|
||||
|
||||
comment := &Comment{
|
||||
Type: opts.Type,
|
||||
PosterID: opts.Doer.ID,
|
||||
@ -900,7 +903,7 @@ func CreateComment(ctx context.Context, opts *CreateCommentOptions) (_ *Comment,
|
||||
RefIsPull: opts.RefIsPull,
|
||||
IsForcePush: opts.IsForcePush,
|
||||
Invalidated: opts.Invalidated,
|
||||
CommentMetaData: commentMetaData,
|
||||
CommentMetaData: buildCreateCommentMetaData(ctx, opts),
|
||||
}
|
||||
if err = db.Insert(ctx, comment); err != nil {
|
||||
return nil, err
|
||||
|
||||
@ -77,6 +77,10 @@ const (
|
||||
EmailNotificationsAndYourOwn = "andyourown"
|
||||
)
|
||||
|
||||
type ExtDoerData interface {
|
||||
GetDoerUserID() int64
|
||||
}
|
||||
|
||||
// User represents the object of individual and member of organization.
|
||||
type User struct {
|
||||
ID int64 `xorm:"pk autoincr"`
|
||||
@ -151,6 +155,8 @@ type User struct {
|
||||
DiffViewStyle string `xorm:"NOT NULL DEFAULT ''"`
|
||||
Theme string `xorm:"NOT NULL DEFAULT ''"`
|
||||
KeepActivityPrivate bool `xorm:"NOT NULL DEFAULT false"`
|
||||
|
||||
ExtDoerData ExtDoerData
|
||||
}
|
||||
|
||||
// Meta defines the meta information of a user, to be stored in the K/V table
|
||||
|
||||
@ -57,12 +57,14 @@ func NewActionsUser() *User {
|
||||
func NewActionsUserWithTaskID(id int64) *User {
|
||||
u := NewActionsUser()
|
||||
// LoginName is for only internal usage in this case, so it can be moved to other fields in the future
|
||||
// TODO: refactor to u.ExtDoerData
|
||||
u.LoginSource = -1
|
||||
u.LoginName = "@" + ActionsUserName + "/" + strconv.FormatInt(id, 10)
|
||||
return u
|
||||
}
|
||||
|
||||
func GetActionsUserTaskID(u *User) (int64, bool) {
|
||||
// TODO: refactor to u.ExtDoerData
|
||||
if u == nil || u.ID != ActionsUserID {
|
||||
return 0, false
|
||||
}
|
||||
|
||||
@ -348,16 +348,13 @@ func executeWorkflowActions(ctx context.Context, workflow *project_model.Workflo
|
||||
if err := workflow.LoadProject(ctx); err != nil {
|
||||
log.Error("LoadProject: %v", err)
|
||||
}
|
||||
title := ""
|
||||
|
||||
title := "(untitled project)"
|
||||
if workflow.Project != nil {
|
||||
title = workflow.Project.Title
|
||||
}
|
||||
workflowCtx := issues_model.WithProjectWorkflowCommentMeta(ctx, issues_model.ProjectWorkflowCommentMeta{
|
||||
ProjectTitle: title,
|
||||
ProjectWorkflowID: workflow.ID,
|
||||
ProjectWorkflowEvent: workflow.WorkflowEvent,
|
||||
})
|
||||
doer := user_model.NewGhostUser()
|
||||
|
||||
doer := issues_model.NewProjectWorkflowDoer(title, workflow.ID, workflow.WorkflowEvent)
|
||||
var toAddedLabels, toRemovedLabels []*issues_model.Label
|
||||
|
||||
for _, action := range workflow.WorkflowActions {
|
||||
@ -373,7 +370,7 @@ func executeWorkflowActions(ctx context.Context, workflow *project_model.Workflo
|
||||
log.Error("GetColumnByIDAndProjectID: %v", err)
|
||||
continue
|
||||
}
|
||||
if err := MoveIssueToAnotherColumn(workflowCtx, doer, issue, column); err != nil {
|
||||
if err := MoveIssueToAnotherColumn(ctx, doer, issue, column); err != nil {
|
||||
log.Error("MoveIssueToAnotherColumn: %v", err)
|
||||
continue
|
||||
}
|
||||
@ -404,14 +401,14 @@ func executeWorkflowActions(ctx context.Context, workflow *project_model.Workflo
|
||||
case project_model.WorkflowActionTypeIssueState:
|
||||
if strings.EqualFold(action.Value, "reopen") {
|
||||
if issue.IsClosed {
|
||||
if err := issue_service.ReopenIssue(workflowCtx, issue, doer, ""); err != nil {
|
||||
if err := issue_service.ReopenIssue(ctx, issue, doer, ""); err != nil {
|
||||
log.Error("ReopenIssue: %v", err)
|
||||
continue
|
||||
}
|
||||
}
|
||||
} else if strings.EqualFold(action.Value, "close") {
|
||||
if !issue.IsClosed {
|
||||
if err := issue_service.CloseIssue(workflowCtx, issue, doer, ""); err != nil {
|
||||
if err := issue_service.CloseIssue(ctx, issue, doer, ""); err != nil {
|
||||
log.Error("CloseIssue: %v", err)
|
||||
continue
|
||||
}
|
||||
@ -423,7 +420,7 @@ func executeWorkflowActions(ctx context.Context, workflow *project_model.Workflo
|
||||
}
|
||||
|
||||
if len(toAddedLabels)+len(toRemovedLabels) > 0 {
|
||||
if err := issue_service.AddRemoveLabels(workflowCtx, issue, doer, toAddedLabels, toRemovedLabels); err != nil {
|
||||
if err := issue_service.AddRemoveLabels(ctx, issue, doer, toAddedLabels, toRemovedLabels); err != nil {
|
||||
log.Error("AddRemoveLabels: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user