void CDeleteRemoteTagDlg::Refresh() { m_ctrlTags.DeleteAllItems(); m_SelectAll.SetCheck(BST_UNCHECKED); m_taglist.clear(); CSysProgressDlg sysProgressDlg; sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_LOADING))); sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); sysProgressDlg.SetShowProgressBar(false); sysProgressDlg.ShowModal(this, true); if (g_Git.GetRemoteTags(m_sRemote, m_taglist)) { sysProgressDlg.Stop(); MessageBox(g_Git.GetGitLastErr(L"Could not retrieve remote tags.", CGit::GIT_CMD_FETCH), L"TortoiseGit", MB_ICONERROR); } sysProgressDlg.Stop(); BringWindowToTop(); for (int i = 0; i < (int)m_taglist.size(); ++i) m_ctrlTags.InsertItem(i, m_taglist[i]); DialogEnableWindow(IDOK, FALSE); }
void CDeleteRemoteTagDlg::OnBnClickedOk() { if (m_ctrlTags.GetSelectedCount() > 1) { CString msg; msg.Format(IDS_PROC_DELETENREFS, m_ctrlTags.GetSelectedCount()); if (CMessageBox::Show(m_hWnd, msg, _T("TortoiseGit"), 2, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_DELETEBUTTON)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))) == 2) return; } else // GetSelectedCount() is 1, otherwise the button is disabled { POSITION pos = m_ctrlTags.GetFirstSelectedItemPosition(); CString msg; msg.Format(IDS_PROC_DELETEBRANCHTAG, (LPCTSTR)m_taglist[(m_ctrlTags.GetNextSelectedItem(pos))]); if (CMessageBox::Show(m_hWnd, msg, _T("TortoiseGit"), 2, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_DELETEBUTTON)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))) == 2) return; } STRING_VECTOR list; POSITION pos = m_ctrlTags.GetFirstSelectedItemPosition(); int index; while ((index = m_ctrlTags.GetNextSelectedItem(pos)) >= 0) list.push_back(_T("refs/tags/") + m_taglist[index]); CSysProgressDlg sysProgressDlg; sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_DELETING_REMOTE_REFS))); sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); sysProgressDlg.SetShowProgressBar(false); sysProgressDlg.ShowModal(this, true); if (g_Git.DeleteRemoteRefs(m_sRemote, list)) CMessageBox::Show(m_hWnd, g_Git.GetGitLastErr(_T("Could not delete remote ref."), CGit::GIT_CMD_PUSH), _T("TortoiseGit"), MB_OK | MB_ICONERROR); sysProgressDlg.Stop(); BringWindowToTop(); Refresh(); }
bool CBrowseRefsDlg::DoDeleteRef(CString completeRefName) { bool bIsRemoteBranch = false; bool bIsBranch = false; if (wcsncmp(completeRefName, L"refs/remotes/",13) == 0) {bIsBranch = true; bIsRemoteBranch = true;} else if (wcsncmp(completeRefName, L"refs/heads/",11) == 0) {bIsBranch = true;} if (bIsRemoteBranch) { CString branchToDelete = completeRefName.Mid(13); CString remoteName, remoteBranchToDelete; if (SplitRemoteBranchName(branchToDelete, remoteName, remoteBranchToDelete)) return false; if (CAppUtils::IsSSHPutty()) CAppUtils::LaunchPAgent(NULL, &remoteName); CSysProgressDlg sysProgressDlg; sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_DELETING_REMOTE_REFS))); sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); sysProgressDlg.SetShowProgressBar(false); sysProgressDlg.ShowModal(this, true); STRING_VECTOR list; list.push_back(_T("refs/heads/") + remoteBranchToDelete); if (g_Git.DeleteRemoteRefs(remoteName, list)) { CMessageBox::Show(m_hWnd, g_Git.GetGitLastErr(_T("Could not delete remote ref."), CGit::GIT_CMD_PUSH), _T("TortoiseGit"), MB_OK | MB_ICONERROR); sysProgressDlg.Stop(); BringWindowToTop(); return false; } sysProgressDlg.Stop(); BringWindowToTop(); } else if (bIsBranch) { if (g_Git.DeleteRef(completeRefName)) { CMessageBox::Show(m_hWnd, g_Git.GetGitLastErr(L"Could not delete reference.", CGit::GIT_CMD_DELETETAGBRANCH), _T("TortoiseGit"), MB_OK | MB_ICONERROR); return false; } } else if (wcsncmp(completeRefName, L"refs/tags/", 10) == 0) { if (g_Git.DeleteRef(completeRefName)) { CMessageBox::Show(m_hWnd, g_Git.GetGitLastErr(L"Could not delete reference.", CGit::GIT_CMD_DELETETAGBRANCH), _T("TortoiseGit"), MB_OK | MB_ICONERROR); return false; } } return true; }
void CDeleteRemoteTagDlg::Refresh() { m_ctrlTags.DeleteAllItems(); m_SelectAll.SetCheck(BST_UNCHECKED); m_taglist.clear(); CSysProgressDlg sysProgressDlg; sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_LOADING))); sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); sysProgressDlg.SetShowProgressBar(false); sysProgressDlg.ShowModal(this, true); g_Git.GetRemoteTags(m_sRemote, m_taglist); sysProgressDlg.Stop(); for (int i = 0; i < (int)m_taglist.size(); ++i) { m_ctrlTags.InsertItem(i, m_taglist[i]); } DialogEnableWindow(IDOK, FALSE); }
void CDeleteRemoteTagDlg::OnBnClickedOk() { if (m_ctrlTags.GetSelectedCount() > 1) { CString msg; msg.Format(IDS_PROC_DELETENREFS, m_ctrlTags.GetSelectedCount()); if (CMessageBox::Show(m_hWnd, msg, _T("TortoiseGit"), 2, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_DELETEBUTTON)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))) == 2) return; } else // GetSelectedCount() is 1, otherwise the button is disabled { POSITION pos = m_ctrlTags.GetFirstSelectedItemPosition(); CString msg; msg.Format(IDS_PROC_DELETEBRANCHTAG, m_taglist[(m_ctrlTags.GetNextSelectedItem(pos))]); if (CMessageBox::Show(m_hWnd, msg, _T("TortoiseGit"), 2, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_DELETEBUTTON)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))) == 2) return; } CMassiveGitTask mgtPush(_T("push ") + m_sRemote, FALSE); POSITION pos = m_ctrlTags.GetFirstSelectedItemPosition(); int index; while ((index = m_ctrlTags.GetNextSelectedItem(pos)) >= 0) { mgtPush.AddFile(_T(":refs/tags/") + m_taglist[index]); } CSysProgressDlg sysProgressDlg; sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_DELETING_REMOTE_REFS))); sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); sysProgressDlg.SetShowProgressBar(false); sysProgressDlg.ShowModal(this, true); BOOL cancel = FALSE; mgtPush.Execute(cancel); sysProgressDlg.Stop(); Refresh(); }
int CGitLogList::DeleteRef(const CString& ref) { CString shortname; if (CGit::GetShortName(ref, shortname, _T("refs/remotes/"))) { CString msg; msg.Format(IDS_PROC_DELETEREMOTEBRANCH, (LPCTSTR)ref); int result = CMessageBox::Show(nullptr, msg, _T("TortoiseGit"), 3, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_PROC_DELETEREMOTEBRANCH_LOCALREMOTE)), CString(MAKEINTRESOURCE(IDS_PROC_DELETEREMOTEBRANCH_LOCAL)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))); if (result == 1) { CString remoteName = shortname.Left(shortname.Find(L'/')); shortname = shortname.Mid(shortname.Find(L'/') + 1); if (CAppUtils::IsSSHPutty()) CAppUtils::LaunchPAgent(nullptr, &remoteName); CSysProgressDlg sysProgressDlg; sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_DELETING_REMOTE_REFS))); sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); sysProgressDlg.SetShowProgressBar(false); sysProgressDlg.ShowModal(this, true); STRING_VECTOR list; list.push_back(_T("refs/heads/") + shortname); if (g_Git.DeleteRemoteRefs(remoteName, list)) CMessageBox::Show(nullptr, g_Git.GetGitLastErr(_T("Could not delete remote ref."), CGit::GIT_CMD_PUSH), _T("TortoiseGit"), MB_OK | MB_ICONERROR); sysProgressDlg.Stop(); return TRUE; } else if (result == 2) { if (g_Git.DeleteRef(ref)) { CMessageBox::Show(nullptr, g_Git.GetGitLastErr(L"Could not delete reference.", CGit::GIT_CMD_DELETETAGBRANCH), _T("TortoiseGit"), MB_OK | MB_ICONERROR); return FALSE; } return TRUE; } return FALSE; } else if (CGit::GetShortName(ref, shortname, _T("refs/stash"))) { CString err; std::vector<GitRevLoglist> stashList; size_t count = !GitRevLoglist::GetRefLog(ref, stashList, err) ? stashList.size() : 0; CString msg; msg.Format(IDS_PROC_DELETEALLSTASH, count); if (CMessageBox::Show(nullptr, msg, _T("TortoiseGit"), 2, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_DELETEBUTTON)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))) == 1) { CString sCmd; sCmd.Format(_T("git.exe stash clear")); CString out; if (g_Git.Run(sCmd, &out, CP_UTF8)) CMessageBox::Show(nullptr, out, _T("TortoiseGit"), MB_OK | MB_ICONERROR); return TRUE; } return FALSE; } CString msg; msg.Format(IDS_PROC_DELETEBRANCHTAG, (LPCTSTR)ref); if (CMessageBox::Show(nullptr, msg, _T("TortoiseGit"), 2, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_DELETEBUTTON)), CString(MAKEINTRESOURCE(IDS_ABORTBUTTON))) == 1) { if (g_Git.DeleteRef(ref)) { CMessageBox::Show(nullptr, g_Git.GetGitLastErr(L"Could not delete reference.", CGit::GIT_CMD_DELETETAGBRANCH), _T("TortoiseGit"), MB_OK | MB_ICONERROR); return FALSE; } return TRUE; } return FALSE; }
bool CBrowseRefsDlg::DoDeleteRef(CString completeRefName, bool bForce) { bool bIsRemoteBranch = false; bool bIsBranch = false; if (wcsncmp(completeRefName, L"refs/remotes/",13) == 0) {bIsBranch = true; bIsRemoteBranch = true;} else if (wcsncmp(completeRefName, L"refs/heads/",11) == 0) {bIsBranch = true;} if(bIsBranch) { CString branchToDelete = completeRefName.Mid(bIsRemoteBranch ? 13 : 11); CString cmd; if(bIsRemoteBranch) { CString remoteName, remoteBranchToDelete; if (SplitRemoteBranchName(branchToDelete, remoteName, remoteBranchToDelete)) return false; if(CAppUtils::IsSSHPutty()) { CAppUtils::LaunchPAgent(NULL, &remoteName); } cmd.Format(L"git.exe push \"%s\" :refs/heads/%s", remoteName, remoteBranchToDelete); } else cmd.Format(L"git.exe branch -%c -- %s",bForce?L'D':L'd',branchToDelete); CSysProgressDlg sysProgressDlg; if (bIsRemoteBranch) { sysProgressDlg.SetTitle(CString(MAKEINTRESOURCE(IDS_APPNAME))); sysProgressDlg.SetLine(1, CString(MAKEINTRESOURCE(IDS_DELETING_REMOTE_REFS))); sysProgressDlg.SetLine(2, CString(MAKEINTRESOURCE(IDS_PROGRESSWAIT))); sysProgressDlg.SetShowProgressBar(false); sysProgressDlg.ShowModal(this, true); } CString errorMsg; if(g_Git.Run(cmd,&errorMsg,CP_UTF8)!=0) { CMessageBox::Show(m_hWnd, errorMsg, _T("TortoiseGit"), MB_OK | MB_ICONERROR); if (bIsRemoteBranch) sysProgressDlg.Stop(); BringWindowToTop(); return false; } if (bIsRemoteBranch) sysProgressDlg.Stop(); BringWindowToTop(); } else if (wcsncmp(completeRefName, L"refs/tags/", 10) == 0) { CString tagToDelete = completeRefName.Mid(10); CString cmd; cmd.Format(L"git.exe tag -d -- %s",tagToDelete); CString errorMsg; if(g_Git.Run(cmd,&errorMsg,CP_UTF8)!=0) { CMessageBox::Show(m_hWnd, errorMsg, _T("TortoiseGit"), MB_OK | MB_ICONERROR); return false; } } return true; }