OSDN Git Service

Diff File list basic working
[tortoisegit/TortoiseGitJp.git] / TortoiseProc / LogDlg.cpp
index 5f5f657..149cc42 100644 (file)
@@ -47,7 +47,7 @@
 //#include "CachedLogInfo.h"\r
 //#include "RepositoryInfo.h"\r
 //#include "EditPropertiesDlg.h"\r
-\r
+#include "FileDiffDlg.h"\r
 \r
 #if (NTDDI_VERSION < NTDDI_LONGHORN)\r
 \r
@@ -1958,12 +1958,40 @@ void CLogDlg::DiffSelectedRevWithPrevious()
 #endif\r
 }\r
 \r
-void CLogDlg::DoDiffFromLog(INT_PTR selIndex, git_revnum_t rev1, git_revnum_t rev2, bool blame, bool unified)\r
+void CLogDlg::DoDiffFromLog(INT_PTR selIndex, GitRev* rev1, GitRev* rev2, bool blame, bool unified)\r
 {\r
-#if 0\r
        DialogEnableWindow(IDOK, FALSE);\r
-       SetPromptApp(&theApp);\r
+//     SetPromptApp(&theApp);\r
        theApp.DoWaitCursor(1);\r
+\r
+       CString temppath;\r
+       GetTempPath(temppath);\r
+       \r
+       CString file1;\r
+       file1.Format(_T("%s%s_%s%s"),\r
+                               temppath,                                               \r
+                               (*m_currentChangedArray)[selIndex].GetBaseFilename(),\r
+                               rev1->m_CommitHash.Left(6),\r
+                               (*m_currentChangedArray)[selIndex].GetFileExtension());\r
+\r
+       CString file2;\r
+       file2.Format(_T("%s\\%s_%s%s"),\r
+                               temppath,                                               \r
+                               (*m_currentChangedArray)[selIndex].GetBaseFilename(),\r
+                               rev2->m_CommitHash.Left(6),\r
+                               (*m_currentChangedArray)[selIndex].GetFileExtension());\r
+\r
+       CString cmd;\r
+\r
+       cmd.Format(_T("git.cmd cat-file -p %s:%s"),rev1->m_CommitHash,(*m_currentChangedArray)[selIndex].GetGitPathString());\r
+       g_Git.RunLogFile(cmd,file1);\r
+       cmd.Format(_T("git.cmd cat-file -p %s:%s"),rev2->m_CommitHash,(*m_currentChangedArray)[selIndex].GetGitPathString());\r
+       g_Git.RunLogFile(cmd,file2);\r
+\r
+       CAppUtils::DiffFlags flags;\r
+       CAppUtils::StartExtDiff(file1,file2,_T("A"),_T("B"),flags);\r
+\r
+#if 0\r
        //get the filename\r
        CString filepath;\r
        if (Git::PathIsURL(m_path))\r
@@ -2032,9 +2060,11 @@ void CLogDlg::DoDiffFromLog(INT_PTR selIndex, git_revnum_t rev1, git_revnum_t re
                        }\r
                }\r
        }\r
+\r
+#endif\r
+\r
        theApp.DoWaitCursor(-1);\r
        EnableOKButton();\r
-#endif\r
 }\r
 \r
 BOOL CLogDlg::Open(bool bOpenWith,CString changedpath, git_revnum_t rev)\r
@@ -4018,23 +4048,12 @@ void CLogDlg::ShowContextMenuForRevisions(CWnd* /*pWnd*/, CPoint point)
 \r
                case ID_COMPARETWO:\r
                        {\r
-                               //GitRev * r1 = reinterpret_cast<GitRev*>((*m_arShownList)[FirstSelect]);\r
-                               //GitRev * r2 = reinterpret_cast<GitRev*>((*m_arShownList)[LastSelect]);\r
-                               //if (m_LogList.GetSelectedCount() > 2)\r
-                               //{\r
-                               //      r1 = revHighest;\r
-                               //      r2 = revLowest;\r
-                               //}\r
-                               //user clicked on the menu item "compare revisions"\r
-                               //if (PromptShown())\r
-                               //{\r
-                               //      GitDiff diff(this, m_hWnd, true);\r
-                               //      diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\r
-                               //      diff.SetHEADPeg(m_LogRevision);\r
-                               //      diff.ShowCompare(CTGitPath(pathURL), r2, CTGitPath(pathURL), r1);\r
-                               //}\r
-                               //else\r
-                               //      CAppUtils::StartShowCompare(m_hWnd, CTGitPath(pathURL), r2, CTGitPath(pathURL), r1, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));\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
+                               \r
                        }\r
                        break;\r
 \r
@@ -4528,10 +4547,11 @@ void CLogDlg::ShowContextMenuForChangedpaths(CWnd* /*pWnd*/, CPoint point)
                return; // nothing is selected, get out of here\r
 \r
        bool bOneRev = true;\r
+       int sel=m_LogList.GetNextSelectedItem(pos);\r
+       GitRev * pLogEntry = reinterpret_cast<GitRev *>(m_arShownList.GetAt(sel));\r
+       GitRev * rev1 = pLogEntry;\r
+       GitRev * rev2 = reinterpret_cast<GitRev *>(m_arShownList.GetAt(sel+1));\r
 #if 0\r
-       GitRev * pLogEntry = reinterpret_cast<GitRev *>(m_arShownList.GetAt(m_LogList.GetNextSelectedItem(pos)));\r
-       git_revnum_t rev1 = pLogEntry;\r
-       git_revnum_t rev2 = rev1;\r
        bool bOneRev = true;\r
        if (pos)\r
        {\r
@@ -4662,7 +4682,7 @@ void CLogDlg::ShowContextMenuForChangedpaths(CWnd* /*pWnd*/, CPoint point)
                bool bOpenWith = false;\r
                bool bMergeLog = false;\r
                m_bCancelled = false;\r
-#if 0\r
+               \r
                switch (cmd)\r
                {\r
                case ID_DIFF:\r
@@ -4670,6 +4690,7 @@ void CLogDlg::ShowContextMenuForChangedpaths(CWnd* /*pWnd*/, CPoint point)
                                DoDiffFromLog(selIndex, rev1, rev2, false, false);\r
                        }\r
                        break;\r
+#if 0\r
                case ID_BLAMEDIFF:\r
                        {\r
                                DoDiffFromLog(selIndex, rev1, rev2, true, false);\r
@@ -5031,10 +5052,11 @@ void CLogDlg::ShowContextMenuForChangedpaths(CWnd* /*pWnd*/, CPoint point)
                                        ShellExecute(this->m_hWnd, _T("open"), url, NULL, NULL, SW_SHOWDEFAULT);                                        \r
                        }\r
                        break;\r
+#endif\r
                default:\r
                        break;\r
                } // switch (cmd)\r
-#endif\r
+\r
        } // if (popup.CreatePopupMenu())\r
 }\r
 \r