]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mingw: try to delete target directory before renaming
author마누엘 <nalla@hamal.uberspace.de>
Tue, 26 Jan 2016 14:34:47 +0000 (15:34 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 26 Jan 2016 21:42:59 +0000 (13:42 -0800)
When the rename() function tries to move a directory it fails if the
target directory exists. It should check if it can delete the (possibly
empty) target directory and then try again to move the directory.

This partially fixes t9100-git-svn-basic.sh.

Signed-off-by: 마누엘 <nalla@hamal.uberspace.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c

index 717931e35920c3546df9f68148cbe20050d3f004..9e64f76bde53bee657bf218c651bb5d994daf7e8 100644 (file)
@@ -1603,7 +1603,12 @@ repeat:
        if (gle == ERROR_ACCESS_DENIED &&
            (attrs = GetFileAttributesW(wpnew)) != INVALID_FILE_ATTRIBUTES) {
                if (attrs & FILE_ATTRIBUTE_DIRECTORY) {
-                       errno = EISDIR;
+                       DWORD attrsold = GetFileAttributesW(wpold);
+                       if (attrsold == INVALID_FILE_ATTRIBUTES ||
+                           !(attrsold & FILE_ATTRIBUTE_DIRECTORY))
+                               errno = EISDIR;
+                       else if (!_wrmdir(wpnew))
+                               goto repeat;
                        return -1;
                }
                if ((attrs & FILE_ATTRIBUTE_READONLY) &&