OSDN Git Service

Fix File List Del\Add switch problem and enable prevdiff command
authorFrank Li <lznuaa@gmail.com>
Tue, 30 Dec 2008 15:07:06 +0000 (23:07 +0800)
committerFrank Li <lznuaa@gmail.com>
Tue, 30 Dec 2008 15:07:06 +0000 (23:07 +0800)
src/Git/Git.cpp
src/Git/Git.h
src/Git/GitStatusListCtrl.cpp
src/Git/GitStatusListCtrl.h
src/TortoiseProc/Commands/PrevDiffCommand.cpp
src/TortoiseProc/GitDiff.cpp
src/TortoiseProc/GitDiff.h
src/TortoiseProc/LogDataVector.cpp
src/TortoiseProc/LogDlgHelper.h
src/TortoiseProc/TortoiseProc.vcproj.FSL.B20596.user

index 60c81ec..f475f5d 100644 (file)
@@ -182,14 +182,21 @@ int CGit::GetLog(CString& logOut, CString &hash, int count)
 }\r
 \r
 \r
-int CGit::GetShortLog(CString &logOut)\r
+int CGit::GetShortLog(CString &logOut,CTGitPath * path, int count)\r
 {\r
        CString cmd;\r
        CString log;\r
-       cmd=("git.exe log --topo-order -n100 --pretty=format:\"");\r
+       int n;\r
+       if(count<0)\r
+               n=100;\r
+       else\r
+               n=count;\r
+       cmd.Format(_T("git.exe log --topo-order -n%d --pretty=format:\""),n);\r
        BuildOutputFormat(log,false);\r
-       cmd += log;\r
-       cmd += CString(_T("\" HEAD~40..HEAD"));\r
+       cmd += log+_T("\"");\r
+       if (path)\r
+               cmd+= _T("  -- \"")+path->GetGitPathString()+_T("\"");\r
+       //cmd += CString(_T("\" HEAD~40..HEAD"));\r
        return Run(cmd,&logOut);\r
 }\r
 \r
index 653a493..748ee10 100644 (file)
@@ -53,7 +53,7 @@ public:
        git_revnum_t GetHash(CString &friendname);\r
 \r
        int BuildOutputFormat(CString &format,bool IsFull=TRUE);\r
-       int GetShortLog(CString &log);\r
+       int GetShortLog(CString &log,CTGitPath * path=NULL, int count =-1);\r
        \r
        \r
 };\r
index a1d1cb0..2bab662 100644 (file)
@@ -1394,7 +1394,7 @@ int CGitStatusListCtrl::GetColumnIndex(int mask)
        int i=0;\r
        for(i=0;i<32;i++)\r
                if(mask&0x1)\r
-                       return i;\r
+                       return i-1;\r
                else\r
                        mask=mask>>1;\r
        return -1;\r
index c3146da..0584d30 100644 (file)
@@ -37,7 +37,7 @@
 #define        SVNSLC_COLDATE                          0x000000100\r
 #define        SVNSLC_COLMODIFICATIONDATE      0x000000200\r
 #define SVNSLC_COLADD                          0x000000400\r
-#define SVNSLC_COLDEL                          0x000000600\r
+#define SVNSLC_COLDEL                          0x000000800\r
 #define SVNSLC_NUMCOLUMNS                      12\r
 \r
 //#define SVNSLC_COLREMOTESTATUS               0x000000010\r
index 7b3bb4c..8eeb4cb 100644 (file)
@@ -22,6 +22,7 @@
 #include "GitStatus.h"\r
 #include "MessageBox.h"\r
 #include "ChangedDlg.h"\r
+#include "LogDlgHelper.h"\r
 \r
 bool PrevDiffCommand::Execute()\r
 {\r
@@ -43,8 +44,28 @@ bool PrevDiffCommand::Execute()
 \r
                if (1)\r
                {\r
-                       CGitDiff diff;\r
-                       bRet = diff.Diff(&cmdLinePath, git_revnum_t(_T("HEAD")), git_revnum_t(_T("HEAD~1")), false);\r
+                       CString hash;\r
+                       CString logout;\r
+               \r
+                       CLogDataVector revs;\r
+                       revs.ParserShortLog(&cmdLinePath,2);\r
+                       if( revs.size() == 0)\r
+                       {\r
+                               CMessageBox::Show(hWndExplorer, IDS_ERR_NOPREVREVISION, IDS_APPNAME, MB_ICONERROR);\r
+                               return FALSE;\r
+                       }\r
+\r
+                       if( revs.size() == 1 )\r
+                       {\r
+                               CGitDiff diff;\r
+                               bRet = diff.DiffNull(&cmdLinePath,revs[0].m_CommitHash);\r
+                       }\r
+\r
+                       if( revs.size() == 2 )\r
+                       {\r
+                               CGitDiff diff;\r
+                               bRet = diff.Diff(&cmdLinePath, revs[0].m_CommitHash, revs[1].m_CommitHash, false);\r
+                       }\r
                }\r
                else\r
                {\r
index 8c18684..fdb9f2a 100644 (file)
@@ -27,6 +27,40 @@ int CGitDiff::Parser(git_revnum_t &rev)
        }\r
        return 0;\r
 }\r
+int CGitDiff::DiffNull(CTGitPath *pPath, git_revnum_t &rev1)\r
+{\r
+       CString temppath;\r
+       GetTempPath(temppath);\r
+       Parser(rev1);\r
+       CString file1;\r
+       CString nullfile;\r
+       CString cmd;\r
+       if(rev1 != GIT_REV_ZERO )\r
+       {\r
+               file1.Format(_T("%s%s_%s%s"),\r
+                               temppath,                                               \r
+                               pPath->GetBaseFilename(),\r
+                               rev1.Left(6),\r
+                               pPath->GetFileExtension());\r
+               cmd.Format(_T("git.exe cat-file -p %s:%s"),rev1,pPath->GetGitPathString());\r
+                               g_Git.RunLogFile(cmd,file1);\r
+       }else\r
+       {\r
+               file1=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString();\r
+       }\r
+\r
+       CString tempfile=::GetTempFile();\r
+       CStdioFile file(tempfile,CFile::modeReadWrite|CFile::modeCreate );\r
+       //file.WriteString();\r
+       file.Close();\r
+       \r
+       CAppUtils::DiffFlags flags;\r
+       CAppUtils::StartExtDiff(tempfile,file1,\r
+                                                       _T("NULL"),\r
+                                                       pPath->GetGitPathString()+_T(":")+rev1.Left(6)\r
+                                                       ,flags);\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
@@ -67,7 +101,7 @@ int CGitDiff::Diff(CTGitPath * pPath, git_revnum_t & rev1, git_revnum_t & rev2,
        }\r
        \r
        CAppUtils::DiffFlags flags;\r
-       CAppUtils::StartExtDiff(file1,file2,\r
+       CAppUtils::StartExtDiff(file2,file1,\r
                                                        pPath->GetGitPathString()+_T(":")+rev2.Left(6),\r
                                                        pPath->GetGitPathString()+_T(":")+rev1.Left(6)\r
                                                        ,flags);\r
index effe970..b6162c0 100644 (file)
@@ -11,4 +11,5 @@ public:
        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
+       static int DiffNull(CTGitPath *pPath, git_revnum_t &rev1);\r
 };\r
index e4ea92d..e33cea1 100644 (file)
@@ -63,7 +63,7 @@
 //#include "EditPropertiesDlg.h"
 #include "FileDiffDlg.h"
 
-int CLogDataVector::ParserShortLog()
+int CLogDataVector::ParserShortLog(CTGitPath *path ,int count  )
 {
        CString log;
        GitRev rev;
@@ -71,7 +71,7 @@ int CLogDataVector::ParserShortLog()
        CString begin;
        begin.Format(_T("#<%c>"),LOG_REV_ITEM_BEGIN);
 
-       g_Git.GetShortLog(log);
+       g_Git.GetShortLog(log,path,count);
        if(log.GetLength()==0)
                return 0;
        
index d4d15cb..7b53399 100644 (file)
@@ -58,7 +58,7 @@ public:
        }\r
        void ClearAll();\r
        int  ParserFromLog();\r
-       int ParserShortLog();\r
+       int ParserShortLog(CTGitPath *path =NULL,int count = -1  );\r
        int FetchFullInfo(int i);\r
 \r
        Lanes m_Lanes;\r
index a9acb41..199d68e 100644 (file)
@@ -11,7 +11,7 @@
                        <DebugSettings\r
                                Command="$(TargetPath)"\r
                                WorkingDirectory="D:\Profiles\b20596\tortoisegit"\r
-                               CommandArguments="/command:log /path:&quot;D:\\Profiles\\b20596\\git&quot;"\r
+                               CommandArguments="/command:prevdiff /path:&quot;D:\\Profiles\\b20596\\buildtest\\TortoiseGit\\build.txt&quot;"\r
                                Attach="false"\r
                                DebuggerType="3"\r
                                Remote="1"\r