From 42cd75f4c81670ad3b9af0d69e387e1ec2f48895 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 21 Feb 2009 17:09:33 +0800 Subject: [PATCH] Use Rebase Dialog For cherry pick ant log dialog actions. Signed-off-by: Frank Li --- src/TortoiseProc/Commands/RebaseCommand.cpp | 7 +++++ src/TortoiseProc/GitLogListAction.cpp | 44 +++++++++++++++++++++++++++++ src/TortoiseProc/RebaseDlg.cpp | 40 ++++++++++++++++++++++---- src/TortoiseProc/RebaseDlg.h | 3 ++ 4 files changed, 88 insertions(+), 6 deletions(-) diff --git a/src/TortoiseProc/Commands/RebaseCommand.cpp b/src/TortoiseProc/Commands/RebaseCommand.cpp index d517af1..c7df2ae 100644 --- a/src/TortoiseProc/Commands/RebaseCommand.cpp +++ b/src/TortoiseProc/Commands/RebaseCommand.cpp @@ -31,6 +31,13 @@ bool RebaseCommand::Execute() { bool bRet =false; + + if(!g_Git.CheckCleanWorkTree()) + { + CMessageBox::Show(NULL,_T("Rebase Require Clean Working Tree"),_T("TortoiseGit"),MB_OK); + return false; + } + CRebaseDlg dlg; if(dlg.DoModal() == IDOK) { diff --git a/src/TortoiseProc/GitLogListAction.cpp b/src/TortoiseProc/GitLogListAction.cpp index 86bd2cc..8bafa70 100644 --- a/src/TortoiseProc/GitLogListAction.cpp +++ b/src/TortoiseProc/GitLogListAction.cpp @@ -46,6 +46,7 @@ //#include "EditPropertiesDlg.h" #include "FileDiffDlg.h" #include "CommitDlg.h" +#include "RebaseDlg.h" IMPLEMENT_DYNAMIC(CGitLogList, CHintListCtrl) @@ -245,6 +246,49 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect) Refresh(); } break; + + case ID_CHERRY_PICK: + if(!g_Git.CheckCleanWorkTree()) + { + CMessageBox::Show(NULL,_T("Cherry Pick Require Clean Working Tree"),_T("TortoiseGit"),MB_OK); + + }else + { + CRebaseDlg dlg; + dlg.m_IsCherryPick = TRUE; + dlg.m_Upstream = this->m_CurrentBranch; + POSITION pos = GetFirstSelectedItemPosition(); + while(pos) + { + int indexNext = GetNextSelectedItem(pos); + dlg.m_CommitList.m_logEntries.push_back(*(GitRev*)m_arShownList[indexNext]); + dlg.m_CommitList.m_logEntries.at(dlg.m_CommitList.m_logEntries.size()-1).m_Action |= CTGitPath::LOGACTIONS_REBASE_PICK; + } + + if(dlg.DoModal() == IDOK) + { + Refresh(); + } + } + break; + case ID_REBASE_TO_VERSION: + if(!g_Git.CheckCleanWorkTree()) + { + CMessageBox::Show(NULL,_T("Rebase Require Clean Working Tree"),_T("TortoiseGit"),MB_OK); + + }else + { + CRebaseDlg dlg; + dlg.m_Upstream = pSelLogEntry->m_CommitHash; + + if(dlg.DoModal() == IDOK) + { + Refresh(); + } + } + + break; + default: //CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK); break; diff --git a/src/TortoiseProc/RebaseDlg.cpp b/src/TortoiseProc/RebaseDlg.cpp index e1f0cdf..4cdfcdf 100644 --- a/src/TortoiseProc/RebaseDlg.cpp +++ b/src/TortoiseProc/RebaseDlg.cpp @@ -20,6 +20,7 @@ CRebaseDlg::CRebaseDlg(CWnd* pParent /*=NULL*/) m_RebaseStage=CHOOSE_BRANCH; m_CurrentRebaseIndex=-1; m_bThreadRunning =FALSE; + this->m_IsCherryPick = FALSE; } CRebaseDlg::~CRebaseDlg() @@ -172,17 +173,30 @@ BOOL CRebaseDlg::OnInitDialog() // m_CommitList.m_IsOldFirst = TRUE; m_CommitList.m_IsRebaseReplaceGraph = TRUE; - m_CommitList.DeleteAllItems(); m_CommitList.InsertGitColumn(); - FetchLogList(); - SetContinueButtonText(); this->SetControlEnable(); + if(m_IsCherryPick) + { + this->m_BranchCtrl.SetCurSel(-1); + this->m_BranchCtrl.EnableWindow(FALSE); + this->m_UpstreamCtrl.EnableWindow(FALSE); + this->SetWindowText(_T("Cherry Pick")); + this->m_CommitList.StartFilter(); + + }else + { + SetContinueButtonText(); + m_CommitList.DeleteAllItems(); + FetchLogList(); + } + m_CommitList.m_ContextMenuMask &= ~(m_CommitList.GetContextMenuBit(CGitLogListBase::ID_CHERRY_PICK)| m_CommitList.GetContextMenuBit(CGitLogListBase::ID_SWITCHTOREV)| m_CommitList.GetContextMenuBit(CGitLogListBase::ID_RESET)| m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REVERTREV)| + m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_TO_VERSION)| m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REVERTTOREV)); return TRUE; @@ -343,6 +357,11 @@ void CRebaseDlg::LoadBranchInfo() AddBranchToolTips(&m_BranchCtrl); AddBranchToolTips(&m_UpstreamCtrl); + if(!m_Upstream.IsEmpty()) + { + m_UpstreamCtrl.AddString(m_Upstream); + m_UpstreamCtrl.SetCurSel(m_UpstreamCtrl.GetCount()-1); + } } void CRebaseDlg::OnCbnSelchangeBranch() @@ -753,8 +772,11 @@ void CRebaseDlg::SetControlEnable() this->GetDlgItem(IDC_PICK_ALL)->EnableWindow(TRUE); this->GetDlgItem(IDC_EDIT_ALL)->EnableWindow(TRUE); this->GetDlgItem(IDC_SQUASH_ALL)->EnableWindow(TRUE); - this->GetDlgItem(IDC_REBASE_COMBOXEX_BRANCH)->EnableWindow(TRUE); - this->GetDlgItem(IDC_REBASE_COMBOXEX_UPSTREAM)->EnableWindow(TRUE); + if(!m_IsCherryPick) + { + this->GetDlgItem(IDC_REBASE_COMBOXEX_BRANCH)->EnableWindow(TRUE); + this->GetDlgItem(IDC_REBASE_COMBOXEX_UPSTREAM)->EnableWindow(TRUE); + } //this->m_CommitList.m_IsEnableRebaseMenu=TRUE; this->m_CommitList.m_ContextMenuMask |= m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_PICK)| m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_SQUASH)| @@ -1084,8 +1106,14 @@ void CRebaseDlg::OnBnClickedAbort() CString cmd,out; if(m_OrigUpstreamHash.IsEmpty()) { - this->OnCancel(); + __super::OnCancel(); } + + if(m_RebaseStage == CHOOSE_BRANCH || m_RebaseStage== CHOOSE_COMMIT_PICK_MODE) + { + return; + } + if(CMessageBox::Show(NULL,_T("Are you sure abort rebase"),_T("TortoiseGit"),MB_YESNO) != IDYES) return; diff --git a/src/TortoiseProc/RebaseDlg.h b/src/TortoiseProc/RebaseDlg.h index fbd6b6f..05523c8 100644 --- a/src/TortoiseProc/RebaseDlg.h +++ b/src/TortoiseProc/RebaseDlg.h @@ -116,6 +116,9 @@ public: CHistoryCombo m_BranchCtrl; CHistoryCombo m_UpstreamCtrl; + + CString m_Upstream; + BOOL m_IsCherryPick; REBASE_STAGE m_RebaseStage; -- 2.11.0