OSDN Git Service

Try to improve log preformance
authorFrank Li <lznuaa@gmail.com>
Mon, 23 Mar 2009 14:26:18 +0000 (22:26 +0800)
committerFrank Li <lznuaa@gmail.com>
Mon, 23 Mar 2009 14:26:18 +0000 (22:26 +0800)
src/Git/Git.cpp
src/TortoiseProc/GitLogListBase.cpp
src/TortoiseProc/LogDataVector.cpp
src/TortoiseProc/LogDlgHelper.cpp
src/TortoiseProc/LogDlgHelper.h

index 8f1de4f..0d20a7e 100644 (file)
@@ -401,15 +401,16 @@ int CGit::BuildOutputFormat(CString &format,bool IsFull)
                format += log;\r
                log.Format(_T("#<%c>%%ci%%x00"),LOG_REV_COMMIT_DATE);\r
                format += log;\r
-               log.Format(_T("#<%c>%%s%%x00"),LOG_REV_COMMIT_SUBJECT);\r
-               format += log;\r
                log.Format(_T("#<%c>%%b%%x00"),LOG_REV_COMMIT_BODY);\r
                format += log;\r
        }\r
+       \r
        log.Format(_T("#<%c>%%m%%H%%x00"),LOG_REV_COMMIT_HASH);\r
        format += log;\r
        log.Format(_T("#<%c>%%P%%x00"),LOG_REV_COMMIT_PARENT);\r
        format += log;\r
+       log.Format(_T("#<%c>%%s%%x00"),LOG_REV_COMMIT_SUBJECT);\r
+       format += log;\r
 \r
        if(IsFull)\r
        {\r
index cde551f..6ed7eea 100644 (file)
@@ -1808,7 +1808,7 @@ UINT CGitLogListBase::LogThread()
 \r
 \r
        //FetchFullLogInfo();\r
-       FetchFullLogInfoOrig();\r
+       //FetchFullLogInfoOrig();\r
        //RefreshCursor();\r
        // make sure the filter is applied (if any) now, after we refreshed/fetched\r
        // the log messages\r
@@ -2122,13 +2122,9 @@ void CGitLogListBase::RemoveFilter()
 void CGitLogListBase::Clear()\r
 {\r
        m_arShownList.RemoveAll();\r
-       m_logEntries.clear();\r
-       m_logEntries.m_HashMap.clear();\r
        DeleteAllItems();\r
-       m_logEntries.m_Lns.clear();\r
 \r
-       m_logEntries.m_FirstFreeLane=0;\r
-       m_logEntries.m_Lns.clear();\r
+       m_logEntries.ClearAll();\r
 \r
 }\r
 \r
index 851dcbe..9ae5fb7 100644 (file)
 //#include "EditPropertiesDlg.h"
 #include "FileDiffDlg.h"
 
+void CLogDataVector::ClearAll()\r
+{\r
+\r
+       clear();\r
+       m_HashMap.clear();\r
+       m_Lns.clear();\r
+\r
+       m_FirstFreeLane=0;\r
+       m_Lns.clear();\r
+\r
+       m_RawlogData.clear();\r
+       m_RawLogStart.clear();\r
+}
 
 int CLogDataVector::ParserShortLog(CTGitPath *path ,CString &hash,int count ,int mask )
 {
-       BYTE_VECTOR log;
-       GitRev rev;
+       //BYTE_VECTOR log;
+       m_RawlogData.clear();\r
+       m_RawLogStart.clear();
 
+       GitRev rev;
+       
        if(g_Git.IsInitRepos())
                return 0;
 
@@ -76,25 +92,34 @@ int CLogDataVector::ParserShortLog(CTGitPath *path ,CString &hash,int count ,int
        begin.Format(_T("#<%c>"),LOG_REV_ITEM_BEGIN);
 
        //g_Git.GetShortLog(log,path,count);
+       ULONGLONG  t1,t2;
+       t1=GetTickCount();
+       g_Git.GetLog(m_RawlogData, hash,path,count,mask);
+       t2=GetTickCount();
 
-       g_Git.GetLog(log,hash,path,count,mask);
+       TRACE(_T("GetLog Time %ld\r\n"),t2-t1);
 
-       if(log.size()==0)
+       if(m_RawlogData.size()==0)
                return 0;
        
        int start=4;
        int length;
        int next =0;
-       while( next>=0 && next<log.size())
-       {
-               next=rev.ParserFromLog(log,next);
-
-               rev.m_Subject=_T("Load .................................");
-               this->push_back(rev);
-               m_HashMap[rev.m_CommitHash]=size()-1;
+       t1=GetTickCount();
+       int a1=0,b1=0;
 
+       while( next>=0 && next<m_RawlogData.size())
+       {
+               static const BYTE dataToFind[]={0,0};
+               m_RawLogStart.push_back(next);
+               //this->at(i).m_Subject=_T("parser...");
+               next=m_RawlogData.findData(dataToFind,2,next+1);
                //next=log.find(0,next);
+
        }
+       t2=GetTickCount();
+
+       TRACE(_T("Parser Log Time %ld\r\n"),t2-t1);
 
        return 0;
 
index 2aa319b..ea8eb94 100644 (file)
@@ -67,17 +67,3 @@ CStoreSelection::~CStoreSelection()
 #endif\r
 }\r
 \r
-void CLogDataVector::ClearAll()\r
-{\r
-#if 0\r
-       if(size() > 0)\r
-       {\r
-               for(iterator it=begin(); it!=end(); ++it)\r
-               {\r
-                       delete (*it)->pArChangedPaths;\r
-                       delete *it;\r
-               }     \r
-               clear();\r
-       }\r
-#endif\r
-}
\ No newline at end of file
index 0836d64..f823ad6 100644 (file)
@@ -72,9 +72,9 @@ public:
        MAP_HASH_REV m_HashMap;\r
        void updateLanes(GitRev& c, Lanes& lns, CString &sha) ;\r
        void setLane(CString& sha) ;\r
-       \r
-       \r
 \r
+       BYTE_VECTOR              m_RawlogData;\r
+       std::vector<int> m_RawLogStart;\r
 \r
 #if 0\r
        /// Ascending date sorting.\r