#!/usr/bin/env bash . "$(dirname "$0")/testlib.sh" begin_test "default config" ( set -e reponame="default-config" mkdir $reponame cd $reponame git init git remote add origin "$GITSERVER/$reponame" git lfs env | tee env.log grep "Endpoint=$GITSERVER/$reponame.git/info/lfs (auth=none)" env.log git config --file=.gitconfig lfs.url http://gitconfig-file-ignored git config --file=.lfsconfig lfs.url http://lfsconfig-file git config --file=.lfsconfig lfs.http://lfsconfig-file.access lfsconfig git lfs env | tee env.log grep "Endpoint=http://lfsconfig-file (auth=lfsconfig)" env.log git config --file=.lfsconfig --unset lfs.url git config --file=.lfsconfig --unset lfs.http://lfsconfig-file.access # new endpoint url from local git config # access setting no longer applied git config lfs.url http://local-lfsconfig git lfs env | tee env.log grep "Endpoint=http://local-lfsconfig (auth=none)" env.log # add the access setting to lfsconfig git config --file=.lfsconfig lfs.http://local-lfsconfig.access lfsconfig git lfs env | tee env.log grep "Endpoint=http://local-lfsconfig (auth=lfsconfig)" env.log git config --file=.lfsconfig --unset lfs.http://local-lfsconfig.access # add the access setting to git config git config lfs.http://local-lfsconfig.access gitconfig git lfs env | tee env.log grep "Endpoint=http://local-lfsconfig (auth=gitconfig)" env.log ) end_test begin_test "config reads from repository" ( set -e reponame="repository-config" setup_remote_repo "$reponame" mkdir $reponame cd $reponame git init git remote add origin "$GITSERVER/$reponame" git lfs env | tee env.log grep "Endpoint=$GITSERVER/$reponame.git/info/lfs (auth=none)" env.log git config --file=.lfsconfig lfs.url http://lfsconfig-file git config --file=.lfsconfig lfs.http://lfsconfig-file.access lfsconfig git add .lfsconfig git commit -m 'Add file' git push origin HEAD git checkout -b side git config --file=.lfsconfig lfs.url http://lfsconfig-file-side git config --file=.lfsconfig lfs.http://lfsconfig-file-side.access lfsconfig git add .lfsconfig git commit -m 'Add file for side' git push origin HEAD mkdir "../$reponame-2" cd "../$reponame-2" git init git remote add origin "$GITSERVER/$reponame" git lfs env | tee env.log grep "Endpoint=$GITSERVER/$reponame.git/info/lfs (auth=none)" env.log git fetch origin git symbolic-ref HEAD refs/remotes/origin/side git show "HEAD:.lfsconfig" git lfs env | tee env.log grep "Endpoint=http://lfsconfig-file-side (auth=lfsconfig)" env.log git read-tree refs/remotes/origin/main git lfs env | tee env.log grep "Endpoint=http://lfsconfig-file (auth=lfsconfig)" env.log ) end_test begin_test "can read LFS file with name before .lfsconfig" ( set -e reponame="early-file-config" setup_remote_repo "$reponame" mkdir $reponame cd $reponame git init git remote add origin "$GITSERVER/$reponame" git lfs track "*.bin" git config --file=.lfsconfig lfs.url "$GITSERVER/$reponame.git/info/lfs" echo "abc" > .bin echo "def" > a.bin git add . git commit -m "Add files" git push origin HEAD rm -fr .git/lfs/objects cd .. git clone "$reponame" "$reponame-2" cd "$reponame-2" grep abc .bin grep def a.bin ) end_test begin_test "extension config" ( set -e git config --global lfs.extension.env-test.clean "env-test-clean" git config --global lfs.extension.env-test.smudge "env-test-smudge" git config --global lfs.extension.env-test.priority 0 reponame="extension-config" mkdir $reponame cd $reponame git init expected0="Extension: env-test clean = env-test-clean smudge = env-test-smudge priority = 0" [ "$expected0" = "$(git lfs ext)" ] # any git config takes precedence over .lfsconfig git config --global --unset lfs.extension.env-test.priority git config --file=.lfsconfig lfs.extension.env-test.clean "file-env-test-clean" git config --file=.lfsconfig lfs.extension.env-test.smudge "file-env-test-smudge" git config --file=.lfsconfig lfs.extension.env-test.priority 1 cat .lfsconfig expected1="Extension: env-test clean = env-test-clean smudge = env-test-smudge priority = 1" [ "$expected1" = "$(GIT_TRACE=5 git lfs ext)" ] git config lfs.extension.env-test.clean "local-env-test-clean" git config lfs.extension.env-test.smudge "local-env-test-smudge" git config lfs.extension.env-test.priority 2 expected2="Extension: env-test clean = local-env-test-clean smudge = local-env-test-smudge priority = 2" [ "$expected2" = "$(git lfs ext)" ] ) end_test begin_test "url alias config" ( set -e mkdir url-alias cd url-alias git init # When more than one insteadOf strings match a given URL, the longest match is used. git config url."http://wrong-url/".insteadOf alias git config url."http://actual-url/".insteadOf alias: git config lfs.url alias:rest git lfs env | tee env.log grep "Endpoint=http://actual-url/rest (auth=none)" env.log ) end_test begin_test "ambiguous url alias" ( set -e mkdir url-alias-ambiguous cd url-alias-ambiguous git init git config url."http://actual-url/".insteadOf alias: git config url."http://dupe-url".insteadOf alias: git config lfs.url alias:rest git config -l | grep url git lfs env 2>&1 | tee env2.log grep "warning: Multiple 'url.*.insteadof'" env2.log ) end_test begin_test "multiple config" ( set -e mkdir url-alias-multiple cd url-alias-multiple git init # When more than one insteadOf strings match a given URL, the longest match is used. git config url."http://wrong-url/".insteadOf alias git config url."http://actual-url/".insteadOf alias: git config --add url."http://actual-url/".insteadOf alias2: git config lfs.url alias:rest git lfs env | tee env.log grep "Endpoint=http://actual-url/rest (auth=none)" env.log git config lfs.url alias2:rest git lfs env | tee env.log grep "Endpoint=http://actual-url/rest (auth=none)" env.log ) end_test begin_test "url alias must be prefix" ( set -e mkdir url-alias-bad cd url-alias-bad git init git config url."http://actual-url/".insteadOf alias: git config lfs.url badalias:rest git lfs env | tee env.log grep "SSH=badalias:rest" env.log ) end_test begin_test "config: ignoring unsafe lfsconfig keys" ( set -e reponame="config-unsafe-lfsconfig-keys" git init "$reponame" cd "$reponame" # Insert an 'unsafe' key into this repository's '.lfsconfig'. git config --file=.lfsconfig core.askpass unsafe git lfs env 2>&1 | tee status.log grep "warning: These unsafe '.lfsconfig' keys were ignored:" status.log grep " core.askpass" status.log ) end_test begin_test "config respects include.* directives when GIT_CONFIG is set" ( set -e mkdir include-directives cd include-directives git init git config lfs.url "http://some-url/rest" GIT_CONFIG="$(pwd)/.git/config" git lfs env | tee env.log grep "Endpoint=http://some-url/rest (auth=none)" env.log git config --file ./.git/b.config url."http://other-url/".insteadOf "http://some-url/" git config include.path "$(pwd)/.git/b.config" GIT_CONFIG="$(pwd)/.git/config" git lfs env | tee env.log grep "Endpoint=http://other-url/rest (auth=none)" env.log ) end_test