OSDN Git Service

Show "fast forward file" at merged commit
[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 \r
7 #define LOG_INDEX_MAGIC         0x88445566\r
8 #define LOG_DATA_MAGIC          0x99aa00FF\r
9 #define LOG_DATA_ITEM_MAGIC 0x0F8899CC\r
10 #define LOG_DATA_FILE_MAGIC 0x19999FFF\r
11 #define LOG_INDEX_VERSION   0x5 \r
12 \r
13 struct SLogCacheIndexHeader \r
14 {\r
15         DWORD m_Magic;\r
16         DWORD m_Version;\r
17         DWORD m_ItemCount;\r
18 };\r
19 \r
20 struct SLogCacheItem\r
21 {\r
22         BYTE  m_Hash[40];\r
23         ULONGLONG m_Offset;\r
24 };\r
25 \r
26 struct SLogCacheRevFileHeader\r
27 {\r
28         DWORD m_Magic;\r
29         DWORD m_Version;\r
30 };\r
31 \r
32 struct SLogCacheRevItemHeader\r
33 {\r
34         DWORD m_Magic;\r
35         DWORD m_Version;\r
36         DWORD m_FileCount;\r
37 };\r
38 \r
39 #define INDEX_FILE_NAME _T("tortoisegit.index")\r
40 #define DATA_FILE_NAME _T("tortoisegit.data")\r
41 #define LOCK_FILE_NAME _T("tortoisegit.lock")\r
42 \r
43 class CLogCache\r
44 {\r
45 protected:\r
46         CFile m_IndexFile;\r
47         CFile m_DataFile;\r
48         CFile m_LockFile;\r
49 \r
50         BOOL CheckHeader(SLogCacheIndexHeader &header)\r
51         {\r
52                 if(header.m_Magic != LOG_INDEX_MAGIC)\r
53                         return FALSE;\r
54 \r
55                 if(header.m_Version != LOG_INDEX_VERSION)\r
56                         return FALSE;\r
57 \r
58                 return TRUE;\r
59         }\r
60 \r
61         BOOL CheckHeader(SLogCacheRevFileHeader &header)\r
62         {\r
63                 if(header.m_Magic != LOG_DATA_MAGIC)\r
64                         return FALSE;\r
65 \r
66                 if(header.m_Version != LOG_INDEX_VERSION)\r
67                         return FALSE;\r
68 \r
69                 return TRUE;\r
70         }\r
71 \r
72         BOOL CheckHeader(SLogCacheRevItemHeader &header)\r
73         {\r
74                 if(header.m_Magic != LOG_DATA_ITEM_MAGIC)\r
75                         return FALSE;\r
76 \r
77                 if(header.m_Version != LOG_INDEX_VERSION)\r
78                         return FALSE;\r
79                 \r
80                 return TRUE;\r
81         }\r
82 \r
83         int SaveOneItem(GitRev &Rev,ULONGLONG offset);\r
84         int LoadOneItem(GitRev &Rev,ULONGLONG offset);\r
85         CString m_GitDir;\r
86         int RebuildCacheFile();\r
87 \r
88 public:\r
89         CLogCache();\r
90         ~CLogCache();\r
91         int FetchCacheIndex(CString GitDir);\r
92         std::vector<GitRev> m_NewCacheEntry;\r
93         std::map<CString, ULONGLONG> m_HashMapIndex;\r
94         int GetCacheData(GitRev &Rev);\r
95         int AddCacheEntry(GitRev &Rev);\r
96         int SaveCache();\r
97 \r
98 \r
99 };