From 27f44321c909484bffb4b0c9e83ca536f98ecb67 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Fri, 30 Jan 2009 21:46:58 +0800 Subject: [PATCH] Fix TortoiseGitBlame commit is not in log list problem. Fix ToolTip information and property box error information when commit hash is not in log list. Signed-off-by: Frank Li --- src/Git/Git.cpp | 6 ++- src/Git/Git.h | 1 + src/TortoiseGitBlame/OutputWnd.cpp | 2 +- src/TortoiseGitBlame/PropertiesWnd.cpp | 11 ++++- src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp | 1 + src/TortoiseGitBlame/TortoiseGitBlameDoc.h | 4 ++ src/TortoiseGitBlame/TortoiseGitBlameView.cpp | 61 +++++++++++---------------- src/TortoiseGitBlame/TortoiseGitBlameView.h | 2 + 8 files changed, 48 insertions(+), 40 deletions(-) diff --git a/src/Git/Git.cpp b/src/Git/Git.cpp index 3a49ed0..58433c2 100644 --- a/src/Git/Git.cpp +++ b/src/Git/Git.cpp @@ -272,9 +272,13 @@ int CGit::GetLog(BYTE_VECTOR& logOut, CString &hash, CTGitPath *path ,int count if(mask& CGit::LOG_INFO_NO_MERGE ) param += _T(" --no-merges "); + + if(mask& CGit::LOG_INFO_FOLLOW) + param += _T(" --follow "); + param+=hash; - cmd.Format(_T("git.exe log %s -z --topo-order --parents %s --pretty=format:\""), + cmd.Format(_T("git.exe log %s -z --topo-order %s --parents --pretty=format:\""), num,param); BuildOutputFormat(log,!(mask&CGit::LOG_INFO_ONLY_HASH)); diff --git a/src/Git/Git.h b/src/Git/Git.h index d254b76..e661e8f 100644 --- a/src/Git/Git.h +++ b/src/Git/Git.h @@ -52,6 +52,7 @@ public: LOG_INFO_DETECT_COPYRENAME=0x100, LOG_INFO_FIRST_PARENT = 0x200, LOG_INFO_NO_MERGE = 0x400, + LOG_INFO_FOLLOW = 0x800 }LOG_INFO_MASK; int GetRemoteList(STRING_VECTOR &list); diff --git a/src/TortoiseGitBlame/OutputWnd.cpp b/src/TortoiseGitBlame/OutputWnd.cpp index 67820aa..98a3f83 100644 --- a/src/TortoiseGitBlame/OutputWnd.cpp +++ b/src/TortoiseGitBlame/OutputWnd.cpp @@ -171,7 +171,7 @@ int COutputWnd::LoadHistory(CString filename) path.SetFromGit(filename); m_LogList.Clear(); - m_LogList.FillGitLog(&path,0/*CGit::LOG_INFO_FULLHISTORY*/); + m_LogList.FillGitLog(&path,0/*CGit::LOG_INFO_FOLLOW*/); return 0; diff --git a/src/TortoiseGitBlame/PropertiesWnd.cpp b/src/TortoiseGitBlame/PropertiesWnd.cpp index f6c30d7..fd8ea37 100644 --- a/src/TortoiseGitBlame/PropertiesWnd.cpp +++ b/src/TortoiseGitBlame/PropertiesWnd.cpp @@ -372,7 +372,16 @@ void CPropertiesWnd::UpdateProperties(GitRev *rev) { CString str; CString parentsubject; - int index=pLogEntry->m_HashMap[rev->m_ParentHash[i]]; + int index; + + if( pLogEntry->m_HashMap.find(rev->m_ParentHash[i]) == pLogEntry->m_HashMap.end() ) + { + index = -1; + } + else + { + index=pLogEntry->m_HashMap[rev->m_ParentHash[i]]; + } if(index>=0) parentsubject=pLogEntry->at(index).m_Subject; diff --git a/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp b/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp index 20c1a09..633d18e 100644 --- a/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp +++ b/src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp @@ -97,6 +97,7 @@ BOOL CTortoiseGitBlameDoc::OnOpenDocument(LPCTSTR lpszPathName,CString Rev) if(!g_Git.m_CurrentDir.IsEmpty()) SetCurrentDirectory(g_Git.m_CurrentDir); + m_GitPath = path; GetMainFrame()->m_wndOutput.LoadHistory(path.GetGitPathString()); CString cmd; diff --git a/src/TortoiseGitBlame/TortoiseGitBlameDoc.h b/src/TortoiseGitBlame/TortoiseGitBlameDoc.h index b69a971..a26da8c 100644 --- a/src/TortoiseGitBlame/TortoiseGitBlameDoc.h +++ b/src/TortoiseGitBlame/TortoiseGitBlameDoc.h @@ -5,6 +5,9 @@ #pragma once +#include "Git.h" +#include "TGitPath.h" + class CMainFrame ; class CTortoiseGitBlameDoc : public CDocument @@ -20,6 +23,7 @@ public: // Operations public: BOOL m_IsGitFile; + CTGitPath m_GitPath; // Overrides public: virtual BOOL OnNewDocument(); diff --git a/src/TortoiseGitBlame/TortoiseGitBlameView.cpp b/src/TortoiseGitBlame/TortoiseGitBlameView.cpp index 9407580..36eec9d 100644 --- a/src/TortoiseGitBlame/TortoiseGitBlameView.cpp +++ b/src/TortoiseGitBlame/TortoiseGitBlameView.cpp @@ -2417,6 +2417,8 @@ void CTortoiseGitBlameView::UpdateInfo() CString &data = GetDocument()->m_BlameData; CString one; int pos=0; + + BYTE_VECTOR vector; CLogDataVector * pRevs= GetLogData(); @@ -2453,7 +2455,15 @@ void CTortoiseGitBlameView::UpdateInfo() id=pRevs->m_HashMap[one.Left(40)]; } else + { id=-1; + if(this->m_NoListCommit.find(one.Left(40)) == m_NoListCommit.end() ) + { + g_Git.GetLog(vector,one.Left(40),NULL,1); + this->m_NoListCommit[one.Left(40)].ParserFromLog(vector); + } + + } if(id>=0 && id <(int)GetLogData()->size()) { @@ -2518,10 +2528,6 @@ void CTortoiseGitBlameView::OnLButtonDown(UINT nFlags,CPoint point) if (m_CommitHash[line] != m_SelectedHash) { m_SelectedHash = m_CommitHash[line]; -// app.m_selectedorigrev = app.origrevs[line]; -// app.m_selectedauthor = app.authors[line]; -// app.m_selecteddate = app.dates[line]; - if(m_ID[line]>=0) { @@ -2534,15 +2540,12 @@ void CTortoiseGitBlameView::OnLButtonDown(UINT nFlags,CPoint point) this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(pRev); }else { - this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(NULL); + this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(&m_NoListCommit[m_CommitHash[line]]); } } else { m_SelectedHash.Empty(); -// app.m_selecteddate.clear(); -// app.m_selectedrev = -2; -// app.m_selectedorigrev = -2; } //::InvalidateRect( NULL, FALSE); this->Invalidate(); @@ -2597,31 +2600,26 @@ void CTortoiseGitBlameView::OnMouseHover(UINT nFlags, CPoint point) if (line != m_MouseLine) { m_MouseLine = line;//m_CommitHash[line]; -// app.m_selectedorigrev = app.origrevs[line]; -// app.m_selectedauthor = app.authors[line]; -// app.m_selecteddate = app.dates[line]; - + GitRev *pRev; if(m_ID[line]<0) { - m_ToolTip.AddTool(this,_T("")); - return; + pRev=&this->m_NoListCommit[m_CommitHash[line]]; + + }else + { + pRev=&this->GetLogData()->at(this->GetLogList()->GetItemCount()-m_ID[line]); } - GitRev *pRev; - pRev=&this->GetLogData()->at(this->GetLogList()->GetItemCount()-m_ID[line]); - //this->GetDocument()->GetMainFrame()->m_wndProperties.UpdateProperties(pRev); + this->ClientToScreen(&point); - //BALLOON_INFO bi; - //if(m_ToolTip.GetTool(this, bi)) - //{ - // bi.sBalloonTip=pRev->m_CommitHash; - CString str; - str.Format(_T("%s\n%s\n%s\n%s"),pRev->m_CommitHash, + + CString str; + str.Format(_T("%s\n%s\n%s %s\n%s"),pRev->m_CommitHash, pRev->m_Subject, + pRev->m_AuthorName, CAppUtils::FormatDateAndTime( pRev->m_AuthorDate, m_DateFormat ), pRev->m_Body); - m_ToolTip.AddTool(this,str); - m_ToolTip.DisplayToolTip(&point); - //} + m_ToolTip.AddTool(this,str); + m_ToolTip.DisplayToolTip(&point); CRect rect; this->ScreenToClient(&point); @@ -2635,19 +2633,8 @@ void CTortoiseGitBlameView::OnMouseHover(UINT nFlags, CPoint point) else { m_MouseLine=-1; -// app.m_selecteddate.clear(); -// app.m_selectedrev = -2; -// app.m_selectedorigrev = -2; } - //::InvalidateRect( NULL, FALSE); - //this->Invalidate(); } - -// const CString str=_T("this is a Message Balloon\n\nWarning! Warning!\nSomething unexpected happened"); - //CBalloon::ShowBalloon(NULL, point, - // str, - // FALSE, (HICON)IDI_EXCLAMATION, - // (UINT)CBalloon ::BALLOON_RIGHT_TOP, (UINT)CBalloon ::BALLOON_EFFECT_SOLID,(COLORREF)NULL, (COLORREF)NULL, (COLORREF)NULL); } void CTortoiseGitBlameView::OnMouseMove(UINT nFlags, CPoint point) diff --git a/src/TortoiseGitBlame/TortoiseGitBlameView.h b/src/TortoiseGitBlame/TortoiseGitBlameView.h index 35d7ba7..5a89063 100644 --- a/src/TortoiseGitBlame/TortoiseGitBlameView.h +++ b/src/TortoiseGitBlame/TortoiseGitBlameView.h @@ -166,6 +166,8 @@ public: std::vector m_Authors; std::vector m_CommitHash; + std::map m_NoListCommit; + // std::vector m_Paths; // std::map logmessages; char m_szTip[MAX_LOG_LENGTH*2+6]; -- 2.11.0