From 749f359919983821fe05795b8b878a72f688a61d Mon Sep 17 00:00:00 2001 From: Sup Yut Sum Date: Sat, 22 Dec 2012 02:34:00 +0800 Subject: [PATCH] Can run cleanup without using recycle bin and add dry run option Signed-off-by: Sup Yut Sum --- Languages/Tortoise.pot | 8 +++ src/Resources/TortoiseProcENG.rc | 14 ++-- src/TortoiseProc/CleanTypeDlg.cpp | 6 ++ src/TortoiseProc/CleanTypeDlg.h | 2 + src/TortoiseProc/Commands/CleanupCommand.cpp | 98 +++++++++++++++++----------- src/TortoiseProc/resource.h | 4 +- 6 files changed, 87 insertions(+), 45 deletions(-) diff --git a/Languages/Tortoise.pot b/Languages/Tortoise.pot index 51f168f98..bfe39920a 100644 --- a/Languages/Tortoise.pot +++ b/Languages/Tortoise.pot @@ -3243,6 +3243,10 @@ msgstr "" msgid "Do not show the context menu for the following paths:" msgstr "" +#. Resource IDs: (1730) +msgid "Do not use recycle bin" +msgstr "" + #. Resource IDs: (70) #, c-format msgid "Do you really want to delete %s?" @@ -3342,6 +3346,10 @@ msgstr "" msgid "Drive Types" msgstr "" +#. Resource IDs: (1731) +msgid "Dry run" +msgstr "" + #. Resource IDs: (1279) msgid "Dummy Button Form " msgstr "" diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 53d3780ae..f69303857 100644 --- a/src/Resources/TortoiseProcENG.rc +++ b/src/Resources/TortoiseProcENG.rc @@ -1497,7 +1497,7 @@ BEGIN PUSHBUTTON "Help",IDHELP,338,241,50,14 END -IDD_CLEAN DIALOGEX 0, 0, 261, 117 +IDD_CLEAN DIALOGEX 0, 0, 261, 157 STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "Clean" FONT 8, "MS Shell Dlg", 400, 0, 0x1 @@ -1510,10 +1510,12 @@ BEGIN CONTROL "Remove ignored files (-fX)",IDC_RADIO_CLEAN_IGNORE, "Button",BS_AUTORADIOBUTTON,15,45,232,10 CONTROL "Remove untracked directories (-d)",IDC_CHECK_DIR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,68,232,10 - DEFPUSHBUTTON "OK",IDOK,81,96,50,14 - PUSHBUTTON "Cancel",IDCANCEL,142,96,50,14 - PUSHBUTTON "Help",IDHELP,204,96,50,14 - LTEXT "Attention: This command affects the whole working tree!",IDC_STATIC,14,83,233,10 + CONTROL "Do not use recycle bin",IDC_CHECK_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,81,87,10 + CONTROL "Dry run",IDC_CHECK_DRYRUN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,95,40,10 + DEFPUSHBUTTON "OK",IDOK,81,128,50,14 + PUSHBUTTON "Cancel",IDCANCEL,142,128,50,14 + PUSHBUTTON "Help",IDHELP,204,128,50,14 + LTEXT "Attention: This command affects the whole working tree!",IDC_STATIC,14,114,233,10 END IDD_PATCH_VIEW DIALOGEX 0, 0, 248, 195 @@ -2395,7 +2397,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 254 TOPMARGIN, 7 - BOTTOMMARGIN, 106 + BOTTOMMARGIN, 146 END IDD_PATCH_VIEW, DIALOG diff --git a/src/TortoiseProc/CleanTypeDlg.cpp b/src/TortoiseProc/CleanTypeDlg.cpp index 29d136020..705f0a2ac 100644 --- a/src/TortoiseProc/CleanTypeDlg.cpp +++ b/src/TortoiseProc/CleanTypeDlg.cpp @@ -40,6 +40,8 @@ CCleanTypeDlg::CCleanTypeDlg(CWnd* pParent /*=NULL*/) this->m_bDir = this->m_regDir; this->m_CleanType = this->m_regType; + m_bNoRecycleBin = FALSE; + m_bDryRun = FALSE; } CCleanTypeDlg::~CCleanTypeDlg() @@ -50,6 +52,8 @@ void CCleanTypeDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Check(pDX, IDC_CHECK_DIR, m_bDir); + DDX_Check(pDX, IDC_CHECK_NORECYCLEBIN, m_bNoRecycleBin); + DDX_Check(pDX, IDC_CHECK_DRYRUN, m_bDryRun); DDX_Radio(pDX, IDC_RADIO_CLEAN_ALL,m_CleanType); } @@ -70,6 +74,8 @@ BOOL CCleanTypeDlg::OnInitDialog() AdjustControlSize(IDC_RADIO_CLEAN_NO); AdjustControlSize(IDC_RADIO_CLEAN_IGNORE); AdjustControlSize(IDC_CHECK_DIR); + AdjustControlSize(IDC_CHECK_NORECYCLEBIN); + AdjustControlSize(IDC_CHECK_DRYRUN); CString sWindowTitle; GetWindowText(sWindowTitle); diff --git a/src/TortoiseProc/CleanTypeDlg.h b/src/TortoiseProc/CleanTypeDlg.h index 84e2ccb49..f5bd1179a 100644 --- a/src/TortoiseProc/CleanTypeDlg.h +++ b/src/TortoiseProc/CleanTypeDlg.h @@ -49,5 +49,7 @@ protected: public: BOOL m_bDir; int m_CleanType; + BOOL m_bNoRecycleBin; + BOOL m_bDryRun; afx_msg void OnBnClickedHelp(); }; diff --git a/src/TortoiseProc/Commands/CleanupCommand.cpp b/src/TortoiseProc/Commands/CleanupCommand.cpp index c703dd8c9..e01654338 100644 --- a/src/TortoiseProc/Commands/CleanupCommand.cpp +++ b/src/TortoiseProc/Commands/CleanupCommand.cpp @@ -21,6 +21,7 @@ #include "CleanupCommand.h" #include "MessageBox.h" +#include "ProgressDlg.h" #include "ShellUpdater.h" #include "CleanTypeDlg.h" #include "..\Utils\UnicodeUtils.h" @@ -59,7 +60,9 @@ bool CleanupCommand::Execute() pp.GetBOOLProps(quotepath, _T("core.quotepath")); CString cmd; - cmd.Format(_T("git clean -n")); + cmd.Format(_T("git clean")); + if (dlg.m_bDryRun || !dlg.m_bNoRecycleBin) + cmd += _T(" -n "); if(dlg.m_bDir) cmd += _T(" -d "); switch(dlg.m_CleanType) @@ -75,53 +78,72 @@ bool CleanupCommand::Execute() break; } - 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); - - CString cmdout, cmdouterr; - if (g_Git.Run(cmd, &cmdout, &cmdouterr, CP_UTF8)) { - MessageBox(NULL, cmdouterr, _T("TortoiseGit"), MB_ICONERROR); - return FALSE; - } - - if (sysProgressDlg.HasUserCancelled()) + if (dlg.m_bDryRun || dlg.m_bNoRecycleBin) { - CMessageBox::Show(NULL, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); - return FALSE; - } + CProgressDlg progress; + for (int i = 0; i < this->pathList.GetCount(); i++) + { + CString path; + if (this->pathList[i].IsDirectory()) + path = pathList[i].GetGitPathString(); + else + path = pathList[i].GetContainingDirectory().GetGitPathString(); - int pos = 0; - CString token = cmdout.Tokenize(_T("\n"), pos); - CTGitPathList delList; - while (!token.IsEmpty()) + progress.m_GitCmdList.push_back(cmd + _T(" \"") + path + _T("\"")); + } + if (progress.DoModal()==IDOK) + return TRUE; + } + else { - if (token.Mid(0, 13) == _T("Would remove ")) + 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); + + CString cmdout, cmdouterr; + if (g_Git.Run(cmd, &cmdout, &cmdouterr, CP_UTF8)) { + MessageBox(NULL, cmdouterr, _T("TortoiseGit"), MB_ICONERROR); + return FALSE; + } + + if (sysProgressDlg.HasUserCancelled()) + { + CMessageBox::Show(NULL, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); + return FALSE; + } + + int pos = 0; + CString token = cmdout.Tokenize(_T("\n"), pos); + CTGitPathList delList; + while (!token.IsEmpty()) { - CString tempPath = token.Mid(13).TrimRight(); - if (quotepath) + 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('"'))); + } + delList.AddPath(CTGitPath(tempPath)); } - delList.AddPath(CTGitPath(tempPath)); - } - token = cmdout.Tokenize(_T("\n"), pos); - } + token = cmdout.Tokenize(_T("\n"), pos); + } - if (sysProgressDlg.HasUserCancelled()) - { - CMessageBox::Show(NULL, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); - return FALSE; - } + if (sysProgressDlg.HasUserCancelled()) + { + CMessageBox::Show(NULL, IDS_SVN_USERCANCELLED, IDS_APPNAME, MB_OK); + return FALSE; + } - delList.DeleteAllFiles(true, false); + delList.DeleteAllFiles(true, false); - sysProgressDlg.Stop(); + sysProgressDlg.Stop(); + } } #if 0 CProgressDlg progress; diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index 02ac8901c..c13a6e61d 100644 --- a/src/TortoiseProc/resource.h +++ b/src/TortoiseProc/resource.h @@ -1213,6 +1213,8 @@ #define IDC_STATIC_TAGOPT 1727 #define IDC_COMBO_TAGOPT 1728 #define IDC_REV1BTN1 1729 +#define IDC_CHECK_NORECYCLEBIN 1730 +#define IDC_CHECK_DRYRUN 1731 #define IDS_DLGTITLE_ADD_DIFF_TOOL 1750 #define IDS_DLGTITLE_ADD_MERGE_TOOL 1751 #define IDS_DLGTITLE_EDIT_DIFF_TOOL 1752 @@ -1653,7 +1655,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 345 #define _APS_NEXT_COMMAND_VALUE 32860 -#define _APS_NEXT_CONTROL_VALUE 1730 +#define _APS_NEXT_CONTROL_VALUE 1732 #define _APS_NEXT_SYMED_VALUE 201 #endif #endif -- 2.11.4.GIT