OSDN Git Service

Fix Compare with preview version crash problem at log dialog.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / FileDiffDlg.cpp
index 3dc296f..9beff4b 100644 (file)
@@ -31,6 +31,7 @@
 #include "RevisionDlg.h"\r
 #include ".\filediffdlg.h"\r
 #include "gitdiff.h"\r
+#include "CommonResource.h"\r
 \r
 #define ID_COMPARE 1\r
 #define ID_BLAME 2\r
@@ -96,6 +97,31 @@ void CFileDiffDlg::SetDiff(CTGitPath * path, GitRev rev1, GitRev rev2)
        m_rev2 = rev2;\r
        \r
 }\r
+void CFileDiffDlg::SetDiff(CTGitPath * path, CString &hash1, CString &hash2)\r
+{\r
+       if(path!=NULL)\r
+       {\r
+               m_path1 = *path;\r
+               m_path2 = *path;\r
+       }\r
+       m_rev1.m_CommitHash = hash1;\r
+       m_rev2.m_CommitHash = hash2;\r
+}\r
+void CFileDiffDlg::SetDiff(CTGitPath * path, GitRev rev1)\r
+{\r
+       if(path!=NULL)\r
+       {\r
+               m_path1 = *path;\r
+               m_path2 = *path;\r
+       }\r
+       m_rev1 = rev1;\r
+       m_rev2.m_CommitHash = _T("");\r
+       m_rev2.m_Subject = _T("Previou Version");\r
+\r
+       //this->GetDlgItem()->EnableWindow(FALSE);\r
+       \r
+       \r
+}\r
 \r
 BOOL CFileDiffDlg::OnInitDialog()\r
 {\r
@@ -170,6 +196,9 @@ BOOL CFileDiffDlg::OnInitDialog()
 \r
        // Start with focus on file list\r
        GetDlgItem(IDC_FILELIST)->SetFocus();\r
+\r
+       if(m_rev2.m_CommitHash.IsEmpty())\r
+               m_SwitchButton.EnableWindow(FALSE);\r
        return FALSE;\r
 }\r
 \r
@@ -221,14 +250,15 @@ UINT CFileDiffDlg::DiffThread()
        {\r
                rev1=+_T("");\r
                if(this->m_rev1.m_CommitHash == GIT_REV_ZERO)\r
-                       cmd.Format(_T("git.exe diff -r --raw -C -M --numstat  %s"),m_rev2.m_CommitHash);\r
+                       cmd.Format(_T("git.exe diff -r --raw -C -M --numstat -z %s"),m_rev2.m_CommitHash);\r
                else\r
-                       cmd.Format(_T("git.exe diff -r -R --raw -C -M --numstat  %s"),m_rev1.m_CommitHash);\r
+                       cmd.Format(_T("git.exe diff -r -R --raw -C -M --numstat -z %s"),m_rev1.m_CommitHash);\r
        }else\r
        {\r
-               cmd.Format(_T("git.exe diff-tree -r --raw -C -M --numstat %s %s"),rev1,m_rev2.m_CommitHash);\r
+               cmd.Format(_T("git.exe diff-tree -r --raw -C -M --numstat -z %s %s"),rev1,m_rev2.m_CommitHash);\r
        }\r
-       CString out;\r
+\r
+       BYTE_VECTOR out;\r
        g_Git.Run(cmd,&out);\r
        this->m_arFileList.ParserFromLog(out);\r
        \r
@@ -288,7 +318,7 @@ void CFileDiffDlg::DoDiff(int selIndex, bool blame)
 \r
        CGitDiff diff;\r
        CTGitPath* fd = m_arFilteredList[selIndex];\r
-       diff.Diff(fd, this->m_rev1.m_CommitHash, this->m_rev2.m_CommitHash, blame, FALSE);\r
+       diff.Diff(fd, fd,this->m_rev1.m_CommitHash, this->m_rev2.m_CommitHash, blame, FALSE);\r
 \r
 #if 0\r
        CFileDiffDlg::CTGitPath* fd = m_arFilteredList[selIndex];\r