From bfe2bbb47f1213e9d4ef6b8d1679b58b37485625 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Thu, 13 Feb 2020 21:51:44 +0000 Subject: t5580: test cloning without file://, test fetching via UNC paths On Windows, it is quite common to work with network drives. The format of the paths to network drives (or "network shares", or UNC paths) is: \\\\... We already have a couple regression tests revolving around those types of paths, but we missed cloning and fetching from UNC paths without leading `file://` (and with backslashes instead of forward slashes). This lil' patch closes that gap. It gets a bit silly to add the commands to the name of the test script, so let's just rename it while we're testing more UNC stuff. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano diff --git a/t/t5580-clone-push-unc.sh b/t/t5580-clone-push-unc.sh deleted file mode 100755 index b3c8a92..0000000 --- a/t/t5580-clone-push-unc.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh - -test_description='various Windows-only path tests' -. ./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 with backslashed path' ' - BACKSLASHED="$(echo "$UNCPATH" | tr / \\\\)" && - git clone "$BACKSLASHED" backslashed -' - -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" >out 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 diff --git a/t/t5580-unc-paths.sh b/t/t5580-unc-paths.sh new file mode 100755 index 0000000..2057f9e --- /dev/null +++ b/t/t5580-unc-paths.sh @@ -0,0 +1,89 @@ +#!/bin/sh + +test_description='various Windows-only path tests' +. ./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" master + ) +' + +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" >out 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 -- cgit v0.10.2-6-g49f6