OSDN Git Service

CherryPick Multi Commits basic work
authorFrank Li <lznuaa@gmail.com>
Fri, 27 Feb 2009 16:32:42 +0000 (00:32 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 27 Feb 2009 16:32:42 +0000 (00:32 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/GitLogListAction.cpp
src/TortoiseProc/RebaseDlg.cpp

index 06cadb3..e73a913 100644 (file)
@@ -392,7 +392,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                        dlg.m_CommitList.m_logEntries.push_back(*(GitRev*)m_arShownList[indexNext]);\r
                                        dlg.m_CommitList.m_logEntries.at(dlg.m_CommitList.m_logEntries.size()-1).m_Action |= CTGitPath::LOGACTIONS_REBASE_PICK;\r
                                }\r
                                        dlg.m_CommitList.m_logEntries.push_back(*(GitRev*)m_arShownList[indexNext]);\r
                                        dlg.m_CommitList.m_logEntries.at(dlg.m_CommitList.m_logEntries.size()-1).m_Action |= CTGitPath::LOGACTIONS_REBASE_PICK;\r
                                }\r
-\r
+       \r
                                if(dlg.DoModal() == IDOK)\r
                                {\r
                                        Refresh();\r
                                if(dlg.DoModal() == IDOK)\r
                                {\r
                                        Refresh();\r
index 0b0afea..b833dd0 100644 (file)
@@ -195,6 +195,12 @@ BOOL CRebaseDlg::OnInitDialog()
                                                                                m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REVERTTOREV)|\r
                                                                                m_CommitList.GetContextMenuBit(CGitLogListBase::ID_COMBINE_COMMIT));\r
 \r
                                                                                m_CommitList.GetContextMenuBit(CGitLogListBase::ID_REVERTTOREV)|\r
                                                                                m_CommitList.GetContextMenuBit(CGitLogListBase::ID_COMBINE_COMMIT));\r
 \r
+       if(m_CommitList.m_IsOldFirst)\r
+               this->m_CurrentRebaseIndex = -1;\r
+       else\r
+               this->m_CurrentRebaseIndex = m_CommitList.m_logEntries.size();\r
+\r
+\r
        return TRUE;\r
 }\r
 // CRebaseDlg message handlers\r
        return TRUE;\r
 }\r
 // CRebaseDlg message handlers\r
@@ -458,14 +464,18 @@ int CRebaseDlg::CheckRebaseCondition()
 int CRebaseDlg::StartRebase()\r
 {\r
        CString cmd,out;\r
 int CRebaseDlg::StartRebase()\r
 {\r
        CString cmd,out;\r
-       //Todo call comment_for_reflog\r
-       cmd.Format(_T("git.exe checkout %s"),this->m_BranchCtrl.GetString());\r
-       this->AddLogString(cmd);\r
 \r
 \r
-       if(g_Git.Run(cmd,&out,CP_UTF8))\r
-               return -1;\r
+       if(!this->m_IsCherryPick)\r
+       {\r
+               //Todo call comment_for_reflog\r
+               cmd.Format(_T("git.exe checkout %s"),this->m_BranchCtrl.GetString());\r
+               this->AddLogString(cmd);\r
 \r
 \r
-       this->AddLogString(out);\r
+               if(g_Git.Run(cmd,&out,CP_UTF8))\r
+                       return -1;\r
+\r
+               this->AddLogString(out);\r
+       }\r
 \r
        cmd=_T("git.exe rev-parse --verify HEAD");\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
 \r
        cmd=_T("git.exe rev-parse --verify HEAD");\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
@@ -484,17 +494,18 @@ int CRebaseDlg::StartRebase()
                return -1;\r
        }\r
        \r
                return -1;\r
        }\r
        \r
-       cmd.Format(_T("git.exe update-ref ORIG_HEAD HEAD"));\r
-\r
-       cmd.Format(_T("git.exe checkout %s"),this->m_UpstreamCtrl.GetString());\r
-       this->AddLogString(cmd);\r
-\r
-       out.Empty();\r
-       if(g_Git.Run(cmd,&out,CP_UTF8))\r
+       if( !this->m_IsCherryPick )\r
        {\r
        {\r
-               return -1;\r
-       }\r
+               cmd.Format(_T("git.exe checkout %s"),this->m_UpstreamCtrl.GetString());\r
+               this->AddLogString(cmd);\r
 \r
 \r
+               out.Empty();\r
+               if(g_Git.Run(cmd,&out,CP_UTF8))\r
+               {\r
+                       return -1;\r
+               }\r
+       }\r
+       \r
        m_OrigUpstreamHash.Empty();\r
        m_OrigUpstreamHash= g_Git.GetHash(this->m_UpstreamCtrl.GetString());\r
        if(m_OrigUpstreamHash.IsEmpty())\r
        m_OrigUpstreamHash.Empty();\r
        m_OrigUpstreamHash= g_Git.GetHash(this->m_UpstreamCtrl.GetString());\r
        if(m_OrigUpstreamHash.IsEmpty())\r
@@ -503,14 +514,19 @@ int CRebaseDlg::StartRebase()
                return -1;\r
        }\r
 \r
                return -1;\r
        }\r
 \r
-       cmd.Format(_T("git.exe rev-parse %s"),this->m_BranchCtrl.GetString());\r
-       if(g_Git.Run(cmd,&this->m_OrigBranchHash,CP_UTF8))\r
+       if( !this->m_IsCherryPick )\r
        {\r
        {\r
-               this->AddLogString(m_OrigBranchHash);\r
-               return -1;\r
-       }\r
+               cmd.Format(_T("git.exe rev-parse %s"),this->m_BranchCtrl.GetString());\r
+               if(g_Git.Run(cmd,&this->m_OrigBranchHash,CP_UTF8))\r
+               {\r
+                       this->AddLogString(m_OrigBranchHash);\r
+                       return -1;\r
+               }\r
+               this->AddLogString(_T("Start Rebase\r\n"));\r
 \r
 \r
-       this->AddLogString(_T("Start Rebase\r\n"));\r
+       }else\r
+               this->AddLogString(_T("Start Cherry-pick\r\n"));\r
+       \r
        return 0;\r
 }\r
 int  CRebaseDlg::VerifyNoConflict()\r
        return 0;\r
 }\r
 int  CRebaseDlg::VerifyNoConflict()\r
@@ -531,6 +547,9 @@ int  CRebaseDlg::VerifyNoConflict()
 }\r
 int CRebaseDlg::FinishRebase()\r
 {\r
 }\r
 int CRebaseDlg::FinishRebase()\r
 {\r
+       if(this->m_IsCherryPick) //cherry pick mode no "branch", working at upstream branch\r
+               return 0;\r
+\r
        CString cmd,out;\r
        cmd.Format(_T("git.exe branch -f %s"),this->m_BranchCtrl.GetString());\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
        CString cmd,out;\r
        cmd.Format(_T("git.exe branch -f %s"),this->m_BranchCtrl.GetString());\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
@@ -1155,7 +1174,7 @@ void CRebaseDlg::OnBnClickedAbort()
        if(CMessageBox::Show(NULL,_T("Are you sure abort rebase"),_T("TortoiseGit"),MB_YESNO) != IDYES)\r
                return;\r
 \r
        if(CMessageBox::Show(NULL,_T("Are you sure abort rebase"),_T("TortoiseGit"),MB_YESNO) != IDYES)\r
                return;\r
 \r
-       cmd.Format(_T("git checkout -f %s"),this->m_UpstreamCtrl.GetString());\r
+       cmd.Format(_T("git.exe checkout -f %s"),this->m_UpstreamCtrl.GetString());\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
        {\r
                AddLogString(out);\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
        {\r
                AddLogString(out);\r
@@ -1169,6 +1188,9 @@ void CRebaseDlg::OnBnClickedAbort()
                return ;\r
        }\r
        \r
                return ;\r
        }\r
        \r
+       if(this->m_IsCherryPick) //there are not "branch" at cherry pick mode\r
+               return;\r
+\r
        cmd.Format(_T("git checkout -f %s"),this->m_BranchCtrl.GetString());\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
        {\r
        cmd.Format(_T("git checkout -f %s"),this->m_BranchCtrl.GetString());\r
        if(g_Git.Run(cmd,&out,CP_UTF8))\r
        {\r