@ -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 ) {
func gatherMissingRepoRecords ( ) ( [ ] * Repository , error ) {
repos := make ( [ ] * Repository , 0 , 10 )
repos := make ( [ ] * Repository , 0 , 10 )
if err := x .
if err := x .
@ -1915,9 +1969,10 @@ func RewriteRepositoryUpdateHook() error {
var taskStatusTable = sync . NewStatusTable ( )
var taskStatusTable = sync . NewStatusTable ( )
const (
const (
mirrorUpdate = "mirror_update"
mirrorUpdate = "mirror_update"
gitFsck = "git_fsck"
gitFsck = "git_fsck"
checkRepos = "check_repos"
checkRepos = "check_repos"
archiveCleanup = "archive_cleanup"
)
)
// GitFsck calls 'git fsck' to check repository health.
// GitFsck calls 'git fsck' to check repository health.