//#include "RepositoryInfo.h"\r
//#include "EditPropertiesDlg.h"\r
#include "FileDiffDlg.h"\r
+#include "GitHash.h"\r
+CGitHashMap a;\r
\r
void CLogDataVector::ClearAll()\r
{\r
next=rev.ParserFromLog(log,next);\r
\r
rev.m_Subject=_T("Load .................................");\r
- this->push_back(rev);\r
+ this->push_back(rev.m_CommitHash);\r
+\r
+ if(this->m_pLogCache->m_HashMap.IsExist(rev.m_CommitHash))\r
+ {\r
+ if(!this->m_pLogCache->m_HashMap[rev.m_CommitHash].m_IsFull)\r
+ this->m_pLogCache->m_HashMap[rev.m_CommitHash].CopyFrom(rev);\r
+ }else\r
+ this->m_pLogCache->m_HashMap[rev.m_CommitHash].CopyFrom(rev);\r
+\r
m_HashMap[rev.m_CommitHash]=size()-1;\r
\r
//next=log.find(0,next);\r
return 0;\r
\r
}\r
-int CLogDataVector::FetchShortLog(CTGitPath *path ,CString &hash,int count ,int mask )\r
+int CLogDataVector::FetchShortLog(CTGitPath *path ,CString &hash,int count ,int mask, int ShowWC )\r
{\r
//BYTE_VECTOR log;\r
m_RawlogData.clear();\r
//next=log.find(0,next);\r
}\r
\r
- resize(m_RawLogStart.size());\r
+ resize(m_RawLogStart.size() + ShowWC);\r
\r
t2=GetTickCount();\r
\r
}\r
int CLogDataVector::FetchFullInfo(int i)\r
{\r
- return at(i).SafeFetchFullInfo(&g_Git);\r
+ return GetGitRevAt(i).SafeFetchFullInfo(&g_Git);\r
}\r
//CLogDataVector Class\r
int CLogDataVector::ParserFromLog(CTGitPath *path ,int count ,int infomask,CString *from,CString *to)\r
while( next>=0 )\r
{\r
next=rev.ParserFromLog(log,next);\r
- this->push_back(rev);\r
+\r
+ if(this->m_pLogCache->m_HashMap.IsExist(rev.m_CommitHash))\r
+ {\r
+ if(!this->m_pLogCache->m_HashMap[rev.m_CommitHash].m_IsFull)\r
+ {\r
+ this->m_pLogCache->m_HashMap[rev.m_CommitHash].CopyFrom(rev);\r
+ }\r
+ }else\r
+ this->m_pLogCache->m_HashMap[rev.m_CommitHash].CopyFrom(rev);\r
+\r
+ this->m_pLogCache->m_HashMap[rev.m_CommitHash].m_IsFull=true;\r
+\r
+ this->push_back(rev.m_CommitHash);\r
+\r
m_HashMap[rev.m_CommitHash]=size()-1; \r
}\r
\r
if(ref<0)\r
continue;\r
\r
- rev.m_CommitHash=one.Left(ref);\r
+ rev.Clear();\r
+\r
+ rev.m_CommitHash=g_Git.GetHash(one.Left(ref));\r
int action=one.Find(_T(' '),ref+1);\r
int message;\r
if(action>0)\r
rev.m_Subject=one.Right(one.GetLength()-message-1);\r
}\r
}\r
- this->push_back(rev);\r
+\r
+ if(this->m_pLogCache->m_HashMap.IsExist(rev.m_CommitHash))\r
+ {\r
+ if(!this->m_pLogCache->m_HashMap[rev.m_CommitHash].m_IsFull)\r
+ this->m_pLogCache->m_HashMap[rev.m_CommitHash].CopyFrom(rev);\r
+ }else\r
+ this->m_pLogCache->m_HashMap[rev.m_CommitHash].CopyFrom(rev);\r
+\r
}\r
return 0;\r
}\r
\r
-void CLogDataVector::setLane(CString& sha) \r
+void CLogDataVector::setLane(CGitHash& sha) \r
{\r
Lanes* l = &(this->m_Lns);\r
int i = m_FirstFreeLane;\r
\r
for (int cnt = size(); i < cnt; ++i) {\r
\r
- GitRev* r = &(*this)[i]; \r
- CString &curSha=r->m_CommitHash;\r
+ GitRev* r = & this->GetGitRevAt(i); \r
+ CGitHash curSha=r->m_CommitHash;\r
\r
if (r->m_Lanes.size() == 0)\r
updateLanes(*r, *l, curSha);\r
}\r
\r
\r
-void CLogDataVector::updateLanes(GitRev& c, Lanes& lns, CString &sha) \r
+void CLogDataVector::updateLanes(GitRev& c, Lanes& lns, CGitHash &sha) \r
{\r
// we could get third argument from c.sha(), but we are in fast path here\r
// and c.sha() involves a deep copy, so we accept a little redundancy\r
lns.changeActiveLane(sha); // uses previous isBoundary state\r
\r
lns.setBoundary(c.IsBoundary() == TRUE); // update must be here\r
- TRACE(_T("%s %d"),c.m_CommitHash,c.IsBoundary());\r
+ TRACE(_T("%s %d"),c.m_CommitHash.ToString(),c.IsBoundary());\r
\r
if (isFork)\r
lns.setFork(sha);\r
\r
lns.getLanes(c.m_Lanes); // here lanes are snapshotted\r
\r
- CString nextSha = (isInitial) ? CString(_T("")) : QString(c.m_ParentHash[0]);\r
+ CGitHash nextSha;\r
+ if( !isInitial) \r
+ nextSha = c.m_ParentHash[0];\r
\r
lns.nextParent(nextSha);\r
\r