From 89cb16377638b6c903b8b42d9c1dbf09a6eea2bb Mon Sep 17 00:00:00 2001 From: Frank Li Date: Fri, 24 Apr 2009 22:19:57 +0800 Subject: [PATCH] Fix Issue 77: "Show differencess" against a deleted file will cause TortoiseMerge to error Signed-off-by: Frank Li --- src/Git/GitStatusListCtrl.cpp | 11 +++++++---- src/TortoiseProc/GitDiff.cpp | 11 +++++++++-- src/TortoiseProc/GitDiff.h | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Git/GitStatusListCtrl.cpp b/src/Git/GitStatusListCtrl.cpp index 7260bc6..e538bac 100644 --- a/src/Git/GitStatusListCtrl.cpp +++ b/src/Git/GitStatusListCtrl.cpp @@ -4000,13 +4000,16 @@ void CGitStatusListCtrl::StartDiff(int fileindex) if(this->m_CurrentVersion.IsEmpty() || m_CurrentVersion== GIT_REV_ZERO) { - if(!g_Git.IsInitRepos()) + if( g_Git.IsInitRepos()) + CGitDiff::DiffNull((CTGitPath*)GetItemData(fileindex), + CString(GIT_REV_ZERO)); + else if( file1.m_Action&CTGitPath::LOGACTIONS_DELETED ) + CGitDiff::DiffNull((CTGitPath*)GetItemData(fileindex), + GitRev::GetHead(),false); + else CGitDiff::Diff(&file1,&file2, CString(GIT_REV_ZERO), GitRev::GetHead()); - else - CGitDiff::DiffNull((CTGitPath*)GetItemData(fileindex), - CString(GIT_REV_ZERO)); }else { CGitDiff::Diff(&file1,&file2, diff --git a/src/TortoiseProc/GitDiff.cpp b/src/TortoiseProc/GitDiff.cpp index 49ea5e6..3f45e1f 100644 --- a/src/TortoiseProc/GitDiff.cpp +++ b/src/TortoiseProc/GitDiff.cpp @@ -28,7 +28,7 @@ int CGitDiff::Parser(git_revnum_t &rev) } return 0; } -int CGitDiff::DiffNull(CTGitPath *pPath, git_revnum_t &rev1) +int CGitDiff::DiffNull(CTGitPath *pPath, git_revnum_t &rev1,bool bIsAdd) { CString temppath; GetTempPath(temppath); @@ -56,10 +56,17 @@ int CGitDiff::DiffNull(CTGitPath *pPath, git_revnum_t &rev1) file.Close(); CAppUtils::DiffFlags flags; - CAppUtils::StartExtDiff(tempfile,file1, + + if(bIsAdd) + CAppUtils::StartExtDiff(tempfile,file1, _T("NULL"), pPath->GetGitPathString()+_T(":")+rev1.Left(6) ,flags); + else + CAppUtils::StartExtDiff(file1,tempfile, + pPath->GetGitPathString()+_T(":")+rev1.Left(6) + ,_T("NULL"),flags); + return 0; } diff --git a/src/TortoiseProc/GitDiff.h b/src/TortoiseProc/GitDiff.h index a2e5385..4a7c048 100644 --- a/src/TortoiseProc/GitDiff.h +++ b/src/TortoiseProc/GitDiff.h @@ -12,5 +12,5 @@ public: // Use two path to handle rename cases static int Diff(CTGitPath * pPath1, CTGitPath *pPath2 ,git_revnum_t & rev1, git_revnum_t & rev2, bool blame=false, bool unified=false); - static int DiffNull(CTGitPath *pPath, git_revnum_t &rev1); + static int DiffNull(CTGitPath *pPath, git_revnum_t &rev1,bool bIsAdd=true); }; -- 2.11.0