6 #define MAX_DIRBUFFER 1000
\r
10 GetCurrentDirectory(MAX_DIRBUFFER,m_CurrentDir.GetBuffer(MAX_DIRBUFFER));
\r
19 int CGit::Run(CString cmd, CString* output)
\r
21 SECURITY_ATTRIBUTES sa;
\r
22 HANDLE hRead, hWrite;
\r
24 sa.nLength = sizeof(SECURITY_ATTRIBUTES);
\r
25 sa.lpSecurityDescriptor=NULL;
\r
26 sa.bInheritHandle=TRUE;
\r
27 if(!CreatePipe(&hRead,&hWrite,&sa,0))
\r
29 return GIT_ERROR_OPEN_PIP;
\r
33 PROCESS_INFORMATION pi;
\r
34 si.cb=sizeof(STARTUPINFO);
\r
35 GetStartupInfo(&si);
\r
37 si.hStdError=hWrite;
\r
38 si.hStdOutput=hWrite;
\r
39 si.wShowWindow=SW_HIDE;
\r
40 si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
\r
43 if(!CreateProcess(NULL,(LPWSTR)cmd.GetString(), NULL,NULL,TRUE,NULL,NULL,(LPWSTR)m_CurrentDir.GetString(),&si,&pi))
\r
46 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
\r
47 NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
\r
50 return GIT_ERROR_CREATE_PROCESS;
\r
53 CloseHandle(hWrite);
\r
56 while(ReadFile(hRead,buffer,4090,&readnumber,NULL))
\r
58 buffer[readnumber]=0;
\r
60 output->Append(A2W(buffer));
\r
64 CloseHandle(pi.hThread);
\r
65 CloseHandle(pi.hProcess);
\r
71 CString CGit::GetUserName(void)
\r
74 Run(_T("git.cmd config user.name"),&UserName);
\r
77 CString CGit::GetUserEmail(void)
\r
80 Run(_T("git.cmd config user.email"),&UserName);
\r
84 CString CGit::GetCurrentBranch(void)
\r
87 Run(_T("git.cmd branch"),&branch);
\r
88 if(branch.GetLength()>0)
\r
90 branch.Replace(_T('*'),_T(' '));
\r
97 int CGit::GetLog(CString& logOut)
\r
102 cmd=("git.cmd log -C --numstat --raw --pretty=format:\"");
\r
103 log.Format(_T("#<%c>%%n"),LOG_REV_ITEM_BEGIN);
\r
105 log.Format(_T("#<%c>%%an%%n"),LOG_REV_AUTHOR_NAME);
\r
107 log.Format(_T("#<%c>%%ae%%n"),LOG_REV_AUTHOR_EMAIL);
\r
109 log.Format(_T("#<%c>%%ai%%n"),LOG_REV_AUTHOR_DATE);
\r
111 log.Format(_T("#<%c>%%cn%%n"),LOG_REV_COMMIT_NAME);
\r
113 log.Format(_T("#<%c>%%ce%%n"),LOG_REV_COMMIT_EMAIL);
\r
115 log.Format(_T("#<%c>%%ci%%n"),LOG_REV_COMMIT_DATE);
\r
117 log.Format(_T("#<%c>%%s%%n"),LOG_REV_COMMIT_SUBJECT);
\r
119 log.Format(_T("#<%c>%%b%%n"),LOG_REV_COMMIT_BODY);
\r
121 log.Format(_T("#<%c>%%H%%n"),LOG_REV_COMMIT_HASH);
\r
123 log.Format(_T("#<%c>%%P%%n"),LOG_REV_COMMIT_PARENT);
\r
125 log.Format(_T("#<%c>%%n"),LOG_REV_COMMIT_FILE);
\r
127 cmd += CString(_T("\""));
\r
132 #define BUFSIZE 512
\r
133 void GetTempPath(CString &path)
\r
135 TCHAR lpPathBuffer[BUFSIZE];
\r
137 DWORD dwBufSize=BUFSIZE;
\r
138 dwRetVal = GetTempPath(dwBufSize, // length of the buffer
\r
139 lpPathBuffer); // buffer for path
\r
140 if (dwRetVal > dwBufSize || (dwRetVal == 0))
\r
144 path.Format(_T("%s"),lpPathBuffer);
\r
146 CString GetTempFile()
\r
148 TCHAR lpPathBuffer[BUFSIZE];
\r
150 DWORD dwBufSize=BUFSIZE;
\r
151 TCHAR szTempName[BUFSIZE];
\r
154 dwRetVal = GetTempPath(dwBufSize, // length of the buffer
\r
155 lpPathBuffer); // buffer for path
\r
156 if (dwRetVal > dwBufSize || (dwRetVal == 0))
\r
160 // Create a temporary file.
\r
161 uRetVal = GetTempFileName(lpPathBuffer, // directory for tmp files
\r
162 TEXT("Patch"), // temp file name prefix
\r
163 0, // create unique name
\r
164 szTempName); // buffer for name
\r
172 return CString(szTempName);
\r
176 int CGit::RunLogFile(CString cmd,CString &filename)
\r
178 HANDLE hRead, hWrite;
\r
181 PROCESS_INFORMATION pi;
\r
182 si.cb=sizeof(STARTUPINFO);
\r
183 GetStartupInfo(&si);
\r
185 SECURITY_ATTRIBUTES psa={sizeof(psa),NULL,TRUE};;
\r
186 psa.bInheritHandle=TRUE;
\r
188 HANDLE houtfile=CreateFile(filename,GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,
\r
189 &psa,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
\r
192 si.wShowWindow=SW_HIDE;
\r
193 si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
\r
194 si.hStdOutput = houtfile;
\r
196 if(!CreateProcess(NULL,(LPWSTR)cmd.GetString(), NULL,NULL,TRUE,NULL,NULL,(LPWSTR)m_CurrentDir.GetString(),&si,&pi))
\r
199 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,
\r
200 NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
\r
203 return GIT_ERROR_CREATE_PROCESS;
\r
206 WaitForSingleObject(pi.hProcess,INFINITE);
\r
208 CloseHandle(pi.hThread);
\r
209 CloseHandle(pi.hProcess);
\r
210 CloseHandle(houtfile);
\r
211 return GIT_SUCCESS;
\r
215 git_revnum_t CGit::GetHash(CString &friendname)
\r
219 cmd.Format(_T("git.cmd rev-parse %s" ),friendname);
\r
221 int pos=out.ReverseFind(_T('\n'));
\r
223 return out.Left(pos);
\r