From dc37763fea6aa1fcd3212268bb067d1be79d4cc8 Mon Sep 17 00:00:00 2001 From: Sup Yut Sum Date: Thu, 24 Jul 2014 19:27:15 +0800 Subject: [PATCH] Fixed issue #2241: Cleanup: result window of dry run should offer to "really remove" Signed-off-by: Sup Yut Sum --- Languages/Tortoise.pot | 8 ++ src/Changelog.txt | 1 + src/Resources/TortoiseProcENG.rc | 6 + src/TortoiseProc/Commands/CleanupCommand.cpp | 207 +++++++++++++++------------ src/TortoiseProc/resource.h | 2 + 5 files changed, 135 insertions(+), 89 deletions(-) diff --git a/Languages/Tortoise.pot b/Languages/Tortoise.pot index 11b2ec646..c272d328d 100644 --- a/Languages/Tortoise.pot +++ b/Languages/Tortoise.pot @@ -2550,6 +2550,14 @@ msgstr "" msgid "Clean Type" msgstr "" +#. Resource IDs: (96) +msgid "Clean permanently" +msgstr "" + +#. Resource IDs: (96) +msgid "Clean to recycle bin" +msgstr "" + #. Resource IDs: (76) msgid "Clean up stale remote branches" msgstr "" diff --git a/src/Changelog.txt b/src/Changelog.txt index 85973078c..08d21cf29 100644 --- a/src/Changelog.txt +++ b/src/Changelog.txt @@ -6,6 +6,7 @@ Released: unreleased * Fixed issue #1605: Add TortoiseGit start and pre commit hooks * Fixed issue #2170: Please add interface to "git svn log -v" * Fixed issue #1787: auto-complete label when writing commit message + * Fixed issue #2241: Cleanup: result window of dry run should offer to "really remove" == Bug Fixes == * Fixed issue #2216: Add fails with message: libgit2: "failed to parse 'warn' as boolean" diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 25d85ca71..44375910d 100644 --- a/src/Resources/TortoiseProcENG.rc +++ b/src/Resources/TortoiseProcENG.rc @@ -4445,6 +4445,12 @@ BEGIN IDS_SORTTAGSREVERSED_TT "When enabled, larger version numbers come first. It is because latest versions are usually more useful." END +STRINGTABLE +BEGIN + IDS_CLEAN_TO_RECYCLEBIN "Clean to recycle bin" + IDS_CLEAN_NO_RECYCLEBIN "Clean permanently" +END + #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/TortoiseProc/Commands/CleanupCommand.cpp b/src/TortoiseProc/Commands/CleanupCommand.cpp index 2720489b8..0240f7b78 100644 --- a/src/TortoiseProc/Commands/CleanupCommand.cpp +++ b/src/TortoiseProc/Commands/CleanupCommand.cpp @@ -119,49 +119,49 @@ bool CleanupCommand::Execute() { bool quotepath = g_Git.GetConfigValueBool(_T("core.quotepath")); - CString cmd; - cmd.Format(_T("git.exe clean")); - if (dlg.m_bDryRun || !dlg.m_bNoRecycleBin) - cmd += _T(" -n "); - if(dlg.m_bDir) - cmd += _T(" -d "); - switch(dlg.m_CleanType) + while (true) { - case 0: - cmd += _T(" -fx"); - break; - case 1: - cmd += _T(" -f"); - break; - case 2: - cmd += _T(" -fX"); - break; - } + CString cmd; + cmd.Format(_T("git.exe clean")); + if (dlg.m_bDryRun || !dlg.m_bNoRecycleBin) + cmd += _T(" -n "); + if (dlg.m_bDir) + cmd += _T(" -d "); + switch (dlg.m_CleanType) + { + case 0: + cmd += _T(" -fx"); + break; + case 1: + cmd += _T(" -f"); + break; + case 2: + cmd += _T(" -fX"); + break; + } - STRING_VECTOR submoduleList; - SubmodulePayload payload(submoduleList); - if (dlg.m_bSubmodules) - { - payload.basePath = CTGitPath(g_Git.m_CurrentDir).GetGitPathString(); - if (pathList.GetCount() != 1 || pathList.GetCount() == 1 && !pathList[0].IsEmpty()) + STRING_VECTOR submoduleList; + SubmodulePayload payload(submoduleList); + if (dlg.m_bSubmodules) { - for (int i = 0; i < pathList.GetCount(); ++i) + payload.basePath = CTGitPath(g_Git.m_CurrentDir).GetGitPathString(); + if (pathList.GetCount() != 1 || pathList.GetCount() == 1 && !pathList[0].IsEmpty()) { - CString path; - if (pathList[i].IsDirectory()) - payload.prefixList.push_back(pathList[i].GetGitPathString()); - else - payload.prefixList.push_back(pathList[i].GetContainingDirectory().GetGitPathString()); + for (int i = 0; i < pathList.GetCount(); ++i) + { + CString path; + if (pathList[i].IsDirectory()) + payload.prefixList.push_back(pathList[i].GetGitPathString()); + else + payload.prefixList.push_back(pathList[i].GetContainingDirectory().GetGitPathString()); + } } + if (!GetSubmodulePathList(payload)) + return FALSE; + std::sort(submoduleList.begin(), submoduleList.end()); } - if (!GetSubmodulePathList(payload)) - return FALSE; - std::sort(submoduleList.begin(), submoduleList.end()); - } - if (dlg.m_bDryRun || dlg.m_bNoRecycleBin) - { - while (true) + if (dlg.m_bDryRun || dlg.m_bNoRecycleBin) { CProgressDlg progress; for (int i = 0; i < this->pathList.GetCount(); ++i) @@ -186,81 +186,110 @@ bool CleanupCommand::Execute() } INT_PTR idRetry = -1; + INT_PTR idDeleteRecycle = -1; + INT_PTR idDeleteNoRecycle = -1; if (!dlg.m_bDryRun) idRetry = progress.m_PostFailCmdList.Add(CString(MAKEINTRESOURCE(IDS_MSGBOX_RETRY))); + else + { + if (dlg.m_bNoRecycleBin) + { + idDeleteNoRecycle = progress.m_PostCmdList.Add(CString(MAKEINTRESOURCE(IDS_CLEAN_NO_RECYCLEBIN))); + idDeleteRecycle = progress.m_PostCmdList.Add(CString(MAKEINTRESOURCE(IDS_CLEAN_TO_RECYCLEBIN))); + } + else + { + idDeleteRecycle = progress.m_PostCmdList.Add(CString(MAKEINTRESOURCE(IDS_CLEAN_TO_RECYCLEBIN))); + idDeleteNoRecycle = progress.m_PostCmdList.Add(CString(MAKEINTRESOURCE(IDS_CLEAN_NO_RECYCLEBIN))); + } + } + INT_PTR result = progress.DoModal(); if (result == IDOK) return TRUE; if (progress.m_GitStatus && result == IDC_PROGRESS_BUTTON1 + idRetry) continue; - break; - } - } - else - { - CSysProgressDlg sysProgressDlg; - sysProgressDlg.SetAnimation(IDR_CLEANUPANI); - sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); - sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_PROC_CLEANUP_INFO1))); - sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); - sysProgressDlg.SetShowProgressBar(false); - sysProgressDlg.ShowModeless((HWND)NULL, true); - - CTGitPathList delList; - for (size_t i = 0; i <= submoduleList.size(); ++i) - { - CGit git; - CGit *pGit; - if (i == 0) - pGit = &g_Git; - else + if (!progress.m_GitStatus && result == IDC_PROGRESS_BUTTON1 + idDeleteRecycle) { - git.m_CurrentDir = submoduleList[i - 1]; - pGit = &git; + dlg.m_bDryRun = FALSE; + dlg.m_bNoRecycleBin = FALSE; + continue; } - CString cmdout, cmdouterr; - if (pGit->Run(cmd, &cmdout, &cmdouterr, CP_UTF8)) + if (!progress.m_GitStatus && result == IDC_PROGRESS_BUTTON1 + idDeleteNoRecycle) { - MessageBox(nullptr, cmdouterr, _T("TortoiseGit"), MB_ICONERROR); - return FALSE; + dlg.m_bDryRun = FALSE; + dlg.m_bNoRecycleBin = TRUE; + continue; } + break; + } + else + { + CSysProgressDlg sysProgressDlg; + sysProgressDlg.SetAnimation(IDR_CLEANUPANI); + sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); + sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_PROC_CLEANUP_INFO1))); + sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); + sysProgressDlg.SetShowProgressBar(false); + sysProgressDlg.ShowModeless((HWND)NULL, true); - if (sysProgressDlg.HasUserCancelled()) + CTGitPathList delList; + for (size_t i = 0; i <= submoduleList.size(); ++i) { - CMessageBox::Show(nullptr, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); - return FALSE; - } + CGit git; + CGit *pGit; + if (i == 0) + pGit = &g_Git; + else + { + git.m_CurrentDir = submoduleList[i - 1]; + pGit = &git; + } + CString cmdout, cmdouterr; + if (pGit->Run(cmd, &cmdout, &cmdouterr, CP_UTF8)) + { + MessageBox(nullptr, cmdouterr, _T("TortoiseGit"), MB_ICONERROR); + return FALSE; + } - int pos = 0; - CString token = cmdout.Tokenize(_T("\n"), pos); - while (!token.IsEmpty()) - { - if (token.Mid(0, 13) == _T("Would remove ")) + if (sysProgressDlg.HasUserCancelled()) { - CString tempPath = token.Mid(13).TrimRight(); - if (quotepath) + CMessageBox::Show(nullptr, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); + return FALSE; + } + + int pos = 0; + CString token = cmdout.Tokenize(_T("\n"), pos); + while (!token.IsEmpty()) + { + if (token.Mid(0, 13) == _T("Would remove ")) { - tempPath = UnescapeQuotePath(tempPath.Trim(_T('"'))); + CString tempPath = token.Mid(13).TrimRight(); + if (quotepath) + { + tempPath = UnescapeQuotePath(tempPath.Trim(_T('"'))); + } + if (i == 0) + delList.AddPath(CTGitPath(tempPath)); + else + delList.AddPath(CTGitPath(submoduleList[i - 1] + "/" + tempPath)); } - if (i == 0) - delList.AddPath(CTGitPath(tempPath)); - else - delList.AddPath(CTGitPath(submoduleList[i - 1] + "/" + tempPath)); - } - token = cmdout.Tokenize(_T("\n"), pos); - } + token = cmdout.Tokenize(_T("\n"), pos); + } - if (sysProgressDlg.HasUserCancelled()) - { - CMessageBox::Show(nullptr, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); - return FALSE; + if (sysProgressDlg.HasUserCancelled()) + { + CMessageBox::Show(nullptr, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); + return FALSE; + } } - } - delList.DeleteAllFiles(true, false); + delList.DeleteAllFiles(true, false); - sysProgressDlg.Stop(); + sysProgressDlg.Stop(); + break; + } } } #if 0 diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index 7b079057f..e059a80b2 100644 --- a/src/TortoiseProc/resource.h +++ b/src/TortoiseProc/resource.h @@ -1122,8 +1122,10 @@ #define IDS_SORTTAGSREVERSED_TT 1519 #define IDC_AUTOTEXTCONTENT 1520 #define IDC_CHECK_TRACK 1520 +#define IDS_CLEAN_TO_RECYCLEBIN 1520 #define IDC_AUTOTEXTREGEX 1521 #define IDC_CHECK_FORCE 1521 +#define IDS_CLEAN_NO_RECYCLEBIN 1521 #define IDC_AUTOTEXTSCAN 1522 #define IDC_GROUP_BASEON 1522 #define IDC_TESTRESULT 1523 -- 2.11.4.GIT