OSDN Git Service

RebaseDlg: Pick Basic Working
authorFrank Li <lznuaa@gmail.com>
Tue, 17 Feb 2009 14:59:20 +0000 (22:59 +0800)
committerFrank Li <lznuaa@gmail.com>
Tue, 17 Feb 2009 14:59:20 +0000 (22:59 +0800)
src/TortoiseProc/RebaseDlg.cpp

index d399231..a259a97 100644 (file)
@@ -449,7 +449,7 @@ int CRebaseDlg::StartRebase()
                return -1;\r
        }\r
        //Todo \r
-       //git symbolic-ref HEAD > "$DOTEST"/head-name 2> /dev/null ||
+       //git symbolic-ref HEAD > "$DOTEST"/head-name 2> /dev/null ||\r
        //              echo "detached HEAD" > "$DOTEST"/head-name\r
 \r
        cmd.Format(_T("git.exe update-ref ORIG_HEAD HEAD"));\r
@@ -482,6 +482,40 @@ void CRebaseDlg::OnBnClickedContinue()
                m_RebaseStage = REBASE_START;\r
        }\r
 \r
+       if( m_RebaseStage == REBASE_CONFLICT )\r
+       {\r
+               CTGitPathList list;\r
+               if(g_Git.ListConflictFile(list))\r
+               {\r
+                       AddLogString(_T("Get conflict files fail"));\r
+                       return ;\r
+               }\r
+               if( list.GetCount() != 0 )\r
+               {\r
+                       CMessageBox::Show(NULL,_T("There are conflict file, you should mark it resolve"),_T("TortoiseGit"),MB_OK);\r
+                       return;\r
+               }\r
+\r
+               GitRev *curRev=(GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex];\r
+\r
+               CString out =_T("");\r
+               CString cmd;\r
+               cmd.Format(_T("git.exe commit -C \"%s\""), curRev->m_CommitHash);\r
+               if(g_Git.Run(cmd,&out,CP_UTF8))\r
+               {\r
+                       if(!g_Git.CheckCleanWorkTree())\r
+                       {\r
+                               CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+                               return;\r
+                       }\r
+               }\r
+               AddLogString(out);\r
+               this->m_ctrlTabCtrl.SetActiveTab(REBASE_TAB_LOG);\r
+               m_RebaseStage=REBASE_CONTINUE;\r
+               curRev->m_Action|=CTGitPath::LOGACTIONS_REBASE_DONE;\r
+               this->UpdateCurrentStatus();\r
+       }\r
+\r
        InterlockedExchange(&m_bThreadRunning, TRUE);\r
        SetControlEnable();\r
        \r
@@ -613,21 +647,15 @@ void CRebaseDlg::UpdateProgress()
                curRev=(GitRev*)m_CommitList.m_arShownList[m_CurrentRebaseIndex];\r
        }\r
        \r
-       if(m_CommitList.m_IsOldFirst)\r
-               prevIndex=m_CurrentRebaseIndex-1;\r
-       else\r
-               prevIndex=m_CurrentRebaseIndex+1;\r
-\r
-       if(prevIndex >= 0 && prevIndex<m_CommitList.m_arShownList.GetSize())\r
-       {\r
-               prevRev=(GitRev*)m_CommitList.m_arShownList[prevIndex];\r
-       }\r
-\r
-       if(prevRev)\r
-       {\r
-               prevRev->m_Action &= ~ CTGitPath::LOGACTIONS_REBASE_CURRENT;\r
-               m_CommitList.GetItemRect(prevIndex,&rect,LVIR_BOUNDS);\r
-               m_CommitList.InvalidateRect(rect);\r
+       for(int i=0;i<m_CommitList.m_arShownList.GetSize();i++)\r
+       {\r
+               prevRev=(GitRev*)m_CommitList.m_arShownList[i];\r
+               if(prevRev->m_Action & CTGitPath::LOGACTIONS_REBASE_CURRENT)\r
+               {       \r
+                       prevRev->m_Action &= ~ CTGitPath::LOGACTIONS_REBASE_CURRENT;\r
+                       m_CommitList.GetItemRect(i,&rect,LVIR_BOUNDS);\r
+                       m_CommitList.InvalidateRect(rect);\r
+               }\r
        }\r
 \r
        if(curRev)\r
@@ -688,6 +716,7 @@ int CRebaseDlg::DoRebase()
        {\r
        case CTGitPath::LOGACTIONS_REBASE_PICK:\r
                AddLogString(CString(_T("Pick "))+pRev->m_CommitHash);\r
+               AddLogString(pRev->m_Subject);\r
                cmd.Format(_T("git.exe cherry-pick %s"),pRev->m_CommitHash);\r
                if(g_Git.Run(cmd,&out,CP_UTF8))\r
                {\r
@@ -749,9 +778,8 @@ int CRebaseDlg::RebaseThread()
                                break;\r
                        }\r
                        m_RebaseStage = REBASE_CONTINUE;\r
-               }\r
 \r
-               if( m_RebaseStage == REBASE_CONTINUE )\r
+               }else if( m_RebaseStage == REBASE_CONTINUE )\r
                {\r
                        this->GoNext(); \r
                        if(IsEnd())\r
@@ -767,7 +795,9 @@ int CRebaseDlg::RebaseThread()
                        {       \r
                                break;\r
                        }\r
-               }\r
+\r
+               }else\r
+                       break;\r
                this->PostMessage(MSG_REBASE_UPDATE_UI);\r
                //this->UpdateCurrentStatus();\r
        }\r
@@ -779,13 +809,13 @@ int CRebaseDlg::RebaseThread()
 \r
 void CRebaseDlg::ListConflictFile()\r
 {\r
-       this->m_FileListCtrl.DeleteAllItems();  \r
+       this->m_FileListCtrl.Clear();   \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
+       this->m_FileListCtrl.GetStatus(list,true);\r
+       this->m_FileListCtrl.Show(CTGitPath::LOGACTIONS_UNMERGED|CTGitPath::LOGACTIONS_MODIFIED,CTGitPath::LOGACTIONS_UNMERGED);\r
        if( this->m_FileListCtrl.GetItemCount() == 0 )\r
        {\r
                \r