store the scanned pointers in a map to remove dupes
This commit is contained in:
parent
7cfaa634af
commit
c802222d8b
@ -28,26 +28,35 @@ func doFsck(localGitDir string) (bool, error) {
|
||||
return false, err
|
||||
}
|
||||
|
||||
// The LFS scanner methods return unexported *lfs.wrappedPointer objects.
|
||||
// All we care about is the pointer OID and file name
|
||||
pointerIndex := make(map[string]string)
|
||||
|
||||
pointers, err := lfs.ScanRefs(ref, "")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
for _, p := range pointers {
|
||||
pointerIndex[p.Oid] = p.Name
|
||||
}
|
||||
|
||||
// TODO(zeroshirts): do we want to look for LFS stuff in past commits?
|
||||
p2, err := lfs.ScanIndex()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
// zeroshirts: assuming no duplicates...
|
||||
pointers = append(pointers, p2...)
|
||||
for _, p := range p2 {
|
||||
pointerIndex[p.Oid] = p.Name
|
||||
}
|
||||
|
||||
ok := true
|
||||
|
||||
for _, p := range pointers {
|
||||
path := filepath.Join(localGitDir, "lfs", "objects", p.Pointer.Oid[0:2], p.Pointer.Oid[2:4], p.Pointer.Oid)
|
||||
for oid, name := range pointerIndex {
|
||||
path := filepath.Join(localGitDir, "lfs", "objects", oid[0:2], oid[2:4], oid)
|
||||
|
||||
Debug("Examining %v (%v)", p.Name, path)
|
||||
Debug("Examining %v (%v)", name, path)
|
||||
|
||||
f, err := os.Open(path)
|
||||
if pErr, pOk := err.(*os.PathError); pOk {
|
||||
@ -67,9 +76,9 @@ func doFsck(localGitDir string) (bool, error) {
|
||||
}
|
||||
|
||||
recalculatedOid := hex.EncodeToString(oidHash.Sum(nil))
|
||||
if recalculatedOid != p.Pointer.Oid {
|
||||
if recalculatedOid != oid {
|
||||
ok = false
|
||||
Print("Object %s (%s) is corrupt", p.Name, p.Oid)
|
||||
Print("Object %s (%s) is corrupt", name, oid)
|
||||
if !fsckDryRun {
|
||||
os.RemoveAll(path)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user