}\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
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
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
#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
#include "GitStatus.h"\r
#include "MessageBox.h"\r
#include "ChangedDlg.h"\r
+#include "LogDlgHelper.h"\r
\r
bool PrevDiffCommand::Execute()\r
{\r
\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
}\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
}\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
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
//#include "EditPropertiesDlg.h"
#include "FileDiffDlg.h"
-int CLogDataVector::ParserShortLog()
+int CLogDataVector::ParserShortLog(CTGitPath *path ,int count )
{
CString log;
GitRev rev;
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;
}\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
<DebugSettings\r
Command="$(TargetPath)"\r
WorkingDirectory="D:\Profiles\b20596\tortoisegit"\r
- CommandArguments="/command:log /path:"D:\\Profiles\\b20596\\git""\r
+ CommandArguments="/command:prevdiff /path:"D:\\Profiles\\b20596\\buildtest\\TortoiseGit\\build.txt""\r
Attach="false"\r
DebuggerType="3"\r
Remote="1"\r