OSDN Git Service

Direct Launch external diff when open dialog at file
authorFrank Li <lznuaa@gmail.com>
Sun, 24 Jan 2010 12:20:52 +0000 (20:20 +0800)
committerFrank Li <lznuaa@gmail.com>
Sun, 24 Jan 2010 12:20:52 +0000 (20:20 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/GitDiff.cpp
src/TortoiseProc/GitDiff.h
src/TortoiseProc/GitLogListAction.cpp

index f30b89e..b68a9c1 100644 (file)
@@ -5,6 +5,7 @@
 #include "gittype.h"\r
 #include "resource.h"\r
 #include "MessageBox.h"\r
 #include "gittype.h"\r
 #include "resource.h"\r
 #include "MessageBox.h"\r
+#include "FileDiffDlg.h"\r
 \r
 CGitDiff::CGitDiff(void)\r
 {\r
 \r
 CGitDiff::CGitDiff(void)\r
 {\r
@@ -230,3 +231,30 @@ int CGitDiff::Diff(CTGitPath * pPath,CTGitPath * pPath2, git_revnum_t & rev1, gi
        return 0;\r
 }\r
 \r
        return 0;\r
 }\r
 \r
+int CGitDiff::DiffCommit(CTGitPath &path, GitRev *r1, GitRev *r2)\r
+{\r
+       if( path.GetWinPathString().IsEmpty() || path.IsDirectory() )\r
+       {\r
+               CFileDiffDlg dlg;\r
+               dlg.SetDiff(NULL,*r1,*r2);\r
+               dlg.DoModal();\r
+       }else\r
+       {\r
+               Diff(&path,&path,r1->m_CommitHash.ToString(),r2->m_CommitHash.ToString());\r
+       }\r
+       return 0;\r
+}\r
+\r
+int CGitDiff::DiffCommit(CTGitPath &path, CString &r1, CString &r2)\r
+{\r
+       if( path.GetWinPathString().IsEmpty() || path.IsDirectory() )\r
+       {\r
+               CFileDiffDlg dlg;\r
+               dlg.SetDiff(NULL,r1,r2);\r
+               dlg.DoModal();\r
+       }else\r
+       {\r
+               Diff(&path,&path,r1,r2);\r
+       }\r
+       return 0;\r
+}
\ No newline at end of file
index 7826573..a341d71 100644 (file)
@@ -14,4 +14,6 @@ public:
        static int Diff(CTGitPath * pPath1, CTGitPath *pPath2 ,git_revnum_t & rev1, git_revnum_t & rev2, bool blame=false, bool unified=false);\r
        static int SubmoduleDiff(CTGitPath * pPath1, CTGitPath *pPath2 ,git_revnum_t & rev1, git_revnum_t & rev2, bool blame=false, bool unified=false);\r
        static int DiffNull(CTGitPath *pPath, git_revnum_t &rev1,bool bIsAdd=true);\r
        static int Diff(CTGitPath * pPath1, CTGitPath *pPath2 ,git_revnum_t & rev1, git_revnum_t & rev2, bool blame=false, bool unified=false);\r
        static int SubmoduleDiff(CTGitPath * pPath1, CTGitPath *pPath2 ,git_revnum_t & rev1, git_revnum_t & rev2, bool blame=false, bool unified=false);\r
        static int DiffNull(CTGitPath *pPath, git_revnum_t &rev1,bool bIsAdd=true);\r
+       static int DiffCommit(CTGitPath &path, GitRev *r1, GitRev *r2);\r
+       static int DiffCommit(CTGitPath &path, CString &r1, CString &r2);\r
 };\r
 };\r
index d6baf29..4d1c9b7 100644 (file)
@@ -48,6 +48,7 @@
 #include "FileDiffDlg.h"\r
 #include "CommitDlg.h"\r
 #include "RebaseDlg.h"\r
 #include "FileDiffDlg.h"\r
 #include "CommitDlg.h"\r
 #include "RebaseDlg.h"\r
+#include "GitDiff.h"\r
 \r
 IMPLEMENT_DYNAMIC(CGitLogList, CHintListCtrl)\r
 \r
 \r
 IMPLEMENT_DYNAMIC(CGitLogList, CHintListCtrl)\r
 \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
                        {\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
                                \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
                        {\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
 \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
                                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.ToString(),pSelLogEntry->m_ParentHash[0].ToString());\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
                                }else\r
                                {\r
                                        CMessageBox::Show(NULL,_T("No previous version"),_T("TortoiseGit"),MB_OK);      \r