1 // TortoiseSVN - a Windows shell extension for easy version control
\r
3 // Copyright (C) 2007-2008 - TortoiseSVN
\r
5 // This program is free software; you can redistribute it and/or
\r
6 // modify it under the terms of the GNU General Public License
\r
7 // as published by the Free Software Foundation; either version 2
\r
8 // of the License, or (at your option) any later version.
\r
10 // This program is distributed in the hope that it will be useful,
\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 // GNU General Public License for more details.
\r
15 // You should have received a copy of the GNU General Public License
\r
16 // along with this program; if not, write to the Free Software Foundation,
\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\r
20 #include "CleanupCommand.h"
\r
22 #include "MessageBox.h"
\r
23 #include "ProgressDlg.h"
\r
25 //#include "GitGlobal.h"
\r
26 #include "GitAdminDir.h"
\r
27 #include "DirFileEnum.h"
\r
28 #include "ShellUpdater.h"
\r
29 #include "CleanTypeDlg.h"
\r
31 bool CleanupCommand::Execute()
\r
36 if( dlg.DoModal() == IDOK)
\r
38 CProgressDlg progress;
\r
39 progress.m_GitCmd.Format(_T("git clean "));
\r
41 progress.m_GitCmd += _T(" -d ");
\r
42 switch(dlg.m_CleanType)
\r
45 progress.m_GitCmd += _T(" -fx");
\r
48 progress.m_GitCmd += _T(" -f");
\r
51 progress.m_GitCmd += _T(" -fX");
\r
54 if(progress.DoModal()==IDOK)
\r
58 CProgressDlg progress;
\r
59 progress.SetTitle(IDS_PROC_CLEANUP);
\r
60 progress.SetAnimation(IDR_CLEANUPANI);
\r
61 progress.SetShowProgressBar(false);
\r
62 progress.SetLine(1, CString(MAKEINTRESOURCE(IDS_PROC_CLEANUP_INFO1)));
\r
63 progress.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROC_CLEANUP_INFO2)));
\r
64 progress.ShowModeless(hwndExplorer);
\r
66 CString strSuccessfullPaths, strFailedPaths;
\r
67 for (int i=0; i<pathList.GetCount(); ++i)
\r
70 if (!svn.CleanUp(pathList[i]))
\r
72 strFailedPaths += _T("- ") + pathList[i].GetWinPathString() + _T("\n");
\r
73 strFailedPaths += svn.GetLastErrorMessage() + _T("\n\n");
\r
77 strSuccessfullPaths += _T("- ") + pathList[i].GetWinPathString() + _T("\n");
\r
79 // after the cleanup has finished, crawl the path downwards and send a change
\r
80 // notification for every directory to the shell. This will update the
\r
81 // overlays in the left tree view of the explorer.
\r
82 CDirFileEnum crawler(pathList[i].GetWinPathString());
\r
85 CTSVNPathList updateList;
\r
86 while (crawler.NextFile(sPath, &bDir))
\r
88 if ((bDir) && (!g_SVNAdminDir.IsAdminDirPath(sPath)))
\r
90 updateList.AddPath(CTSVNPath(sPath));
\r
93 updateList.AddPath(pathList[i]);
\r
94 CShellUpdater::Instance().AddPathsForUpdate(updateList);
\r
95 CShellUpdater::Instance().Flush();
\r
96 updateList.SortByPathname(true);
\r
97 for (INT_PTR i=0; i<updateList.GetCount(); ++i)
\r
99 SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH, updateList[i].GetWinPath(), NULL);
\r
100 ATLTRACE(_T("notify change for path %s\n"), updateList[i].GetWinPath());
\r
106 CString strMessage;
\r
107 if ( !strSuccessfullPaths.IsEmpty() )
\r
110 tmp.Format(IDS_PROC_CLEANUPFINISHED, (LPCTSTR)strSuccessfullPaths);
\r
114 if ( !strFailedPaths.IsEmpty() )
\r
116 if (!strMessage.IsEmpty())
\r
117 strMessage += _T("\n");
\r
119 tmp.Format(IDS_PROC_CLEANUPFINISHED_FAILED, (LPCTSTR)strFailedPaths);
\r
123 CMessageBox::Show(hwndExplorer, strMessage, _T("TortoiseGit"), MB_OK | (strFailedPaths.IsEmpty()?MB_ICONINFORMATION:MB_ICONERROR));
\r
125 CShellUpdater::Instance().Flush();
\r