ON_WM_SIZE()\r
ON_CBN_SELCHANGE(IDC_REBASE_COMBOXEX_BRANCH, &CRebaseDlg::OnCbnSelchangeBranch)\r
ON_CBN_SELCHANGE(IDC_REBASE_COMBOXEX_UPSTREAM, &CRebaseDlg::OnCbnSelchangeUpstream)\r
+ ON_MESSAGE(MSG_REBASE_UPDATE_UI, OnRebaseUpdateUI)\r
END_MESSAGE_MAP()\r
\r
void CRebaseDlg::AddRebaseAnchor()\r
m_ctrlTabCtrl.SetResizeMode(CMFCTabCtrl::RESIZE_NO);\r
// Create output panes:\r
//const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;\r
- DWORD dwStyle =LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP |LVS_SINGLESEL |WS_CHILD | WS_VISIBLE;\r
+ DWORD dwStyle =LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP |LVS_SINGLESEL |WS_CHILD | WS_VISIBLE;\r
\r
if (! this->m_FileListCtrl.Create(dwStyle,rectDummy,&this->m_ctrlTabCtrl,0) )\r
{\r
\r
m_tooltips.Create(this);\r
\r
- m_FileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS , _T("RebaseDlg"));\r
+ m_FileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS |IDS_STATUSLIST_COLADD|IDS_STATUSLIST_COLDEL , _T("RebaseDlg"),(SVNSLC_POPALL ^ SVNSLC_POPCOMMIT),false);\r
\r
m_ctrlTabCtrl.AddTab(&m_FileListCtrl,_T("Conflict File"));\r
m_ctrlTabCtrl.AddTab(&m_LogMessageCtrl,_T("Commit Message"),1);\r
case REBASE_CONTINUE:\r
Text = _T("Continue");\r
break;\r
+\r
+ case REBASE_CONFLICT:\r
+ Text = _T("Commit");\r
+ break;\r
+\r
case REBASE_ABORT:\r
case REBASE_FINISH:\r
Text = _T("Finish");\r
case REBASE_CONTINUE:\r
case REBASE_ABORT:\r
case REBASE_FINISH:\r
+ case REBASE_CONFLICT:\r
this->GetDlgItem(IDC_PICK_ALL)->EnableWindow(FALSE);\r
this->GetDlgItem(IDC_EDIT_ALL)->EnableWindow(FALSE);\r
this->GetDlgItem(IDC_SQUASH_ALL)->EnableWindow(FALSE);\r
\r
int CRebaseDlg::DoRebase()\r
{ \r
+ CString cmd,out;\r
if(m_CurrentRebaseIndex <0)\r
return 0;\r
if(m_CurrentRebaseIndex >= m_CommitList.GetItemCount() )\r
{\r
case CTGitPath::LOGACTIONS_REBASE_PICK:\r
AddLogString(CString(_T("Pick "))+pRev->m_CommitHash);\r
- pRev->m_Action|= CTGitPath::LOGACTIONS_REBASE_DONE;\r
+ cmd.Format(_T("git.exe cherry-pick %s"),pRev->m_CommitHash);\r
+ if(g_Git.Run(cmd,&out,CP_UTF8))\r
+ {\r
+ AddLogString(out);\r
+ CTGitPathList list;\r
+ if(g_Git.ListConflictFile(list))\r
+ {\r
+ AddLogString(_T("Get conflict files fail"));\r
+ return -1;\r
+ }\r
+ if(list.GetCount() == 0 )\r
+ {\r
+ pRev->m_Action|= CTGitPath::LOGACTIONS_REBASE_DONE;\r
+ break;\r
+ }\r
+\r
+ this->m_RebaseStage = REBASE_CONFLICT;\r
+ return -1; \r
+ }else\r
+ {\r
+ AddLogString(out);\r
+ pRev->m_Action|= CTGitPath::LOGACTIONS_REBASE_DONE;\r
+ }\r
break;\r
case CTGitPath::LOGACTIONS_REBASE_SQUASH:\r
break;\r
break;\r
}\r
}\r
- this->UpdateCurrentStatus();\r
+ this->PostMessage(MSG_REBASE_UPDATE_UI);\r
+ //this->UpdateCurrentStatus();\r
}\r
\r
InterlockedExchange(&m_bThreadRunning, FALSE);\r
- this->UpdateCurrentStatus();\r
- this->SetControlEnable();\r
- this->SetContinueButtonText();\r
+ this->PostMessage(MSG_REBASE_UPDATE_UI);\r
return ret;\r
+}\r
+\r
+void CRebaseDlg::ListConflictFile()\r
+{\r
+ this->m_FileListCtrl.DeleteAllItems(); \r
+ CTGitPathList list;\r
+ CTGitPath path;\r
+ list.AddPath(path);\r
+\r
+ this->m_FileListCtrl.GetStatus(list);\r
+ this->m_FileListCtrl.Show(CTGitPath::LOGACTIONS_UNMERGED,CTGitPath::LOGACTIONS_UNMERGED);\r
+ if( this->m_FileListCtrl.GetItemCount() == 0 )\r
+ {\r
+ \r
+ }\r
+}\r
+\r
+LRESULT CRebaseDlg::OnRebaseUpdateUI(WPARAM,LPARAM)\r
+{\r
+ UpdateCurrentStatus();\r
+ switch(m_RebaseStage)\r
+ {\r
+ case REBASE_CONFLICT:\r
+ ListConflictFile(); \r
+ this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_CONFLICT);\r
+ break;\r
+ default:\r
+ this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG);\r
+ } \r
+ return 0;\r
}
\ No newline at end of file
#define REBASE_TAB_MESSAGE 1\r
#define REBASE_TAB_LOG 2\r
\r
+#define MSG_REBASE_UPDATE_UI (WM_USER+151)\r
+\r
class CRebaseDlg : public CResizableStandAloneDialog\r
{\r
DECLARE_DYNAMIC(CRebaseDlg)\r
REBASE_CONTINUE,\r
REBASE_ABORT,\r
REBASE_FINISH,\r
+ REBASE_CONFLICT,\r
};\r
\r
protected:\r
virtual BOOL OnInitDialog();\r
DECLARE_MESSAGE_MAP()\r
virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);\r
+ LRESULT OnRebaseUpdateUI(WPARAM wParam, LPARAM lParam);\r
void DoSize(int delta);\r
void AddRebaseAnchor();\r
void RemoveAnchor();\r
void SetControlEnable();\r
void UpdateProgress();\r
void UpdateCurrentStatus();\r
+ void ListConflictFile();\r
int DoRebase();\r
volatile LONG m_bThreadRunning;\r
int RebaseThread();\r