|  | @@ -1325,6 +1325,42 @@ func DeleteRepositoryArchives() error {
 | 
	
		
			
				|  |  |  		})
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// DeleteMissingRepositories deletes all repository records that lost Git files.
 | 
	
		
			
				|  |  | +func DeleteMissingRepositories() error {
 | 
	
		
			
				|  |  | +	repos := make([]*Repository, 0, 5)
 | 
	
		
			
				|  |  | +	if err := x.Where("id > 0").Iterate(new(Repository),
 | 
	
		
			
				|  |  | +		func(idx int, bean interface{}) error {
 | 
	
		
			
				|  |  | +			repo := bean.(*Repository)
 | 
	
		
			
				|  |  | +			repoPath, err := repo.RepoPath()
 | 
	
		
			
				|  |  | +			if err != nil {
 | 
	
		
			
				|  |  | +				return fmt.Errorf("RepoPath [%d]: %v", repo.ID, err)
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			if !com.IsDir(repoPath) {
 | 
	
		
			
				|  |  | +				repos = append(repos, repo)
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			return nil
 | 
	
		
			
				|  |  | +		}); err != nil {
 | 
	
		
			
				|  |  | +		if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteMissingRepositories: %v", err)); err2 != nil {
 | 
	
		
			
				|  |  | +			log.Error(4, "CreateRepositoryNotice: %v", err2)
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		return nil
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if len(repos) == 0 {
 | 
	
		
			
				|  |  | +		return nil
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for _, repo := range repos {
 | 
	
		
			
				|  |  | +		if err := DeleteRepository(repo.OwnerID, repo.ID); err != nil {
 | 
	
		
			
				|  |  | +			if err2 := CreateRepositoryNotice(fmt.Sprintf("DeleteRepository [%d]: %v", repo.ID, err)); err2 != nil {
 | 
	
		
			
				|  |  | +				log.Error(4, "CreateRepositoryNotice: %v", err2)
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return nil
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  // RewriteRepositoryUpdateHook rewrites all repositories' update hook.
 | 
	
		
			
				|  |  |  func RewriteRepositoryUpdateHook() error {
 | 
	
		
			
				|  |  |  	return x.Where("id > 0").Iterate(new(Repository),
 |