mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00:00 
			
		
		
		
	Merge pull request #1111 from vitalvas/develop
Add function in cron to autofix counters in repository
This commit is contained in:
		@@ -1037,6 +1037,7 @@ var (
 | 
				
			|||||||
	// Prevent duplicate tasks.
 | 
						// Prevent duplicate tasks.
 | 
				
			||||||
	isMirrorUpdating = false
 | 
						isMirrorUpdating = false
 | 
				
			||||||
	isGitFscking     = false
 | 
						isGitFscking     = false
 | 
				
			||||||
 | 
						isCheckRepos     = false
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// MirrorUpdate checks and updates mirror repositories.
 | 
					// MirrorUpdate checks and updates mirror repositories.
 | 
				
			||||||
@@ -1128,6 +1129,42 @@ func GitGcRepos() error {
 | 
				
			|||||||
		})
 | 
							})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func CheckRepoStats() {
 | 
				
			||||||
 | 
						if isCheckRepos {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						isCheckRepos = true
 | 
				
			||||||
 | 
						defer func() { isCheckRepos = false }()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Check count watchers
 | 
				
			||||||
 | 
						results_watch, err := x.Query("SELECT r.id FROM `repository` r WHERE r.num_watches!=(SELECT count(*) FROM `watch` WHERE repo_id=r.id)")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Error(4, "select repository check 'watch': %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, repo_id := range results_watch {
 | 
				
			||||||
 | 
							log.Info("updating repository count 'watch'")
 | 
				
			||||||
 | 
							repoID := com.StrTo(repo_id["id"]).MustInt64()
 | 
				
			||||||
 | 
							_, err := x.Exec("UPDATE `repository` SET num_watches=(SELECT count(*) FROM `watch` WHERE repo_id=?) WHERE id=?", repoID, repoID)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Error(4, "update repository check 'watch', repo %v: %v", repo_id, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Check count stars
 | 
				
			||||||
 | 
						results_star, err := x.Query("SELECT s.id FROM `repository` s WHERE s.num_stars!=(SELECT count(*) FROM `star` WHERE repo_id=s.id)")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Error(4, "select repository check 'star': %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for _, repo_id := range results_star {
 | 
				
			||||||
 | 
							log.Info("updating repository count 'star'")
 | 
				
			||||||
 | 
							repoID := com.StrTo(repo_id["id"]).MustInt64()
 | 
				
			||||||
 | 
							_, err := x.Exec("UPDATE `repository` SET .num_stars=(SELECT count(*) FROM `star` WHERE repo_id=?) WHERE id=?", repoID, repoID)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Error(4, "update repository check 'star', repo %v: %v", repo_id, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// _________        .__  .__        ___.                        __  .__
 | 
					// _________        .__  .__        ___.                        __  .__
 | 
				
			||||||
// \_   ___ \  ____ |  | |  | _____ \_ |__   ________________ _/  |_|__| ____   ____
 | 
					// \_   ___ \  ____ |  | |  | _____ \_ |__   ________________ _/  |_|__| ____   ____
 | 
				
			||||||
// /    \  \/ /  _ \|  | |  | \__  \ | __ \ /  _ \_  __ \__  \\   __\  |/  _ \ /    \
 | 
					// /    \  \/ /  _ \|  | |  | \__  \ | __ \ /  _ \_  __ \__  \\   __\  |/  _ \ /    \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ func NewCronContext() {
 | 
				
			|||||||
	if setting.Git.Fsck.Enable {
 | 
						if setting.Git.Fsck.Enable {
 | 
				
			||||||
		c.AddFunc("Repository health check", fmt.Sprintf("@every %dh", setting.Git.Fsck.Interval), models.GitFsck)
 | 
							c.AddFunc("Repository health check", fmt.Sprintf("@every %dh", setting.Git.Fsck.Interval), models.GitFsck)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						c.AddFunc("Check repository statistics", "@every 24h", models.CheckRepoStats)
 | 
				
			||||||
	c.Start()
 | 
						c.Start()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user