OSDN Git Service

merge original branch.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / GitLogListAction.cpp
index ac88137..4d1c9b7 100644 (file)
 #include "FileDiffDlg.h"\r
 #include "CommitDlg.h"\r
 #include "RebaseDlg.h"\r
+#include "GitDiff.h"\r
 \r
 IMPLEMENT_DYNAMIC(CGitLogList, CHintListCtrl)\r
 \r
 int CGitLogList::CherryPickFrom(CString from, CString to)\r
 {\r
-       CLogDataVector logs;\r
+       CLogDataVector logs(&m_LogCache);\r
        if(logs.ParserFromLog(NULL,-1,0,&from,&to))\r
                return -1;\r
 \r
@@ -73,8 +74,8 @@ int CGitLogList::CherryPickFrom(CString from, CString to)
        {\r
                if (progress.IsValid())\r
                {\r
-                       progress.FormatPathLine(1, _T("Pick up %s"), logs[i].m_CommitHash);\r
-                       progress.FormatPathLine(2, _T("%s"), logs[i].m_Subject);\r
+                       progress.FormatPathLine(1, _T("Pick up %s"), logs.GetGitRevAt(i).m_CommitHash.ToString());\r
+                       progress.FormatPathLine(2, _T("%s"), logs.GetGitRevAt(i).m_Subject);\r
                        progress.SetProgress(logs.size()-i, logs.size());\r
                }\r
                if ((progress.IsValid())&&(progress.HasUserCancelled()))\r
@@ -84,7 +85,7 @@ int CGitLogList::CherryPickFrom(CString from, CString to)
                        return -1;\r
                }\r
                CString cmd,out;\r
-               cmd.Format(_T("git.exe cherry-pick %s"),logs[i].m_CommitHash);\r
+               cmd.Format(_T("git.exe cherry-pick %s"),logs.GetGitRevAt(i).m_CommitHash.ToString());\r
                out.Empty();\r
                if(g_Git.Run(cmd,&out,CP_UTF8))\r
                {\r
@@ -124,14 +125,14 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                CString tempfile=GetTempFile();\r
                                CString cmd;\r
                                GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
-                               if(r1->m_CommitHash != GIT_REV_ZERO)\r
+                               if(!r1->m_CommitHash.IsEmpty())\r
                                {\r
-                                       cmd.Format(_T("git.exe diff-tree -r -p --stat %s"),r1->m_CommitHash);\r
+                                       cmd.Format(_T("git.exe diff-tree -r -p --stat %s"),r1->m_CommitHash.ToString());\r
                                }else\r
                                        cmd.Format(_T("git.exe diff -r -p --stat"));\r
 \r
                                g_Git.RunLogFile(cmd,tempfile);\r
-                               CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.Left(6)+_T(":")+r1->m_Subject);\r
+                               CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.ToString().Left(6)+_T(":")+r1->m_Subject);\r
                        }\r
                        break;\r
 \r
@@ -142,17 +143,17 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
                                GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
                                \r
-                               if( r1->m_CommitHash == GIT_REV_ZERO)\r
+                               if( r1->m_CommitHash.IsEmpty())\r
                                {\r
-                                       cmd.Format(_T("git.exe diff -r -p --stat %s"),r2->m_CommitHash);\r
-                               }else if( r2->m_CommitHash == GIT_REV_ZERO)\r
+                                       cmd.Format(_T("git.exe diff -r -p --stat %s"),r2->m_CommitHash.ToString());\r
+                               }else if( r2->m_CommitHash.IsEmpty())\r
                                {\r
-                                       cmd.Format(_T("git.exe diff -r -p --stat %s"),r1->m_CommitHash);\r
+                                       cmd.Format(_T("git.exe diff -r -p --stat %s"),r1->m_CommitHash.ToString());\r
                                }else\r
-                                       cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),r1->m_CommitHash,r2->m_CommitHash);\r
+                                       cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),r1->m_CommitHash.ToString(),r2->m_CommitHash.ToString());\r
 \r
                                g_Git.RunLogFile(cmd,tempfile);\r
-                               CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.Left(6)+_T(":")+r2->m_CommitHash.Left(6));\r
+                               CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.ToString().Left(6)+_T(":")+r2->m_CommitHash.ToString().Left(6));\r
 \r
                        }\r
                        break;\r
@@ -161,9 +162,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                        {\r
                                GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
                                GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
-                               CFileDiffDlg dlg;\r
-                               dlg.SetDiff(NULL,*r1,*r2);\r
-                               dlg.DoModal();\r
+                               CGitDiff::DiffCommit(this->m_Path, r1,r2);\r
                                \r
                        }\r
                        break;\r
@@ -173,9 +172,8 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                        {\r
                                GitRev * r1 = &m_wcRev;\r
                                GitRev * r2 = pSelLogEntry;\r
-                               CFileDiffDlg dlg;\r
-                               dlg.SetDiff(NULL,*r1,*r2);\r
-                               dlg.DoModal();\r
+\r
+                               CGitDiff::DiffCommit(this->m_Path, r1,r2);\r
 \r
                                //user clicked on the menu item "compare with working copy"\r
                                //if (PromptShown())\r
@@ -198,8 +196,8 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                if(pSelLogEntry->m_ParentHash.size()>0)\r
                                //if(m_logEntries.m_HashMap[pSelLogEntry->m_ParentHash[0]]>=0)\r
                                {\r
-                                       dlg.SetDiff(NULL,pSelLogEntry->m_CommitHash,pSelLogEntry->m_ParentHash[0]);\r
-                                       dlg.DoModal();\r
+                                       CGitDiff::DiffCommit(this->m_Path, pSelLogEntry->m_CommitHash.ToString(),pSelLogEntry->m_ParentHash[0].ToString());\r
+\r
                                }else\r
                                {\r
                                        CMessageBox::Show(NULL,_T("No previous version"),_T("TortoiseGit"),MB_OK);      \r
@@ -226,25 +224,25 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                        }\r
                        break;\r
                case ID_EXPORT:\r
-                       CAppUtils::Export(&pSelLogEntry->m_CommitHash);\r
+                       CAppUtils::Export(&pSelLogEntry->m_CommitHash.ToString());\r
                        break;\r
                case ID_CREATE_BRANCH:\r
-                       CAppUtils::CreateBranchTag(FALSE,&pSelLogEntry->m_CommitHash);\r
+                       CAppUtils::CreateBranchTag(FALSE,&pSelLogEntry->m_CommitHash.ToString());\r
                        ReloadHashMap();\r
                        Invalidate();                   \r
                        break;\r
                case ID_CREATE_TAG:\r
-                       CAppUtils::CreateBranchTag(TRUE,&pSelLogEntry->m_CommitHash);\r
+                       CAppUtils::CreateBranchTag(TRUE,&pSelLogEntry->m_CommitHash.ToString());\r
                        ReloadHashMap();\r
                        Invalidate();\r
                        break;\r
                case ID_SWITCHTOREV:\r
-                       CAppUtils::Switch(&pSelLogEntry->m_CommitHash);\r
+                       CAppUtils::Switch(&pSelLogEntry->m_CommitHash.ToString());\r
                        ReloadHashMap();\r
                        Invalidate();\r
                        break;\r
                case ID_RESET:\r
-                       CAppUtils::GitReset(&pSelLogEntry->m_CommitHash);\r
+                       CAppUtils::GitReset(&pSelLogEntry->m_CommitHash.ToString());\r
                        ReloadHashMap();\r
                        Invalidate();\r
                        break;\r
@@ -263,8 +261,8 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                case ID_COMBINE_COMMIT:\r
                {\r
                        CString head;\r
-                       CString headhash;\r
-                       CString hashFirst,hashLast;\r
+                       CGitHash headhash;\r
+                       CGitHash hashFirst,hashLast;\r
 \r
                        int headindex=GetHeadIndex();\r
                        if(headindex>=0) //incase show all branch, head is not the first commits. \r
@@ -299,13 +297,13 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                        //Use throw to abort this process (reset back to original HEAD)\r
                        try\r
                        {\r
-                               cmd.Format(_T("git.exe reset --hard  %s"),pFirstEntry->m_CommitHash);\r
+                               cmd.Format(_T("git.exe reset --hard  %s"),pFirstEntry->m_CommitHash.ToString());\r
                                if(g_Git.Run(cmd,&out,CP_UTF8))\r
                                {\r
                                        CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
                                        throw std::exception(CUnicodeUtils::GetUTF8(_T("Could not reset to first commit (first step) aborting...\r\n\r\n")+out));\r
                                }\r
-                               cmd.Format(_T("git.exe reset --mixed  %s"),hashLast);\r
+                               cmd.Format(_T("git.exe reset --mixed  %s"),hashLast.ToString());\r
                                if(g_Git.Run(cmd,&out,CP_UTF8))\r
                                {\r
                                        CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK);\r
@@ -340,7 +338,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                                //\r
                                                //Later the progress dialog could be used to execute these steps.\r
 \r
-                                               if(CherryPickFrom(pFirstEntry->m_CommitHash,headhash))\r
+                                               if(CherryPickFrom(pFirstEntry->m_CommitHash.ToString(),headhash))\r
                                                {\r
                                                        CString msg;\r
                                                        msg.Format(_T("Error while cherry pick commits on top of combined commits. Aborting.\r\n\r\n"));\r
@@ -388,7 +386,7 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                        catch(std::exception& e)\r
                        {\r
                                CMessageBox::Show(NULL,CUnicodeUtils::GetUnicode(CStringA(e.what())),_T("TortoiseGit: Combine error"),MB_OK|MB_ICONERROR);\r
-                               cmd.Format(_T("git.exe reset --hard  %s"),headhash);\r
+                               cmd.Format(_T("git.exe reset --hard  %s"),headhash.ToString());\r
                                out.Empty();\r
                                if(g_Git.Run(cmd,&out,CP_UTF8))\r
                                {\r
@@ -413,8 +411,8 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                while(pos)\r
                                {\r
                                        int indexNext = GetNextSelectedItem(pos);\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
+                                       dlg.m_CommitList.m_logEntries.push_back( ((GitRev*)m_arShownList[indexNext])->m_CommitHash );\r
+                                       dlg.m_CommitList.m_logEntries.GetGitRevAt(dlg.m_CommitList.m_logEntries.size()-1).m_Action |= CTGitPath::LOGACTIONS_REBASE_PICK;\r
                                }\r
        \r
                                if(dlg.DoModal() == IDOK)\r
@@ -474,20 +472,20 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                GitRev * r2 = NULL;\r
                                if(select == 1)\r
                                {\r
-                                       cmd += _T(" /startrev:")+r1->m_CommitHash;\r
+                                       cmd += _T(" /startrev:")+r1->m_CommitHash.ToString();\r
                                }\r
                                else \r
                                {\r
                                        r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
                                        if( this->m_IsOldFirst )\r
                                        {       \r
-                                               cmd += _T(" /startrev:")+r1->m_CommitHash+_T("~1");\r
-                                               cmd += _T(" /endrev:")+r2->m_CommitHash;\r
+                                               cmd += _T(" /startrev:")+r1->m_CommitHash.ToString()+_T("~1");\r
+                                               cmd += _T(" /endrev:")+r2->m_CommitHash.ToString();\r
        \r
                                        }else\r
                                        {       \r
-                                               cmd += _T(" /startrev:")+r2->m_CommitHash+_T("~1");\r
-                                               cmd += _T(" /endrev:")+r1->m_CommitHash;        \r
+                                               cmd += _T(" /startrev:")+r2->m_CommitHash.ToString()+_T("~1");\r
+                                               cmd += _T(" /endrev:")+r1->m_CommitHash.ToString();     \r
                                        }                               \r
                                        \r
                                }\r