296 lines
5.7 KiB
Bash
Executable File
296 lines
5.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
. "test/testlib.sh"
|
|
|
|
begin_test "track"
|
|
(
|
|
set -e
|
|
|
|
# no need to setup a remote repo, since this test doesn't need to push or pull
|
|
|
|
mkdir track
|
|
cd track
|
|
git init
|
|
|
|
# track *.jpg once
|
|
git lfs track "*.jpg" | grep "Tracking \*.jpg"
|
|
numjpg=$(grep "\*.jpg" .gitattributes | wc -l)
|
|
if [ "$(printf "%d" "$numjpg")" != "1" ]; then
|
|
echo "wrong number of jpgs"
|
|
cat .gitattributes
|
|
exit 1
|
|
fi
|
|
|
|
# track *.jpg again
|
|
git lfs track "*.jpg" | grep "*.jpg already supported"
|
|
numjpg=$(grep "\*.jpg" .gitattributes | wc -l)
|
|
if [ "$(printf "%d" "$numjpg")" != "1" ]; then
|
|
echo "wrong number of jpgs"
|
|
cat .gitattributes
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p a/b
|
|
|
|
echo "*.mov filter=lfs -text" > .git/info/attributes
|
|
echo "*.gif filter=lfs -text" > a/.gitattributes
|
|
echo "*.png filter=lfs -text" > a/b/.gitattributes
|
|
|
|
out=$(git lfs track)
|
|
echo "$out" | grep "Listing tracked paths"
|
|
echo "$out" | grep "*.mov ($(native_path_escaped ".git/info/attributes"))"
|
|
echo "$out" | grep "*.jpg (.gitattributes)"
|
|
echo "$out" | grep "*.gif ($(native_path_escaped "a/.gitattributes"))"
|
|
echo "$out" | grep "*.png ($(native_path_escaped "a/b/.gitattributes"))"
|
|
)
|
|
end_test
|
|
|
|
begin_test "track --verbose"
|
|
(
|
|
set -e
|
|
|
|
reponame="track_verbose_logs"
|
|
mkdir "$reponame"
|
|
cd "$reponame"
|
|
git init
|
|
|
|
touch foo.dat
|
|
git add foo.dat
|
|
|
|
git lfs track --verbose "foo.dat" 2>&1 > track.log
|
|
grep "touching foo.dat" track.log
|
|
)
|
|
end_test
|
|
|
|
begin_test "track --dry-run"
|
|
(
|
|
set -e
|
|
|
|
reponame="track_dry_run"
|
|
mkdir "$reponame"
|
|
cd "$reponame"
|
|
git init
|
|
|
|
touch foo.dat
|
|
git add foo.dat
|
|
|
|
git lfs track --dry-run "foo.dat" 2>&1 > track.log
|
|
grep "Tracking foo.dat" track.log
|
|
grep "Git LFS: touching foo.dat" track.log
|
|
|
|
git status --porcelain 2>&1 > status.log
|
|
grep "A foo.dat" status.log
|
|
)
|
|
end_test
|
|
|
|
begin_test "track directory"
|
|
(
|
|
set -e
|
|
mkdir dir
|
|
cd dir
|
|
git init
|
|
|
|
git lfs track "foo bar/*"
|
|
|
|
mkdir "foo bar"
|
|
echo "a" > "foo bar/a"
|
|
echo "b" > "foo bar/b"
|
|
git add foo\ bar
|
|
git commit -am "add foo bar"
|
|
|
|
assert_pointer "master" "foo bar/a" "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7" 2
|
|
assert_pointer "master" "foo bar/b" "0263829989b6fd954f72baaf2fc64bc2e2f01d692d4de72986ea808f6e99813f" 2
|
|
)
|
|
|
|
begin_test "track without trailing linebreak"
|
|
(
|
|
set -e
|
|
|
|
mkdir no-linebreak
|
|
cd no-linebreak
|
|
git init
|
|
printf "*.mov filter=lfs -text" > .gitattributes
|
|
|
|
git lfs track "*.gif"
|
|
|
|
expected="*.mov filter=lfs -text
|
|
*.gif filter=lfs diff=lfs merge=lfs -text"
|
|
|
|
if [ "$expected" != "$(cat .gitattributes)" ]; then
|
|
exit 1
|
|
fi
|
|
)
|
|
end_test
|
|
|
|
begin_test "track outside git repo"
|
|
(
|
|
set -e
|
|
|
|
git lfs track "*.foo" || {
|
|
# this fails if it's run outside of a git repo using GIT_LFS_TEST_DIR
|
|
|
|
# git itself returns an exit status of 128
|
|
# $ git show
|
|
# fatal: Not a git repository (or any of the parent directories): .git
|
|
# $ echo "$?"
|
|
# 128
|
|
|
|
[ "$?" = "128" ]
|
|
exit 0
|
|
}
|
|
|
|
if [ -n "$GIT_LFS_TEST_DIR" ]; then
|
|
echo "GIT_LFS_TEST_DIR should be set outside of any Git repository"
|
|
exit 1
|
|
fi
|
|
|
|
git init track-outside
|
|
cd track-outside
|
|
|
|
git lfs track "*.file"
|
|
|
|
git lfs track "../*.foo" || {
|
|
|
|
# git itself returns an exit status of 128
|
|
# $ git add ../test.foo
|
|
# fatal: ../test.foo: '../test.foo' is outside repository
|
|
# $ echo "$?"
|
|
# 128
|
|
|
|
[ "$?" = "128" ]
|
|
exit 0
|
|
}
|
|
exit 1
|
|
)
|
|
end_test
|
|
|
|
begin_test "track representation"
|
|
(
|
|
set -e
|
|
|
|
git init track-representation
|
|
cd track-representation
|
|
|
|
git lfs track "*.jpg"
|
|
|
|
mkdir a
|
|
git lfs track "a/test.file"
|
|
cd a
|
|
out3=$(git lfs track "test.file")
|
|
|
|
if [ "$out3" != "test.file already supported" ]; then
|
|
echo "Track didn't recognize duplicate path"
|
|
cat .gitattributes
|
|
exit 1
|
|
fi
|
|
|
|
git lfs track "file.bin"
|
|
cd ..
|
|
out4=$(git lfs track "a/file.bin")
|
|
if [ "$out4" != "a/file.bin already supported" ]; then
|
|
echo "Track didn't recognize duplicate path"
|
|
cat .gitattributes
|
|
exit 1
|
|
fi
|
|
)
|
|
end_test
|
|
|
|
begin_test "track absolute"
|
|
(
|
|
# MinGW bash intercepts '/images' and passes 'C:/Program Files/Git/images' as arg!
|
|
if [[ $(uname) == *"MINGW"* ]]; then
|
|
echo "Skipping track absolute on Windows"
|
|
exit 0
|
|
fi
|
|
|
|
set -e
|
|
|
|
git init track-absolute
|
|
cd track-absolute
|
|
|
|
git lfs track "/images"
|
|
cat .gitattributes
|
|
grep "^/images" .gitattributes
|
|
)
|
|
end_test
|
|
|
|
begin_test "track in gitDir"
|
|
(
|
|
set -e
|
|
|
|
git init track-in-dot-git
|
|
cd track-in-dot-git
|
|
|
|
echo "some content" > test.file
|
|
|
|
cd .git
|
|
git lfs track "../test.file" || {
|
|
# this fails if it's run inside a .git directory
|
|
|
|
# git itself returns an exit status of 128
|
|
# $ git add ../test.file
|
|
# fatal: This operation must be run in a work tree
|
|
# $ echo "$?"
|
|
# 128
|
|
|
|
[ "$?" = "128" ]
|
|
exit 0
|
|
}
|
|
|
|
# fail if track passed
|
|
exit 1
|
|
)
|
|
end_test
|
|
|
|
begin_test "track in symlinked dir"
|
|
(
|
|
set -e
|
|
|
|
git init track-symlinkdst
|
|
ln -s track-symlinkdst track-symlinksrc
|
|
cd track-symlinksrc
|
|
|
|
git lfs track "*.png"
|
|
grep "^*.png" .gitattributes || {
|
|
echo ".gitattributes doesn't contain the expected relative path *.png:"
|
|
cat .gitattributes
|
|
exit 1
|
|
}
|
|
)
|
|
end_test
|
|
|
|
begin_test "track blocklisted files by name"
|
|
(
|
|
set -e
|
|
|
|
repo="track_blocklisted_by_name"
|
|
mkdir "$repo"
|
|
cd "$repo"
|
|
git init
|
|
|
|
touch .gitattributes
|
|
git add .gitattributes
|
|
|
|
git lfs track .gitattributes 2>&1 > track.log
|
|
grep "Pattern .gitattributes matches forbidden file .gitattributes" track.log
|
|
)
|
|
end_test
|
|
|
|
begin_test "track blocklisted files with glob"
|
|
(
|
|
set -e
|
|
|
|
repo="track_blocklisted_glob"
|
|
mkdir "$repo"
|
|
cd "$repo"
|
|
git init
|
|
|
|
touch .gitattributes
|
|
git add .gitattributes
|
|
|
|
git lfs track ".git*" 2>&1 > track.log
|
|
grep "Pattern .git\* matches forbidden file" track.log
|
|
)
|
|
end_test
|
|
|