OSDN Git Service

Experiment with retrieving full log in one git.exe call
[tortoisegit/TortoiseGitJp.git] / src / Git / Git.h
1 #pragma once\r
2 #include "GitType.h"\r
3 #include "GitRev.h"\r
4 #include "GitStatus.h"\r
5 #include "GitAdminDir.h"\r
6 \r
7 class CGitCall\r
8 {\r
9 public:\r
10         CGitCall(){}\r
11         CGitCall(CString cmd):m_Cmd(cmd){}\r
12 \r
13         CString                 GetCmd()const{return m_Cmd;}\r
14         void                    SetCmd(CString cmd){m_Cmd=cmd;}\r
15 \r
16         //This function is called when command output data is available.\r
17         //When this function returns 'true' the git command should be aborted.\r
18         //This behavior is not implemented yet.\r
19         virtual bool    OnOutputData(const BYTE* data, size_t size)=0;\r
20 \r
21 private:\r
22         CString m_Cmd;\r
23 \r
24 };\r
25 \r
26 class CTGitPath;\r
27 \r
28 class CGit\r
29 {\r
30 private:\r
31         GitAdminDir m_GitDir;\r
32 public:\r
33         static BOOL CheckMsysGitDir();\r
34         static CString ms_LastMsysGitDir;       // the last msysgitdir added to the path, blank if none\r
35 \r
36 //      static CString m_MsysGitPath;\r
37         CGit(void);\r
38         ~CGit(void);\r
39         \r
40         int Run(CString cmd, CString* output,int code);\r
41         int Run(CString cmd, BYTE_VECTOR *byte_array);\r
42         int Run(CGitCall* pcall);\r
43 \r
44         int RunAsync(CString cmd,PROCESS_INFORMATION *pi, HANDLE* hRead, CString *StdioFile=NULL);\r
45         int RunLogFile(CString cmd, CString &filename);\r
46         CString GetUserName(void);\r
47         CString GetUserEmail(void);\r
48         CString GetCurrentBranch(void);\r
49 \r
50         bool SetCurrentDir(CString path)\r
51         {\r
52                 return m_GitDir.HasAdminDir(path,&m_CurrentDir);\r
53         }\r
54         CString m_CurrentDir;\r
55 \r
56         typedef enum\r
57         {\r
58                 BRANCH_LOCAL=0x1,\r
59                 BRANCH_REMOTE=0x2,\r
60                 BRANCH_ALL=BRANCH_LOCAL|BRANCH_REMOTE,\r
61         }BRANCH_TYPE;\r
62 \r
63         typedef enum\r
64         {\r
65                 LOG_INFO_STAT=0x1,\r
66                 LOG_INFO_FILESTATE=0x2,\r
67                 LOG_INFO_PATCH=0x4,\r
68                 LOG_INFO_FULLHISTORY=0x8,\r
69                 LOG_INFO_BOUNDARY=0x10,\r
70         LOG_INFO_ALL_BRANCH=0x20,\r
71                 LOG_INFO_ONLY_HASH=0x40,\r
72                 LOG_INFO_DETECT_RENAME=0x80,\r
73                 LOG_INFO_DETECT_COPYRENAME=0x100,\r
74                 LOG_INFO_FIRST_PARENT = 0x200,\r
75                 LOG_INFO_NO_MERGE = 0x400,\r
76                 LOG_INFO_FOLLOW = 0x800\r
77         }LOG_INFO_MASK;\r
78 \r
79         int GetRemoteList(STRING_VECTOR &list);\r
80         int GetBranchList(STRING_VECTOR &list, int *Current,BRANCH_TYPE type=BRANCH_LOCAL);\r
81         int GetTagList(STRING_VECTOR &list);\r
82         int GetMapHashToFriendName(MAP_HASH_NAME &map);\r
83         \r
84         //hash is empty means all. -1 means all\r
85 \r
86         int GetLog(CGitCall* pgitCall, CString &hash, CTGitPath *path = NULL,int count=-1,int InfoMask=LOG_INFO_STAT|LOG_INFO_FILESTATE|LOG_INFO_BOUNDARY|LOG_INFO_DETECT_COPYRENAME);\r
87         int GetLog(BYTE_VECTOR& logOut,CString &hash, CTGitPath *path = NULL,int count=-1,int InfoMask=LOG_INFO_STAT|LOG_INFO_FILESTATE|LOG_INFO_BOUNDARY|LOG_INFO_DETECT_COPYRENAME);\r
88 \r
89         git_revnum_t GetHash(CString &friendname);\r
90 \r
91         int BuildOutputFormat(CString &format,bool IsFull=TRUE);\r
92         //int GetShortLog(CString &log,CTGitPath * path=NULL, int count =-1);\r
93         static void StringAppend(CString *str,BYTE *p,int code=CP_UTF8,int length=-1);\r
94 \r
95         BOOL IsInitRepos();\r
96         static BOOL IsVista();\r
97         \r
98 };\r
99 extern void GetTempPath(CString &path);\r
100 extern CString GetTempFile();\r
101 \r
102 \r
103 extern CGit g_Git;\r
104 \r
105 extern LPBYTE wgGetRevisionID_safe(const char *pszProjectPath, const char *pszName);\r
106 extern BOOL wgEnumFiles_safe(const char *pszProjectPath, const char *pszSubPath, unsigned int nFlags, WGENUMFILECB *pEnumCb, void *pUserData);\r