52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package fs
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/git-lfs/git-lfs/tools"
|
|
"github.com/rubyist/tracerx"
|
|
)
|
|
|
|
func (f *Filesystem) cleanupTmp() error {
|
|
tmpdir := f.TempDir()
|
|
if len(tmpdir) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var walkErr error
|
|
tools.FastWalkGitRepo(tmpdir, func(parentDir string, info os.FileInfo, err error) {
|
|
if err != nil {
|
|
walkErr = err
|
|
}
|
|
if walkErr != nil || info.IsDir() {
|
|
return
|
|
}
|
|
path := filepath.Join(parentDir, info.Name())
|
|
parts := strings.SplitN(info.Name(), "-", 2)
|
|
oid := parts[0]
|
|
if len(parts) < 2 || len(oid) != 64 {
|
|
tracerx.Printf("Removing invalid tmp object file: %s", path)
|
|
os.RemoveAll(path)
|
|
return
|
|
}
|
|
|
|
fi, err := os.Stat(f.ObjectPathname(oid))
|
|
if err == nil && !fi.IsDir() {
|
|
tracerx.Printf("Removing existing tmp object file: %s", path)
|
|
os.RemoveAll(path)
|
|
return
|
|
}
|
|
|
|
if time.Since(info.ModTime()) > time.Hour {
|
|
tracerx.Printf("Removing old tmp object file: %s", path)
|
|
os.RemoveAll(path)
|
|
return
|
|
}
|
|
})
|
|
|
|
return walkErr
|
|
}
|