summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c9b7840)
raw | patch | inline | side by side (parent: c9b7840)
author | Heiko Voigt <hvoigt@hvoigt.net> | |
Mon, 7 Feb 2011 20:52:34 +0000 (21:52 +0100) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Mon, 7 Feb 2011 23:45:54 +0000 (15:45 -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 e8e20282df81b234171dbef9504eae9d369067ac..e55c3cac7747d4b381ff9943dd72314225f42c5c 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_yes_no_if_possible("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