summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 62a6ce6)
raw | patch | inline | side by side (parent: 62a6ce6)
author | Heiko Voigt <hvoigt@hvoigt.net> | |
Tue, 14 Dec 2010 22:25:29 +0000 (23:25 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Tue, 14 Dec 2010 23:36:43 +0000 (15:36 -0800) |
The same logic as for unlink and rename also applies to rmdir. For
example in case you have a shell open in a git controlled folder. This
will easily fail. So lets be nice for such cases as well.
Signed-off-by: Heiko Voigt <heiko.voigt@mahr.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
example in case you have a shell open in a git controlled folder. This
will easily fail. So lets be nice for such cases as well.
Signed-off-by: Heiko Voigt <heiko.voigt@mahr.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/mingw.c | patch | blob | history | |
compat/mingw.h | patch | blob | history |
diff --git a/compat/mingw.c b/compat/mingw.c
index 644234f59bda4fd7bf5ccef4e43c7ddfd9b4c830..902672910ad39a71d663d392f1361396a061b3d0 100644 (file)
--- a/compat/mingw.c
+++ b/compat/mingw.c
return ret;
}
+#undef rmdir
+int mingw_rmdir(const char *pathname)
+{
+ int ret, tries = 0;
+
+ while ((ret = rmdir(pathname)) == -1 && tries < ARRAY_SIZE(delay)) {
+ if (!is_file_in_use_error(GetLastError()))
+ break;
+ /*
+ * We assume that some other process had the source or
+ * destination file open at the wrong moment and retry.
+ * In order to give the other process a higher chance to
+ * complete its operation, we give up our time slice now.
+ * If we have to retry again, we do sleep a bit.
+ */
+ Sleep(delay[tries]);
+ tries++;
+ }
+ while (ret == -1 && is_file_in_use_error(GetLastError()) &&
+ ask_user_yes_no("Deletion of directory '%s' failed. "
+ "Should I try again?", pathname))
+ ret = rmdir(pathname);
+ return ret;
+}
+
#undef open
int mingw_open (const char *filename, int oflags, ...)
{
diff --git a/compat/mingw.h b/compat/mingw.h
index 8316938020beb556d6926e95dcd1b44a26669325..8b159c44476efd7c7830d87cc5a5ec3dea6818c0 100644 (file)
--- a/compat/mingw.h
+++ b/compat/mingw.h
int mingw_unlink(const char *pathname);
#define unlink mingw_unlink
+int mingw_rmdir(const char *path);
+#define rmdir mingw_rmdir
+
int mingw_open (const char *filename, int oflags, ...);
#define open mingw_open