1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
#!/usr/bin/env bash
. "$(dirname "$0")/testlib.sh"
begin_test "alternates (single)"
(
set -e
reponame="alternates-single-alternate"
setup_remote_repo_with_file "$reponame" "a.txt"
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate"
popd > /dev/null
rm -rf .git/lfs/objects
alternate="$TRASHDIR/${reponame}_alternate/.git/objects"
echo "$(native_path "$alternate")" > .git/objects/info/alternates
GIT_TRACE=1 git lfs fetch origin main 2>&1 | tee fetch.log
[ "0" -eq "$(grep -c "sending batch of size 1" fetch.log)" ]
)
end_test
begin_test "alternates (multiple)"
(
set -e
reponame="alternates-multiple-alternates"
setup_remote_repo_with_file "$reponame" "a.txt"
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate_stale"
rm -rf .git/lfs/objects
popd > /dev/null
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate"
popd > /dev/null
rm -rf .git/lfs/objects
alternate_stale="$TRASHDIR/${reponame}_alternate_stale/.git/objects"
alternate="$TRASHDIR/${reponame}_alternate/.git/objects"
echo "$(native_path "$alternate")" > .git/objects/info/alternates
echo "$(native_path "$alternate_stale")" >> .git/objects/info/alternates
GIT_TRACE=1 git lfs fetch origin main 2>&1 | tee fetch.log
[ "0" -eq "$(grep -c "sending batch of size 1" fetch.log)" ]
)
end_test
begin_test "alternates (commented)"
(
set -e
reponame="alternates-commented-alternate"
setup_remote_repo_with_file "$reponame" "a.txt"
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate"
popd > /dev/null
rm -rf .git/lfs/objects
alternate="$TRASHDIR/${reponame}_alternate/.git/objects"
echo "# $alternate" > .git/objects/info/alternates
GIT_TRACE=1 git lfs fetch origin main 2>&1 | tee fetch.log
[ "1" -eq "$(grep -c "sending batch of size 1" fetch.log)" ]
)
end_test
begin_test "alternates (quoted)"
(
set -e
reponame="alternates-quoted-alternate"
setup_remote_repo_with_file "$reponame" "a.txt"
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate"
popd > /dev/null
rm -rf .git/lfs/objects
# Normally, a plain native_path call would be sufficient here, but when we
# use a quoted alternate, Git interprets backslash escapes, and Windows path
# names look like backslash escapes. As a consequence, we switch to forward
# slashes to avoid misinterpretation.
alternate=$(native_path "$TRASHDIR/${reponame}_alternate/.git/objects" | sed -e 's,\\,/,g')
echo "\"$alternate\"" > .git/objects/info/alternates
GIT_TRACE=1 git lfs fetch origin main 2>&1 | tee fetch.log
[ "0" -eq "$(grep -c "sending batch of size 1" fetch.log)" ]
)
end_test
begin_test "alternates (OS environment, single)"
(
set -e
reponame="alternates-environment-single-alternate"
setup_remote_repo_with_file "$reponame" "a.txt"
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate"
popd > /dev/null
rm -rf .git/lfs/objects
rm -rf .git/objects/*
git init
alternate="$(native_path "$TRASHDIR/${reponame}_alternate/.git/objects")"
GIT_ALTERNATE_OBJECT_DIRECTORIES="$alternate" \
GIT_TRACE=1 \
git lfs fetch origin main 2>&1 | tee fetch.log
[ "0" -eq "$(grep -c "sending batch of size 1" fetch.log)" ]
GIT_ALTERNATE_OBJECT_DIRECTORIES="$alternate" \
git lfs push "$(git config remote.origin.url)" main
)
end_test
begin_test "alternates (OS environment, multiple)"
(
set -e
reponame="alternates-environment-multiple-alternates"
setup_remote_repo_with_file "$reponame" "a.txt"
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate_stale"
rm -rf .git/lfs/objects
popd > /dev/null
pushd "$TRASHDIR" > /dev/null
clone_repo "$reponame" "${reponame}_alternate"
popd > /dev/null
rm -rf .git/lfs/objects
rm -rf .git/objects/*
git init
alternate_stale="$(native_path "$TRASHDIR/${reponame}_alternate_stale/.git/objects")"
alternate="$(native_path "$TRASHDIR/${reponame}_alternate/.git/objects")"
sep="$(native_path_list_separator)"
GIT_ALTERNATE_OBJECT_DIRECTORIES="$alternate_stale$sep$alternate" \
GIT_TRACE=1 \
git lfs fetch origin main 2>&1 | tee fetch.log
[ "0" -eq "$(grep -c "sending batch of size 1" fetch.log)" ]
GIT_ALTERNATE_OBJECT_DIRECTORIES="$alternate_stale$sep$alternate" \
git lfs push "$(git config remote.origin.url)" main
)
end_test
|