+}\r
+\r
+void CRebaseDlg::AddLogString(CString str)\r
+{\r
+ this->m_wndOutputRebase.SendMessage(SCI_SETREADONLY, FALSE);\r
+ CStringA sTextA = m_wndOutputRebase.StringForControl(str);//CUnicodeUtils::GetUTF8(str);\r
+ this->m_wndOutputRebase.SendMessage(SCI_REPLACESEL, 0, (LPARAM)(LPCSTR)sTextA);\r
+ this->m_wndOutputRebase.SendMessage(SCI_REPLACESEL, 0, (LPARAM)(LPCSTR)"\n");\r
+ this->m_wndOutputRebase.SendMessage(SCI_SETREADONLY, TRUE);\r
+}\r
+\r
+int CRebaseDlg::DoRebase()\r
+{ \r
+ if(m_CurrentRebaseIndex <0)\r
+ return 0;\r
+ if(m_CurrentRebaseIndex >= m_CommitList.GetItemCount() )\r
+ return 0;\r
+\r
+ this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG);\r
+\r
+ GitRev *pRev = (GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex];\r
+ int mode=pRev->m_Action & CTGitPath::LOGACTIONS_REBASE_MODE_MASK;\r
+ switch(mode)\r
+ {\r
+ case CTGitPath::LOGACTIONS_REBASE_PICK:\r
+ AddLogString(CString(_T("Pick "))+pRev->m_CommitHash);\r
+ pRev->m_Action|= CTGitPath::LOGACTIONS_REBASE_DONE;\r
+ break;\r
+ case CTGitPath::LOGACTIONS_REBASE_SQUASH:\r
+ break;\r
+ case CTGitPath::LOGACTIONS_REBASE_EDIT:\r
+ break;\r
+ case CTGitPath::LOGACTIONS_REBASE_SKIP:\r
+ pRev->m_Action|= CTGitPath::LOGACTIONS_REBASE_DONE;\r
+ return 0;\r
+ break;\r
+ default:\r
+ AddLogString(CString(_T("Unknow Action for "))+pRev->m_CommitHash);\r
+ break;\r
+ }\r
+ return 0;\r
+}\r
+\r
+BOOL CRebaseDlg::IsEnd()\r
+{\r
+ if(m_CommitList.m_IsOldFirst)\r
+ return m_CurrentRebaseIndex>= this->m_CommitList.GetItemCount();\r
+ else\r
+ return m_CurrentRebaseIndex<0;\r
+}\r
+\r
+int CRebaseDlg::RebaseThread()\r
+{\r
+ int ret=0;\r
+ while(1)\r
+ {\r
+ if( m_RebaseStage == REBASE_START )\r
+ {\r
+ if( this->StartRebase() )\r
+ {\r
+ InterlockedExchange(&m_bThreadRunning, FALSE);\r
+ ret = -1;\r
+ break;\r
+ }\r
+ m_RebaseStage = REBASE_CONTINUE;\r
+ }\r
+\r
+ if( m_RebaseStage == REBASE_CONTINUE )\r
+ {\r
+ this->GoNext(); \r
+ if(IsEnd())\r
+ {\r
+ ret = 0;\r
+ m_RebaseStage = REBASE_FINISH;\r
+ break;\r
+ }\r
+\r
+ ret = DoRebase();\r
+\r
+ if( ret )\r
+ { \r
+ break;\r
+ }\r
+ }\r
+ this->UpdateCurrentStatus();\r
+ }\r
+\r
+ InterlockedExchange(&m_bThreadRunning, FALSE);\r
+ this->UpdateCurrentStatus();\r
+ this->SetControlEnable();\r
+ this->SetContinueButtonText();\r
+ return ret;\r