if(this->m_IndexFile.m_hFile == CFile::hFileNull)\r
{\r
BOOL b=m_IndexFile.Open(GitDir+_T("\\.git\\")+INDEX_FILE_NAME,\r
- CFile::modeRead|CFile::shareDenyNone|\r
- CFile::modeNoTruncate|CFile::modeCreate);\r
+ CFile::modeRead|CFile::shareDenyNone|\r
+ CFile::modeNoTruncate|CFile::modeCreate);\r
if(!b)\r
return -1;\r
}\r
for(int i=0;i<header.m_ItemCount;i++)\r
{\r
count=m_IndexFile.Read(&Item,sizeof(SLogCacheItem)); \r
- if(count != sizeof(SLogCacheItem)\r
+ if( count != sizeof(SLogCacheItem) )\r
break;\r
\r
CString str;\r
return 0;\r
}\r
\r
-int CLogCache::SaveOneItem(GitRev &Rev)\r
+int CLogCache::SaveOneItem(CString &GitDir,GitRev &Rev,UINT offset)\r
{\r
\r
+ SLogCacheRevItemHeader header;\r
+ m_DataFile.Seek(offset,CFile::begin);\r
+\r
+ if(this->m_DataFile.m_hFile == CFile::hFileNull)\r
+ {\r
+ BOOL b=m_DataFile.Open(GitDir+_T("\\.git\\")+INDEX_FILE_NAME,\r
+ CFile::modeRead|CFile::shareDenyNone|\r
+ CFile::modeNoTruncate|CFile::modeCreate);\r
+ if(!b)\r
+ return -1;\r
+ }\r
+\r
+ header.m_Magic=LOG_DATA_ITEM_MAGIC;\r
+ header.m_Version=LOG_INDEX_VERSION;\r
+ header.m_FileCount=Rev.m_Files.GetCount();\r
+\r
+ m_DataFile.Write(&header,sizeof(SLogCacheRevItemHeader));\r
+ \r
+ CArchive ar(&m_DataFile, CArchive::store);\r
+\r
+ ar<<Rev.m_AuthorName;\r
+ ar<<Rev.m_AuthorEmail;\r
+ ar<<Rev.m_AuthorDate;\r
+ ar<<Rev.m_CommitterName;\r
+ ar<<Rev.m_CommitterEmail;\r
+ ar<<Rev.m_CommitterDate;\r
+ ar<<Rev.m_Subject;\r
+ ar<<Rev.m_Body;\r
+ ar<<Rev.m_CommitHash;\r
+ ar<<Rev.m_Action;\r
+\r
+ for(int i=0;i<Rev.m_Files.GetCount();i++)\r
+ {\r
+ SLogCacheRevFileHeader header;\r
+ header.m_Magic=LOG_DATA_FILE_MAGIC;\r
+ header.m_Version=LOG_INDEX_VERSION;\r
+\r
+ ar<<header.m_Magic;\r
+ ar<<header.m_Version;\r
+\r
+ ar<<Rev.m_Files[i].m_Action;\r
+ ar<<Rev.m_Files[i].m_Stage;\r
+ ar<<Rev.m_Files[i].m_StatAdd;\r
+ ar<<Rev.m_Files[i].m_StatDel;\r
+ ar<<Rev.m_Files[i].GetGitPathString();\r
+ }\r
+ return 0;\r
}\r
\r
-int CLogCache::LoadOneItem(GitRev &Rev,UINT offset)\r
+int CLogCache::LoadOneItem(CString &GitDir,GitRev &Rev,UINT offset)\r
{\r
SLogCacheRevItemHeader header;\r
m_DataFile.Seek(offset,CFile::begin);\r
if(this->m_DataFile.m_hFile == CFile::hFileNull)\r
{\r
BOOL b=m_DataFile.Open(GitDir+_T("\\.git\\")+INDEX_FILE_NAME,\r
- CFile::modeRead|CFile::shareDenyNone|\r
- CFile::modeNoTruncate|CFile::modeCreate);\r
+ CFile::modeRead|CFile::shareDenyNone|\r
+ CFile::modeNoTruncate|CFile::modeCreate);\r
if(!b)\r
return -1;\r
}\r
return -1;\r
if( !CheckHeader(header))\r
return -2;\r
- \r
- CGitByteArray stream;\r
\r
- stream.resize(header.m_RevSize-sizeof(SLogCacheRevItemHeader));\r
\r
- count=m_DataFile.Read(&stream[0],stream.size());\r
- if( count != stream.size)\r
- return;\r
+ CArchive ar(&m_DataFile, CArchive::load);\r
\r
- \r
+ ar>>Rev.m_AuthorName;\r
+ ar>>Rev.m_AuthorEmail;\r
+ ar>>Rev.m_AuthorDate;\r
+ ar>>Rev.m_CommitterName;\r
+ ar>>Rev.m_CommitterEmail;\r
+ ar>>Rev.m_CommitterDate;\r
+ ar>>Rev.m_Subject;\r
+ ar>>Rev.m_Body;\r
+ ar>>Rev.m_CommitHash;\r
+ ar>>Rev.m_Action;\r
\r
+ Rev.m_Files.Clear();\r
\r
- \r
+ for(int i=0;i<header.m_FileCount;i++)\r
+ {\r
+ CTGitPath path;\r
+ CString file;\r
+ path.Reset();\r
+ SLogCacheRevFileHeader header;\r
+\r
+ ar>>header.m_Magic;\r
+ ar>>header.m_Version;\r
+\r
+ if( this->CheckHeader(header) )\r
+ return -1;\r
+\r
+ ar>>path.m_Action;\r
+ ar>>path.m_Stage;\r
+ ar>>path.m_StatAdd;\r
+ ar>>path.m_StatDel;\r
+ ar>>file;\r
+ path.SetFromGit(file);\r
+ Rev.m_Files.AddPath(path);\r
+ }\r
+ return 0;\r
}
\ No newline at end of file