mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-21 00:37:13 -04: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:
parent
cf0f451c37
commit
42835c7f82
4 changed files with 92 additions and 3 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue