#!/bin/sh test_description='various Windows-only path tests' GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME . ./test-lib.sh if test_have_prereq CYGWIN then alias winpwd='cygpath -aw .' elif test_have_prereq MINGW then alias winpwd=pwd else skip_all='skipping Windows-only path tests' test_done fi UNCPATH="$(winpwd)" case "$UNCPATH" in [A-Z]:*) # Use administrative share e.g. \\localhost\C$\git-sdk-64\usr\src\git # (we use forward slashes here because MSYS2 and Git accept them, and # they are easier on the eyes) UNCPATH="//localhost/${UNCPATH%%:*}\$/${UNCPATH#?:}" test -d "$UNCPATH" || { skip_all='could not access administrative share; skipping' test_done } ;; *) skip_all='skipping UNC path tests, cannot determine current path as UNC' test_done ;; esac test_expect_success setup ' test_commit initial ' test_expect_success clone ' git clone "file://$UNCPATH" clone ' test_expect_success 'clone without file://' ' git clone "$UNCPATH" clone-without-file ' test_expect_success 'clone with backslashed path' ' BACKSLASHED="$(echo "$UNCPATH" | tr / \\\\)" && git clone "$BACKSLASHED" backslashed ' test_expect_success fetch ' git init to-fetch && ( cd to-fetch && git fetch "$UNCPATH" main ) ' test_expect_success push ' ( cd clone && git checkout -b to-push && test_commit to-push && git push origin HEAD ) && rev="$(git -C clone rev-parse --verify refs/heads/to-push)" && test "$rev" = "$(git rev-parse --verify refs/heads/to-push)" ' test_expect_success MINGW 'remote nick cannot contain backslashes' ' BACKSLASHED="$(winpwd | tr / \\\\)" && git ls-remote "$BACKSLASHED" 2>err && test_i18ngrep ! "unable to access" err ' test_expect_success 'unc alternates' ' tree="$(git rev-parse HEAD:)" && mkdir test-unc-alternate && ( cd test-unc-alternate && git init && test_must_fail git show $tree && echo "$UNCPATH/.git/objects" >.git/objects/info/alternates && git show $tree ) ' test_done