2 #include "GitLogCache.h"
\r
4 CLogCache::CLogCache()
\r
9 CLogCache::~CLogCache()
\r
11 this->m_IndexFile.Close();
\r
12 this->m_DataFile.Close();
\r
15 int CLogCache::FetchCache(CString GitDir)
\r
17 if(this->m_IndexFile.m_hFile == CFile::hFileNull)
\r
19 BOOL b=m_IndexFile.Open(GitDir+_T("\\.git\\")+INDEX_FILE_NAME,
\r
20 CFile::modeRead|CFile::shareDenyNone|
\r
21 CFile::modeNoTruncate|CFile::modeCreate);
\r
26 SLogCacheIndexHeader header;
\r
27 UINT count=m_IndexFile.Read(&header,sizeof(SLogCacheIndexHeader));
\r
28 if(count != sizeof(SLogCacheIndexHeader))
\r
31 if( header.m_Magic != LOG_INDEX_MAGIC )
\r
34 if( header.m_Version != LOG_INDEX_VERSION )
\r
40 for(int i=0;i<header.m_ItemCount;i++)
\r
42 count=m_IndexFile.Read(&Item,sizeof(SLogCacheItem));
\r
43 if(count != sizeof(SLogCacheItem)
\r
47 g_Git.StringAppend(&str,Item.m_Hash,CP_UTF8,40);
\r
48 this->m_HashMapIndex[str]=Item.m_Offset;
\r
54 int CLogCache::SaveOneItem(GitRev &Rev)
\r
59 int CLogCache::LoadOneItem(GitRev &Rev,UINT offset)
\r
61 SLogCacheRevItemHeader header;
\r
62 m_DataFile.Seek(offset,CFile::begin);
\r
64 if(this->m_DataFile.m_hFile == CFile::hFileNull)
\r
66 BOOL b=m_DataFile.Open(GitDir+_T("\\.git\\")+INDEX_FILE_NAME,
\r
67 CFile::modeRead|CFile::shareDenyNone|
\r
68 CFile::modeNoTruncate|CFile::modeCreate);
\r
73 UINT count=m_DataFile.Read(&header,sizeof(SLogCacheRevItemHeader));
\r
74 if( count != sizeof(SLogCacheRevItemHeader))
\r
76 if( !CheckHeader(header))
\r
79 CGitByteArray stream;
\r
81 stream.resize(header.m_RevSize-sizeof(SLogCacheRevItemHeader));
\r
83 count=m_DataFile.Read(&stream[0],stream.size());
\r
84 if( count != stream.size)
\r