\r
\r
#define MAX_DIRBUFFER 1000\r
+#define CALL_OUTPUT_READ_CHUNK_SIZE 1024\r
+\r
CString CGit::ms_LastMsysGitDir;\r
CGit g_Git;\r
BOOL g_IsWingitDllload = TRUE;\r
\r
BOOL CGit::IsVista()\r
{\r
+\r
+ if( CRegStdWORD(_T("Software\\TortoiseGit\\CacheType") ) == 0)\r
+ {\r
+ g_IsWingitDllload=FALSE;\r
+ return TRUE;\r
+ }\r
+\r
OSVERSIONINFO osvi;\r
BOOL bIsWindowsXPorLater;\r
\r
\r
return FALSE;\r
}\r
-int CGit::Run(CString cmd,BYTE_VECTOR *vector)\r
+int CGit::Run(CGitCall* pcall)\r
{\r
PROCESS_INFORMATION pi;\r
HANDLE hRead;\r
- if(RunAsync(cmd,&pi,&hRead))\r
+ if(RunAsync(pcall->GetCmd(),&pi,&hRead))\r
return GIT_ERROR_CREATE_PROCESS;\r
\r
DWORD readnumber;\r
- BYTE data;\r
- while(ReadFile(hRead,&data,1,&readnumber,NULL))\r
+ BYTE data[CALL_OUTPUT_READ_CHUNK_SIZE];\r
+ while(ReadFile(hRead,data,CALL_OUTPUT_READ_CHUNK_SIZE,&readnumber,NULL))\r
{\r
- //g_Buffer[readnumber]=0;\r
- vector->push_back(data);\r
-// StringAppend(output,g_Buffer,codes);\r
+ pcall->OnOutputData(data,readnumber);\r
}\r
\r
\r
\r
CloseHandle(hRead);\r
return exitcode;\r
+}\r
+class CGitCall_ByteVector : public CGitCall\r
+{\r
+public:\r
+ CGitCall_ByteVector(CString cmd,BYTE_VECTOR* pvector):CGitCall(cmd),m_pvector(pvector){}\r
+ virtual bool OnOutputData(const BYTE* data, size_t size)\r
+ {\r
+ size_t oldsize=m_pvector->size();\r
+ m_pvector->resize(m_pvector->size()+size);\r
+ memcpy(&*(m_pvector->begin()+oldsize),data,size);\r
+ return false;\r
+ }\r
+ BYTE_VECTOR* m_pvector;\r
\r
+};\r
+int CGit::Run(CString cmd,BYTE_VECTOR *vector)\r
+{\r
+ CGitCall_ByteVector call(cmd,vector);\r
+ return Run(&call);\r
}\r
int CGit::Run(CString cmd, CString* output,int code)\r
{\r
\r
int CGit::GetLog(BYTE_VECTOR& logOut, CString &hash, CTGitPath *path ,int count,int mask)\r
{\r
+ CGitCall_ByteVector gitCall(CString(),&logOut);\r
+ return GetLog(&gitCall,hash,path,count,mask);\r
+}\r
+\r
+//int CGit::GetLog(CGitCall* pgitCall, CString &hash, CTGitPath *path ,int count,int mask)\r
+int CGit::GetLog(CGitCall* pgitCall, CString &hash, CTGitPath *path, int count, int mask)\r
+{\r
\r
CString cmd;\r
CString log;\r
cmd += log;\r
cmd += CString(_T("\" "))+hash+file;\r
\r
- return Run(cmd,&logOut);\r
+ pgitCall->SetCmd(cmd);\r
+\r
+ return Run(pgitCall);\r
+// return Run(cmd,&logOut);\r
}\r
\r
#if 0\r