mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 06:38:37 -04:00 
			
		
		
		
	Backport #34388 by @lunny Try to fix #32046 Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		| @@ -171,6 +171,7 @@ func (run *ActionRun) IsSchedule() bool { | |||||||
|  |  | ||||||
| func updateRepoRunsNumbers(ctx context.Context, repo *repo_model.Repository) error { | func updateRepoRunsNumbers(ctx context.Context, repo *repo_model.Repository) error { | ||||||
| 	_, err := db.GetEngine(ctx).ID(repo.ID). | 	_, err := db.GetEngine(ctx).ID(repo.ID). | ||||||
|  | 		NoAutoTime(). | ||||||
| 		SetExpr("num_action_runs", | 		SetExpr("num_action_runs", | ||||||
| 			builder.Select("count(*)").From("action_run"). | 			builder.Select("count(*)").From("action_run"). | ||||||
| 				Where(builder.Eq{"repo_id": repo.ID}), | 				Where(builder.Eq{"repo_id": repo.ID}), | ||||||
|   | |||||||
| @@ -249,7 +249,7 @@ func CreatePendingRepositoryTransfer(ctx context.Context, doer, newOwner *user_m | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		repo.Status = RepositoryPendingTransfer | 		repo.Status = RepositoryPendingTransfer | ||||||
| 		if err := UpdateRepositoryCols(ctx, repo, "status"); err != nil { | 		if err := UpdateRepositoryColsNoAutoTime(ctx, repo, "status"); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,7 +25,7 @@ func UpdateRepositoryOwnerNames(ctx context.Context, ownerID int64, ownerName st | |||||||
| 	} | 	} | ||||||
| 	defer committer.Close() | 	defer committer.Close() | ||||||
|  |  | ||||||
| 	if _, err := db.GetEngine(ctx).Where("owner_id = ?", ownerID).Cols("owner_name").Update(&Repository{ | 	if _, err := db.GetEngine(ctx).Where("owner_id = ?", ownerID).Cols("owner_name").NoAutoTime().Update(&Repository{ | ||||||
| 		OwnerName: ownerName, | 		OwnerName: ownerName, | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		return err | 		return err | ||||||
| @@ -40,8 +40,8 @@ func UpdateRepositoryUpdatedTime(ctx context.Context, repoID int64, updateTime t | |||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
| // UpdateRepositoryCols updates repository's columns | // UpdateRepositoryColsWithAutoTime updates repository's columns | ||||||
| func UpdateRepositoryCols(ctx context.Context, repo *Repository, cols ...string) error { | func UpdateRepositoryColsWithAutoTime(ctx context.Context, repo *Repository, cols ...string) error { | ||||||
| 	_, err := db.GetEngine(ctx).ID(repo.ID).Cols(cols...).Update(repo) | 	_, err := db.GetEngine(ctx).ID(repo.ID).Cols(cols...).Update(repo) | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|   | |||||||
| @@ -220,7 +220,7 @@ func HookPostReceive(ctx *gitea_context.PrivateContext) { | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if len(cols) > 0 { | 		if len(cols) > 0 { | ||||||
| 			if err := repo_model.UpdateRepositoryCols(ctx, repo, cols...); err != nil { | 			if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, cols...); err != nil { | ||||||
| 				log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err) | 				log.Error("Failed to Update: %s/%s Error: %v", ownerName, repoName, err) | ||||||
| 				ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{ | 				ctx.JSON(http.StatusInternalServerError, private.HookPostReceiveResult{ | ||||||
| 					Err: fmt.Sprintf("Failed to Update: %s/%s Error: %v", ownerName, repoName, err), | 					Err: fmt.Sprintf("Failed to Update: %s/%s Error: %v", ownerName, repoName, err), | ||||||
|   | |||||||
| @@ -376,12 +376,6 @@ func editFilePost(ctx *context.Context, form forms.EditRepoFileForm, isNewFile b | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if ctx.Repo.Repository.IsEmpty { |  | ||||||
| 		if isEmpty, err := ctx.Repo.GitRepo.IsEmpty(); err == nil && !isEmpty { |  | ||||||
| 			_ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty") |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	redirectForCommitChoice(ctx, form.CommitChoice, branchName, form.TreePath) | 	redirectForCommitChoice(ctx, form.CommitChoice, branchName, form.TreePath) | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -790,7 +784,7 @@ func UploadFilePost(ctx *context.Context) { | |||||||
|  |  | ||||||
| 	if ctx.Repo.Repository.IsEmpty { | 	if ctx.Repo.Repository.IsEmpty { | ||||||
| 		if isEmpty, err := ctx.Repo.GitRepo.IsEmpty(); err == nil && !isEmpty { | 		if isEmpty, err := ctx.Repo.GitRepo.IsEmpty(); err == nil && !isEmpty { | ||||||
| 			_ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty") | 			_ = repo_model.UpdateRepositoryColsWithAutoTime(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, IsEmpty: false}, "is_empty") | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -109,7 +109,7 @@ func findWikiRepoCommit(ctx *context.Context) (*git.Repository, *git.Commit, err | |||||||
| 			return wikiGitRepo, nil, errBranch | 			return wikiGitRepo, nil, errBranch | ||||||
| 		} | 		} | ||||||
| 		// update the default branch in the database | 		// update the default branch in the database | ||||||
| 		errDb := repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, DefaultWikiBranch: gitRepoDefaultBranch}, "default_wiki_branch") | 		errDb := repo_model.UpdateRepositoryColsNoAutoTime(ctx, &repo_model.Repository{ID: ctx.Repo.Repository.ID, DefaultWikiBranch: gitRepoDefaultBranch}, "default_wiki_branch") | ||||||
| 		if errDb != nil { | 		if errDb != nil { | ||||||
| 			return wikiGitRepo, nil, errDb | 			return wikiGitRepo, nil, errDb | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -245,7 +245,7 @@ func TestDefaultWikiBranch(t *testing.T) { | |||||||
| 	assert.NoError(t, wiki_service.ChangeDefaultWikiBranch(db.DefaultContext, repoWithNoWiki, "main")) | 	assert.NoError(t, wiki_service.ChangeDefaultWikiBranch(db.DefaultContext, repoWithNoWiki, "main")) | ||||||
|  |  | ||||||
| 	// repo with wiki | 	// repo with wiki | ||||||
| 	assert.NoError(t, repo_model.UpdateRepositoryCols(db.DefaultContext, &repo_model.Repository{ID: 1, DefaultWikiBranch: "wrong-branch"})) | 	assert.NoError(t, repo_model.UpdateRepositoryColsNoAutoTime(db.DefaultContext, &repo_model.Repository{ID: 1, DefaultWikiBranch: "wrong-branch"})) | ||||||
|  |  | ||||||
| 	ctx, _ := contexttest.MockContext(t, "user2/repo1/wiki") | 	ctx, _ := contexttest.MockContext(t, "user2/repo1/wiki") | ||||||
| 	ctx.SetPathParam("*", "Home") | 	ctx.SetPathParam("*", "Home") | ||||||
|   | |||||||
| @@ -148,7 +148,7 @@ func (g *GiteaLocalUploader) CreateRepo(ctx context.Context, repo *base.Reposito | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	g.repo.ObjectFormatName = objectFormat.Name() | 	g.repo.ObjectFormatName = objectFormat.Name() | ||||||
| 	return repo_model.UpdateRepositoryCols(ctx, g.repo, "object_format_name") | 	return repo_model.UpdateRepositoryColsNoAutoTime(ctx, g.repo, "object_format_name") | ||||||
| } | } | ||||||
|  |  | ||||||
| // Close closes this uploader | // Close closes this uploader | ||||||
| @@ -975,7 +975,7 @@ func (g *GiteaLocalUploader) Finish(ctx context.Context) error { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	g.repo.Status = repo_model.RepositoryReady | 	g.repo.Status = repo_model.RepositoryReady | ||||||
| 	return repo_model.UpdateRepositoryCols(ctx, g.repo, "status") | 	return repo_model.UpdateRepositoryColsWithAutoTime(ctx, g.repo, "status") | ||||||
| } | } | ||||||
|  |  | ||||||
| func (g *GiteaLocalUploader) remapUser(ctx context.Context, source user_model.ExternalUserMigrated, target user_model.ExternalUserRemappable) error { | func (g *GiteaLocalUploader) remapUser(ctx context.Context, source user_model.ExternalUserMigrated, target user_model.ExternalUserRemappable) error { | ||||||
|   | |||||||
| @@ -71,7 +71,7 @@ func UpdateAddress(ctx context.Context, m *repo_model.Mirror, addr string) error | |||||||
| 	// erase authentication before storing in database | 	// erase authentication before storing in database | ||||||
| 	u.User = nil | 	u.User = nil | ||||||
| 	m.Repo.OriginalURL = u.String() | 	m.Repo.OriginalURL = u.String() | ||||||
| 	return repo_model.UpdateRepositoryCols(ctx, m.Repo, "original_url") | 	return repo_model.UpdateRepositoryColsNoAutoTime(ctx, m.Repo, "original_url") | ||||||
| } | } | ||||||
|  |  | ||||||
| // mirrorSyncResult contains information of a updated reference. | // mirrorSyncResult contains information of a updated reference. | ||||||
| @@ -653,7 +653,7 @@ func checkAndUpdateEmptyRepository(ctx context.Context, m *repo_model.Mirror, re | |||||||
| 		} | 		} | ||||||
| 		m.Repo.IsEmpty = false | 		m.Repo.IsEmpty = false | ||||||
| 		// Update the is empty and default_branch columns | 		// Update the is empty and default_branch columns | ||||||
| 		if err := repo_model.UpdateRepositoryCols(ctx, m.Repo, "default_branch", "is_empty"); err != nil { | 		if err := repo_model.UpdateRepositoryColsWithAutoTime(ctx, m.Repo, "default_branch", "is_empty"); err != nil { | ||||||
| 			log.Error("Failed to update default branch of repository %-v. Error: %v", m.Repo, err) | 			log.Error("Failed to update default branch of repository %-v. Error: %v", m.Repo, err) | ||||||
| 			desc := fmt.Sprintf("Failed to update default branch of repository '%s': %v", m.Repo.RepoPath(), err) | 			desc := fmt.Sprintf("Failed to update default branch of repository '%s': %v", m.Repo.RepoPath(), err) | ||||||
| 			if err = system_model.CreateRepositoryNotice(desc); err != nil { | 			if err = system_model.CreateRepositoryNotice(desc); err != nil { | ||||||
|   | |||||||
| @@ -100,7 +100,7 @@ func AdoptRepository(ctx context.Context, doer, owner *user_model.User, opts Cre | |||||||
|  |  | ||||||
| 	// 4 - update repository status | 	// 4 - update repository status | ||||||
| 	repo.Status = repo_model.RepositoryReady | 	repo.Status = repo_model.RepositoryReady | ||||||
| 	if err = repo_model.UpdateRepositoryCols(ctx, repo, "status"); err != nil { | 	if err = repo_model.UpdateRepositoryColsWithAutoTime(ctx, repo, "status"); err != nil { | ||||||
| 		return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | 		return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ func UploadAvatar(ctx context.Context, repo *repo_model.Repository, data []byte) | |||||||
| 	// Users can upload the same image to other repo - prefix it with ID | 	// Users can upload the same image to other repo - prefix it with ID | ||||||
| 	// Then repo will be removed - only it avatar file will be removed | 	// Then repo will be removed - only it avatar file will be removed | ||||||
| 	repo.Avatar = newAvatar | 	repo.Avatar = newAvatar | ||||||
| 	if err := repo_model.UpdateRepositoryCols(ctx, repo, "avatar"); err != nil { | 	if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "avatar"); err != nil { | ||||||
| 		return fmt.Errorf("UploadAvatar: Update repository avatar: %w", err) | 		return fmt.Errorf("UploadAvatar: Update repository avatar: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -77,7 +77,7 @@ func DeleteAvatar(ctx context.Context, repo *repo_model.Repository) error { | |||||||
| 	defer committer.Close() | 	defer committer.Close() | ||||||
|  |  | ||||||
| 	repo.Avatar = "" | 	repo.Avatar = "" | ||||||
| 	if err := repo_model.UpdateRepositoryCols(ctx, repo, "avatar"); err != nil { | 	if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "avatar"); err != nil { | ||||||
| 		return fmt.Errorf("DeleteAvatar: Update repository avatar: %w", err) | 		return fmt.Errorf("DeleteAvatar: Update repository avatar: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -112,5 +112,5 @@ func generateAvatar(ctx context.Context, templateRepo, generateRepo *repo_model. | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return repo_model.UpdateRepositoryCols(ctx, generateRepo, "avatar") | 	return repo_model.UpdateRepositoryColsNoAutoTime(ctx, generateRepo, "avatar") | ||||||
| } | } | ||||||
|   | |||||||
| @@ -321,7 +321,7 @@ func CreateRepositoryDirectly(ctx context.Context, doer, owner *user_model.User, | |||||||
| 	// 7 - update repository status to be ready | 	// 7 - update repository status to be ready | ||||||
| 	if needsUpdateToReady { | 	if needsUpdateToReady { | ||||||
| 		repo.Status = repo_model.RepositoryReady | 		repo.Status = repo_model.RepositoryReady | ||||||
| 		if err = repo_model.UpdateRepositoryCols(ctx, repo, "status"); err != nil { | 		if err = repo_model.UpdateRepositoryColsWithAutoTime(ctx, repo, "status"); err != nil { | ||||||
| 			return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | 			return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -306,7 +306,7 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use | |||||||
|  |  | ||||||
| 	if repo.IsEmpty { | 	if repo.IsEmpty { | ||||||
| 		if isEmpty, err := gitRepo.IsEmpty(); err == nil && !isEmpty { | 		if isEmpty, err := gitRepo.IsEmpty(); err == nil && !isEmpty { | ||||||
| 			_ = repo_model.UpdateRepositoryCols(ctx, &repo_model.Repository{ID: repo.ID, IsEmpty: false, DefaultBranch: opts.NewBranch}, "is_empty", "default_branch") | 			_ = repo_model.UpdateRepositoryColsWithAutoTime(ctx, &repo_model.Repository{ID: repo.ID, IsEmpty: false, DefaultBranch: opts.NewBranch}, "is_empty", "default_branch") | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -198,7 +198,7 @@ func ForkRepository(ctx context.Context, doer, owner *user_model.User, opts Fork | |||||||
|  |  | ||||||
| 	// 8 - update repository status to be ready | 	// 8 - update repository status to be ready | ||||||
| 	repo.Status = repo_model.RepositoryReady | 	repo.Status = repo_model.RepositoryReady | ||||||
| 	if err = repo_model.UpdateRepositoryCols(ctx, repo, "status"); err != nil { | 	if err = repo_model.UpdateRepositoryColsWithAutoTime(ctx, repo, "status"); err != nil { | ||||||
| 		return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | 		return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -283,7 +283,7 @@ func pushNewBranch(ctx context.Context, repo *repo_model.Repository, pusher *use | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 		// Update the is empty and default_branch columns | 		// Update the is empty and default_branch columns | ||||||
| 		if err := repo_model.UpdateRepositoryCols(ctx, repo, "default_branch", "is_empty"); err != nil { | 		if err := repo_model.UpdateRepositoryColsWithAutoTime(ctx, repo, "default_branch", "is_empty"); err != nil { | ||||||
| 			return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | 			return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -205,7 +205,7 @@ func updateRepository(ctx context.Context, repo *repo_model.Repository, visibili | |||||||
|  |  | ||||||
| 	e := db.GetEngine(ctx) | 	e := db.GetEngine(ctx) | ||||||
|  |  | ||||||
| 	if _, err = e.ID(repo.ID).AllCols().Update(repo); err != nil { | 	if _, err = e.ID(repo.ID).NoAutoTime().AllCols().Update(repo); err != nil { | ||||||
| 		return fmt.Errorf("update: %w", err) | 		return fmt.Errorf("update: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -184,7 +184,7 @@ func GenerateRepository(ctx context.Context, doer, owner *user_model.User, templ | |||||||
|  |  | ||||||
| 	// 6 - update repository status to be ready | 	// 6 - update repository status to be ready | ||||||
| 	generateRepo.Status = repo_model.RepositoryReady | 	generateRepo.Status = repo_model.RepositoryReady | ||||||
| 	if err = repo_model.UpdateRepositoryCols(ctx, generateRepo, "status"); err != nil { | 	if err = repo_model.UpdateRepositoryColsWithAutoTime(ctx, generateRepo, "status"); err != nil { | ||||||
| 		return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | 		return nil, fmt.Errorf("UpdateRepositoryCols: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -160,7 +160,7 @@ func transferOwnership(ctx context.Context, doer *user_model.User, newOwnerName | |||||||
| 	repo.OwnerName = newOwner.Name | 	repo.OwnerName = newOwner.Name | ||||||
|  |  | ||||||
| 	// Update repository. | 	// Update repository. | ||||||
| 	if err := repo_model.UpdateRepositoryCols(ctx, repo, "owner_id", "owner_name"); err != nil { | 	if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "owner_id", "owner_name"); err != nil { | ||||||
| 		return fmt.Errorf("update owner: %w", err) | 		return fmt.Errorf("update owner: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -304,7 +304,7 @@ func transferOwnership(ctx context.Context, doer *user_model.User, newOwnerName | |||||||
| 		return fmt.Errorf("deleteRepositoryTransfer: %w", err) | 		return fmt.Errorf("deleteRepositoryTransfer: %w", err) | ||||||
| 	} | 	} | ||||||
| 	repo.Status = repo_model.RepositoryReady | 	repo.Status = repo_model.RepositoryReady | ||||||
| 	if err := repo_model.UpdateRepositoryCols(ctx, repo, "status"); err != nil { | 	if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "status"); err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -495,7 +495,7 @@ func RejectRepositoryTransfer(ctx context.Context, repo *repo_model.Repository, | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		repo.Status = repo_model.RepositoryReady | 		repo.Status = repo_model.RepositoryReady | ||||||
| 		if err := repo_model.UpdateRepositoryCols(ctx, repo, "status"); err != nil { | 		if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "status"); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -543,7 +543,7 @@ func CancelRepositoryTransfer(ctx context.Context, repoTransfer *repo_model.Repo | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		repoTransfer.Repo.Status = repo_model.RepositoryReady | 		repoTransfer.Repo.Status = repo_model.RepositoryReady | ||||||
| 		if err := repo_model.UpdateRepositoryCols(ctx, repoTransfer.Repo, "status"); err != nil { | 		if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repoTransfer.Repo, "status"); err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -365,7 +365,7 @@ func ChangeDefaultWikiBranch(ctx context.Context, repo *repo_model.Repository, n | |||||||
| 	} | 	} | ||||||
| 	return db.WithTx(ctx, func(ctx context.Context) error { | 	return db.WithTx(ctx, func(ctx context.Context) error { | ||||||
| 		repo.DefaultWikiBranch = newBranch | 		repo.DefaultWikiBranch = newBranch | ||||||
| 		if err := repo_model.UpdateRepositoryCols(ctx, repo, "default_wiki_branch"); err != nil { | 		if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "default_wiki_branch"); err != nil { | ||||||
| 			return fmt.Errorf("unable to update database: %w", err) | 			return fmt.Errorf("unable to update database: %w", err) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user