\r
CString CGit::GetUserName(void)\r
{\r
- CString UserName;\r
- Run(_T("git.exe config user.name"),&UserName,CP_UTF8);\r
- int start = 0;\r
- return UserName.Tokenize(_T("\n"),start);\r
+ return GetConfigValue(L"user.name");\r
}\r
CString CGit::GetUserEmail(void)\r
{\r
- CString UserName;\r
- Run(_T("git.exe config user.email"),&UserName,CP_UTF8);\r
+ return GetConfigValue(L"user.email");\r
+}\r
+\r
+CString CGit::GetConfigValue(CString name)\r
+{\r
+ CString configValue;\r
+ CString cmd;\r
+ cmd.Format(L"git.exe config %s", name);\r
+ Run(cmd,&configValue,CP_UTF8);\r
int start = 0;\r
- return UserName.Tokenize(_T("\n"),start);\r
+ return configValue.Tokenize(_T("\n"),start);\r
}\r
\r
+\r
CString CGit::GetCurrentBranch(void)\r
{\r
CString output;\r
return CString("");\r
}\r
\r
+CString CGit::GetSymbolicRef(const wchar_t* symbolicRefName, bool bStripRefsHeads)\r
+{\r
+ CString refName;\r
+ CString cmd;\r
+ cmd.Format(L"git symbolic-ref %s", symbolicRefName);\r
+ if(Run(cmd, &refName, CP_UTF8) != 0)\r
+ return CString();//Error\r
+ int iStart = 0;\r
+ refName = refName.Tokenize(L"\n", iStart);\r
+ if(bStripRefsHeads)\r
+ refName = StripRefName(refName);\r
+ return refName;\r
+}\r
+\r
+CString CGit::StripRefName(CString refName)\r
+{\r
+ if(wcsncmp(refName, L"refs/heads/", 11) == 0)\r
+ refName = refName.Mid(11);\r
+ else if(wcsncmp(refName, L"refs/", 5) == 0)\r
+ refName = refName.Mid(5);\r
+ return refName;\r
+}\r
+\r
int CGit::GetCurrentBranchFromFile(const CString &sProjectRoot, CString &sBranchOut)\r
{\r
// read current branch name like git-gui does, by parsing the .git/HEAD file directly\r
\r
int RunAsync(CString cmd,PROCESS_INFORMATION *pi, HANDLE* hRead, CString *StdioFile=NULL);\r
int RunLogFile(CString cmd, CString &filename);\r
+ CString GetConfigValue(CString name);\r
CString GetUserName(void);\r
CString GetUserEmail(void);\r
CString GetCurrentBranch(void);\r
+ CString GetSymbolicRef(const wchar_t* symbolicRefName = L"HEAD", bool bStripRefsHeads = true);\r
// read current branch name from HEAD file, returns 0 on success, -1 on failure, 1 detached (branch name "HEAD" returned)\r
int GetCurrentBranchFromFile(const CString &sProjectRoot, CString &sBranchOut);\r
BOOL CheckCleanWorkTree();\r
BOOL IsInitRepos();\r
int ListConflictFile(CTGitPathList &list,CTGitPath *path=NULL);\r
int GetRefList(STRING_VECTOR &list);\r
+\r
+\r
+ //Removes 'refs/heads/' or just 'refs'\r
+ static CString StripRefName(CString refName);\r
\r
};\r
extern void GetTempPath(CString &path);\r