mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	| @@ -4,6 +4,8 @@ | ||||
| package issue | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models/db" | ||||
| 	issues_model "code.gitea.io/gitea/models/issues" | ||||
| 	access_model "code.gitea.io/gitea/models/perm/access" | ||||
| @@ -12,49 +14,49 @@ import ( | ||||
| ) | ||||
|  | ||||
| // ClearLabels clears all of an issue's labels | ||||
| func ClearLabels(issue *issues_model.Issue, doer *user_model.User) error { | ||||
| func ClearLabels(ctx context.Context, issue *issues_model.Issue, doer *user_model.User) error { | ||||
| 	if err := issues_model.ClearIssueLabels(issue, doer); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	notify_service.IssueClearLabels(db.DefaultContext, doer, issue) | ||||
| 	notify_service.IssueClearLabels(ctx, doer, issue) | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // AddLabel adds a new label to the issue. | ||||
| func AddLabel(issue *issues_model.Issue, doer *user_model.User, label *issues_model.Label) error { | ||||
| func AddLabel(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, label *issues_model.Label) error { | ||||
| 	if err := issues_model.NewIssueLabel(issue, label, doer); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	notify_service.IssueChangeLabels(db.DefaultContext, doer, issue, []*issues_model.Label{label}, nil) | ||||
| 	notify_service.IssueChangeLabels(ctx, doer, issue, []*issues_model.Label{label}, nil) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // AddLabels adds a list of new labels to the issue. | ||||
| func AddLabels(issue *issues_model.Issue, doer *user_model.User, labels []*issues_model.Label) error { | ||||
| func AddLabels(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, labels []*issues_model.Label) error { | ||||
| 	if err := issues_model.NewIssueLabels(issue, labels, doer); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	notify_service.IssueChangeLabels(db.DefaultContext, doer, issue, labels, nil) | ||||
| 	notify_service.IssueChangeLabels(ctx, doer, issue, labels, nil) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // RemoveLabel removes a label from issue by given ID. | ||||
| func RemoveLabel(issue *issues_model.Issue, doer *user_model.User, label *issues_model.Label) error { | ||||
| 	ctx, committer, err := db.TxContext(db.DefaultContext) | ||||
| func RemoveLabel(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, label *issues_model.Label) error { | ||||
| 	dbCtx, committer, err := db.TxContext(ctx) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer committer.Close() | ||||
|  | ||||
| 	if err := issue.LoadRepo(ctx); err != nil { | ||||
| 	if err := issue.LoadRepo(dbCtx); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	perm, err := access_model.GetUserRepoPermission(ctx, issue.Repo, doer) | ||||
| 	perm, err := access_model.GetUserRepoPermission(dbCtx, issue.Repo, doer) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -65,7 +67,7 @@ func RemoveLabel(issue *issues_model.Issue, doer *user_model.User, label *issues | ||||
| 		return issues_model.ErrRepoLabelNotExist{} | ||||
| 	} | ||||
|  | ||||
| 	if err := issues_model.DeleteIssueLabel(ctx, issue, label, doer); err != nil { | ||||
| 	if err := issues_model.DeleteIssueLabel(dbCtx, issue, label, doer); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @@ -73,13 +75,13 @@ func RemoveLabel(issue *issues_model.Issue, doer *user_model.User, label *issues | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	notify_service.IssueChangeLabels(db.DefaultContext, doer, issue, nil, []*issues_model.Label{label}) | ||||
| 	notify_service.IssueChangeLabels(ctx, doer, issue, nil, []*issues_model.Label{label}) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // ReplaceLabels removes all current labels and add new labels to the issue. | ||||
| func ReplaceLabels(issue *issues_model.Issue, doer *user_model.User, labels []*issues_model.Label) error { | ||||
| 	old, err := issues_model.GetLabelsByIssueID(db.DefaultContext, issue.ID) | ||||
| func ReplaceLabels(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, labels []*issues_model.Label) error { | ||||
| 	old, err := issues_model.GetLabelsByIssueID(ctx, issue.ID) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -88,6 +90,6 @@ func ReplaceLabels(issue *issues_model.Issue, doer *user_model.User, labels []*i | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	notify_service.IssueChangeLabels(db.DefaultContext, doer, issue, labels, old) | ||||
| 	notify_service.IssueChangeLabels(ctx, doer, issue, labels, old) | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -6,6 +6,7 @@ package issue | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models/db" | ||||
| 	issues_model "code.gitea.io/gitea/models/issues" | ||||
| 	"code.gitea.io/gitea/models/unittest" | ||||
| 	user_model "code.gitea.io/gitea/models/user" | ||||
| @@ -32,7 +33,7 @@ func TestIssue_AddLabels(t *testing.T) { | ||||
| 			labels[i] = unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: labelID}) | ||||
| 		} | ||||
| 		doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: test.doerID}) | ||||
| 		assert.NoError(t, AddLabels(issue, doer, labels)) | ||||
| 		assert.NoError(t, AddLabels(db.DefaultContext, issue, doer, labels)) | ||||
| 		for _, labelID := range test.labelIDs { | ||||
| 			unittest.AssertExistsAndLoadBean(t, &issues_model.IssueLabel{IssueID: test.issueID, LabelID: labelID}) | ||||
| 		} | ||||
| @@ -55,7 +56,7 @@ func TestIssue_AddLabel(t *testing.T) { | ||||
| 		issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: test.issueID}) | ||||
| 		label := unittest.AssertExistsAndLoadBean(t, &issues_model.Label{ID: test.labelID}) | ||||
| 		doer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: test.doerID}) | ||||
| 		assert.NoError(t, AddLabel(issue, doer, label)) | ||||
| 		assert.NoError(t, AddLabel(db.DefaultContext, issue, doer, label)) | ||||
| 		unittest.AssertExistsAndLoadBean(t, &issues_model.IssueLabel{IssueID: test.issueID, LabelID: test.labelID}) | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -170,7 +170,7 @@ func (h *UnsubscribeHandler) Handle(ctx context.Context, _ *MailContent, doer *u | ||||
| 			return nil | ||||
| 		} | ||||
|  | ||||
| 		return issues_model.CreateOrUpdateIssueWatch(doer.ID, issue.ID, false) | ||||
| 		return issues_model.CreateOrUpdateIssueWatch(ctx, doer.ID, issue.ID, false) | ||||
| 	} | ||||
|  | ||||
| 	return fmt.Errorf("unsupported unsubscribe reference: %v", ref) | ||||
|   | ||||
| @@ -655,7 +655,7 @@ func DumpRepository(ctx context.Context, baseDir, ownerName string, opts base.Mi | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	if err := migrateRepository(doer, downloader, uploader, opts, nil); err != nil { | ||||
| 	if err := migrateRepository(ctx, doer, downloader, uploader, opts, nil); err != nil { | ||||
| 		if err1 := uploader.Rollback(); err1 != nil { | ||||
| 			log.Error("rollback failed: %v", err1) | ||||
| 		} | ||||
| @@ -727,7 +727,7 @@ func RestoreRepository(ctx context.Context, baseDir, ownerName, repoName string, | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	if err = migrateRepository(doer, downloader, uploader, migrateOpts, nil); err != nil { | ||||
| 	if err = migrateRepository(ctx, doer, downloader, uploader, migrateOpts, nil); err != nil { | ||||
| 		if err1 := uploader.Rollback(); err1 != nil { | ||||
| 			log.Error("rollback failed: %v", err1) | ||||
| 		} | ||||
|   | ||||
| @@ -162,7 +162,7 @@ func (g *GiteaLocalUploader) CreateTopics(topics ...string) error { | ||||
| 		c++ | ||||
| 	} | ||||
| 	topics = topics[:c] | ||||
| 	return repo_model.SaveTopics(g.repo.ID, topics...) | ||||
| 	return repo_model.SaveTopics(g.ctx, g.repo.ID, topics...) | ||||
| } | ||||
|  | ||||
| // CreateMilestones creates milestones | ||||
| @@ -205,7 +205,7 @@ func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) err | ||||
| 		mss = append(mss, &ms) | ||||
| 	} | ||||
|  | ||||
| 	err := issues_model.InsertMilestones(mss...) | ||||
| 	err := issues_model.InsertMilestones(g.ctx, mss...) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -236,7 +236,7 @@ func (g *GiteaLocalUploader) CreateLabels(labels ...*base.Label) error { | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
| 	err := issues_model.NewLabels(lbs...) | ||||
| 	err := issues_model.NewLabels(g.ctx, lbs...) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -516,7 +516,6 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error { | ||||
| // CreatePullRequests creates pull requests | ||||
| func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error { | ||||
| 	gprs := make([]*issues_model.PullRequest, 0, len(prs)) | ||||
| 	ctx := db.DefaultContext | ||||
| 	for _, pr := range prs { | ||||
| 		gpr, err := g.newPullRequest(pr) | ||||
| 		if err != nil { | ||||
| @@ -529,12 +528,12 @@ func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error | ||||
|  | ||||
| 		gprs = append(gprs, gpr) | ||||
| 	} | ||||
| 	if err := issues_model.InsertPullRequests(ctx, gprs...); err != nil { | ||||
| 	if err := issues_model.InsertPullRequests(g.ctx, gprs...); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	for _, pr := range gprs { | ||||
| 		g.issues[pr.Issue.Index] = pr.Issue | ||||
| 		pull.AddToTaskQueue(ctx, pr) | ||||
| 		pull.AddToTaskQueue(g.ctx, pr) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -44,7 +44,7 @@ func TestGiteaUploadRepo(t *testing.T) { | ||||
| 		uploader   = NewGiteaLocalUploader(graceful.GetManager().HammerContext(), user, user.Name, repoName) | ||||
| 	) | ||||
|  | ||||
| 	err := migrateRepository(user, downloader, uploader, base.MigrateOptions{ | ||||
| 	err := migrateRepository(db.DefaultContext, user, downloader, uploader, base.MigrateOptions{ | ||||
| 		CloneAddr:    "https://github.com/go-xorm/builder", | ||||
| 		RepoName:     repoName, | ||||
| 		AuthUsername: "", | ||||
|   | ||||
| @@ -127,7 +127,7 @@ func MigrateRepository(ctx context.Context, doer *user_model.User, ownerName str | ||||
| 	uploader := NewGiteaLocalUploader(ctx, doer, ownerName, opts.RepoName) | ||||
| 	uploader.gitServiceType = opts.GitServiceType | ||||
|  | ||||
| 	if err := migrateRepository(doer, downloader, uploader, opts, messenger); err != nil { | ||||
| 	if err := migrateRepository(ctx, doer, downloader, uploader, opts, messenger); err != nil { | ||||
| 		if err1 := uploader.Rollback(); err1 != nil { | ||||
| 			log.Error("rollback failed: %v", err1) | ||||
| 		} | ||||
| @@ -176,7 +176,7 @@ func newDownloader(ctx context.Context, ownerName string, opts base.MigrateOptio | ||||
| // migrateRepository will download information and then upload it to Uploader, this is a simple | ||||
| // process for small repository. For a big repository, save all the data to disk | ||||
| // before upload is better | ||||
| func migrateRepository(doer *user_model.User, downloader base.Downloader, uploader base.Uploader, opts base.MigrateOptions, messenger base.Messenger) error { | ||||
| func migrateRepository(ctx context.Context, doer *user_model.User, downloader base.Downloader, uploader base.Uploader, opts base.MigrateOptions, messenger base.Messenger) error { | ||||
| 	if messenger == nil { | ||||
| 		messenger = base.NilMessenger | ||||
| 	} | ||||
|   | ||||
| @@ -540,7 +540,7 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool { | ||||
| 		return false | ||||
| 	} | ||||
|  | ||||
| 	if err = repo_model.UpdateRepositoryUpdatedTime(m.RepoID, commitDate); err != nil { | ||||
| 	if err = repo_model.UpdateRepositoryUpdatedTime(ctx, m.RepoID, commitDate); err != nil { | ||||
| 		log.Error("SyncMirrors [repo: %-v]: unable to update repository 'updated_unix': %v", m.Repo, err) | ||||
| 		return false | ||||
| 	} | ||||
|   | ||||
| @@ -346,7 +346,7 @@ func DeleteOldRepositoryArchives(ctx context.Context, olderThan time.Duration) e | ||||
| 	log.Trace("Doing: ArchiveCleanup") | ||||
|  | ||||
| 	for { | ||||
| 		archivers, err := repo_model.FindRepoArchives(repo_model.FindRepoArchiversOption{ | ||||
| 		archivers, err := repo_model.FindRepoArchives(ctx, repo_model.FindRepoArchiversOption{ | ||||
| 			ListOptions: db.ListOptions{ | ||||
| 				PageSize: 100, | ||||
| 				Page:     1, | ||||
| @@ -374,7 +374,7 @@ func DeleteOldRepositoryArchives(ctx context.Context, olderThan time.Duration) e | ||||
|  | ||||
| // DeleteRepositoryArchives deletes all repositories' archives. | ||||
| func DeleteRepositoryArchives(ctx context.Context) error { | ||||
| 	if err := repo_model.DeleteAllRepoArchives(); err != nil { | ||||
| 	if err := repo_model.DeleteAllRepoArchives(ctx); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return storage.Clean(storage.RepoArchives) | ||||
|   | ||||
| @@ -5,6 +5,8 @@ | ||||
| package repository | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"code.gitea.io/gitea/models" | ||||
| 	"code.gitea.io/gitea/models/db" | ||||
| 	access_model "code.gitea.io/gitea/models/perm/access" | ||||
| @@ -12,13 +14,13 @@ import ( | ||||
| ) | ||||
|  | ||||
| // DeleteCollaboration removes collaboration relation between the user and repository. | ||||
| func DeleteCollaboration(repo *repo_model.Repository, uid int64) (err error) { | ||||
| func DeleteCollaboration(ctx context.Context, repo *repo_model.Repository, uid int64) (err error) { | ||||
| 	collaboration := &repo_model.Collaboration{ | ||||
| 		RepoID: repo.ID, | ||||
| 		UserID: uid, | ||||
| 	} | ||||
|  | ||||
| 	ctx, committer, err := db.TxContext(db.DefaultContext) | ||||
| 	ctx, committer, err := db.TxContext(ctx) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|   | ||||
| @@ -18,10 +18,10 @@ func TestRepository_DeleteCollaboration(t *testing.T) { | ||||
|  | ||||
| 	repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4}) | ||||
| 	assert.NoError(t, repo.LoadOwner(db.DefaultContext)) | ||||
| 	assert.NoError(t, DeleteCollaboration(repo, 4)) | ||||
| 	assert.NoError(t, DeleteCollaboration(db.DefaultContext, repo, 4)) | ||||
| 	unittest.AssertNotExistsBean(t, &repo_model.Collaboration{RepoID: repo.ID, UserID: 4}) | ||||
|  | ||||
| 	assert.NoError(t, DeleteCollaboration(repo, 4)) | ||||
| 	assert.NoError(t, DeleteCollaboration(db.DefaultContext, repo, 4)) | ||||
| 	unittest.AssertNotExistsBean(t, &repo_model.Collaboration{RepoID: repo.ID, UserID: 4}) | ||||
|  | ||||
| 	unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repo.ID}) | ||||
|   | ||||
| @@ -292,7 +292,7 @@ func pushUpdates(optsList []*repo_module.PushUpdateOptions) error { | ||||
| 	} | ||||
|  | ||||
| 	// Change repository last updated time. | ||||
| 	if err := repo_model.UpdateRepositoryUpdatedTime(repo.ID, time.Now()); err != nil { | ||||
| 	if err := repo_model.UpdateRepositoryUpdatedTime(ctx, repo.ID, time.Now()); err != nil { | ||||
| 		return fmt.Errorf("UpdateRepositoryUpdatedTime: %w", err) | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -95,12 +95,12 @@ func PushCreateRepo(ctx context.Context, authUser, owner *user_model.User, repoN | ||||
| } | ||||
|  | ||||
| // Init start repository service | ||||
| func Init() error { | ||||
| func Init(ctx context.Context) error { | ||||
| 	if err := repo_module.LoadRepoConfig(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	system_model.RemoveAllWithNotice(db.DefaultContext, "Clean up temporary repository uploads", setting.Repository.Upload.TempPath) | ||||
| 	system_model.RemoveAllWithNotice(db.DefaultContext, "Clean up temporary repositories", repo_module.LocalCopyPath()) | ||||
| 	system_model.RemoveAllWithNotice(ctx, "Clean up temporary repository uploads", setting.Repository.Upload.TempPath) | ||||
| 	system_model.RemoveAllWithNotice(ctx, "Clean up temporary repositories", repo_module.LocalCopyPath()) | ||||
| 	if err := initPushQueue(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|   | ||||
| @@ -37,7 +37,7 @@ func TransferOwnership(ctx context.Context, doer, newOwner *user_model.User, rep | ||||
| 	oldOwner := repo.Owner | ||||
|  | ||||
| 	repoWorkingPool.CheckIn(fmt.Sprint(repo.ID)) | ||||
| 	if err := models.TransferOwnership(doer, newOwner.Name, repo); err != nil { | ||||
| 	if err := models.TransferOwnership(ctx, doer, newOwner.Name, repo); err != nil { | ||||
| 		repoWorkingPool.CheckOut(fmt.Sprint(repo.ID)) | ||||
| 		return err | ||||
| 	} | ||||
| @@ -70,7 +70,7 @@ func ChangeRepositoryName(ctx context.Context, doer *user_model.User, repo *repo | ||||
| 	// local copy's origin accordingly. | ||||
|  | ||||
| 	repoWorkingPool.CheckIn(fmt.Sprint(repo.ID)) | ||||
| 	if err := repo_model.ChangeRepositoryName(doer, repo, newRepoName); err != nil { | ||||
| 	if err := repo_model.ChangeRepositoryName(ctx, doer, repo, newRepoName); err != nil { | ||||
| 		repoWorkingPool.CheckOut(fmt.Sprint(repo.ID)) | ||||
| 		return err | ||||
| 	} | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
| package task | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"strings" | ||||
| @@ -40,7 +41,7 @@ func handleCreateError(owner *user_model.User, err error) error { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func runMigrateTask(t *admin_model.Task) (err error) { | ||||
| func runMigrateTask(ctx context.Context, t *admin_model.Task) (err error) { | ||||
| 	defer func() { | ||||
| 		if e := recover(); e != nil { | ||||
| 			err = fmt.Errorf("PANIC whilst trying to do migrate task: %v", e) | ||||
| @@ -48,9 +49,9 @@ func runMigrateTask(t *admin_model.Task) (err error) { | ||||
| 		} | ||||
|  | ||||
| 		if err == nil { | ||||
| 			err = admin_model.FinishMigrateTask(t) | ||||
| 			err = admin_model.FinishMigrateTask(ctx, t) | ||||
| 			if err == nil { | ||||
| 				notify_service.MigrateRepository(db.DefaultContext, t.Doer, t.Owner, t.Repo) | ||||
| 				notify_service.MigrateRepository(ctx, t.Doer, t.Owner, t.Repo) | ||||
| 				return | ||||
| 			} | ||||
|  | ||||
| @@ -63,14 +64,14 @@ func runMigrateTask(t *admin_model.Task) (err error) { | ||||
| 		t.Status = structs.TaskStatusFailed | ||||
| 		t.Message = err.Error() | ||||
|  | ||||
| 		if err := t.UpdateCols("status", "message", "end_time"); err != nil { | ||||
| 		if err := t.UpdateCols(ctx, "status", "message", "end_time"); err != nil { | ||||
| 			log.Error("Task UpdateCols failed: %v", err) | ||||
| 		} | ||||
|  | ||||
| 		// then, do not delete the repository, otherwise the users won't be able to see the last error | ||||
| 	}() | ||||
|  | ||||
| 	if err = t.LoadRepo(); err != nil { | ||||
| 	if err = t.LoadRepo(ctx); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @@ -79,10 +80,10 @@ func runMigrateTask(t *admin_model.Task) (err error) { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	if err = t.LoadDoer(); err != nil { | ||||
| 	if err = t.LoadDoer(ctx); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if err = t.LoadOwner(); err != nil { | ||||
| 	if err = t.LoadOwner(ctx); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @@ -100,7 +101,7 @@ func runMigrateTask(t *admin_model.Task) (err error) { | ||||
|  | ||||
| 	t.StartTime = timeutil.TimeStampNow() | ||||
| 	t.Status = structs.TaskStatusRunning | ||||
| 	if err = t.UpdateCols("start_time", "status"); err != nil { | ||||
| 	if err = t.UpdateCols(ctx, "start_time", "status"); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @@ -112,7 +113,7 @@ func runMigrateTask(t *admin_model.Task) (err error) { | ||||
| 			case <-ctx.Done(): | ||||
| 				return | ||||
| 			} | ||||
| 			task, _ := admin_model.GetMigratingTask(t.RepoID) | ||||
| 			task, _ := admin_model.GetMigratingTask(ctx, t.RepoID) | ||||
| 			if task != nil && task.Status != structs.TaskStatusRunning { | ||||
| 				log.Debug("MigrateTask[%d] by DoerID[%d] to RepoID[%d] for OwnerID[%d] is canceled due to status is not 'running'", t.ID, t.DoerID, t.RepoID, t.OwnerID) | ||||
| 				cancel() | ||||
| @@ -128,7 +129,7 @@ func runMigrateTask(t *admin_model.Task) (err error) { | ||||
| 		} | ||||
| 		bs, _ := json.Marshal(message) | ||||
| 		t.Message = string(bs) | ||||
| 		_ = t.UpdateCols("message") | ||||
| 		_ = t.UpdateCols(ctx, "message") | ||||
| 	}) | ||||
|  | ||||
| 	if err == nil { | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
| package task | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
|  | ||||
| 	admin_model "code.gitea.io/gitea/models/admin" | ||||
| @@ -27,10 +28,10 @@ import ( | ||||
| var taskQueue *queue.WorkerPoolQueue[*admin_model.Task] | ||||
|  | ||||
| // Run a task | ||||
| func Run(t *admin_model.Task) error { | ||||
| func Run(ctx context.Context, t *admin_model.Task) error { | ||||
| 	switch t.Type { | ||||
| 	case structs.TaskTypeMigrateRepo: | ||||
| 		return runMigrateTask(t) | ||||
| 		return runMigrateTask(ctx, t) | ||||
| 	default: | ||||
| 		return fmt.Errorf("Unknown task type: %d", t.Type) | ||||
| 	} | ||||
| @@ -48,7 +49,7 @@ func Init() error { | ||||
|  | ||||
| func handler(items ...*admin_model.Task) []*admin_model.Task { | ||||
| 	for _, task := range items { | ||||
| 		if err := Run(task); err != nil { | ||||
| 		if err := Run(db.DefaultContext, task); err != nil { | ||||
| 			log.Error("Run task failed: %v", err) | ||||
| 		} | ||||
| 	} | ||||
| @@ -56,8 +57,8 @@ func handler(items ...*admin_model.Task) []*admin_model.Task { | ||||
| } | ||||
|  | ||||
| // MigrateRepository add migration repository to task | ||||
| func MigrateRepository(doer, u *user_model.User, opts base.MigrateOptions) error { | ||||
| 	task, err := CreateMigrateTask(doer, u, opts) | ||||
| func MigrateRepository(ctx context.Context, doer, u *user_model.User, opts base.MigrateOptions) error { | ||||
| 	task, err := CreateMigrateTask(ctx, doer, u, opts) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| @@ -66,7 +67,7 @@ func MigrateRepository(doer, u *user_model.User, opts base.MigrateOptions) error | ||||
| } | ||||
|  | ||||
| // CreateMigrateTask creates a migrate task | ||||
| func CreateMigrateTask(doer, u *user_model.User, opts base.MigrateOptions) (*admin_model.Task, error) { | ||||
| func CreateMigrateTask(ctx context.Context, doer, u *user_model.User, opts base.MigrateOptions) (*admin_model.Task, error) { | ||||
| 	// encrypt credentials for persistence | ||||
| 	var err error | ||||
| 	opts.CloneAddrEncrypted, err = secret.EncryptSecret(setting.SecretKey, opts.CloneAddr) | ||||
| @@ -97,11 +98,11 @@ func CreateMigrateTask(doer, u *user_model.User, opts base.MigrateOptions) (*adm | ||||
| 		PayloadContent: string(bs), | ||||
| 	} | ||||
|  | ||||
| 	if err := admin_model.CreateTask(task); err != nil { | ||||
| 	if err := admin_model.CreateTask(ctx, task); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	repo, err := repo_service.CreateRepositoryDirectly(db.DefaultContext, doer, u, repo_service.CreateRepoOptions{ | ||||
| 	repo, err := repo_service.CreateRepositoryDirectly(ctx, doer, u, repo_service.CreateRepoOptions{ | ||||
| 		Name:           opts.RepoName, | ||||
| 		Description:    opts.Description, | ||||
| 		OriginalURL:    opts.OriginalURL, | ||||
| @@ -113,7 +114,7 @@ func CreateMigrateTask(doer, u *user_model.User, opts base.MigrateOptions) (*adm | ||||
| 	if err != nil { | ||||
| 		task.EndTime = timeutil.TimeStampNow() | ||||
| 		task.Status = structs.TaskStatusFailed | ||||
| 		err2 := task.UpdateCols("end_time", "status") | ||||
| 		err2 := task.UpdateCols(ctx, "end_time", "status") | ||||
| 		if err2 != nil { | ||||
| 			log.Error("UpdateCols Failed: %v", err2.Error()) | ||||
| 		} | ||||
| @@ -121,7 +122,7 @@ func CreateMigrateTask(doer, u *user_model.User, opts base.MigrateOptions) (*adm | ||||
| 	} | ||||
|  | ||||
| 	task.RepoID = repo.ID | ||||
| 	if err = task.UpdateCols("repo_id"); err != nil { | ||||
| 	if err = task.UpdateCols(ctx, "repo_id"); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| @@ -129,8 +130,8 @@ func CreateMigrateTask(doer, u *user_model.User, opts base.MigrateOptions) (*adm | ||||
| } | ||||
|  | ||||
| // RetryMigrateTask retry a migrate task | ||||
| func RetryMigrateTask(repoID int64) error { | ||||
| 	migratingTask, err := admin_model.GetMigratingTask(repoID) | ||||
| func RetryMigrateTask(ctx context.Context, repoID int64) error { | ||||
| 	migratingTask, err := admin_model.GetMigratingTask(ctx, repoID) | ||||
| 	if err != nil { | ||||
| 		log.Error("GetMigratingTask: %v", err) | ||||
| 		return err | ||||
| @@ -144,7 +145,7 @@ func RetryMigrateTask(repoID int64) error { | ||||
| 	// Reset task status and messages | ||||
| 	migratingTask.Status = structs.TaskStatusQueued | ||||
| 	migratingTask.Message = "" | ||||
| 	if err = migratingTask.UpdateCols("status", "message"); err != nil { | ||||
| 	if err = migratingTask.UpdateCols(ctx, "status", "message"); err != nil { | ||||
| 		log.Error("task.UpdateCols failed: %v", err) | ||||
| 		return err | ||||
| 	} | ||||
|   | ||||
| @@ -59,7 +59,7 @@ func RenameUser(ctx context.Context, u *user_model.User, newUserName string) err | ||||
| 			u.Name = oldUserName | ||||
| 			return err | ||||
| 		} | ||||
| 		return repo_model.UpdateRepositoryOwnerNames(u.ID, newUserName) | ||||
| 		return repo_model.UpdateRepositoryOwnerNames(ctx, u.ID, newUserName) | ||||
| 	} | ||||
|  | ||||
| 	ctx, committer, err := db.TxContext(ctx) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user