mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Implement archive cleanup (#885)
* Implement archive cleanup Fixes #769 Signed-off-by: Andrew <write@imaginarycode.com> * Make sure to close the directory file * Resolve issues noted by @strk * edit cheatsheet app.ini [ci skip] * oops [ci skip]
This commit is contained in:
		@@ -1837,6 +1837,60 @@ func DeleteRepositoryArchives() error {
 | 
			
		||||
			})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// DeleteOldRepositoryArchives deletes old repository archives.
 | 
			
		||||
func DeleteOldRepositoryArchives() {
 | 
			
		||||
	if taskStatusTable.IsRunning(archiveCleanup) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	taskStatusTable.Start(archiveCleanup)
 | 
			
		||||
	defer taskStatusTable.Stop(archiveCleanup)
 | 
			
		||||
 | 
			
		||||
	log.Trace("Doing: ArchiveCleanup")
 | 
			
		||||
 | 
			
		||||
	if err := x.Where("id > 0").Iterate(new(Repository), deleteOldRepositoryArchives); err != nil {
 | 
			
		||||
		log.Error(4, "ArchiveClean: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func deleteOldRepositoryArchives(idx int, bean interface{}) error {
 | 
			
		||||
	repo := bean.(*Repository)
 | 
			
		||||
	basePath := filepath.Join(repo.RepoPath(), "archives")
 | 
			
		||||
 | 
			
		||||
	for _, ty := range []string{"zip", "targz"} {
 | 
			
		||||
		path := filepath.Join(basePath, ty)
 | 
			
		||||
		file, err := os.Open(path)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if !os.IsNotExist(err) {
 | 
			
		||||
				log.Warn("Unable to open directory %s: %v", path, err)
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// If the directory doesn't exist, that's okay.
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		files, err := file.Readdir(0)
 | 
			
		||||
		file.Close()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Warn("Unable to read directory %s: %v", path, err)
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		minimumOldestTime := time.Now().Add(-setting.Cron.ArchiveCleanup.OlderThan)
 | 
			
		||||
		for _, info := range files {
 | 
			
		||||
			if info.ModTime().Before(minimumOldestTime) && !info.IsDir() {
 | 
			
		||||
				toDelete := filepath.Join(path, info.Name())
 | 
			
		||||
				// This is a best-effort purge, so we do not check error codes to confirm removal.
 | 
			
		||||
				if err = os.Remove(toDelete); err != nil {
 | 
			
		||||
					log.Trace("Unable to delete %s, but proceeding: %v", toDelete, err)
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func gatherMissingRepoRecords() ([]*Repository, error) {
 | 
			
		||||
	repos := make([]*Repository, 0, 10)
 | 
			
		||||
	if err := x.
 | 
			
		||||
@@ -1915,9 +1969,10 @@ func RewriteRepositoryUpdateHook() error {
 | 
			
		||||
var taskStatusTable = sync.NewStatusTable()
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	mirrorUpdate = "mirror_update"
 | 
			
		||||
	gitFsck      = "git_fsck"
 | 
			
		||||
	checkRepos   = "check_repos"
 | 
			
		||||
	mirrorUpdate   = "mirror_update"
 | 
			
		||||
	gitFsck        = "git_fsck"
 | 
			
		||||
	checkRepos     = "check_repos"
 | 
			
		||||
	archiveCleanup = "archive_cleanup"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GitFsck calls 'git fsck' to check repository health.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user