From 40ae82ff6fa5207a6d3014ff2fdbc4de9e444182 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Wed, 15 Jul 2009 16:00:15 +0800 Subject: [PATCH] Add post action button for rebase dialog. Such as send patch by email Signed-off-by: Frank Li --- src/Resources/TortoiseProcENG.rc | Bin 440134 -> 440430 bytes src/TortoiseProc/AppUtils.cpp | 26 +++++++ src/TortoiseProc/AppUtils.h | 1 + src/TortoiseProc/Commands/FetchCommand.cpp | 18 ++++- src/TortoiseProc/Commands/FormatPatchCommand.cpp | 20 +----- src/TortoiseProc/RebaseDlg.cpp | 85 +++++++++++++++-------- src/TortoiseProc/RebaseDlg.h | 5 ++ src/TortoiseProc/resource.h | Bin 163148 -> 163332 bytes 8 files changed, 106 insertions(+), 49 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index e192c14db19796e1453dc7194a635bbf8340a31a..f37e3991613674b6d5606b1a913824cadb1e2c8f 100644 GIT binary patch delta 251 zcmX^1PU_tUsfHHD7N#xCS0W})xXv+IVT#h^4c$D9#?vo`F-xllF!(bBGlVe2GdMAX z0_hMS-;Y6u!3>Cv7z`QA!EB?c6B#w9TU=lin;dX}W&67bX10yf16r6_raS#$)|+lH zgPCXggdAp}=~@?=o3?M@VF_WJ-Y|=qW4cTsGf%r74+{{pZr9^sThTcERuqfCbb%f= zK1D~Mo&F3#VB0}9E5M-=P&AbxdAfB1i==8XLkUA75SKC(0~I6zCDIu38H#|k0+>t! X$`()m7{)3-y>C66)b@Y9Y#y2bfeAx; delta 64 zcmaF&LF(8$sfHHD7N#xCS0bkWDPR=0) + CString one=log.Tokenize(_T("\n"),start); + else + start = 0; + + while(start>=0) + { + CString one=log.Tokenize(_T("\n"),start); + one=one.Trim(); + if(one.IsEmpty()) + continue; + one.Replace(_T('/'),_T('\\')); + CTGitPath path; + path.SetFromWin(one); + list.AddPath(path); + } + return SendPatchMail(list,autoclose); +} + + int CAppUtils::GetLogOutputEncode(CGit *pGit) { CString cmd,output; diff --git a/src/TortoiseProc/AppUtils.h b/src/TortoiseProc/AppUtils.h index 41f79b2..dea827e 100644 --- a/src/TortoiseProc/AppUtils.h +++ b/src/TortoiseProc/AppUtils.h @@ -195,6 +195,7 @@ public: static CString ChooseRepository(CString *path); static bool SendPatchMail(CTGitPathList &pathlist,bool autoclose=false); + static bool SendPatchMail(CString &cmd,CString &formatpatchoutput,bool autoclose=false); static int SaveCommitUnicodeFile(CString &filename, CString &mesage); diff --git a/src/TortoiseProc/Commands/FetchCommand.cpp b/src/TortoiseProc/Commands/FetchCommand.cpp index e11ce89..e5953f9 100644 --- a/src/TortoiseProc/Commands/FetchCommand.cpp +++ b/src/TortoiseProc/Commands/FetchCommand.cpp @@ -60,10 +60,26 @@ bool FetchCommand::Execute() if( (userResponse==IDC_PROGRESS_BUTTON1) || ( progress.m_GitStatus ==0 && dlg.m_bRebase) ) { CRebaseDlg dlg; - if(dlg.DoModal() == IDOK) + dlg.m_PostButtonText=_T("Email &Patch..."); + int response = dlg.DoModal(); + if(response == IDOK) { return TRUE; } + if(response == IDC_REBASE_POST_BUTTON) + { + CString cmd,out; + cmd.Format(_T("git.exe format-patch -o \"%s\" %s..%s"), + g_Git.m_CurrentDir, + dlg.m_Upstream,dlg.m_Branch); + if(g_Git.Run(cmd,&out,CP_ACP)) + { + CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return FALSE; + } + + CAppUtils::SendPatchMail(cmd,out); + } return TRUE; } } diff --git a/src/TortoiseProc/Commands/FormatPatchCommand.cpp b/src/TortoiseProc/Commands/FormatPatchCommand.cpp index eea9c39..f816f40 100644 --- a/src/TortoiseProc/Commands/FormatPatchCommand.cpp +++ b/src/TortoiseProc/Commands/FormatPatchCommand.cpp @@ -81,25 +81,7 @@ bool FormatPatchCommand::Execute() { if(dlg.m_bSendMail) { - CTGitPathList list; - CString log=progress.m_LogText; - int start=log.Find(cmd); - if(start >=0) - CString one=log.Tokenize(_T("\n"),start); - - while(start>=0) - { - CString one=log.Tokenize(_T("\n"),start); - one=one.Trim(); - if(one.IsEmpty()) - continue; - one.Replace(_T('/'),_T('\\')); - CTGitPath path; - path.SetFromWin(one); - list.AddPath(path); - } - - CAppUtils::SendPatchMail(list); + CAppUtils::SendPatchMail(cmd,progress.m_LogText); } } return !progress.m_GitStatus; diff --git a/src/TortoiseProc/RebaseDlg.cpp b/src/TortoiseProc/RebaseDlg.cpp index c39c386..91d875e 100644 --- a/src/TortoiseProc/RebaseDlg.cpp +++ b/src/TortoiseProc/RebaseDlg.cpp @@ -60,6 +60,8 @@ BEGIN_MESSAGE_MAP(CRebaseDlg, CResizableStandAloneDialog) ON_MESSAGE(MSG_REBASE_UPDATE_UI, OnRebaseUpdateUI) ON_BN_CLICKED(IDC_BUTTON_BROWSE, &CRebaseDlg::OnBnClickedButtonBrowse) ON_BN_CLICKED(IDC_REBASE_CHECK_FORCE, &CRebaseDlg::OnBnClickedRebaseCheckForce) + ON_STN_CLICKED(IDC_STATUS_STATIC, &CRebaseDlg::OnStnClickedStatusStatic) + ON_BN_CLICKED(IDC_REBASE_POST_BUTTON, &CRebaseDlg::OnBnClickedRebasePostButton) END_MESSAGE_MAP() void CRebaseDlg::AddRebaseAnchor() @@ -80,6 +82,8 @@ void CRebaseDlg::AddRebaseAnchor() AddAnchor(IDC_REBASE_STATIC_BRANCH,TOP_LEFT); AddAnchor(IDHELP, BOTTOM_RIGHT); AddAnchor(IDC_REBASE_CHECK_FORCE,TOP_RIGHT); + AddAnchor(IDC_REBASE_POST_BUTTON,BOTTOM_LEFT); + this->AddOthersToAnchor(); } @@ -133,6 +137,9 @@ BOOL CRebaseDlg::OnInitDialog() m_tooltips.Create(this); m_tooltips.AddTool(IDC_REBASE_CHECK_FORCE,IDS_REBASE_FORCE_TT); + m_tooltips.AddTool(IDC_REBASE_ABORT,IDS_REBASE_ABORT_TT); + + m_FileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS |SVNSLC_COLADD|SVNSLC_COLDEL , _T("RebaseDlg"),(SVNSLC_POPALL ^ SVNSLC_POPCOMMIT),false); @@ -441,46 +448,45 @@ void CRebaseDlg::FetchLogList() fmt.LoadString(IDS_REBASE_UPTODATE_FMT); text.Format(fmt,m_BranchCtrl.GetString()); m_CommitList.ShowText(text); + this->GetDlgItem(IDC_REBASE_CONTINUE)->EnableWindow(m_CommitList.GetItemCount()); + return; } - - }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")); + } + + 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(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(hash == m_CommitList.m_logEntries[m_CommitList.m_logEntries.size()-1].m_ParentHash[0]) - { - m_CommitList.Clear(); - m_CommitList.ShowText(_T("Nothing Rebase")); - } + m_CommitList.Clear(); + m_CommitList.ShowText(_T("Nothing Rebase")); } + } #endif - 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(); + 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(); + this->GetDlgItem(IDC_REBASE_CONTINUE)->EnableWindow(m_CommitList.GetItemCount()); } @@ -913,6 +919,13 @@ void CRebaseDlg::SetControlEnable() m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_SQUASH)| m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_EDIT)| m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REBASE_SKIP)); + + if( m_RebaseStage == REBASE_DONE && (!this->m_PostButtonText.IsEmpty()) ) + { + this->GetDlgItem(IDC_STATUS_STATIC)->ShowWindow(SW_HIDE); + this->GetDlgItem(IDC_REBASE_POST_BUTTON)->ShowWindow(SW_SHOWNORMAL); + this->GetDlgItem(IDC_REBASE_POST_BUTTON)->SetWindowText(this->m_PostButtonText); + } break; } @@ -1289,3 +1302,17 @@ void CRebaseDlg::OnBnClickedRebaseCheckForce() this->UpdateData(); this->FetchLogList(); } + +void CRebaseDlg::OnStnClickedStatusStatic() +{ + // TODO: Add your control notification handler code here +} + +void CRebaseDlg::OnBnClickedRebasePostButton() +{ + // TODO: Add your control notification handler code here + this->m_Upstream=this->m_UpstreamCtrl.GetString(); + this->m_Branch=this->m_BranchCtrl.GetString(); + + this->EndDialog(IDC_REBASE_POST_BUTTON); +} diff --git a/src/TortoiseProc/RebaseDlg.h b/src/TortoiseProc/RebaseDlg.h index 6b981e8..2a301e1 100644 --- a/src/TortoiseProc/RebaseDlg.h +++ b/src/TortoiseProc/RebaseDlg.h @@ -112,6 +112,7 @@ public: BOOL m_bEditAll; BOOL m_bForce; + CString m_PostButtonText; CSplitterControl m_wndSplitter; CMFCTabCtrl m_ctrlTabCtrl; @@ -124,6 +125,8 @@ public: CHistoryCombo m_UpstreamCtrl; CString m_Upstream; + CString m_Branch; + BOOL m_IsCherryPick; REBASE_STAGE m_RebaseStage; @@ -137,4 +140,6 @@ public: int GoNext(); afx_msg void OnBnClickedButtonBrowse(); afx_msg void OnBnClickedRebaseCheckForce(); + afx_msg void OnStnClickedStatusStatic(); + afx_msg void OnBnClickedRebasePostButton(); }; diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index 6ba4b026f1021ff180e74dbe6075bebf3660fc81..67b1957ed364437890b724b5367af597dddb552a 100644 GIT binary patch delta 107 zcmV-x0F?jC`U!;m34pW#xDJ=V9RdysPykN=Qvg%|Uz2gyA(wy+0VI=7Q3{i$=q{IF z5CJ5Ya1Q|xha?XHwSXjQ{`u -- 2.11.0