Skip to content

Instantly share code, notes, and snippets.

@technoweenie
Created June 17, 2015 22:25
Show Gist options
  • Save technoweenie/85e1611dff2289bd7e18 to your computer and use it in GitHub Desktop.
Save technoweenie/85e1611dff2289bd7e18 to your computer and use it in GitHub Desktop.
diff --git a/test/cmd/lfstest-shasum.go b/test/cmd/lfstest-shasum.go
new file mode 100644
index 0000000..6ef16ee
--- /dev/null
+++ b/test/cmd/lfstest-shasum.go
@@ -0,0 +1,44 @@
+package main
+
+import (
+ "crypto/sha256"
+ "encoding/hex"
+ "flag"
+ "fmt"
+ "io"
+ "os"
+)
+
+var (
+ filenameFlag = flag.String("file", "", "File name to hash")
+ oidFlag = flag.String("oid", "", "Expected OID of the file.")
+)
+
+func main() {
+ flag.Parse()
+ filename := *filenameFlag
+ expectedOid := *oidFlag
+
+ file, err := os.Open(filename)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Error opening file '%s': %s\n", filename, err)
+ os.Exit(1)
+ }
+
+ defer file.Close()
+
+ hash := sha256.New()
+ _, err = io.Copy(hash, file)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "Error reading file '%s': %s\n", filename, err)
+ os.Exit(1)
+ }
+
+ oid := hex.EncodeToString(hash.Sum(nil))
+ fmt.Println(oid, filename)
+
+ if len(expectedOid) > 0 && expectedOid != oid {
+ fmt.Fprintf(os.Stderr, "OID does not match '%s'\n", expectedOid)
+ os.Exit(1)
+ }
+}
diff --git a/test/test-fsck.sh b/test/test-fsck.sh
index 00c63d8..7863118 100755
--- a/test/test-fsck.sh
+++ b/test/test-fsck.sh
@@ -22,19 +22,14 @@ begin_test "fsck default"
aOid=$(git log --patch a.dat | grep "^+oid" | cut -d ":" -f 2)
aOid12=$(echo $aOid | cut -b 1-2)
aOid34=$(echo $aOid | cut -b 3-4)
- if [ "$aOid .git/lfs/objects/$aOid12/$aOid34/$aOid" != "$(sha256sum .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
- echo "oid for a.dat does not match"
- exit 1
- fi
+
+ lfstest-shasum -file ".git/lfs/objects/$aOid12/$aOid34/$aOid" -oid $aOid
bOid=$(git log --patch b.dat | grep "^+oid" | cut -d ":" -f 2)
bOid12=$(echo $bOid | cut -b 1-2)
bOid34=$(echo $bOid | cut -b 3-4)
- if [ "$bOid ".git/lfs/objects/$bOid12/$bOid34/$bOid != "$(sha256sum .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
- echo "oid for b.dat does not match"
- exit 1
- fi
+ lfstest-shasum -file ".git/lfs/objects/$bOid12/$bOid34/$bOid" -oid $bOid
echo "CORRUPTION" >> .git/lfs/objects/$aOid12/$aOid34/$aOid
@@ -47,10 +42,7 @@ begin_test "fsck default"
exit 1
fi
- if [ "$bOid ".git/lfs/objects/$bOid12/$bOid34/$bOid != "$(sha256sum .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
- echo "oid for b.dat does not match"
- exit 1
- fi
+ lfstest-shasum -file ".git/lfs/objects/$bOid12/$bOid34/$bOid" $bOid
)
end_test
@@ -74,31 +66,26 @@ begin_test "fsck dry run"
aOid=$(git log --patch a.dat | grep "^+oid" | cut -d ":" -f 2)
aOid12=$(echo $aOid | cut -b 1-2)
aOid34=$(echo $aOid | cut -b 3-4)
- if [ "$aOid .git/lfs/objects/$aOid12/$aOid34/$aOid" != "$(sha256sum .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
- echo "oid for a.dat does not match"
- exit 1
- fi
+
+ lfstest-shasum -file ".git/lfs/objects/$aOid12/$aOid34/$aOid" -oid $aOid
bOid=$(git log --patch b.dat | grep "^+oid" | cut -d ":" -f 2)
bOid12=$(echo $bOid | cut -b 1-2)
bOid34=$(echo $bOid | cut -b 3-4)
- if [ "$bOid ".git/lfs/objects/$bOid12/$bOid34/$bOid != "$(sha256sum .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
- echo "oid for b.dat does not match"
- exit 1
- fi
+ lfstest-shasum -file ".git/lfs/objects/$bOid12/$bOid34/$bOid" -oid $bOid
echo "CORRUPTION" >> .git/lfs/objects/$aOid12/$aOid34/$aOid
[ "Object a.dat ($aOid) is corrupt" = "$(git lfs fsck --dry-run)" ]
- if [ "$aOid .git/lfs/objects/$aOid12/$aOid34/$aOid" = "$(sha256sum .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
+ set +e
+ lfstest-shasum -file ".git/lfs/objects/$aOid12/$aOid34/$aOid" -oid $aOid
+ if [ $? -eq 0 ]; then
echo "oid for a.dat still matches match"
exit 1
fi
+ set -e
- if [ "$bOid ".git/lfs/objects/$bOid12/$bOid34/$bOid != "$(sha256sum .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
- echo "oid for b.dat does not match"
- exit 1
- fi
+ lfstest-shasum -file ".git/lfs/objects/$bOid12/$bOid34/$bOid" -oid $bOid
)
end_test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment