OSDN Git Service

All branch and first parent work at log dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / gitlogcache.h
1 #pragma once\r
2 \r
3 #include "Git.h"\r
4 #include "TGitPath.h"\r
5 #include "GitRev.h"\r
6 #include "GitHash.h"\r
7 \r
8 #define LOG_INDEX_MAGIC         0x88445566\r
9 #define LOG_DATA_MAGIC          0x99aa00FF\r
10 #define LOG_DATA_ITEM_MAGIC 0x0F8899CC\r
11 #define LOG_DATA_FILE_MAGIC 0x19999FFF\r
12 #define LOG_INDEX_VERSION   0x7\r
13 \r
14 struct SLogCacheIndexHeader \r
15 {\r
16         DWORD m_Magic;\r
17         DWORD m_Version;\r
18         DWORD m_ItemCount;\r
19 };\r
20 \r
21 struct SLogCacheItem\r
22 {\r
23         CGitHash  m_Hash;\r
24         ULONGLONG m_Offset;\r
25 };\r
26 \r
27 struct SLogCacheRevFileHeader\r
28 {\r
29         DWORD m_Magic;\r
30         DWORD m_Version;\r
31 };\r
32 \r
33 struct SLogCacheRevItemHeader\r
34 {\r
35         DWORD m_Magic;\r
36         DWORD m_Version;\r
37         DWORD m_FileCount;\r
38 };\r
39 \r
40 class CGitHashMap:public std::map<CGitHash,GitRev>\r
41 {\r
42 public:\r
43         bool IsExist(CGitHash &hash)\r
44         {\r
45                 return find(hash) != end();\r
46         }\r
47 };\r
48 \r
49 #define INDEX_FILE_NAME _T("tortoisegit.index")\r
50 #define DATA_FILE_NAME _T("tortoisegit.data")\r
51 #define LOCK_FILE_NAME _T("tortoisegit.lock")\r
52 \r
53 class CLogCache\r
54 {\r
55 protected:\r
56         CFile m_IndexFile;\r
57         CFile m_DataFile;\r
58         CFile m_LockFile;\r
59 \r
60         BOOL CheckHeader(SLogCacheIndexHeader &header)\r
61         {\r
62                 if(header.m_Magic != LOG_INDEX_MAGIC)\r
63                         return FALSE;\r
64 \r
65                 if(header.m_Version != LOG_INDEX_VERSION)\r
66                         return FALSE;\r
67 \r
68                 return TRUE;\r
69         }\r
70 \r
71         BOOL CheckHeader(SLogCacheRevFileHeader &header)\r
72         {\r
73                 if(header.m_Magic != LOG_DATA_MAGIC)\r
74                         return FALSE;\r
75 \r
76                 if(header.m_Version != LOG_INDEX_VERSION)\r
77                         return FALSE;\r
78 \r
79                 return TRUE;\r
80         }\r
81 \r
82         BOOL CheckHeader(SLogCacheRevItemHeader &header)\r
83         {\r
84                 if(header.m_Magic != LOG_DATA_ITEM_MAGIC)\r
85                         return FALSE;\r
86 \r
87                 if(header.m_Version != LOG_INDEX_VERSION)\r
88                         return FALSE;\r
89                 \r
90                 return TRUE;\r
91         }\r
92 \r
93         int SaveOneItem(GitRev &Rev,ULONGLONG offset);\r
94         int LoadOneItem(GitRev &Rev,ULONGLONG offset);\r
95         CString m_GitDir;\r
96         int RebuildCacheFile();\r
97 \r
98 public:\r
99         CLogCache();\r
100         ~CLogCache();\r
101         int FetchCacheIndex(CString GitDir);\r
102 \r
103         CGitHashMap m_HashMap;\r
104         std::map<CGitHash, ULONGLONG> m_HashMapIndex;\r
105 \r
106         GitRev * GetCacheData(CGitHash &Rev);\r
107         int AddCacheEntry(GitRev &Rev);\r
108         int SaveCache();\r
109 \r
110         int ClearAllParent();\r
111 \r
112 };