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 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
#!/usr/bin/env bash
. "$(dirname "$0")/testlib.sh"
# These tests rely on behavior found in Git versions higher than 2.20.0 to
# perform themselves, specifically:
# - worktreeConfig extension support
ensure_git_version_isnt $VERSION_LOWER "2.20.0"
begin_test "uninstall --worktree outside repository"
(
set -e
# If run inside the git-lfs source dir this will update its .git/config & cause issues
if [ "$GIT_LFS_TEST_DIR" == "" ]; then
echo "Skipping uninstall --worktree because GIT_LFS_TEST_DIR is not set"
exit 0
fi
has_test_dir || exit 0
set +e
git lfs uninstall --worktree >out.log
res=$?
set -e
[ "Not in a Git repository." = "$(cat out.log)" ]
[ "0" != "$res" ]
)
end_test
begin_test "uninstall --worktree with single working tree"
(
set -e
# old values that should be ignored by `uninstall --worktree`
git config --global filter.lfs.smudge "global smudge"
git config --global filter.lfs.clean "global clean"
git config --global filter.lfs.process "global filter"
reponame="$(basename "$0" ".sh")-single-tree"
mkdir "$reponame"
cd "$reponame"
git init
git lfs install --worktree
# local configs are correct
[ "git-lfs smudge -- %f" = "$(git config filter.lfs.smudge)" ]
[ "git-lfs smudge -- %f" = "$(git config --local filter.lfs.smudge)" ]
[ "git-lfs smudge -- %f" = "$(git config --worktree filter.lfs.smudge)" ]
[ "git-lfs clean -- %f" = "$(git config filter.lfs.clean)" ]
[ "git-lfs clean -- %f" = "$(git config --local filter.lfs.clean)" ]
[ "git-lfs clean -- %f" = "$(git config --worktree filter.lfs.clean)" ]
[ "git-lfs filter-process" = "$(git config filter.lfs.process)" ]
[ "git-lfs filter-process" = "$(git config --local filter.lfs.process)" ]
[ "git-lfs filter-process" = "$(git config --worktree filter.lfs.process)" ]
# global configs
[ "global smudge" = "$(git config --global filter.lfs.smudge)" ]
[ "global clean" = "$(git config --global filter.lfs.clean)" ]
[ "global filter" = "$(git config --global filter.lfs.process)" ]
git lfs uninstall --worktree 2>&1 | tee uninstall.log
if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo >&2 "fatal: expected 'git lfs uninstall --worktree' to succeed"
exit 1
fi
grep -v "Global Git LFS configuration has been removed." uninstall.log
# global configs
[ "global smudge" = "$(git config filter.lfs.smudge)" ]
[ "global smudge" = "$(git config --global filter.lfs.smudge)" ]
[ "global clean" = "$(git config filter.lfs.clean)" ]
[ "global clean" = "$(git config --global filter.lfs.clean)" ]
[ "global filter" = "$(git config filter.lfs.process)" ]
[ "global filter" = "$(git config --global filter.lfs.process)" ]
# local configs are empty
[ "" = "$(git config --local filter.lfs.smudge)" ]
[ "" = "$(git config --worktree filter.lfs.smudge)" ]
[ "" = "$(git config --local filter.lfs.clean)" ]
[ "" = "$(git config --worktree filter.lfs.clean)" ]
[ "" = "$(git config --local filter.lfs.process)" ]
[ "" = "$(git config --worktree filter.lfs.process)" ]
)
end_test
begin_test "uninstall --worktree with multiple working trees"
(
set -e
reponame="$(basename "$0" ".sh")-multi-tree"
mkdir "$reponame"
cd "$reponame"
git init
# old values that should be ignored by `uninstall --worktree`
git config --global filter.lfs.smudge "global smudge"
git config --global filter.lfs.clean "global clean"
git config --global filter.lfs.process "global filter"
git config --local filter.lfs.smudge "local smudge"
git config --local filter.lfs.clean "local clean"
git config --local filter.lfs.process "local filter"
touch a.txt
git add a.txt
git commit -m "initial commit"
git config core.repositoryformatversion 1
git config extensions.worktreeConfig true
treename="../$reponame-wt"
git worktree add "$treename"
cd "$treename"
git lfs install --worktree
# worktree configs are correct
[ "git-lfs smudge -- %f" = "$(git config filter.lfs.smudge)" ]
[ "git-lfs smudge -- %f" = "$(git config --worktree filter.lfs.smudge)" ]
[ "git-lfs clean -- %f" = "$(git config filter.lfs.clean)" ]
[ "git-lfs clean -- %f" = "$(git config --worktree filter.lfs.clean)" ]
[ "git-lfs filter-process" = "$(git config filter.lfs.process)" ]
[ "git-lfs filter-process" = "$(git config --worktree filter.lfs.process)" ]
# local configs are correct
[ "local smudge" = "$(git config --local filter.lfs.smudge)" ]
[ "local clean" = "$(git config --local filter.lfs.clean)" ]
[ "local filter" = "$(git config --local filter.lfs.process)" ]
# global configs
[ "global smudge" = "$(git config --global filter.lfs.smudge)" ]
[ "global clean" = "$(git config --global filter.lfs.clean)" ]
[ "global filter" = "$(git config --global filter.lfs.process)" ]
git lfs uninstall --worktree 2>&1 | tee uninstall.log
if [ ${PIPESTATUS[0]} -ne 0 ]; then
echo >&2 "fatal: expected 'git lfs uninstall --worktree' to succeed"
exit 1
fi
grep -v "Global Git LFS configuration has been removed." uninstall.log
# global configs
[ "global smudge" = "$(git config --global filter.lfs.smudge)" ]
[ "global clean" = "$(git config --global filter.lfs.clean)" ]
[ "global filter" = "$(git config --global filter.lfs.process)" ]
# local configs
[ "local smudge" = "$(git config filter.lfs.smudge)" ]
[ "local smudge" = "$(git config --local filter.lfs.smudge)" ]
[ "local clean" = "$(git config filter.lfs.clean)" ]
[ "local clean" = "$(git config --local filter.lfs.clean)" ]
[ "local filter" = "$(git config filter.lfs.process)" ]
[ "local filter" = "$(git config --local filter.lfs.process)" ]
# worktree configs are empty
[ "" = "$(git config --worktree filter.lfs.smudge)" ]
[ "" = "$(git config --worktree filter.lfs.clean)" ]
[ "" = "$(git config --worktree filter.lfs.process)" ]
)
end_test
begin_test "uninstall --worktree without worktreeConfig extension"
(
set -e
reponame="$(basename "$0" ".sh")-multi-tree-no-config"
mkdir "$reponame"
cd "$reponame"
git init
touch a.txt
git add a.txt
git commit -m "initial commit"
treename="../$reponame-wt"
git worktree add "$treename"
cd "$treename"
set +e
git lfs uninstall --worktree >out.log
res=$?
set -e
cat out.log
grep -E "error running.*git.*config" out.log
[ "$res" -eq 0 ]
)
end_test
begin_test "uninstall --worktree with conflicting scope"
(
set -e
reponame="$(basename "$0" ".sh")-scope-conflict"
mkdir "$reponame"
cd "$reponame"
git init
set +e
git lfs uninstall --local --worktree 2>err.log
res=$?
set -e
[ "Only one of the --local, --system, --worktree, and --file options can be specified." = "$(cat err.log)" ]
[ "0" != "$res" ]
set +e
git lfs uninstall --worktree --system 2>err.log
res=$?
set -e
[ "Only one of the --local, --system, --worktree, and --file options can be specified." = "$(cat err.log)" ]
[ "0" != "$res" ]
set +e
git lfs uninstall --worktree --file test-file 2>err.log
res=$?
set -e
[ "Only one of the --local, --system, --worktree, and --file options can be specified." = "$(cat err.log)" ]
[ "0" != "$res" ]
)
end_test
|