From b130407a83fb9928a6e29e8a521f8edd6ef9e6b6 Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Fri, 17 Jun 2022 21:15:33 +0100 Subject: [PATCH 1/2] Add doctor command to write commit-graphs This PR adds a doctor command to write the commit-graphs for the repositories: `gitea doctor --run check-commit-graphs --fix` Signed-off-by: Andrew Thornton --- modules/doctor/mergebase.go | 1 + modules/doctor/misc.go | 74 +++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) diff --git a/modules/doctor/mergebase.go b/modules/doctor/mergebase.go index 46369290a13d7..70c63d38cb3e9 100644 --- a/modules/doctor/mergebase.go +++ b/modules/doctor/mergebase.go @@ -30,6 +30,7 @@ func iteratePRs(ctx context.Context, repo *repo_model.Repository, each func(*rep } func checkPRMergeBase(ctx context.Context, logger log.Logger, autofix bool) error { + git.InitOnceWithSync(ctx) numRepos := 0 numPRs := 0 numPRsUpdated := 0 diff --git a/modules/doctor/misc.go b/modules/doctor/misc.go index 9bee78303e1a5..c93f7f38ca00a 100644 --- a/modules/doctor/misc.go +++ b/modules/doctor/misc.go @@ -189,6 +189,73 @@ func checkDaemonExport(ctx context.Context, logger log.Logger, autofix bool) err return nil } +func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) error { + git.InitOnceWithSync(ctx) + + numRepos := 0 + numNeedUpdate := 0 + numWritten := 0 + if err := iterateRepositories(ctx, func(repo *repo_model.Repository) error { + numRepos++ + + commitGraphExists := func() (bool, error) { + // Check commit-graph exists + commitGraphFile := path.Join(repo.RepoPath(), `objects/info/commit-graph`) + isExist, err := util.IsExist(commitGraphFile) + if err != nil { + logger.Error("Unable to check if %s exists. Error: %v", commitGraphFile, err) + return false, err + } + + if !isExist { + commitGraphsDir := path.Join(repo.RepoPath(), `objects/info/commit-graphs`) + isExist, err = util.IsExist(commitGraphsDir) + if err != nil { + logger.Error("Unable to check if %s exists. Error: %v", commitGraphsDir, err) + return false, err + } + } + return isExist, nil + } + + isExist, err := commitGraphExists() + if err != nil { + return err + } + if !isExist { + numNeedUpdate++ + if autofix { + if err := git.WriteCommitGraph(ctx, repo.RepoPath()); err != nil { + logger.Error("Unable to write commit-graph in %s. Error: %v", repo.FullName(), err) + return err + } + isExist, err := commitGraphExists() + if err != nil { + return err + } + if isExist { + numWritten++ + logger.Info("Commit-graph written: %s", repo.FullName()) + } else { + logger.Warn("No commit-graph written: %s", repo.FullName()) + } + } + } + return nil + }); err != nil { + logger.Critical("Unable to checkCommitGraph: %v", err) + return err + } + + if autofix { + logger.Info("Wrote commit-graph files for %d of %d repositories.", numWritten, numRepos) + } else { + logger.Info("Checked %d repositories, %d without commit-graphs.", numRepos, numNeedUpdate) + } + + return nil +} + func init() { Register(&Check{ Title: "Check if SCRIPT_TYPE is available", @@ -225,4 +292,11 @@ func init() { Run: checkDaemonExport, Priority: 8, }) + Register(&Check{ + Title: "Check commit-graphs", + Name: "check-commit-graphs", + IsDefault: false, + Run: checkCommitGraph, + Priority: 9, + }) } From 56cd7d2be45e51f0eb00a96c3a0b703236a6f0a1 Mon Sep 17 00:00:00 2001 From: Andrew Thornton Date: Fri, 17 Jun 2022 22:45:51 +0100 Subject: [PATCH 2/2] placate lint Signed-off-by: Andrew Thornton --- modules/doctor/mergebase.go | 4 +++- modules/doctor/misc.go | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/doctor/mergebase.go b/modules/doctor/mergebase.go index 70c63d38cb3e9..2da91cdcc35f6 100644 --- a/modules/doctor/mergebase.go +++ b/modules/doctor/mergebase.go @@ -30,7 +30,9 @@ func iteratePRs(ctx context.Context, repo *repo_model.Repository, each func(*rep } func checkPRMergeBase(ctx context.Context, logger log.Logger, autofix bool) error { - git.InitOnceWithSync(ctx) + if err := git.InitOnceWithSync(ctx); err != nil { + return err + } numRepos := 0 numPRs := 0 numPRsUpdated := 0 diff --git a/modules/doctor/misc.go b/modules/doctor/misc.go index c93f7f38ca00a..24175fcaf4bec 100644 --- a/modules/doctor/misc.go +++ b/modules/doctor/misc.go @@ -190,7 +190,9 @@ func checkDaemonExport(ctx context.Context, logger log.Logger, autofix bool) err } func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) error { - git.InitOnceWithSync(ctx) + if err := git.InitOnceWithSync(ctx); err != nil { + return err + } numRepos := 0 numNeedUpdate := 0