OSDN Git Service

Finish compare working copy item at log dialog
authorFrank Li <lznuaa@gmail.com>
Thu, 29 Oct 2009 03:17:16 +0000 (11:17 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 29 Oct 2009 03:17:16 +0000 (11:17 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/FileDiffDlg.cpp
src/TortoiseProc/GitLogListAction.cpp

index 94f518d..fee87b5 100644 (file)
@@ -107,13 +107,27 @@ void CFileDiffDlg::SetDiff(CTGitPath * path, CString &hash1, CString &hash2)
        \r
        BYTE_VECTOR logout;\r
 \r
-       g_Git.GetLog(logout,hash1,path,1,0);\r
-       m_rev1.ParserFromLog(logout);\r
+       if(hash1 == GIT_REV_ZERO)\r
+       {\r
+               m_rev1.m_CommitHash=GIT_REV_ZERO;\r
+               m_rev1.m_Subject=_T("Working Copy");\r
+       }else\r
+       {\r
+               g_Git.GetLog(logout,hash1,path,1,0);\r
+               m_rev1.ParserFromLog(logout);\r
+       }\r
 \r
        logout.clear();\r
 \r
-       g_Git.GetLog(logout,hash2,path,1,0);\r
-       m_rev2.ParserFromLog(logout);\r
+       if(hash2 == GIT_REV_ZERO)\r
+       {\r
+               m_rev2.m_CommitHash = GIT_REV_ZERO;\r
+               m_rev2.m_Subject=_T("Working Copy");\r
+       }else\r
+       {\r
+               g_Git.GetLog(logout,hash2,path,1,0);\r
+               m_rev2.ParserFromLog(logout);\r
+       }\r
 }\r
 void CFileDiffDlg::SetDiff(CTGitPath * path, GitRev rev1)\r
 {\r
index ec808e6..ac88137 100644 (file)
@@ -124,7 +124,12 @@ 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
-                               cmd.Format(_T("git.exe diff-tree -r -p --stat %s"),r1->m_CommitHash);\r
+                               if(r1->m_CommitHash != GIT_REV_ZERO)\r
+                               {\r
+                                       cmd.Format(_T("git.exe diff-tree -r -p --stat %s"),r1->m_CommitHash);\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
                        }\r
@@ -136,7 +141,16 @@ void CGitLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect)
                                CString cmd;\r
                                GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect));\r
                                GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect));\r
-                               cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),r1->m_CommitHash,r2->m_CommitHash);\r
+                               \r
+                               if( r1->m_CommitHash == GIT_REV_ZERO)\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
+                               {\r
+                                       cmd.Format(_T("git.exe diff -r -p --stat %s"),r1->m_CommitHash);\r
+                               }else\r
+                                       cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),r1->m_CommitHash,r2->m_CommitHash);\r
+\r
                                g_Git.RunLogFile(cmd,tempfile);\r
                                CAppUtils::StartUnifiedDiffViewer(tempfile,r1->m_CommitHash.Left(6)+_T(":")+r2->m_CommitHash.Left(6));\r
 \r