On Mon, May 29, 2017 at 10:25 PM, Johannes Sixt <[email protected]> wrote:
> Am 26.05.2017 um 05:35 schrieb Junio C Hamano:
>> 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 <[email protected]>
>> ---
>> 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 <[email protected]>
> 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 <[email protected]>
> Signed-off-by: Johannes Sixt <[email protected]>
> ---
> 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
> +'
Doesn't this need test_i18ngrep?:
wrapper.c:581: warning_errno(_("unable to access '%s'"), path);
wrapper.c:602: die_errno(_("unable to access '%s'"), path);
Or is it one of these, which isn't translated:
http-push.c:1531: error("unable to access '%s': %s",
url, curl_errorstr);
remote-curl.c:319: die("unable to access '%s': %s",
url.buf, curl_errorstr);
> +
> UNCPATH="$(pwd)"
> case "$UNCPATH" in
> [A-Z]:*)
> --
> 2.13.0.55.g17b7d13330