From 01547d41e4b2c8ddc1eaadff6ab597acfa4f7378 Mon Sep 17 00:00:00 2001 From: cxl Date: Sat, 16 Aug 2008 18:43:35 +0000 Subject: [PATCH] Fixed usvn in Win32 to delete even read-only .svn dirs when required git-svn-id: svn://ultimatepp.org/upp/trunk@347 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/usvn/SvnSync.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/uppsrc/usvn/SvnSync.cpp b/uppsrc/usvn/SvnSync.cpp index 1c70aac0a..3855d8b41 100644 --- a/uppsrc/usvn/SvnSync.cpp +++ b/uppsrc/usvn/SvnSync.cpp @@ -89,6 +89,33 @@ void SvnSync::SyncList() } } +#ifdef PLATFORM_WIN32 +void sDeleteFolderDeep(const char *dir) +{ + { + FindFile ff(AppendFileName(dir, "*.*")); + while(ff) { + String name = ff.GetName(); + String p = AppendFileName(dir, name); + if(ff.IsFile()) { + SetFileAttributes(p, GetFileAttributes(p) & ~FILE_ATTRIBUTE_READONLY); + FileDelete(p); + } + else + if(ff.IsFolder()) + sDeleteFolderDeep(p); + ff.Next(); + } + } + DirectoryDelete(dir); +} +#else +void sDeleteFolderDeep(const char *path) +{ + DeleteFolderDeep(path); +} +#endif + void SvnDel(const char *path) { FindFile ff(AppendFileName(path, "*.*")); @@ -96,7 +123,7 @@ void SvnDel(const char *path) if(ff.IsFolder()) { String dir = AppendFileName(path, ff.GetName()); if(ff.GetName() == ".svn") - DeleteFolderDeep(dir); + sDeleteFolderDeep(dir); else SvnDel(dir); }