threads / patch / 44760

patchmingw: add a regression test for pushing to UNC paths

Subject: [PATCH] mingw: add a regression test for pushing to UNC paths

## tl;dr

4 messages between Dec 23, 2016 and Jan 2, 2017. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Johannes Schindelin· Dec 23, 2016, 17:11 UTC · lore

On Windows, there are "UNC paths" to access network (AKA shared) folders, of the form \\server\sharename\directory. This provides a convenient way for Windows developers to share their Git repositories without having to have a dedicated server.

Git for Windows v2.11.0 introduced a regression where pushing to said UNC paths no longer works, although fetching and cloning still does, as reported here: https://github.com/git-for-windows/git/issues/979

This regression was fixed in 7814fbe3f1 (normalize_path_copy(): fix pushing to //server/share/dir on Windows, 2016-12-14).

Let's make sure that it does not regress again, by introducing a test that uses so-called "administrative shares": disk volumes are automatically shared under certain circumstances, e.g. the C: drive is shared as \\localhost\c$. The test needs to be skipped if the current directory is inaccessible via said administrative share, of course.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
Published-As: https://github.com/dscho/git/releases/tag/unc-paths-test-v1
Fetch-It-Via: git fetch https://github.com/dscho/git unc-paths-test-v1
 t/t5580-clone-push-unc.sh | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100755 t/t5580-clone-push-unc.sh
Show changes to t/t5580-clone-push-unc.sh +46 −0
diff --git a/t/t5580-clone-push-unc.sh b/t/t5580-clone-push-unc.sh
new file mode 100755
index 0000000000..e06d230724
--- /dev/null
+++ b/t/t5580-clone-push-unc.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+test_description='various UNC path tests (Windows-only)'
+. ./test-lib.sh
+
+if ! test_have_prereq MINGW; then
+	skip_all='skipping UNC path tests, requires Windows'
+	test_done
+fi
+
+UNCPATH="$(pwd)"
+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 push '
+	(
+		cd clone &&
+		git checkout -b to-push &&
+		test_commit to-push &&
+		git push origin HEAD
+	)
+'
+
+test_done

base-commit: 1ede815b8d1562f46b7aa5d55af084a3cad2ecf8
-- 
2.11.0.rc3.windows.1
Johannes Sixt· Dec 23, 2016, 18:04 UTC · re: Johannes Schindelin · lore

Re: [PATCH] mingw: add a regression test for pushing to UNC paths

Am 23.12.2016 um 18:11 schrieb Johannes Schindelin:
> Let's make sure that it does not regress again, by introducing a test
> that uses so-called "administrative shares": disk volumes are
> automatically shared under certain circumstances, e.g.  the C: drive is
> shared as \\localhost\c$.
Clever!
Show 18 quoted lines
> +test_expect_success setup '
> +	test_commit initial
> +'
> +
> +test_expect_success clone '
> +	git clone "file://$UNCPATH" clone
> +'
> +
> +test_expect_success push '
> +	(
> +		cd clone &&
> +		git checkout -b to-push &&
> +		test_commit to-push &&
> +		git push origin HEAD
> +	)
> +'
> +
> +test_done
Wouldn't at a minimum
test_expect_success 'check push result' '
	git rev-parse to-push
'
be a good idea to make sure that the pushed commit actually arrived?
-- Hannes
Johannes Schindelin· Jan 2, 2017, 10:39 UTC · re: Johannes Sixt · lore

Re: [PATCH] mingw: add a regression test for pushing to UNC paths

Hi Hannes,
On Fri, 23 Dec 2016, Johannes Sixt wrote:
Show 28 quoted lines
> Am 23.12.2016 um 18:11 schrieb Johannes Schindelin:
> 
> > +test_expect_success setup '
> > +	test_commit initial
> > +'
> > +
> > +test_expect_success clone '
> > +	git clone "file://$UNCPATH" clone
> > +'
> > +
> > +test_expect_success push '
> > +	(
> > +		cd clone &&
> > +		git checkout -b to-push &&
> > +		test_commit to-push &&
> > +		git push origin HEAD
> > +	)
> > +'
> > +
> > +test_done
> 
> Wouldn't at a minimum
> 
> test_expect_success 'check push result' '
> 	git rev-parse to-push
> '
> 
> be a good idea to make sure that the pushed commit actually arrived?
Sure.

Ciao, Dscho

Johannes Schindelin· Jan 2, 2017, 10:40 UTC · re: Johannes Schindelin · lore

[PATCH v2] mingw: add a regression test for pushing to UNC paths

On Windows, there are "UNC paths" to access network (AKA shared) folders, of the form \\server\sharename\directory. This provides a convenient way for Windows developers to share their Git repositories without having to have a dedicated server.

Git for Windows v2.11.0 introduced a regression where pushing to said UNC paths no longer works, although fetching and cloning still does, as reported here: https://github.com/git-for-windows/git/issues/979

This regression was fixed in 7814fbe3f1 (normalize_path_copy(): fix pushing to //server/share/dir on Windows, 2016-12-14).

Let's make sure that it does not regress again, by introducing a test that uses so-called "administrative shares": disk volumes are automatically shared under certain circumstances, e.g. the C: drive is shared as \\localhost\c$. The test needs to be skipped if the current directory is inaccessible via said administrative share, of course.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
Published-As: https://github.com/dscho/git/releases/tag/unc-paths-test-v2
Fetch-It-Via: git fetch https://github.com/dscho/git unc-paths-test-v2
Interdiff vs v1:
 diff --git a/t/t5580-clone-push-unc.sh b/t/t5580-clone-push-unc.sh
 index e06d230724..b195f71ea9 100755
 --- a/t/t5580-clone-push-unc.sh
 +++ b/t/t5580-clone-push-unc.sh
 @@ -40,7 +40,9 @@ test_expect_success push '
  		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_done
 t/t5580-clone-push-unc.sh | 48 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100755 t/t5580-clone-push-unc.sh
Show changes to t/t5580-clone-push-unc.sh +48 −0
diff --git a/t/t5580-clone-push-unc.sh b/t/t5580-clone-push-unc.sh
new file mode 100755
index 0000000000..b195f71ea9
--- /dev/null
+++ b/t/t5580-clone-push-unc.sh
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+test_description='various UNC path tests (Windows-only)'
+. ./test-lib.sh
+
+if ! test_have_prereq MINGW; then
+	skip_all='skipping UNC path tests, requires Windows'
+	test_done
+fi
+
+UNCPATH="$(pwd)"
+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 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_done

base-commit: c69c2f50cfc0dcd4bcd014c7fd56e344a7c5522f
-- 
2.11.0.rc3.windows.1

← back to recent threads