From de3e3ef05f5ef765cdfd355cca8b3d57c3cb1098 Mon Sep 17 00:00:00 2001 From: changchaishi Date: Mon, 6 Jan 2025 07:18:10 +0000 Subject: [PATCH 1/4] fix empty repo updated time --- routers/web/repo/view_home.go | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/routers/web/repo/view_home.go b/routers/web/repo/view_home.go index f890225d67bdf..dd71ffede1f08 100644 --- a/routers/web/repo/view_home.go +++ b/routers/web/repo/view_home.go @@ -224,13 +224,25 @@ func prepareRecentlyPushedNewBranches(ctx *context.Context) { } func updateContextRepoEmptyAndStatus(ctx *context.Context, empty bool, status repo_model.RepositoryStatus) { - ctx.Repo.Repository.IsEmpty = empty + needsUpdate := false + + if empty != ctx.Repo.Repository.IsEmpty { + ctx.Repo.Repository.IsEmpty = empty + needsUpdate = true + } + 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 status != ctx.Repo.Repository.Status { + ctx.Repo.Repository.Status = status // only handle ready and broken status, leave other status as-is + needsUpdate = true + } } - if err := repo_model.UpdateRepositoryCols(ctx, ctx.Repo.Repository, "is_empty", "status"); err != nil { - ctx.ServerError("updateContextRepoEmptyAndStatus: UpdateRepositoryCols", err) - return + + if needsUpdate { + if err := repo_model.UpdateRepositoryCols(ctx, ctx.Repo.Repository, "is_empty", "status"); err != nil { + ctx.ServerError("updateContextRepoEmptyAndStatus: UpdateRepositoryCols", err) + return + } } } From c52953b47c1ea947da425ec2f82cba985aa21262 Mon Sep 17 00:00:00 2001 From: changchaishi Date: Mon, 6 Jan 2025 08:09:29 +0000 Subject: [PATCH 2/4] use NoAutoTime to update db --- routers/web/repo/view_home.go | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/routers/web/repo/view_home.go b/routers/web/repo/view_home.go index dd71ffede1f08..f27e5ef336c70 100644 --- a/routers/web/repo/view_home.go +++ b/routers/web/repo/view_home.go @@ -224,25 +224,14 @@ func prepareRecentlyPushedNewBranches(ctx *context.Context) { } func updateContextRepoEmptyAndStatus(ctx *context.Context, empty bool, status repo_model.RepositoryStatus) { - needsUpdate := false - - if empty != ctx.Repo.Repository.IsEmpty { - ctx.Repo.Repository.IsEmpty = empty - needsUpdate = true - } - - if ctx.Repo.Repository.Status == repo_model.RepositoryReady || ctx.Repo.Repository.Status == repo_model.RepositoryBroken { - if status != ctx.Repo.Repository.Status { - ctx.Repo.Repository.Status = status // only handle ready and broken status, leave other status as-is - needsUpdate = true - } + repo := ctx.Repo.Repository + repo.IsEmpty = empty + if repo.Status == repo_model.RepositoryReady || repo.Status == repo_model.RepositoryBroken { + repo.Status = status // only handle ready and broken status, leave other status as-is } - - if needsUpdate { - if err := repo_model.UpdateRepositoryCols(ctx, ctx.Repo.Repository, "is_empty", "status"); err != nil { - ctx.ServerError("updateContextRepoEmptyAndStatus: UpdateRepositoryCols", err) - return - } + if _, err := db.GetEngine(ctx).ID(repo.ID).Cols("is_empty", "status").NoAutoTime().Update(repo); err != nil { + ctx.ServerError("updateContextRepoEmptyAndStatus: UpdateRepositoryCols", err) + return } } From c0d94084178b710816fc52d68cc8f63d867cc1d0 Mon Sep 17 00:00:00 2001 From: changchaishi Date: Mon, 6 Jan 2025 08:29:49 +0000 Subject: [PATCH 3/4] use new function to apply NoAutoTime --- models/repo/update.go | 6 ++++++ routers/web/repo/view_home.go | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/models/repo/update.go b/models/repo/update.go index e7ca2240282f2..fce357a1acf35 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 f27e5ef336c70..55517d0b8e731 100644 --- a/routers/web/repo/view_home.go +++ b/routers/web/repo/view_home.go @@ -224,12 +224,11 @@ func prepareRecentlyPushedNewBranches(ctx *context.Context) { } func updateContextRepoEmptyAndStatus(ctx *context.Context, empty bool, status repo_model.RepositoryStatus) { - repo := ctx.Repo.Repository - repo.IsEmpty = empty - if repo.Status == repo_model.RepositoryReady || repo.Status == repo_model.RepositoryBroken { - repo.Status = status // only handle ready and broken status, leave other status as-is + 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 := db.GetEngine(ctx).ID(repo.ID).Cols("is_empty", "status").NoAutoTime().Update(repo); err != nil { + if err := repo_model.UpdateRepositoryColsNoAutoTime(ctx, ctx.Repo.Repository, "is_empty", "status"); err != nil { ctx.ServerError("updateContextRepoEmptyAndStatus: UpdateRepositoryCols", err) return } From 574cfefd53d364555e3c48c1fb44d7cc84873303 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Mon, 6 Jan 2025 17:45:38 +0800 Subject: [PATCH 4/4] Update view_home.go --- routers/web/repo/view_home.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/routers/web/repo/view_home.go b/routers/web/repo/view_home.go index 55517d0b8e731..8c9f54656b0c0 100644 --- a/routers/web/repo/view_home.go +++ b/routers/web/repo/view_home.go @@ -224,6 +224,9 @@ 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