write fsck results to stdout instead of logging an error
This commit is contained in:
parent
c6ee2e2e3f
commit
0fb75eddfb
@ -12,14 +12,6 @@ import (
|
|||||||
"github.com/github/git-lfs/vendor/_nuts/github.com/spf13/cobra"
|
"github.com/github/git-lfs/vendor/_nuts/github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fsckError struct {
|
|
||||||
name, oid string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *fsckError) Error() string {
|
|
||||||
return "Object " + e.name + " (" + e.oid + ") is corrupt"
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
fsckCmd = &cobra.Command{
|
fsckCmd = &cobra.Command{
|
||||||
Use: "fsck",
|
Use: "fsck",
|
||||||
@ -28,26 +20,28 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func doFsck(localGitDir string) error {
|
func doFsck(localGitDir string) (bool, error) {
|
||||||
ref, err := git.CurrentRef()
|
ref, err := git.CurrentRef()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
pointers, err := lfs.ScanRefs(ref, "")
|
pointers, err := lfs.ScanRefs(ref, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(zeroshirts): do we want to look for LFS stuff in past commits?
|
// TODO(zeroshirts): do we want to look for LFS stuff in past commits?
|
||||||
p2, err := lfs.ScanIndex()
|
p2, err := lfs.ScanIndex()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// zeroshirts: assuming no duplicates...
|
// zeroshirts: assuming no duplicates...
|
||||||
pointers = append(pointers, p2...)
|
pointers = append(pointers, p2...)
|
||||||
|
|
||||||
|
ok := true
|
||||||
|
|
||||||
for _, p := range pointers {
|
for _, p := range pointers {
|
||||||
path := filepath.Join(localGitDir, "lfs", "objects", p.Pointer.Oid[0:2], p.Pointer.Oid[2:4], p.Pointer.Oid)
|
path := filepath.Join(localGitDir, "lfs", "objects", p.Pointer.Oid[0:2], p.Pointer.Oid[2:4], p.Pointer.Oid)
|
||||||
|
|
||||||
@ -55,23 +49,23 @@ func doFsck(localGitDir string) error {
|
|||||||
|
|
||||||
f, err := os.Open(path)
|
f, err := os.Open(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
oidHash := sha256.New()
|
oidHash := sha256.New()
|
||||||
_, err = io.Copy(oidHash, f)
|
_, err = io.Copy(oidHash, f)
|
||||||
f.Close()
|
f.Close()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
recalculatedOid := hex.EncodeToString(oidHash.Sum(nil))
|
recalculatedOid := hex.EncodeToString(oidHash.Sum(nil))
|
||||||
if recalculatedOid != p.Pointer.Oid {
|
if recalculatedOid != p.Pointer.Oid {
|
||||||
return &fsckError{p.Name, p.Pointer.Oid}
|
ok = false
|
||||||
|
Print("Object %s (%s) is corrupt", p.Name, p.Oid)
|
||||||
}
|
}
|
||||||
Debug("%v (%v) intact", p.Name, path)
|
|
||||||
}
|
}
|
||||||
return nil
|
return ok, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(zeroshirts): 'git fsck' reports status (percentage, current#/total) as
|
// TODO(zeroshirts): 'git fsck' reports status (percentage, current#/total) as
|
||||||
@ -83,11 +77,14 @@ func doFsck(localGitDir string) error {
|
|||||||
func fsckCommand(cmd *cobra.Command, args []string) {
|
func fsckCommand(cmd *cobra.Command, args []string) {
|
||||||
lfs.InstallHooks(false)
|
lfs.InstallHooks(false)
|
||||||
|
|
||||||
err := doFsck(lfs.LocalGitDir)
|
ok, err := doFsck(lfs.LocalGitDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Panic(err, "Could not fsck Git LFS files")
|
Panic(err, "Error checking Git LFS files")
|
||||||
|
}
|
||||||
|
|
||||||
|
if ok {
|
||||||
|
Print("Git LFS fsck OK")
|
||||||
}
|
}
|
||||||
Print("Git LFS fsck OK")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -13,7 +13,7 @@ func TestFsck(t *testing.T) {
|
|||||||
defer repo.Test()
|
defer repo.Test()
|
||||||
|
|
||||||
cmd := repo.Command("fsck")
|
cmd := repo.Command("fsck")
|
||||||
cmd.Output = "Could not fsck Git LFS files"
|
cmd.Output = "Object a.dat (916f0027a575074ce72a331777c3478d6513f786a591bd892da1a577bf2335f9) is corrupt"
|
||||||
|
|
||||||
testFileContent := "test data"
|
testFileContent := "test data"
|
||||||
h := sha256.New()
|
h := sha256.New()
|
||||||
|
Loading…
Reference in New Issue
Block a user