OSDN Git Service

All branch and first parent work at log dialog
authorFrank Li <lznuaa@gmail.com>
Wed, 13 Jan 2010 14:59:43 +0000 (22:59 +0800)
committerFrank Li <lznuaa@gmail.com>
Wed, 13 Jan 2010 14:59:43 +0000 (22:59 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Git/GitRev.cpp
src/Git/GitRev.h
src/TortoiseProc/GitLogCache.cpp
src/TortoiseProc/GitLogListBase.cpp
src/TortoiseProc/gitlogcache.h

index b075ad9..58933a0 100644 (file)
@@ -391,4 +391,14 @@ int GitRev::ParserFromCommit(GIT_COMMIT *commit)
        g_Git.StringAppend(&m_Subject, (BYTE*)commit->m_Subject,encode,commit->m_SubjectSize);\r
        \r
        return 0;\r
+}\r
+\r
+void GitRev::DbgPrint()\r
+{\r
+       TRACE(_T("Commit %s\r\n"), this->m_CommitHash.ToString());\r
+       for(int i=0;i<this->m_ParentHash.size();i++)\r
+       {\r
+               TRACE(_T("Parent %i %s"),i, m_ParentHash[i].ToString());\r
+       }\r
+       TRACE(_T("\n"));\r
 }
\ No newline at end of file
index eb4adf9..64ff796 100644 (file)
@@ -77,6 +77,8 @@ public:
 \r
        int ParserFromCommit(GIT_COMMIT *commit);\r
        int ParserParentFromCommit(GIT_COMMIT *commit);\r
+public:\r
+       void DbgPrint();\r
 private:\r
        TIME_ZONE_INFORMATION m_TimeZone;\r
 };\r
index 10c740b..5939877 100644 (file)
@@ -33,8 +33,9 @@ GitRev * CLogCache::GetCacheData(CGitHash &hash)
                GitRev rev;\r
                if(!LoadOneItem(rev,m_HashMapIndex[hash]))\r
                {\r
-                       rev.m_IsFull=true;\r
                        m_HashMap[hash].CopyFrom(rev);\r
+                       rev.m_IsFull=true;\r
+                       \r
                        return &m_HashMap[hash];\r
                }\r
        }\r
@@ -306,4 +307,15 @@ int CLogCache::SaveCache()
        m_IndexFile.Close();\r
        m_DataFile.Close();\r
        return 0;\r
+}\r
+\r
+int CLogCache::ClearAllParent()\r
+{\r
+       CGitHashMap::iterator i;\r
+       for(i=m_HashMap.begin();i!=m_HashMap.end();i++)\r
+       {\r
+               (*i).second.m_ParentHash.clear();\r
+               (*i).second.m_Lanes.clear();\r
+       }\r
+       return 0;\r
 }
\ No newline at end of file
index 5f64ad9..bedac59 100644 (file)
@@ -322,7 +322,7 @@ void CGitLogListBase::ResizeAllListCtrlCols()
 \r
 BOOL CGitLogListBase::GetShortName(CString ref, CString &shortname,CString prefix)\r
 {\r
-       TRACE(_T("%s %s\r\n"),ref,prefix);\r
+       //TRACE(_T("%s %s\r\n"),ref,prefix);\r
        if(ref.Left(prefix.GetLength()) ==  prefix)\r
        {\r
                shortname = ref.Right(ref.GetLength()-prefix.GetLength());\r
@@ -993,7 +993,7 @@ void CGitLogListBase::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                                rect.right=second.left;\r
                                        }\r
                                        \r
-                                       TRACE(_T("A Graphic left %d right %d\r\n"),rect.left,rect.right);\r
+                                       //TRACE(_T("A Graphic left %d right %d\r\n"),rect.left,rect.right);\r
                                        FillBackGround(pLVCD->nmcd.hdc, (INT_PTR)pLVCD->nmcd.dwItemSpec,rect);\r
                                        \r
                                        GitRev* data = (GitRev*)m_arShownList.GetAt(pLVCD->nmcd.dwItemSpec);\r
@@ -1054,7 +1054,7 @@ void CGitLogListBase::OnNMCustomdrawLoglist(NMHDR *pNMHDR, LRESULT *pResult)
                                GitRev* pLogEntry = reinterpret_cast<GitRev *>(m_arShownList.GetAt(pLVCD->nmcd.dwItemSpec));\r
                                CRect rect;\r
                                GetSubItemRect(pLVCD->nmcd.dwItemSpec, pLVCD->iSubItem, LVIR_BOUNDS, rect);\r
-                               TRACE(_T("Action left %d right %d\r\n"),rect.left,rect.right);\r
+                               //TRACE(_T("Action left %d right %d\r\n"),rect.left,rect.right);\r
                                // Get the selected state of the\r
                                // item being drawn.                                                    \r
 \r
@@ -1751,6 +1751,8 @@ int CGitLogListBase::BeginFetchLog()
        this->m_logEntries.ClearAll();\r
        git_init();\r
 \r
+       this->m_LogCache.ClearAllParent();\r
+\r
        m_LogCache.FetchCacheIndex(g_Git.m_CurrentDir);\r
 \r
     CTGitPath *path;\r
@@ -2059,6 +2061,7 @@ UINT CGitLogListBase::LogThread()
        if(BeginFetchLog())\r
                return -1;\r
 \r
+       TRACE(_T("\n===Begin===\n"));\r
        //Update work copy item;\r
        if( m_logEntries.size() > 0)\r
        {\r
@@ -2097,7 +2100,6 @@ UINT CGitLogListBase::LogThread()
                        break;\r
 \r
                CGitHash hash = (char*)commit.m_hash ;\r
-\r
                        \r
                GitRev *pRev = m_LogCache.GetCacheData(hash);\r
                \r
@@ -2105,15 +2107,18 @@ UINT CGitLogListBase::LogThread()
                {\r
                        pRev->ParserFromCommit(&commit);\r
                        pRev->ParserParentFromCommit(&commit);\r
-\r
                        pRev->SafeFetchFullInfo(&g_Git);\r
-                       git_free_commit(&commit);\r
-                       \r
+                                               \r
                }else\r
                {\r
                        ASSERT(pRev->m_CommitHash == hash);\r
                        pRev->ParserParentFromCommit(&commit);\r
                }\r
+#ifdef DEBUG           \r
+               pRev->DbgPrint();\r
+               TRACE(_T("\n"));\r
+#endif\r
+               git_free_commit(&commit);\r
 \r
                this->m_critSec.Lock();\r
                m_logEntries.push_back(hash);\r
index 61280af..a32fb84 100644 (file)
@@ -107,5 +107,6 @@ public:
        int AddCacheEntry(GitRev &Rev);\r
        int SaveCache();\r
 \r
+       int ClearAllParent();\r
 \r
 };
\ No newline at end of file