replace Readdirnames() with FastWalkGitRepo()
This commit is contained in:
parent
10dc9749f4
commit
cdc7946740
@ -6,6 +6,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/git-lfs/git-lfs/tools"
|
||||||
"github.com/rubyist/tracerx"
|
"github.com/rubyist/tracerx"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -15,50 +16,36 @@ func (f *Filesystem) cleanupTmp() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
d, err := os.Open(tmpdir)
|
var walkErr error
|
||||||
if err != nil {
|
tools.FastWalkGitRepo(tmpdir, func(parentDir string, info os.FileInfo, err error) {
|
||||||
return err
|
if err != nil {
|
||||||
}
|
walkErr = err
|
||||||
|
}
|
||||||
filenames, _ := d.Readdirnames(-1)
|
if walkErr != nil || info.IsDir() {
|
||||||
for _, filename := range filenames {
|
return
|
||||||
path := filepath.Join(tmpdir, filename)
|
}
|
||||||
if f.shouldDeleteTempObject(path) {
|
path := filepath.Join(parentDir, info.Name())
|
||||||
os.RemoveAll(path)
|
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
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
fi, err := os.Stat(f.ObjectPath(oid))
|
||||||
}
|
if err == nil && !fi.IsDir() {
|
||||||
|
tracerx.Printf("Removing existing tmp object file: %s", path)
|
||||||
func (f *Filesystem) shouldDeleteTempObject(path string) bool {
|
os.RemoveAll(path)
|
||||||
info, err := os.Stat(path)
|
return
|
||||||
if err != nil {
|
}
|
||||||
return false
|
|
||||||
}
|
if time.Since(info.ModTime()) > time.Hour {
|
||||||
|
tracerx.Printf("Removing old tmp object file: %s", path)
|
||||||
if info.IsDir() {
|
os.RemoveAll(path)
|
||||||
return false
|
return
|
||||||
}
|
}
|
||||||
|
})
|
||||||
base := filepath.Base(path)
|
|
||||||
parts := strings.SplitN(base, "-", 2)
|
return walkErr
|
||||||
oid := parts[0]
|
|
||||||
if len(parts) < 2 || len(oid) != 64 {
|
|
||||||
tracerx.Printf("Removing invalid tmp object file: %s", path)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
fi, err := os.Stat(f.ObjectPath(oid))
|
|
||||||
if err == nil && !fi.IsDir() {
|
|
||||||
tracerx.Printf("Removing existing tmp object file: %s", path)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if time.Since(info.ModTime()) > time.Hour {
|
|
||||||
tracerx.Printf("Removing old tmp object file: %s", path)
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
@ -82,6 +82,8 @@ begin_test "clears local temp objects"
|
|||||||
touch .git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand123
|
touch .git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand123
|
||||||
touch .git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand456
|
touch .git/lfs/tmp/objects/badabcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxy-rand456
|
||||||
|
|
||||||
|
tree .git/lfs/tmp/objects
|
||||||
|
|
||||||
GIT_TRACE=5 git lfs env
|
GIT_TRACE=5 git lfs env
|
||||||
|
|
||||||
# object file exists
|
# object file exists
|
||||||
|
Loading…
Reference in New Issue
Block a user