int CGit::BuildOutputFormat(CString &format,bool IsFull)\r
{\r
CString log;\r
- log.Format(_T("#<%c>%%n"),LOG_REV_ITEM_BEGIN);\r
+ log.Format(_T("#<%c>%%x00"),LOG_REV_ITEM_BEGIN);\r
format += log;\r
if(IsFull)\r
{\r
- log.Format(_T("#<%c>%%an%%n"),LOG_REV_AUTHOR_NAME);\r
+ log.Format(_T("#<%c>%%an%%x00"),LOG_REV_AUTHOR_NAME);\r
format += log;\r
- log.Format(_T("#<%c>%%ae%%n"),LOG_REV_AUTHOR_EMAIL);\r
+ log.Format(_T("#<%c>%%ae%%x00"),LOG_REV_AUTHOR_EMAIL);\r
format += log;\r
- log.Format(_T("#<%c>%%ai%%n"),LOG_REV_AUTHOR_DATE);\r
+ log.Format(_T("#<%c>%%ai%%x00"),LOG_REV_AUTHOR_DATE);\r
format += log;\r
- log.Format(_T("#<%c>%%cn%%n"),LOG_REV_COMMIT_NAME);\r
+ log.Format(_T("#<%c>%%cn%%x00"),LOG_REV_COMMIT_NAME);\r
format += log;\r
- log.Format(_T("#<%c>%%ce%%n"),LOG_REV_COMMIT_EMAIL);\r
+ log.Format(_T("#<%c>%%ce%%x00"),LOG_REV_COMMIT_EMAIL);\r
format += log;\r
- log.Format(_T("#<%c>%%ci%%n"),LOG_REV_COMMIT_DATE);\r
+ log.Format(_T("#<%c>%%ci%%x00"),LOG_REV_COMMIT_DATE);\r
format += log;\r
- log.Format(_T("#<%c>%%s%%n"),LOG_REV_COMMIT_SUBJECT);\r
+ log.Format(_T("#<%c>%%s%%x00"),LOG_REV_COMMIT_SUBJECT);\r
format += log;\r
- log.Format(_T("#<%c>%%b%%n"),LOG_REV_COMMIT_BODY);\r
+ log.Format(_T("#<%c>%%b%%x00"),LOG_REV_COMMIT_BODY);\r
format += log;\r
}\r
- log.Format(_T("#<%c>%%m%%H%%n"),LOG_REV_COMMIT_HASH);\r
+ log.Format(_T("#<%c>%%m%%H%%x00"),LOG_REV_COMMIT_HASH);\r
format += log;\r
- log.Format(_T("#<%c>%%P%%n"),LOG_REV_COMMIT_PARENT);\r
+ log.Format(_T("#<%c>%%P%%x00"),LOG_REV_COMMIT_PARENT);\r
format += log;\r
\r
if(IsFull)\r
{\r
- log.Format(_T("#<%c>%%n"),LOG_REV_COMMIT_FILE);\r
+ log.Format(_T("#<%c>%%x00"),LOG_REV_COMMIT_FILE);\r
format += log;\r
}\r
return 0;\r
this->m_Files.Clear();\r
m_Action=0;\r
int begintime=0;\r
- while( pos <= log.size() && pos>0)\r
+ BYTE *p=&log[0];\r
+ int filebegin=-1;\r
+\r
+ while( pos < log.size() && pos>=0)\r
{\r
- if(begintime>1)\r
- break;\r
+ \r
//one=log.Tokenize(_T("\n"),pos);\r
if(log[pos]==_T('#') && log[pos+1] == _T('<') && log[pos+3] == _T('>'))\r
{\r
text.Empty();\r
g_Git.StringAppend(&text,&log[pos+4],CP_UTF8);\r
mode = log[pos+2];\r
-\r
+ \r
switch(mode)\r
{\r
case LOG_REV_ITEM_BEGIN:\r
- this->Clear();\r
begintime++;\r
+ if(begintime>1)\r
+ break;\r
+ else\r
+ this->Clear();\r
break;\r
case LOG_REV_AUTHOR_NAME:\r
this->m_AuthorName = text;\r
// break;\r
case LOG_REV_COMMIT_FILE:\r
//filelist += one +_T("\n");\r
- filelist.append(log,pos,log.find(0,pos)); \r
+ //filelist.append(log,pos,log.find(0,pos));\r
+ if(filebegin<0)\r
+ filebegin=pos;\r
break;\r
}\r
}\r
- pos=log.find(0,pos);\r
+ \r
+ if(begintime>1)\r
+ {\r
+ break;\r
+ }\r
+\r
+ //find next string start \r
+ pos=log.findNextString(pos);\r
}\r
\r
- this->m_Files.ParserFromLog(filelist);\r
- this->m_Action=this->m_Files.GetAction();\r
- return 0;\r
+ if(filebegin>=0)\r
+ {\r
+ filelist.append(log,filebegin,pos); \r
+ this->m_Files.ParserFromLog(filelist);\r
+ this->m_Action=this->m_Files.GetAction();\r
+ }\r
+ return pos;\r
}\r
\r
CTime GitRev::ConverFromString(CString input)\r
{\r
this->Clear();\r
int pos=0;\r
+ BYTE *p=&log[0];\r
//CString one;\r
CTGitPath path;\r
m_Action=0;\r
- while( pos>=0 )\r
+ while( pos>=0 && pos<log.size())\r
{\r
//one=log.Tokenize(_T("\n"),pos);\r
path.Reset();\r
- if(log[pos]==_T(':'))\r
+ if(log[pos]=='\n')\r
+ pos++;\r
+\r
+ if(log[pos]==':')\r
{\r
int end=log.find(0,pos);\r
int actionstart=-1;\r
AddPath(path);\r
\r
}\r
- \r
- pos=log.find(0,pos);\r
- if(pos>=0)\r
- {\r
- pos++;\r
- }\r
+ \r
}else\r
{ \r
int tabstart=0;\r
if(tabstart >=0)\r
{\r
log[tabstart]=0;\r
- pos=tabstart;\r
g_Git.StringAppend(&StatAdd,&log[pos],CP_UTF8);\r
+ pos=tabstart+1;\r
}\r
\r
tabstart=log.find('\t',pos);\r
if(tabstart >=0)\r
{\r
log[tabstart]=0;\r
- pos=tabstart;\r
+ \r
g_Git.StringAppend(&StatDel,&log[pos],CP_UTF8);\r
+ pos=tabstart+1;\r
}\r
\r
if(log[pos] == 0) //rename\r
AddPath(path);\r
}\r
\r
- pos=log.find(0,pos);\r
- if(pos>=0)\r
- pos++;\r
}\r
-\r
+ pos=log.findNextString(pos);\r
}\r
return pos;\r
}\r
return i;\r
return -1;\r
}\r
+ int findNextString(int start=0)\r
+ {\r
+ int pos=start;\r
+ do\r
+ {\r
+ pos=find(0,pos);\r
+ if(pos >= 0)\r
+ pos++;\r
+ else\r
+ break;\r
+\r
+ if( pos >= size())\r
+ return -1;\r
+\r
+ }while(at(pos)==0);\r
+\r
+ return pos;\r
+ }\r
int append( std::vector<BYTE> &v,int start=0,int end=-1)\r
{\r
if(end<0)\r
int start=4;
int length;
int next =0;
- while( 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;
-
- if(next>0)
- next++;
+
//next=log.find(0,next);
}
next=rev.ParserFromLog(log,next);
this->push_back(rev);
m_HashMap[rev.m_CommitHash]=size()-1;
- if(next>=0)
- next++;
}
return 0;
m_bSaveState = FALSE;\r
retSuccess = false;\r
CGit git;\r
- git.GetUserName();\r
+ //git.GetUserName();\r
}\r
\r
CTortoiseProcApp::~CTortoiseProcApp()\r