OSDN Git Service

Use -z parser at gitlog
[tortoisegit/TortoiseGitJp.git] / src / Git / GitRev.cpp
index d5e9edb..ba9526f 100644 (file)
@@ -53,29 +53,35 @@ int GitRev::CopyFrom(GitRev &rev)
        m_Mark                  =rev.m_Mark;\r
        return 0;\r
 }\r
-int GitRev::ParserFromLog(CString &log)\r
+int GitRev::ParserFromLog(BYTE_VECTOR &log,int start)\r
 {\r
-       int pos=0;\r
+       int pos=start;\r
        CString one;\r
        CString key;\r
        CString text;\r
-       CString filelist;\r
-       TCHAR mode=0;\r
+       BYTE_VECTOR filelist;\r
+       BYTE mode=0;\r
        CTGitPath  path;\r
        this->m_Files.Clear();\r
     m_Action=0;\r
-\r
-       while( pos>=0 )\r
+       int begintime=0;\r
+       while( pos <= log.size() && pos>0)\r
        {\r
-               one=log.Tokenize(_T("\n"),pos);\r
-               if(one[0]==_T('#') && one[1] == _T('<') && one[3] == _T('>'))\r
+               if(begintime>1)\r
+                       break;\r
+               //one=log.Tokenize(_T("\n"),pos);\r
+               if(log[pos]==_T('#') && log[pos+1] == _T('<') && log[pos+3] == _T('>'))\r
                {\r
-                       text = one.Right(one.GetLength()-4);\r
-                       mode = one[2];\r
+                       //text = one.Right(one.GetLength()-4);\r
+                       text.Empty();\r
+                       g_Git.StringAppend(&text,&log[pos+4],CP_UTF8);\r
+                       mode = log[pos+2];\r
+\r
                        switch(mode)\r
                        {\r
                        case LOG_REV_ITEM_BEGIN:\r
                                this->Clear();\r
+                               begintime++;\r
                                break;\r
                        case LOG_REV_AUTHOR_NAME:\r
                                this->m_AuthorName = text;\r
@@ -125,14 +131,16 @@ int GitRev::ParserFromLog(CString &log)
                {\r
                        switch(mode)\r
                        {\r
-                       case LOG_REV_COMMIT_BODY:\r
-                               this->m_Body += one+_T("\n");\r
-                               break;\r
+//                     case LOG_REV_COMMIT_BODY:\r
+//                             this->m_Body += one+_T("\n");\r
+//                             break;\r
                        case LOG_REV_COMMIT_FILE:\r
-                               filelist += one +_T("\n");\r
+                               //filelist += one +_T("\n");\r
+                               filelist.append(log,pos,log.find(0,pos));                               \r
                                break;\r
                        }\r
                }\r
+               pos=log.find(0,pos);\r
        }\r
        \r
        this->m_Files.ParserFromLog(filelist);\r
@@ -157,7 +165,7 @@ int GitRev::SafeFetchFullInfo(CGit *git)
        if(InterlockedExchange(&m_IsUpdateing,TRUE) == FALSE)\r
        {\r
                //GitRev rev;\r
-               CString onelog;\r
+               BYTE_VECTOR onelog;\r
                TCHAR oldmark=this->m_Mark;\r
        \r
                git->GetLog(onelog,m_CommitHash,NULL,1,CGit::LOG_INFO_STAT|CGit::LOG_INFO_FILESTATE|CGit::LOG_INFO_DETECT_COPYRENAME);\r