c384de075c
Now that we've included gitobj v1.4.1, add a test for the failure case we had in the past to prevent us from regressing this behavior. Check that shell characters within a pathname don't cause a failure when we open the pack file. Choose brackets since these are available on all platforms, including Windows.
140 lines
3.4 KiB
Bash
Executable File
140 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
. "$(dirname "$0")/testlib.sh"
|
|
|
|
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)
|
|
if [ "$aOid" != "$(calc_oid_file .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
|
|
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)
|
|
if [ "$bOid" != "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
|
|
echo "oid for b.dat does not match"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
echo "CORRUPTION" >> .git/lfs/objects/$aOid12/$aOid34/$aOid
|
|
|
|
moved=$(canonical_path "$TRASHDIR/$reponame/.git/lfs/bad")
|
|
expected="$(printf 'Object a.dat (%s) is corrupt
|
|
Moving corrupt objects to %s' "$aOid" "$moved")"
|
|
[ "$expected" = "$(git lfs fsck)" ]
|
|
|
|
[ -e ".git/lfs/bad/$aOid" ]
|
|
[ ! -e ".git/lfs/objects/$aOid12/$aOid34/$aOid" ]
|
|
[ "$bOid" = "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]
|
|
)
|
|
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)
|
|
if [ "$aOid" != "$(calc_oid_file .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
|
|
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)
|
|
if [ "$bOid" != "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
|
|
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)" ]
|
|
|
|
if [ "$aOid" = "$(calc_oid_file .git/lfs/objects/$aOid12/$aOid34/$aOid)" ]; then
|
|
echo "oid for a.dat still matches match"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$bOid" != "$(calc_oid_file .git/lfs/objects/$bOid12/$bOid34/$bOid)" ]; then
|
|
echo "oid for b.dat does not match"
|
|
exit 1
|
|
fi
|
|
)
|
|
end_test
|
|
|
|
begin_test "fsck does not fail with shell characters in paths"
|
|
(
|
|
set -e
|
|
|
|
mkdir '[[path]]'
|
|
cd '[[path]]'
|
|
reponame="fsck-shell-paths"
|
|
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"
|
|
|
|
# Verify that the pack code handles glob patterns properly.
|
|
git gc --aggressive --prune=now
|
|
|
|
[ "Git LFS fsck OK" = "$(git lfs fsck)" ]
|
|
)
|
|
end_test
|
|
|
|
begin_test "fsck: outside git repository"
|
|
(
|
|
set +e
|
|
git lfs fsck 2>&1 > fsck.log
|
|
res=$?
|
|
|
|
set -e
|
|
if [ "$res" = "0" ]; then
|
|
echo "Passes because $GIT_LFS_TEST_DIR is unset."
|
|
exit 0
|
|
fi
|
|
[ "$res" = "128" ]
|
|
grep "Not in a git repository" fsck.log
|
|
)
|
|
end_test
|