Add LPCTSTR casts where needed
[TortoiseGit.git] / src / TortoiseProc / Commands / RemoveCommand.cpp
blob511843b25ee20397a0ac55684175f4bc1d1d3639
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2009-2013, 2015 - TortoiseGit
4 // Copyright (C) 2007-2008 - TortoiseSVN
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software Foundation,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "stdafx.h"
21 #include "RemoveCommand.h"
23 #include "MessageBox.h"
24 #include "Git.h"
25 #include "ShellUpdater.h"
27 bool RemoveCommand::Execute()
29 bool bRet = false;
30 // removing items from a working copy is done item-by-item so we
31 // have a chance to show a progress bar
33 // removing items from an URL in the repository requires that we
34 // ask the user for a log message.
35 #if 0
36 BOOL bForce = FALSE;
37 SVN svn;
38 if ((!pathList.IsEmpty())&&(SVN::PathIsURL(pathList[0])))
40 // Delete using URL's, not wc paths
41 svn.SetPromptApp(&theApp);
42 CInputLogDlg dlg;
43 CString sUUID;
44 svn.GetRepositoryRootAndUUID(pathList[0], sUUID);
45 dlg.SetUUID(sUUID);
46 CString sHint;
47 if (pathList.GetCount() == 1)
48 sHint.Format(IDS_INPUT_REMOVEONE, (LPCTSTR)pathList[0].GetSVNPathString());
49 else
50 sHint.Format(IDS_INPUT_REMOVEMORE, pathList.GetCount());
51 dlg.SetActionText(sHint);
52 if (dlg.DoModal()==IDOK)
54 if (!svn.Remove(pathList, TRUE, parser.HasKey(_T("keep")), dlg.GetLogMessage()))
56 CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);
57 return FALSE;
59 return true;
61 return FALSE;
63 else
65 for (int nPath = 0; nPath < pathList.GetCount(); ++nPath)
67 CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": remove file %s\n"), (LPCTSTR)pathList[nPath].GetUIPathString());
68 // even though SVN::Remove takes a list of paths to delete at once
69 // we delete each item individually so we can prompt the user
70 // if something goes wrong or unversioned/modified items are
71 // to be deleted
72 CTSVNPathList removePathList(pathList[nPath]);
73 if (bForce)
75 CTSVNPath delPath = removePathList[0];
76 delPath.Delete(true);
78 if (!svn.Remove(removePathList, bForce, parser.HasKey(_T("keep"))))
80 if ((svn.Err->apr_err == SVN_ERR_UNVERSIONED_RESOURCE) ||
81 (svn.Err->apr_err == SVN_ERR_CLIENT_MODIFIED))
83 CString msg, yes, no, yestoall;
84 if (pathList[nPath].IsDirectory())
86 msg.Format(IDS_PROC_REMOVEFORCEFOLDER, pathList[nPath].GetWinPath());
88 else
90 msg.Format(IDS_PROC_REMOVEFORCE, (LPCTSTR)svn.GetLastErrorMessage());
92 yes.LoadString(IDS_MSGBOX_YES);
93 no.LoadString(IDS_MSGBOX_NO);
94 yestoall.LoadString(IDS_PROC_YESTOALL);
95 UINT ret = CMessageBox::Show(hwndExplorer, msg, _T("TortoiseGit"), 2, IDI_ERROR, yes, no, yestoall);
96 if (ret == 3)
97 bForce = TRUE;
98 if ((ret == 1)||(ret==3))
100 CTSVNPath delPath = removePathList[0];
101 delPath.Delete(true);
102 if (!svn.Remove(removePathList, TRUE, parser.HasKey(_T("keep"))))
104 CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);
106 else
107 bRet = true;
110 else
111 CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);
115 if (bRet)
116 CShellUpdater::Instance().AddPathsForUpdate(pathList);
117 #endif
119 //we don't ask user about if keep local copy.
120 //because there are command "Delete(keep local copy)" at explore context menu
121 //int key=CMessageBox::Show(hwndExplorer, _T("File will removed from version control\r\n Do you want to keep local copy"), _T("TortoiseGit"), MB_ICONINFORMATION|MB_YESNOCANCEL);
122 //if(key == IDCANCEL)
124 CString format;
125 BOOL keepLocal = parser.HasKey(_T("keep"));
126 if (pathList.GetCount() > 1)
127 format.Format(keepLocal ? IDS_WARN_DELETE_MANY_FROM_INDEX : IDS_WARN_DELETE_MANY, pathList.GetCount());
128 else
129 format.Format(keepLocal ? IDS_WARN_DELETE_ONE_FROM_INDEX : IDS_WARN_REMOVE, pathList[0].GetGitPathString());
130 if (CMessageBox::Show(hwndExplorer, format, _T("TortoiseGit"), 2, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_REMOVEBUTTON)), CString(MAKEINTRESOURCE(IDS_MSGBOX_ABORT))) == 2)
131 return false;
133 if (keepLocal)
135 format= _T("git.exe rm -r -f --cached -- \"%s\"");
137 else
139 format=_T("git.exe rm -r -f -- \"%s\"");
142 CString output;
143 CString cmd;
144 int nPath;
145 for (nPath = 0; nPath < pathList.GetCount(); ++nPath)
147 cmd.Format(format, (LPCTSTR)pathList[nPath].GetGitPathString());
148 if (g_Git.Run(cmd, &output, CP_UTF8))
150 if (CMessageBox::Show(hwndExplorer, output, _T("TortoiseGit"), 2, IDI_ERROR, CString(MAKEINTRESOURCE(IDS_IGNOREBUTTON)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))) == 2)
151 return FALSE;
155 output.Format(IDS_PROC_FILESREMOVED, nPath);
157 CShellUpdater::Instance().AddPathsForUpdate(pathList);
159 CMessageBox::Show(hwndExplorer, output, _T("TortoiseGit"), MB_ICONINFORMATION|MB_OK);
161 CShellUpdater::Instance().Flush();
162 return bRet;