2015-07-30 02:37:31 +00:00
|
|
|
#!/usr/bin/env bash
|
2015-06-07 15:18:58 +00:00
|
|
|
|
2018-07-10 18:48:02 +00:00
|
|
|
. "$(dirname "$0")/testlib.sh"
|
2015-06-07 15:18:58 +00:00
|
|
|
|
|
|
|
begin_test "fsck default"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
reponame="fsck-default"
|
|
|
|
git init $reponame
|
|
|
|
cd $reponame
|
|
|
|
|
|
|
|
# Create a commit with some files tracked by git-lfs
|
|
|
|
git lfs track *.dat
|
|
|
|
echo "test data" > a.dat
|
|
|
|
echo "test data 2" > b.dat
|
|
|
|
git add .gitattributes *.dat
|
|
|
|
git commit -m "first commit"
|
|
|
|
|
|
|
|
[ "Git LFS fsck OK" = "$(git lfs fsck)" ]
|
|
|
|
|
|
|
|
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)
|
2016-10-08 14:59:17 +00:00
|
|
|
if [ "$aOid" != "$(calc_oid_file .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
|
2015-06-07 15:18:58 +00:00
|
|
|
echo "oid for a.dat does not match"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
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)
|
2016-10-08 14:59:17 +00:00
|
|
|
if [ "$bOid" != "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
|
2015-06-07 15:18:58 +00:00
|
|
|
echo "oid for b.dat does not match"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "CORRUPTION" >> .git/lfs/objects/$aOid12/$aOid34/$aOid
|
|
|
|
|
2016-11-29 20:56:47 +00:00
|
|
|
moved=$(native_path "$TRASHDIR/$reponame/.git/lfs/bad")
|
2015-10-21 16:07:22 +00:00
|
|
|
expected="$(printf 'Object a.dat (%s) is corrupt
|
2016-11-29 20:56:47 +00:00
|
|
|
Moving corrupt objects to %s' "$aOid" "$moved")"
|
2015-06-07 15:18:58 +00:00
|
|
|
[ "$expected" = "$(git lfs fsck)" ]
|
|
|
|
|
2016-11-29 20:56:47 +00:00
|
|
|
[ -e ".git/lfs/bad/$aOid" ]
|
|
|
|
[ ! -e ".git/lfs/objects/$aOid12/$aOid34/$aOid" ]
|
|
|
|
[ "$bOid" = "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]
|
2015-06-07 15:18:58 +00:00
|
|
|
)
|
|
|
|
end_test
|
|
|
|
|
|
|
|
begin_test "fsck dry run"
|
|
|
|
(
|
|
|
|
set -e
|
|
|
|
|
|
|
|
reponame="fsck-dry-run"
|
|
|
|
git init $reponame
|
|
|
|
cd $reponame
|
|
|
|
|
|
|
|
# Create a commit with some files tracked by git-lfs
|
|
|
|
git lfs track *.dat
|
|
|
|
echo "test data" > a.dat
|
|
|
|
echo "test data 2" > b.dat
|
|
|
|
git add .gitattributes *.dat
|
|
|
|
git commit -m "first commit"
|
|
|
|
|
|
|
|
[ "Git LFS fsck OK" = "$(git lfs 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)
|
2016-10-08 14:59:17 +00:00
|
|
|
if [ "$aOid" != "$(calc_oid_file .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
|
2015-06-07 15:18:58 +00:00
|
|
|
echo "oid for a.dat does not match"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
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)
|
2016-10-08 14:59:17 +00:00
|
|
|
if [ "$bOid" != "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
|
2015-06-07 15:18:58 +00:00
|
|
|
echo "oid for b.dat does not match"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "CORRUPTION" >> .git/lfs/objects/$aOid12/$aOid34/$aOid
|
|
|
|
|
|
|
|
[ "Object a.dat ($aOid) is corrupt" = "$(git lfs fsck --dry-run)" ]
|
|
|
|
|
2016-10-08 14:59:17 +00:00
|
|
|
if [ "$aOid" = "$(calc_oid_file .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
|
2015-06-07 15:18:58 +00:00
|
|
|
echo "oid for a.dat still matches match"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2016-10-08 14:59:17 +00:00
|
|
|
if [ "$bOid" != "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
|
2015-06-07 15:18:58 +00:00
|
|
|
echo "oid for b.dat does not match"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
)
|
|
|
|
end_test
|
2015-09-08 15:29:53 +00:00
|
|
|
|
|
|
|
begin_test "fsck: outside git repository"
|
|
|
|
(
|
2015-09-08 16:20:52 +00:00
|
|
|
set +e
|
|
|
|
git lfs fsck 2>&1 > fsck.log
|
|
|
|
res=$?
|
|
|
|
|
2015-09-08 15:29:53 +00:00
|
|
|
set -e
|
2015-09-08 20:12:51 +00:00
|
|
|
if [ "$res" = "0" ]; then
|
|
|
|
echo "Passes because $GIT_LFS_TEST_DIR is unset."
|
|
|
|
exit 0
|
|
|
|
fi
|
2015-09-08 16:20:52 +00:00
|
|
|
[ "$res" = "128" ]
|
|
|
|
grep "Not in a git repository" fsck.log
|
2015-09-08 15:29:53 +00:00
|
|
|
)
|
|
|
|
end_test
|