mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 05:18:25 +00:00 
			
		
		
		
	Update Mirror IsEmpty status on synchronize (#13185)
Fix #9630 Fix #13183 Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		@@ -303,8 +303,8 @@ func runSync(m *models.Mirror) ([]*mirrorSyncResult, bool) {
 | 
				
			|||||||
		return nil, false
 | 
							return nil, false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for i := range branches {
 | 
						for _, branch := range branches {
 | 
				
			||||||
		cache.Remove(m.Repo.GetCommitsCountCacheKey(branches[i].Name, true))
 | 
							cache.Remove(m.Repo.GetCommitsCountCacheKey(branch.Name, true))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.UpdatedUnix = timeutil.TimeStampNow()
 | 
						m.UpdatedUnix = timeutil.TimeStampNow()
 | 
				
			||||||
@@ -422,6 +422,10 @@ func syncMirror(repoID string) {
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		defer gitRepo.Close()
 | 
							defer gitRepo.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if ok := checkAndUpdateEmptyRepository(m, gitRepo, results); !ok {
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, result := range results {
 | 
						for _, result := range results {
 | 
				
			||||||
@@ -487,6 +491,67 @@ func syncMirror(repoID string) {
 | 
				
			|||||||
	log.Trace("SyncMirrors [repo: %-v]: Successfully updated", m.Repo)
 | 
						log.Trace("SyncMirrors [repo: %-v]: Successfully updated", m.Repo)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func checkAndUpdateEmptyRepository(m *models.Mirror, gitRepo *git.Repository, results []*mirrorSyncResult) bool {
 | 
				
			||||||
 | 
						if !m.Repo.IsEmpty {
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						hasDefault := false
 | 
				
			||||||
 | 
						hasMaster := false
 | 
				
			||||||
 | 
						defaultBranchName := m.Repo.DefaultBranch
 | 
				
			||||||
 | 
						if len(defaultBranchName) == 0 {
 | 
				
			||||||
 | 
							defaultBranchName = setting.Repository.DefaultBranch
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						firstName := ""
 | 
				
			||||||
 | 
						for _, result := range results {
 | 
				
			||||||
 | 
							if strings.HasPrefix(result.refName, "refs/pull/") {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							tp, name := git.SplitRefName(result.refName)
 | 
				
			||||||
 | 
							if len(tp) > 0 && tp != git.BranchPrefix {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if len(firstName) == 0 {
 | 
				
			||||||
 | 
								firstName = name
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							hasDefault = hasDefault || name == defaultBranchName
 | 
				
			||||||
 | 
							hasMaster = hasMaster || name == "master"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(firstName) > 0 {
 | 
				
			||||||
 | 
							if hasDefault {
 | 
				
			||||||
 | 
								m.Repo.DefaultBranch = defaultBranchName
 | 
				
			||||||
 | 
							} else if hasMaster {
 | 
				
			||||||
 | 
								m.Repo.DefaultBranch = "master"
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								m.Repo.DefaultBranch = firstName
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// Update the git repository default branch
 | 
				
			||||||
 | 
							if err := gitRepo.SetDefaultBranch(m.Repo.DefaultBranch); err != nil {
 | 
				
			||||||
 | 
								if !git.IsErrUnsupportedVersion(err) {
 | 
				
			||||||
 | 
									log.Error("Failed to update default branch of underlying git repository %-v. Error: %v", m.Repo, err)
 | 
				
			||||||
 | 
									desc := fmt.Sprintf("Failed to uupdate default branch of underlying git repository '%s': %v", m.Repo.RepoPath(), err)
 | 
				
			||||||
 | 
									if err = models.CreateRepositoryNotice(desc); err != nil {
 | 
				
			||||||
 | 
										log.Error("CreateRepositoryNotice: %v", err)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return false
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							m.Repo.IsEmpty = false
 | 
				
			||||||
 | 
							// Update the is empty and default_branch columns
 | 
				
			||||||
 | 
							if err := models.UpdateRepositoryCols(m.Repo, "default_branch", "is_empty"); err != nil {
 | 
				
			||||||
 | 
								log.Error("Failed to update default branch of repository %-v. Error: %v", m.Repo, err)
 | 
				
			||||||
 | 
								desc := fmt.Sprintf("Failed to uupdate default branch of repository '%s': %v", m.Repo.RepoPath(), err)
 | 
				
			||||||
 | 
								if err = models.CreateRepositoryNotice(desc); err != nil {
 | 
				
			||||||
 | 
									log.Error("CreateRepositoryNotice: %v", err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return false
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// InitSyncMirrors initializes a go routine to sync the mirrors
 | 
					// InitSyncMirrors initializes a go routine to sync the mirrors
 | 
				
			||||||
func InitSyncMirrors() {
 | 
					func InitSyncMirrors() {
 | 
				
			||||||
	go graceful.GetManager().RunWithShutdownContext(SyncMirrors)
 | 
						go graceful.GetManager().RunWithShutdownContext(SyncMirrors)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user