mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	Use db.WithTx/WithTx2 instead of TxContext when possible (#35428)
This commit is contained in:
		| @@ -72,12 +72,7 @@ func AddGPGKey(ctx context.Context, ownerID int64, content, token, signature str | |||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx2(ctx, func(ctx context.Context) ([]*GPGKey, error) { | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		keys := make([]*GPGKey, 0, len(ekeys)) | 		keys := make([]*GPGKey, 0, len(ekeys)) | ||||||
|  |  | ||||||
| 		verified := false | 		verified := false | ||||||
| @@ -151,8 +146,6 @@ func AddGPGKey(ctx context.Context, ownerID int64, content, token, signature str | |||||||
| 				return nil, ErrGPGKeyIDAlreadyUsed{ekey.PrimaryKey.KeyIdString()} | 				return nil, ErrGPGKeyIDAlreadyUsed{ekey.PrimaryKey.KeyIdString()} | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 		// Get DB session |  | ||||||
|  |  | ||||||
| 			key, err := parseGPGKey(ctx, ownerID, ekey, verified) | 			key, err := parseGPGKey(ctx, ownerID, ekey, verified) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return nil, err | 				return nil, err | ||||||
| @@ -163,5 +156,6 @@ func AddGPGKey(ctx context.Context, ownerID int64, content, token, signature str | |||||||
| 			} | 			} | ||||||
| 			keys = append(keys, key) | 			keys = append(keys, key) | ||||||
| 		} | 		} | ||||||
| 	return keys, committer.Commit() | 		return keys, nil | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -334,12 +334,7 @@ func FindRenamedBranch(ctx context.Context, repoID int64, from string) (branch * | |||||||
|  |  | ||||||
| // RenameBranch rename a branch | // RenameBranch rename a branch | ||||||
| func RenameBranch(ctx context.Context, repo *repo_model.Repository, from, to string, gitAction func(ctx context.Context, isDefault bool) error) (err error) { | func RenameBranch(ctx context.Context, repo *repo_model.Repository, from, to string, gitAction func(ctx context.Context, isDefault bool) error) (err error) { | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		sess := db.GetEngine(ctx) | 		sess := db.GetEngine(ctx) | ||||||
|  |  | ||||||
| 		// check whether from branch exist | 		// check whether from branch exist | ||||||
| @@ -403,8 +398,7 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, from, to str | |||||||
| 		if protectedBranch != nil { | 		if protectedBranch != nil { | ||||||
| 			// there is a protect rule for this branch | 			// there is a protect rule for this branch | ||||||
| 			protectedBranch.RuleName = to | 			protectedBranch.RuleName = to | ||||||
| 		_, err = sess.ID(protectedBranch.ID).Cols("branch_name").Update(protectedBranch) | 			if _, err = sess.ID(protectedBranch.ID).Cols("branch_name").Update(protectedBranch); err != nil { | ||||||
| 		if err != nil { |  | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| @@ -434,22 +428,17 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, from, to str | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// 5. insert renamed branch record | 		// 5. insert renamed branch record | ||||||
| 	renamedBranch := &RenamedBranch{ | 		if err = db.Insert(ctx, &RenamedBranch{ | ||||||
| 			RepoID: repo.ID, | 			RepoID: repo.ID, | ||||||
| 			From:   from, | 			From:   from, | ||||||
| 			To:     to, | 			To:     to, | ||||||
| 	} | 		}); err != nil { | ||||||
| 	err = db.Insert(ctx, renamedBranch) |  | ||||||
| 	if err != nil { |  | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// 6. do git action | 		// 6. do git action | ||||||
| 	if err = gitAction(ctx, isDefault); err != nil { | 		return gitAction(ctx, isDefault) | ||||||
| 		return err | 	}) | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return committer.Commit() |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type FindRecentlyPushedNewBranchesOptions struct { | type FindRecentlyPushedNewBranchesOptions struct { | ||||||
|   | |||||||
| @@ -180,12 +180,7 @@ func RemoveLFSMetaObjectByOidFn(ctx context.Context, repoID int64, oid string, f | |||||||
| 		return 0, ErrLFSObjectNotExist | 		return 0, ErrLFSObjectNotExist | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx2(ctx, func(ctx context.Context) (int64, error) { | ||||||
| 	if err != nil { |  | ||||||
| 		return 0, err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		m := &LFSMetaObject{Pointer: lfs.Pointer{Oid: oid}, RepositoryID: repoID} | 		m := &LFSMetaObject{Pointer: lfs.Pointer{Oid: oid}, RepositoryID: repoID} | ||||||
| 		if _, err := db.DeleteByBean(ctx, m); err != nil { | 		if _, err := db.DeleteByBean(ctx, m); err != nil { | ||||||
| 			return -1, err | 			return -1, err | ||||||
| @@ -202,7 +197,8 @@ func RemoveLFSMetaObjectByOidFn(ctx context.Context, repoID int64, oid string, f | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	return count, committer.Commit() | 		return count, nil | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetLFSMetaObjects returns all LFSMetaObjects associated with a repository | // GetLFSMetaObjects returns all LFSMetaObjects associated with a repository | ||||||
| @@ -243,14 +239,7 @@ func ExistsLFSObject(ctx context.Context, oid string) (bool, error) { | |||||||
|  |  | ||||||
| // LFSAutoAssociate auto associates accessible LFSMetaObjects | // LFSAutoAssociate auto associates accessible LFSMetaObjects | ||||||
| func LFSAutoAssociate(ctx context.Context, metas []*LFSMetaObject, user *user_model.User, repoID int64) error { | func LFSAutoAssociate(ctx context.Context, metas []*LFSMetaObject, user *user_model.User, repoID int64) error { | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 	sess := db.GetEngine(ctx) |  | ||||||
|  |  | ||||||
| 		oids := make([]any, len(metas)) | 		oids := make([]any, len(metas)) | ||||||
| 		oidMap := make(map[string]*LFSMetaObject, len(metas)) | 		oidMap := make(map[string]*LFSMetaObject, len(metas)) | ||||||
| 		for i, meta := range metas { | 		for i, meta := range metas { | ||||||
| @@ -264,8 +253,7 @@ func LFSAutoAssociate(ctx context.Context, metas []*LFSMetaObject, user *user_mo | |||||||
| 				"`lfs_meta_object`.repository_id", | 				"`lfs_meta_object`.repository_id", | ||||||
| 				builder.Select("`repository`.id").From("repository").Where(repo_model.AccessibleRepositoryCondition(user, unit.TypeInvalid)), | 				builder.Select("`repository`.id").From("repository").Where(repo_model.AccessibleRepositoryCondition(user, unit.TypeInvalid)), | ||||||
| 			) | 			) | ||||||
| 		err = sess.Cols("oid").Where(cond).In("oid", oids...).GroupBy("oid").Find(&newMetas) | 			if err := db.GetEngine(ctx).Cols("oid").Where(cond).In("oid", oids...).GroupBy("oid").Find(&newMetas); err != nil { | ||||||
| 		if err != nil { |  | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
| 			if len(newMetas) != len(oidMap) { | 			if len(newMetas) != len(oidMap) { | ||||||
| @@ -275,24 +263,22 @@ func LFSAutoAssociate(ctx context.Context, metas []*LFSMetaObject, user *user_mo | |||||||
| 				newMetas[i].Size = oidMap[newMetas[i].Oid].Size | 				newMetas[i].Size = oidMap[newMetas[i].Oid].Size | ||||||
| 				newMetas[i].RepositoryID = repoID | 				newMetas[i].RepositoryID = repoID | ||||||
| 			} | 			} | ||||||
| 		if err = db.Insert(ctx, newMetas); err != nil { | 			return db.Insert(ctx, newMetas) | ||||||
| 			return err |  | ||||||
| 		} | 		} | ||||||
| 	} else { |  | ||||||
| 		// admin can associate any LFS object to any repository, and we do not care about errors (eg: duplicated unique key), | 		// admin can associate any LFS object to any repository, and we do not care about errors (eg: duplicated unique key), | ||||||
| 		// even if error occurs, it won't hurt users and won't make things worse | 		// even if error occurs, it won't hurt users and won't make things worse | ||||||
| 		for i := range metas { | 		for i := range metas { | ||||||
| 			p := lfs.Pointer{Oid: metas[i].Oid, Size: metas[i].Size} | 			p := lfs.Pointer{Oid: metas[i].Oid, Size: metas[i].Size} | ||||||
| 			_, err = sess.Insert(&LFSMetaObject{ | 			if err := db.Insert(ctx, &LFSMetaObject{ | ||||||
| 				Pointer:      p, | 				Pointer:      p, | ||||||
| 				RepositoryID: repoID, | 				RepositoryID: repoID, | ||||||
| 			}) | 			}); err != nil { | ||||||
| 			if err != nil { |  | ||||||
| 				log.Warn("failed to insert LFS meta object %-v for repo_id: %d into database, err=%v", p, repoID, err) | 				log.Warn("failed to insert LFS meta object %-v for repo_id: %d into database, err=%v", p, repoID, err) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 		return nil | ||||||
| 	return committer.Commit() | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| // CopyLFS copies LFS data from one repo to another | // CopyLFS copies LFS data from one repo to another | ||||||
|   | |||||||
| @@ -91,18 +91,10 @@ func GetAssignedIssues(ctx context.Context, opts *AssignedIssuesOptions) ([]*Iss | |||||||
|  |  | ||||||
| // ToggleIssueAssignee changes a user between assigned and not assigned for this issue, and make issue comment for it. | // ToggleIssueAssignee changes a user between assigned and not assigned for this issue, and make issue comment for it. | ||||||
| func ToggleIssueAssignee(ctx context.Context, issue *Issue, doer *user_model.User, assigneeID int64) (removed bool, comment *Comment, err error) { | func ToggleIssueAssignee(ctx context.Context, issue *Issue, doer *user_model.User, assigneeID int64) (removed bool, comment *Comment, err error) { | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	if err := db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return false, nil, err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		removed, comment, err = toggleIssueAssignee(ctx, issue, doer, assigneeID, false) | 		removed, comment, err = toggleIssueAssignee(ctx, issue, doer, assigneeID, false) | ||||||
| 	if err != nil { | 		return err | ||||||
| 		return false, nil, err | 	}); err != nil { | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if err := committer.Commit(); err != nil { |  | ||||||
| 		return false, nil, err | 		return false, nil, err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -415,12 +415,7 @@ func NewIssueWithIndex(ctx context.Context, doer *user_model.User, opts NewIssue | |||||||
| // NewIssue creates new issue with labels for repository. | // NewIssue creates new issue with labels for repository. | ||||||
| // The title will be cut off at 255 characters if it's longer than 255 characters. | // The title will be cut off at 255 characters if it's longer than 255 characters. | ||||||
| func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) { | func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *Issue, labelIDs []int64, uuids []string) (err error) { | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		idx, err := db.GetNextResourceIndex(ctx, "issue_index", repo.ID) | 		idx, err := db.GetNextResourceIndex(ctx, "issue_index", repo.ID) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return fmt.Errorf("generate issue index failed: %w", err) | 			return fmt.Errorf("generate issue index failed: %w", err) | ||||||
| @@ -440,12 +435,8 @@ func NewIssue(ctx context.Context, repo *repo_model.Repository, issue *Issue, la | |||||||
| 			} | 			} | ||||||
| 			return fmt.Errorf("newIssue: %w", err) | 			return fmt.Errorf("newIssue: %w", err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	if err = committer.Commit(); err != nil { |  | ||||||
| 		return fmt.Errorf("Commit: %w", err) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 		return nil | 		return nil | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| // UpdateIssueMentions updates issue-user relations for mentioned users. | // UpdateIssueMentions updates issue-user relations for mentioned users. | ||||||
|   | |||||||
| @@ -442,12 +442,7 @@ func SearchEmails(ctx context.Context, opts *SearchEmailOptions) ([]*SearchEmail | |||||||
| // ActivateUserEmail will change the activated state of an email address, | // ActivateUserEmail will change the activated state of an email address, | ||||||
| // either primary or secondary (all in the email_address table) | // either primary or secondary (all in the email_address table) | ||||||
| func ActivateUserEmail(ctx context.Context, userID int64, email string, activate bool) (err error) { | func ActivateUserEmail(ctx context.Context, userID int64, email string, activate bool) (err error) { | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		// Activate/deactivate a user's secondary email address | 		// Activate/deactivate a user's secondary email address | ||||||
| 		// First check if there's another user active with the same address | 		// First check if there's another user active with the same address | ||||||
| 		addr, exist, err := db.Get[EmailAddress](ctx, builder.Eq{"uid": userID, "lower_email": strings.ToLower(email)}) | 		addr, exist, err := db.Get[EmailAddress](ctx, builder.Eq{"uid": userID, "lower_email": strings.ToLower(email)}) | ||||||
| @@ -492,8 +487,8 @@ func ActivateUserEmail(ctx context.Context, userID int64, email string, activate | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 		return nil | ||||||
| 	return committer.Commit() | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| // validateEmailBasic checks whether the email complies with the rules | // validateEmailBasic checks whether the email complies with the rules | ||||||
|   | |||||||
| @@ -716,12 +716,7 @@ func createUser(ctx context.Context, u *User, meta *Meta, createdByAdmin bool, o | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		isExist, err := IsUserExist(ctx, 0, u.Name) | 		isExist, err := IsUserExist(ctx, 0, u.Name) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
| @@ -789,17 +784,14 @@ func createUser(ctx context.Context, u *User, meta *Meta, createdByAdmin bool, o | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		// insert email address | 		// insert email address | ||||||
| 	if err := db.Insert(ctx, &EmailAddress{ | 		return db.Insert(ctx, &EmailAddress{ | ||||||
| 			UID:         u.ID, | 			UID:         u.ID, | ||||||
| 			Email:       u.Email, | 			Email:       u.Email, | ||||||
| 			LowerEmail:  strings.ToLower(u.Email), | 			LowerEmail:  strings.ToLower(u.Email), | ||||||
| 			IsActivated: u.IsActive, | 			IsActivated: u.IsActive, | ||||||
| 			IsPrimary:   true, | 			IsPrimary:   true, | ||||||
| 	}); err != nil { | 		}) | ||||||
| 		return err | 	}) | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return committer.Commit() |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // ErrDeleteLastAdminUser represents a "DeleteLastAdminUser" kind of error. | // ErrDeleteLastAdminUser represents a "DeleteLastAdminUser" kind of error. | ||||||
|   | |||||||
| @@ -261,12 +261,7 @@ func GetRefEndNamesAndURLs(issues []*issues_model.Issue, repoLink string) (map[i | |||||||
|  |  | ||||||
| // deleteIssue deletes the issue | // deleteIssue deletes the issue | ||||||
| func deleteIssue(ctx context.Context, issue *issues_model.Issue) ([]string, error) { | func deleteIssue(ctx context.Context, issue *issues_model.Issue) ([]string, error) { | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx2(ctx, func(ctx context.Context) ([]string, error) { | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		if _, err := db.GetEngine(ctx).ID(issue.ID).NoAutoCondition().Delete(issue); err != nil { | 		if _, err := db.GetEngine(ctx).ID(issue.ID).NoAutoCondition().Delete(issue); err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| @@ -325,10 +320,8 @@ func deleteIssue(ctx context.Context, issue *issues_model.Issue) ([]string, erro | |||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 	if err := committer.Commit(); err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 		return attachmentPaths, nil | 		return attachmentPaths, nil | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| // DeleteOrphanedIssues delete issues without a repo | // DeleteOrphanedIssues delete issues without a repo | ||||||
|   | |||||||
| @@ -52,12 +52,7 @@ func deleteOrganization(ctx context.Context, org *org_model.Organization) error | |||||||
|  |  | ||||||
| // DeleteOrganization completely and permanently deletes everything of organization. | // DeleteOrganization completely and permanently deletes everything of organization. | ||||||
| func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge bool) error { | func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge bool) error { | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	if err := db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		if purge { | 		if purge { | ||||||
| 			err := repo_service.DeleteOwnerRepositoriesDirectly(ctx, org.AsUser()) | 			err := repo_service.DeleteOwnerRepositoriesDirectly(ctx, org.AsUser()) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| @@ -83,8 +78,8 @@ func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge | |||||||
| 		if err := deleteOrganization(ctx, org); err != nil { | 		if err := deleteOrganization(ctx, org); err != nil { | ||||||
| 			return fmt.Errorf("DeleteOrganization: %w", err) | 			return fmt.Errorf("DeleteOrganization: %w", err) | ||||||
| 		} | 		} | ||||||
|  | 		return nil | ||||||
| 	if err := committer.Commit(); err != nil { | 	}); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,12 +47,7 @@ func RemoveOrgUser(ctx context.Context, org *organization.Organization, user *us | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		if _, err := db.DeleteByID[organization.OrgUser](ctx, ou.ID); err != nil { | 		if _, err := db.DeleteByID[organization.OrgUser](ctx, ou.ID); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} else if _, err = db.Exec(ctx, "UPDATE `user` SET num_members=num_members-1 WHERE id=?", org.ID); err != nil { | 		} else if _, err = db.Exec(ctx, "UPDATE `user` SET num_members=num_members-1 WHERE id=?", org.ID); err != nil { | ||||||
| @@ -98,6 +93,6 @@ func RemoveOrgUser(ctx context.Context, org *organization.Organization, user *us | |||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 		return nil | ||||||
| 	return committer.Commit() | 	}) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -267,18 +267,13 @@ func UpdateRelease(ctx context.Context, doer *user_model.User, gitRepo *git.Repo | |||||||
| 	} | 	} | ||||||
| 	rel.LowerTagName = strings.ToLower(rel.TagName) | 	rel.LowerTagName = strings.ToLower(rel.TagName) | ||||||
|  |  | ||||||
| 	ctx, committer, err := db.TxContext(ctx) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 	oldRelease, err := repo_model.GetReleaseByID(ctx, rel.ID) | 	oldRelease, err := repo_model.GetReleaseByID(ctx, rel.ID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	isConvertedFromTag := oldRelease.IsTag && !rel.IsTag | 	isConvertedFromTag := oldRelease.IsTag && !rel.IsTag | ||||||
|  |  | ||||||
|  | 	if err := db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 		if err = repo_model.UpdateRelease(ctx, rel); err != nil { | 		if err = repo_model.UpdateRelease(ctx, rel); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| @@ -333,8 +328,8 @@ func UpdateRelease(ctx context.Context, doer *user_model.User, gitRepo *git.Repo | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | 		return nil | ||||||
| 	if err := committer.Commit(); err != nil { | 	}); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -173,12 +173,7 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User, | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	return db.WithTx2(ctx, func(ctx context.Context) (*repo_model.Repository, error) { | ||||||
| 	if err != nil { |  | ||||||
| 		return nil, err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		if opts.Mirror { | 		if opts.Mirror { | ||||||
| 			remoteAddress, err := util.SanitizeURL(opts.CloneAddr) | 			remoteAddress, err := util.SanitizeURL(opts.CloneAddr) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| @@ -258,7 +253,8 @@ func MigrateRepositoryGitData(ctx context.Context, u *user_model.User, | |||||||
| 				return nil, err | 				return nil, err | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	return repo, committer.Commit() | 		return repo, nil | ||||||
|  | 	}) | ||||||
| } | } | ||||||
|  |  | ||||||
| // CleanUpMigrateInfo finishes migrating repository and/or wiki with things that don't need to be done for mirrors. | // CleanUpMigrateInfo finishes migrating repository and/or wiki with things that don't need to be done for mirrors. | ||||||
|   | |||||||
| @@ -210,12 +210,7 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) error { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx, committer, err := db.TxContext(ctx) | 	if err := db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	defer committer.Close() |  | ||||||
|  |  | ||||||
| 		// Note: A user owns any repository or belongs to any organization | 		// Note: A user owns any repository or belongs to any organization | ||||||
| 		//	cannot perform delete operation. This causes a race with the purge above | 		//	cannot perform delete operation. This causes a race with the purge above | ||||||
| 		//  however consistency requires that we ensure that this is the case | 		//  however consistency requires that we ensure that this is the case | ||||||
| @@ -246,29 +241,28 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) error { | |||||||
| 		if err := deleteUser(ctx, u, purge); err != nil { | 		if err := deleteUser(ctx, u, purge); err != nil { | ||||||
| 			return fmt.Errorf("DeleteUser: %w", err) | 			return fmt.Errorf("DeleteUser: %w", err) | ||||||
| 		} | 		} | ||||||
|  | 		return nil | ||||||
| 	if err := committer.Commit(); err != nil { | 	}); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	_ = committer.Close() |  | ||||||
|  |  | ||||||
| 	if err = asymkey_service.RewriteAllPublicKeys(ctx); err != nil { | 	if err := asymkey_service.RewriteAllPublicKeys(ctx); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	if err = asymkey_service.RewriteAllPrincipalKeys(ctx); err != nil { | 	if err := asymkey_service.RewriteAllPrincipalKeys(ctx); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Note: There are something just cannot be roll back, so just keep error logs of those operations. | 	// Note: There are something just cannot be roll back, so just keep error logs of those operations. | ||||||
| 	path := user_model.UserPath(u.Name) | 	path := user_model.UserPath(u.Name) | ||||||
| 	if err = util.RemoveAll(path); err != nil { | 	if err := util.RemoveAll(path); err != nil { | ||||||
| 		err = fmt.Errorf("failed to RemoveAll %s: %w", path, err) | 		err = fmt.Errorf("failed to RemoveAll %s: %w", path, err) | ||||||
| 		_ = system_model.CreateNotice(ctx, system_model.NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err)) | 		_ = system_model.CreateNotice(ctx, system_model.NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err)) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if u.Avatar != "" { | 	if u.Avatar != "" { | ||||||
| 		avatarPath := u.CustomAvatarRelativePath() | 		avatarPath := u.CustomAvatarRelativePath() | ||||||
| 		if err = storage.Avatars.Delete(avatarPath); err != nil { | 		if err := storage.Avatars.Delete(avatarPath); err != nil { | ||||||
| 			err = fmt.Errorf("failed to remove %s: %w", avatarPath, err) | 			err = fmt.Errorf("failed to remove %s: %w", avatarPath, err) | ||||||
| 			_ = system_model.CreateNotice(ctx, system_model.NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err)) | 			_ = system_model.CreateNotice(ctx, system_model.NoticeTask, fmt.Sprintf("delete user '%s': %v", u.Name, err)) | ||||||
| 		} | 		} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user