OSDN Git Service

Compare Log Change List File Okay
authorFrank Li <lznuaa@gmail.com>
Mon, 29 Dec 2008 15:33:24 +0000 (23:33 +0800)
committerFrank Li <lznuaa@gmail.com>
Mon, 29 Dec 2008 15:33:24 +0000 (23:33 +0800)
src/Git/GitStatusListCtrl.cpp
src/Git/GitStatusListCtrl.h
src/TortoiseProc/GitDiff.cpp
src/TortoiseProc/GitDiff.h
src/TortoiseProc/LogDlg.cpp

index 8601958..6f30e61 100644 (file)
@@ -4045,10 +4045,17 @@ void CGitStatusListCtrl::StartDiff(int fileindex)
 {\r
        if(fileindex<0)\r
                return;\r
-       CGitDiff::Diff((CTGitPath*)GetItemData(fileindex),\r
+       if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion== GIT_REV_ZERO)\r
+       {\r
+               CGitDiff::Diff((CTGitPath*)GetItemData(fileindex),\r
                                CString(GIT_REV_ZERO),\r
                                        GitRev::GetHead());\r
-       \r
+       }else\r
+       {\r
+               CGitDiff::Diff((CTGitPath*)GetItemData(fileindex),\r
+                               m_CurrentVersion,\r
+                                       m_CurrentVersion+_T("~1"));\r
+       }\r
 #if 0\r
        if (fileindex < 0)\r
                return;\r
@@ -5206,6 +5213,8 @@ int CGitStatusListCtrl::UpdateFileList(git_revnum_t hash,CTGitPathList *list)
 {\r
        CString out;\r
        this->m_bBusy=TRUE;\r
+       m_CurrentVersion=hash;\r
+\r
        if(hash == GIT_REV_ZERO)\r
        {\r
                int count = 0;\r
index ffc6ff4..c3146da 100644 (file)
@@ -915,7 +915,7 @@ public:
 \r
        void AddEntry(CTGitPath* path, WORD langID, int ListIndex);\r
        int m_FileLoaded;\r
-\r
+       git_revnum_t m_CurrentVersion;\r
 public:\r
        CXPTheme        m_Theme;\r
 };\r
index 88adbf2..8c18684 100644 (file)
@@ -1,6 +1,7 @@
 #include "StdAfx.h"\r
 #include "GitDiff.h"\r
 #include "AppUtils.h"\r
+#include "git.h"\r
 \r
 CGitDiff::CGitDiff(void)\r
 {\r
@@ -9,12 +10,30 @@ CGitDiff::CGitDiff(void)
 CGitDiff::~CGitDiff(void)\r
 {\r
 }\r
+int CGitDiff::Parser(git_revnum_t &rev)\r
+{\r
+       if(rev == GIT_REV_ZERO)\r
+               return 0;\r
+       if(rev.GetLength() > 40)\r
+       {\r
+               CString cmd;\r
+               cmd.Format(_T("git.exe rev-parse %s"),rev);\r
+               CString output;\r
+               if(!g_Git.Run(cmd,&output))\r
+               {\r
+                       //int start=output.Find(_T('\n'));\r
+                       rev=output.Left(40);\r
+               }\r
+       }\r
+       return 0;\r
+}\r
 \r
 int CGitDiff::Diff(CTGitPath * pPath, git_revnum_t & rev1, git_revnum_t & rev2, bool blame, bool unified)\r
 {\r
        CString temppath;\r
        GetTempPath(temppath);\r
-       \r
+       Parser(rev1);\r
+       Parser(rev2);\r
        CString file1;\r
        CString cmd;\r
        if(rev1 != GIT_REV_ZERO )\r
@@ -49,8 +68,8 @@ int CGitDiff::Diff(CTGitPath * pPath, git_revnum_t & rev1, git_revnum_t & rev2,
        \r
        CAppUtils::DiffFlags flags;\r
        CAppUtils::StartExtDiff(file1,file2,\r
-                                                       pPath->GetGitPathString()+_T(":")+rev1.Left(6),\r
-                                                       pPath->GetGitPathString()+_T(":")+rev2.Left(6)\r
+                                                       pPath->GetGitPathString()+_T(":")+rev2.Left(6),\r
+                                                       pPath->GetGitPathString()+_T(":")+rev1.Left(6)\r
                                                        ,flags);\r
 \r
        return 0;\r
index b40524c..effe970 100644 (file)
@@ -8,7 +8,7 @@ class CGitDiff
 public:\r
        CGitDiff(void);\r
        ~CGitDiff(void);\r
-       \r
+       static int Parser(git_revnum_t &rev);\r
 \r
        static int Diff(CTGitPath * pPath, git_revnum_t & rev1, git_revnum_t & rev2, bool blame=false, bool unified=false);\r
 };\r
index 376ebb7..fc5c6b7 100644 (file)
@@ -523,6 +523,7 @@ void CLogDlg::FillLogMessageCtrl(bool bShow /* = true*/)
                CAppUtils::FormatTextInRichEditControl(pMsgView);\r
 \r
                m_ChangedFileListCtrl.UpdateWithGitPathList(pLogEntry->m_Files);\r
+               m_ChangedFileListCtrl.m_CurrentVersion=pLogEntry->m_CommitHash;\r
                m_ChangedFileListCtrl.Show(0);\r
 \r
                m_ChangedFileListCtrl.SetRedraw(TRUE);\r