diff --git a/modules/repository/branch.go b/modules/repository/branch.go index 2bf9930f19fd3..30aa0a6e85ec1 100644 --- a/modules/repository/branch.go +++ b/modules/repository/branch.go @@ -41,11 +41,12 @@ func SyncRepoBranchesWithRepo(ctx context.Context, repo *repo_model.Repository, if err != nil { return 0, fmt.Errorf("GetObjectFormat: %w", err) } - _, err = db.GetEngine(ctx).ID(repo.ID).Update(&repo_model.Repository{ObjectFormatName: objFmt.Name()}) - if err != nil { - return 0, fmt.Errorf("UpdateRepository: %w", err) + if objFmt.Name() != repo.ObjectFormatName { + repo.ObjectFormatName = objFmt.Name() + if err = repo_model.UpdateRepositoryColsWithAutoTime(ctx, repo, "object_format_name"); err != nil { + return 0, fmt.Errorf("UpdateRepositoryColsWithAutoTime: %w", err) + } } - repo.ObjectFormatName = objFmt.Name() // keep consistent with db allBranches := container.Set[string]{} { diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go index 6602685e94888..e16c650e737d0 100644 --- a/routers/web/repo/setting/setting.go +++ b/routers/web/repo/setting/setting.go @@ -663,44 +663,35 @@ func handleSettingsPostAdvanced(ctx *context.Context) { func handleSettingsPostSigning(ctx *context.Context) { form := web.GetForm(ctx).(*forms.RepoSettingForm) repo := ctx.Repo.Repository - changed := false trustModel := repo_model.ToTrustModel(form.TrustModel) if trustModel != repo.TrustModel { - repo.TrustModel = trustModel - changed = true - } - - if changed { - if err := repo_service.UpdateRepository(ctx, repo, false); err != nil { + if err := repo_service.UpdateRepositoryTrustModel(ctx, repo, trustModel); err != nil { ctx.ServerError("UpdateRepository", err) return } + log.Trace("Repository signing settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name) } - log.Trace("Repository signing settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name) ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success")) ctx.Redirect(ctx.Repo.RepoLink + "/settings") } func handleSettingsPostAdmin(ctx *context.Context) { - form := web.GetForm(ctx).(*forms.RepoSettingForm) - repo := ctx.Repo.Repository if !ctx.Doer.IsAdmin { ctx.HTTPError(http.StatusForbidden) return } + repo := ctx.Repo.Repository + form := web.GetForm(ctx).(*forms.RepoSettingForm) if repo.IsFsckEnabled != form.EnableHealthCheck { - repo.IsFsckEnabled = form.EnableHealthCheck - } - - if err := repo_service.UpdateRepository(ctx, repo, false); err != nil { - ctx.ServerError("UpdateRepository", err) - return + if err := repo_service.UpdateRepositoryHealthCheck(ctx, repo, form.EnableHealthCheck); err != nil { + ctx.ServerError("UpdateRepository", err) + return + } + log.Trace("Repository admin settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name) } - log.Trace("Repository admin settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name) - ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success")) ctx.Redirect(ctx.Repo.RepoLink + "/settings") } diff --git a/services/repository/repository.go b/services/repository/repository.go index e574dc6c0181d..151b9a22a6796 100644 --- a/services/repository/repository.go +++ b/services/repository/repository.go @@ -124,6 +124,26 @@ func UpdateRepository(ctx context.Context, repo *repo_model.Repository, visibili }) } +func UpdateRepositoryTrustModel(ctx context.Context, repo *repo_model.Repository, trustModel repo_model.TrustModelType) (err error) { + return db.WithTx(ctx, func(ctx context.Context) error { + repo.TrustModel = trustModel + if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "trust_model"); err != nil { + return fmt.Errorf("UpdateRepositoryColsNoAutoTime: %w", err) + } + return nil + }) +} + +func UpdateRepositoryHealthCheck(ctx context.Context, repo *repo_model.Repository, healthCheckEnabled bool) (err error) { + return db.WithTx(ctx, func(ctx context.Context) error { + repo.IsFsckEnabled = healthCheckEnabled + if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, repo, "is_fsck_enabled"); err != nil { + return fmt.Errorf("UpdateRepositoryColsNoAutoTime: %w", err) + } + return nil + }) +} + func MakeRepoPublic(ctx context.Context, repo *repo_model.Repository) (err error) { return db.WithTx(ctx, func(ctx context.Context) error { repo.IsPrivate = false