|
|
|
@ -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.
|
|
|
|
|