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
{\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
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