From 1a95d9d6a1e3a02136ce42864776db30e1062e35 Mon Sep 17 00:00:00 2001 From: Chai-Shi Date: Tue, 7 Jan 2025 01:54:06 +0800 Subject: [PATCH] fix empty repo updated time (#33120) fixes #33119 routers/web/repo/view_home.go ![image](https://github.com/user-attachments/assets/b0d6c5f5-7abc-478a-8d41-4b44dbd460aa) Calling `updateContextRepoEmptyAndStatus` will always ask the DB to update the updated Unix attributes. When revisiting the repo's home page, the timestamp will be updated unexpectedly, so I added the needsUpdate variable to check whether, in the end, the commitment to db update is necessary if columns have not changed at all. --------- Co-authored-by: wxiaoguang --- models/repo/update.go | 6 ++++++ routers/web/repo/view_home.go | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/models/repo/update.go b/models/repo/update.go index e7ca224028..fce357a1ac 100644 --- a/models/repo/update.go +++ b/models/repo/update.go @@ -46,6 +46,12 @@ func UpdateRepositoryCols(ctx context.Context, repo *Repository, cols ...string) return err } +// UpdateRepositoryColsNoAutoTime updates repository's columns and but applies time change automatically +func UpdateRepositoryColsNoAutoTime(ctx context.Context, repo *Repository, cols ...string) error { + _, err := db.GetEngine(ctx).ID(repo.ID).Cols(cols...).NoAutoTime().Update(repo) + return err +} + // ErrReachLimitOfRepo represents a "ReachLimitOfRepo" kind of error. type ErrReachLimitOfRepo struct { Limit int diff --git a/routers/web/repo/view_home.go b/routers/web/repo/view_home.go index f890225d67..8c9f54656b 100644 --- a/routers/web/repo/view_home.go +++ b/routers/web/repo/view_home.go @@ -224,11 +224,14 @@ func prepareRecentlyPushedNewBranches(ctx *context.Context) { } func updateContextRepoEmptyAndStatus(ctx *context.Context, empty bool, status repo_model.RepositoryStatus) { + if ctx.Repo.Repository.IsEmpty == empty && ctx.Repo.Repository.Status == status { + return + } ctx.Repo.Repository.IsEmpty = empty if ctx.Repo.Repository.Status == repo_model.RepositoryReady || ctx.Repo.Repository.Status == repo_model.RepositoryBroken { ctx.Repo.Repository.Status = status // only handle ready and broken status, leave other status as-is } - if err := repo_model.UpdateRepositoryCols(ctx, ctx.Repo.Repository, "is_empty", "status"); err != nil { + if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, ctx.Repo.Repository, "is_empty", "status"); err != nil { ctx.ServerError("updateContextRepoEmptyAndStatus: UpdateRepositoryCols", err) return }