From: Johannes Schindelin <johannes.schinde...@gmx.de>

When specifying an absolute path without a drive prefix, we convert that
path internally. Let's make sure that we handle that case properly, too
;-)

This fixes the command

        git clone https://github.com/git-for-windows/git \G4W

Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
---
 compat/mingw.c            | 10 +++++++++-
 t/t5580-clone-push-unc.sh |  2 +-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/compat/mingw.c b/compat/mingw.c
index 34b3880b29..4d009901d8 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -928,11 +928,19 @@ unsigned int sleep (unsigned int seconds)
 char *mingw_mktemp(char *template)
 {
        wchar_t wtemplate[MAX_PATH];
+       int offset = 0;
+
        if (xutftowcs_path(wtemplate, template) < 0)
                return NULL;
+
+       if (is_dir_sep(template[0]) && !is_dir_sep(template[1]) &&
+           iswalpha(wtemplate[0]) && wtemplate[1] == L':') {
+               /* We have an absolute path missing the drive prefix */
+               offset = 2;
+       }
        if (!_wmktemp(wtemplate))
                return NULL;
-       if (xwcstoutf(template, wtemplate, strlen(template) + 1) < 0)
+       if (xwcstoutf(template, wtemplate + offset, strlen(template) + 1) < 0)
                return NULL;
        return template;
 }
diff --git a/t/t5580-clone-push-unc.sh b/t/t5580-clone-push-unc.sh
index c2b0082296..17c38c33a5 100755
--- a/t/t5580-clone-push-unc.sh
+++ b/t/t5580-clone-push-unc.sh
@@ -29,7 +29,7 @@ case "$UNCPATH" in
        ;;
 esac
 
-test_expect_failure 'clone into absolute path lacking a drive prefix' '
+test_expect_success 'clone into absolute path lacking a drive prefix' '
        USINGBACKSLASHES="$(echo "$WITHOUTDRIVE"/without-drive-prefix |
                tr / \\\\)" &&
        git clone . "$USINGBACKSLASHES" &&
-- 
gitgitgadget

Reply via email to