OSDN Git Service

Fix TortoiseGitBlame commit is not in log list problem.
authorFrank Li <lznuaa@gmail.com>
Fri, 30 Jan 2009 13:46:58 +0000 (21:46 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 30 Jan 2009 13:46:58 +0000 (21:46 +0800)
Fix ToolTip information and property box error information when commit hash is not in log list.

Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Git/Git.cpp
src/Git/Git.h
src/TortoiseGitBlame/OutputWnd.cpp
src/TortoiseGitBlame/PropertiesWnd.cpp
src/TortoiseGitBlame/TortoiseGitBlameDoc.cpp
src/TortoiseGitBlame/TortoiseGitBlameDoc.h
src/TortoiseGitBlame/TortoiseGitBlameView.cpp
src/TortoiseGitBlame/TortoiseGitBlameView.h

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