[PATCH 1/2] mingw: verify that paths are not mistaken for remote nicknames
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- May 29, 2017, 20:25 UTC
- Message-ID
- <17b3d445-0cc7-2000-dc67-11fb53c7040b@kdbg.org>
- In-Reply-To
- <20170526033510.1793-14-gitster@pobox.com>
Am 26.05.2017 um 05:35 schrieb Junio C Hamano:
Show 32 quoted lines
> When asked to open/fopen a path, e.g. "a/b:/c", which does not exist
> on the filesystem, Windows (correctly) fails to open it but sets
> EINVAL to errno because the pathname has characters that cannot be
> stored in its filesystem.
>
> As this is an expected failure, teach is_missing_file_error() helper
> about this case.
>
> This is RFC, as there may be a case where we get EINVAL from
> open/fopen for reasons other than "the filesystem does not like this
> pathname" that may be worth reporting to the user, and this change
> is sweeping such an error under the rug.
>
> Signed-off-by: Junio C Hamano <gitster@pobox.com>
> ---
> wrapper.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/wrapper.c b/wrapper.c
> index f1c87ec7ea..74aa3b7803 100644
> --- a/wrapper.c
> +++ b/wrapper.c
> @@ -434,6 +434,10 @@ static void warn_on_inaccessible(const char *path)
> * see if the errno indicates a missing file that we can safely ignore.
> */
> static int is_missing_file_error(int errno_) {
> +#ifdef GIT_WINDOWS_NATIVE
> + if (errno_ == EINVAL)
> + return 1;
> +#endif
> return (errno_ == ENOENT || errno_ == ENOTDIR);
> }I would prefer to catch the case in the compatibility layer. Here is a two patch series that would replace your 12/13 and 13/13.
---- 8< ---- From: Johannes Schindelin <Johannes.Schindelin@gmx.de> Subject: mingw: verify that paths are not mistaken for remote nicknames
This added test case simply verifies that users will not be bothered with bogus complaints à la
warning: unable to access '.git/remotes/D:\repo': Invalid argument
when fetching from a Windows path (in this case, D:\repo).
[j6t: mark the new test as test_expect_failure]
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Johannes Sixt <j6t@kdbg.org> --- t/t5580-clone-push-unc.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/t/t5580-clone-push-unc.sh b/t/t5580-clone-push-unc.sh index b195f71ea9..fd719a209e 100755 --- a/t/t5580-clone-push-unc.sh +++ b/t/t5580-clone-push-unc.sh @@ -1,13 +1,19 @@ #!/bin/sh -test_description='various UNC path tests (Windows-only)' +test_description='various Windows-only path tests' . ./test-lib.sh if ! test_have_prereq MINGW; then - skip_all='skipping UNC path tests, requires Windows' + skip_all='skipping Windows-only path tests' test_done fi +test_expect_failure 'remote nick cannot contain backslashes' ' + BACKSLASHED="$(pwd | tr / \\\\)" && + git ls-remote "$BACKSLASHED" >out 2>err && + ! grep "unable to access" err +' + UNCPATH="$(pwd)" case "$UNCPATH" in [A-Z]:*)
-- 2.13.0.55.g17b7d13330