mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Add doctor command to write commit-graphs (#20007)
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 <art27@cantab.net>
This commit is contained in:
		@@ -30,6 +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 {
 | 
					func checkPRMergeBase(ctx context.Context, logger log.Logger, autofix bool) error {
 | 
				
			||||||
 | 
						if err := git.InitOnceWithSync(ctx); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	numRepos := 0
 | 
						numRepos := 0
 | 
				
			||||||
	numPRs := 0
 | 
						numPRs := 0
 | 
				
			||||||
	numPRsUpdated := 0
 | 
						numPRsUpdated := 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -189,6 +189,75 @@ func checkDaemonExport(ctx context.Context, logger log.Logger, autofix bool) err
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) error {
 | 
				
			||||||
 | 
						if err := git.InitOnceWithSync(ctx); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						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() {
 | 
					func init() {
 | 
				
			||||||
	Register(&Check{
 | 
						Register(&Check{
 | 
				
			||||||
		Title:     "Check if SCRIPT_TYPE is available",
 | 
							Title:     "Check if SCRIPT_TYPE is available",
 | 
				
			||||||
@@ -225,4 +294,11 @@ func init() {
 | 
				
			|||||||
		Run:       checkDaemonExport,
 | 
							Run:       checkDaemonExport,
 | 
				
			||||||
		Priority:  8,
 | 
							Priority:  8,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						Register(&Check{
 | 
				
			||||||
 | 
							Title:     "Check commit-graphs",
 | 
				
			||||||
 | 
							Name:      "check-commit-graphs",
 | 
				
			||||||
 | 
							IsDefault: false,
 | 
				
			||||||
 | 
							Run:       checkCommitGraph,
 | 
				
			||||||
 | 
							Priority:  9,
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user