From 8204e0be6ff0ee832018dea4e522e122f0cb53e5 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Wed, 15 Jul 2009 13:45:29 +0800 Subject: [PATCH] Enhance Rebase dialog. Add force rebase checkbox. Disable start button when no item rebase. Don't show merge commit Signed-off-by: Frank Li --- src/Resources/TortoiseProcENG.rc | Bin 438970 -> 440134 bytes src/TortoiseProc/Commands/FetchCommand.cpp | 23 ++++--- src/TortoiseProc/RebaseDlg.cpp | 93 ++++++++++++++++++++++------- src/TortoiseProc/RebaseDlg.h | 3 + src/TortoiseProc/resource.h | Bin 162872 -> 163148 bytes 5 files changed, 88 insertions(+), 31 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index cefbb6042f129d7bd11ecc4af505a23744442619..e192c14db19796e1453dc7194a635bbf8340a31a 100644 GIT binary patch delta 795 zcmbtRO=uHQ5T4!lb{lX_6&oZijT^BQMT!wEdQog_E@B$%S`rX7iBW@X650eU741R% zxhPn|Tzc@}#hxn*LA_b6r$V84ETSGuDqaP@_hiw72SFZh-n{wwX6BpLm+qyF?%8|B zqItVz^!qa{^KEl3vmtpXBVHN({39cldF7!Y{r6|ZW%=~8xhM)d4$&YTp#zk_IgEFZ4)SKr zi1SKP*c^LdgdR9qfh%z>-^tp?6TH44yW&H1lFrdEU83`pA&*Ar6fB;$r05KJy#2Ki z;g31#BwXr4S(nOMHmC-@PF2V&XsC|HF3==yC3yM7McKo(@6zUPpR6u!uSwYvG{0-! zitG8;G zJ`p?l>zWMz*Hm}^aVm5^fDQwa(|VE#a50WE4NqP7u4bsx1WsO)=wkM=j&U*BE$E6; zWmECU;_3&hgP(WW+bqRUl9zL`=X9`@zwKFtDSriW3JX!Bsiml&f^9&rL#rYJEpuX6 LM*Qp}yRh#k?}xcH delta 121 zcmX^1PHNXvsfHHDElf4Lw%6@qIx>|#fFYA1nIU^Re;~8y^n?KBMblTQGxJOr2xQ(f zy>AK=$M$Q1%uy`Ujl!5GOkbeF#4|nS0~6o&dtuCCjFS_x#U=+FU}=9B!3@M8nsxiT Z2sRJH=|0Y^eAD~Zvq^3L*URRi2>|$>Eq?$2 diff --git a/src/TortoiseProc/Commands/FetchCommand.cpp b/src/TortoiseProc/Commands/FetchCommand.cpp index 86f168c..e11ce89 100644 --- a/src/TortoiseProc/Commands/FetchCommand.cpp +++ b/src/TortoiseProc/Commands/FetchCommand.cpp @@ -45,17 +45,24 @@ bool FetchCommand::Execute() CString cmd; cmd.Format(_T("git.exe fetch \"%s\" %s"),url, dlg.m_RemoteBranchName); CProgressDlg progress; + + if(!dlg.m_bRebase) + { + progress.m_changeAbortButtonOnSuccessTo=_T("&Rebase"); + }else + { + progress.m_bAutoCloseOnSuccess = true; + } + progress.m_GitCmd=cmd; - if(progress.DoModal()==IDOK) + int userResponse=progress.DoModal(); + + if( (userResponse==IDC_PROGRESS_BUTTON1) || ( progress.m_GitStatus ==0 && dlg.m_bRebase) ) { - if( progress.m_GitStatus ==0 && dlg.m_bRebase) + CRebaseDlg dlg; + if(dlg.DoModal() == IDOK) { - CRebaseDlg dlg; - if(dlg.DoModal() == IDOK) - { - return TRUE; - } - + return TRUE; } return TRUE; } diff --git a/src/TortoiseProc/RebaseDlg.cpp b/src/TortoiseProc/RebaseDlg.cpp index 7772a95..c39c386 100644 --- a/src/TortoiseProc/RebaseDlg.cpp +++ b/src/TortoiseProc/RebaseDlg.cpp @@ -23,6 +23,7 @@ CRebaseDlg::CRebaseDlg(CWnd* pParent /*=NULL*/) m_CurrentRebaseIndex=-1; m_bThreadRunning =FALSE; this->m_IsCherryPick = FALSE; + m_bForce=FALSE; } CRebaseDlg::~CRebaseDlg() @@ -41,6 +42,7 @@ void CRebaseDlg::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX,IDC_COMMIT_LIST,m_CommitList); DDX_Control(pDX,IDC_REBASE_COMBOXEX_BRANCH, this->m_BranchCtrl); DDX_Control(pDX,IDC_REBASE_COMBOXEX_UPSTREAM, this->m_UpstreamCtrl); + DDX_Check(pDX, IDC_REBASE_CHECK_FORCE,m_bForce); } @@ -57,6 +59,7 @@ BEGIN_MESSAGE_MAP(CRebaseDlg, CResizableStandAloneDialog) ON_CBN_SELCHANGE(IDC_REBASE_COMBOXEX_UPSTREAM, &CRebaseDlg::OnCbnSelchangeUpstream) ON_MESSAGE(MSG_REBASE_UPDATE_UI, OnRebaseUpdateUI) ON_BN_CLICKED(IDC_BUTTON_BROWSE, &CRebaseDlg::OnBnClickedButtonBrowse) + ON_BN_CLICKED(IDC_REBASE_CHECK_FORCE, &CRebaseDlg::OnBnClickedRebaseCheckForce) END_MESSAGE_MAP() void CRebaseDlg::AddRebaseAnchor() @@ -76,6 +79,7 @@ void CRebaseDlg::AddRebaseAnchor() AddAnchor(IDC_REBASE_STATIC_UPSTREAM,TOP_LEFT); AddAnchor(IDC_REBASE_STATIC_BRANCH,TOP_LEFT); AddAnchor(IDHELP, BOTTOM_RIGHT); + AddAnchor(IDC_REBASE_CHECK_FORCE,TOP_RIGHT); this->AddOthersToAnchor(); } @@ -127,6 +131,8 @@ BOOL CRebaseDlg::OnInitDialog() m_wndOutputRebase.Call(SCI_SETREADONLY, TRUE); m_tooltips.Create(this); + + m_tooltips.AddTool(IDC_REBASE_CHECK_FORCE,IDS_REBASE_FORCE_TT); m_FileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS |SVNSLC_COLADD|SVNSLC_COLDEL , _T("RebaseDlg"),(SVNSLC_POPALL ^ SVNSLC_POPCOMMIT),false); @@ -408,40 +414,74 @@ void CRebaseDlg::OnCbnSelchangeUpstream() void CRebaseDlg::FetchLogList() { - m_CommitList.Clear(); - this->m_CommitList.FillGitLog(NULL,0,&m_UpstreamCtrl.GetString(),&m_BranchCtrl.GetString()); - if( m_CommitList.GetItemCount() == 0 ) - m_CommitList.ShowText(_T("Nothing to Rebase")); + if(!this->m_bForce) + { + CString base,hash; + CString cmd; + cmd.Format(_T("git.exe merge-base %s %s"), m_UpstreamCtrl.GetString(),m_BranchCtrl.GetString()); + if(g_Git.Run(cmd,&base,CP_ACP)) + { + CMessageBox::Show(NULL,base,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return; + } + base=base.Left(40); + + cmd.Format(_T("git.exe rev-parse %s"), m_UpstreamCtrl.GetString()); + if( g_Git.Run(cmd,&hash,CP_ACP)) + { + CMessageBox::Show(NULL,base,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return; + } + hash=hash.Left(40); + + if( base == hash ) + { + m_CommitList.Clear(); + CString text,fmt; + fmt.LoadString(IDS_REBASE_UPTODATE_FMT); + text.Format(fmt,m_BranchCtrl.GetString()); + m_CommitList.ShowText(text); + } + + }else + { + m_CommitList.Clear(); + this->m_CommitList.FillGitLog(NULL,0,&m_UpstreamCtrl.GetString(),&m_BranchCtrl.GetString()); + if( m_CommitList.GetItemCount() == 0 ) + m_CommitList.ShowText(_T("Nothing to Rebase")); - CString hash=g_Git.GetHash(m_UpstreamCtrl.GetString()); + CString hash=g_Git.GetHash(m_UpstreamCtrl.GetString()); #if 0 - if(m_CommitList.m_logEntries[m_CommitList.m_logEntries.size()-1].m_ParentHash.size() >=0 ) - { - if(hash == m_CommitList.m_logEntries[m_CommitList.m_logEntries.size()-1].m_ParentHash[0]) + if(m_CommitList.m_logEntries[m_CommitList.m_logEntries.size()-1].m_ParentHash.size() >=0 ) { - m_CommitList.Clear(); - m_CommitList.ShowText(_T("Nothing Rebase")); + if(hash == m_CommitList.m_logEntries[m_CommitList.m_logEntries.size()-1].m_ParentHash[0]) + { + m_CommitList.Clear(); + m_CommitList.ShowText(_T("Nothing Rebase")); + } } - } #endif - m_tooltips.Pop(); - AddBranchToolTips(&this->m_BranchCtrl); - AddBranchToolTips(&this->m_UpstreamCtrl); + m_tooltips.Pop(); + AddBranchToolTips(&this->m_BranchCtrl); + AddBranchToolTips(&this->m_UpstreamCtrl); - for(int i=0;im_CurrentRebaseIndex = -1; - else - this->m_CurrentRebaseIndex = m_CommitList.m_logEntries.size(); + if(m_CommitList.m_IsOldFirst) + this->m_CurrentRebaseIndex = -1; + else + this->m_CurrentRebaseIndex = m_CommitList.m_logEntries.size(); + } + + this->GetDlgItem(IDC_REBASE_CONTINUE)->EnableWindow(m_CommitList.GetItemCount()); } void CRebaseDlg::AddBranchToolTips(CHistoryCombo *pBranch) @@ -1242,3 +1282,10 @@ void CRebaseDlg::OnBnClickedButtonBrowse() if(CBrowseRefsDlg::PickRefForCombo(&m_UpstreamCtrl, gPickRef_NoTag)) OnCbnSelchangeUpstream(); } + +void CRebaseDlg::OnBnClickedRebaseCheckForce() +{ + // TODO: Add your control notification handler code here + this->UpdateData(); + this->FetchLogList(); +} diff --git a/src/TortoiseProc/RebaseDlg.h b/src/TortoiseProc/RebaseDlg.h index 1f2dfe9..6b981e8 100644 --- a/src/TortoiseProc/RebaseDlg.h +++ b/src/TortoiseProc/RebaseDlg.h @@ -110,6 +110,8 @@ public: BOOL m_bPickAll; BOOL m_bSquashAll; BOOL m_bEditAll; + + BOOL m_bForce; CSplitterControl m_wndSplitter; CMFCTabCtrl m_ctrlTabCtrl; @@ -134,4 +136,5 @@ public: int StateAction(); int GoNext(); afx_msg void OnBnClickedButtonBrowse(); + afx_msg void OnBnClickedRebaseCheckForce(); }; diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index 7542b8d35c710c0e43d1647c1259a1fdf10e4bf7..6ba4b026f1021ff180e74dbe6075bebf3660fc81 100644 GIT binary patch delta 152 zcmdn-gY(QU&W0_Fx0_*u5^Yhrx!a=JqYBZs^b zgCj#QgDXQkLnuQ4LkNREg9}h31T5ml;5#`{MRdAe4inq-B?3%Jf(X@aK$SrZ&XeO0 ri%$+<RhETSnjeL@iv$MideOj6s=9@XZ0uB$Cz=8o5m(F_v6qojV0#?sm B6L$ar -- 2.11.0