#include "GitConfig.h"\r
\r
\r
+static LPTSTR nextpath(LPCTSTR src, LPTSTR dst, UINT maxlen)\r
+{\r
+ LPCTSTR orgsrc;\r
+\r
+ while (*src == _T(';'))\r
+ src++;\r
+\r
+ orgsrc = src;\r
+\r
+ if (!--maxlen)\r
+ goto nullterm;\r
+\r
+ while (*src && *src != _T(';'))\r
+ {\r
+ if (*src != _T('"'))\r
+ {\r
+ *dst++ = *src++;\r
+ if (!--maxlen)\r
+ {\r
+ orgsrc = src;\r
+ goto nullterm;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ src++;\r
+ while (*src && *src != _T('"'))\r
+ {\r
+ *dst++ = *src++;\r
+ if (!--maxlen)\r
+ {\r
+ orgsrc = src;\r
+ goto nullterm;\r
+ }\r
+ }\r
+\r
+ if (*src)\r
+ src++;\r
+ }\r
+ }\r
+\r
+ while (*src == _T(';'))\r
+ src++;\r
+\r
+nullterm:\r
+\r
+ *dst = 0;\r
+\r
+ return (orgsrc != src) ? (LPTSTR)src : NULL;\r
+}\r
+\r
+static inline BOOL FileExists(LPCTSTR lpszFileName)\r
+{\r
+ struct _stat st;\r
+ return _tstat(lpszFileName, &st) == 0;\r
+}\r
+\r
+static BOOL FindGitPath()\r
+{\r
+ size_t size;\r
+ _tgetenv_s(&size, NULL, 0, _T("PATH"));\r
+\r
+ if (!size)\r
+ {\r
+ return FALSE;\r
+ }\r
+\r
+ TCHAR *env = (TCHAR*)alloca(size);\r
+ _tgetenv_s(&size, env, size, _T("PATH"));\r
+\r
+ TCHAR buf[_MAX_PATH];\r
+\r
+ const LPCTSTR filename = _T("git.exe");\r
+ const int filelen = _tcslen(filename);\r
+\r
+ // search in all paths defined in PATH\r
+ while ((env = nextpath(env, buf, _MAX_PATH-1)) && *buf)\r
+ {\r
+ TCHAR *pfin = buf + _tcslen(buf)-1;\r
+\r
+ // ensure trailing slash\r
+ if (*pfin != '/' && *pfin != '\\')\r
+ _tccpy(pfin+1, _T("\\"));\r
+\r
+ const int len = _tcslen(buf);\r
+\r
+ if ((len + filelen) < _MAX_PATH)\r
+ _tccpy(buf+len, filename);\r
+ else\r
+ break;\r
+\r
+ if ( FileExists(buf) )\r
+ {\r
+ // dir found\r
+ return TRUE;\r
+ }\r
+ }\r
+\r
+ return FALSE;\r
+}\r
+\r
+\r
#define MAX_DIRBUFFER 1000\r
CString CGit::ms_LastMsysGitDir;\r
CGit g_Git;\r
{\r
GetCurrentDirectory(MAX_DIRBUFFER,m_CurrentDir.GetBuffer(MAX_DIRBUFFER));\r
\r
+ // make sure git/bin is in PATH before wingit.dll gets (delay) loaded by wgInit()\r
+ if ( !CheckMsysGitDir() )\r
+ {\r
+ // TODO\r
+ }\r
+\r
if ( !wgInit() )\r
{\r
// TODO\r
\r
BOOL CGit::CheckMsysGitDir()\r
{\r
+ static BOOL bInitialized = FALSE;\r
+\r
+ if (bInitialized)\r
+ {\r
+ return TRUE;\r
+ }\r
+\r
+ TCHAR *oldpath,*home;\r
+ size_t size;\r
+\r
+ // set HOME if not set already\r
+ _tgetenv_s(&size, NULL, 0, _T("HOME"));\r
+ if (!size)\r
+ {\r
+ _tdupenv_s(&home,&size,_T("USERPROFILE")); \r
+ _tputenv_s(_T("HOME"),home);\r
+ free(home);\r
+ }\r
+\r
+ // search PATH if git/bin directory is alredy present\r
+ if ( FindGitPath() )\r
+ {\r
+ bInitialized = TRUE;\r
+ return TRUE;\r
+ }\r
+\r
+ // add git/bin path to PATH\r
+\r
CRegString msysdir=CRegString(REG_MSYSGIT_PATH,_T(""),FALSE,HKEY_LOCAL_MACHINE);\r
CString str=msysdir;\r
if(str.IsEmpty())\r
}\r
//CGit::m_MsysGitPath=str;\r
\r
- TCHAR *oldpath,*home;\r
- size_t size;\r
-\r
- _tdupenv_s(&home,&size,_T("HOME")); \r
- \r
- if(home == NULL)\r
- { \r
- _tdupenv_s(&home,&size,_T("USERPROFILE")); \r
- _tputenv_s(_T("HOME"),home);\r
- }\r
- free(home);\r
- \r
//set path\r
+\r
_tdupenv_s(&oldpath,&size,_T("PATH")); \r
\r
CString path;\r
}\r
free(oldpath);\r
\r
- CString cmd,out;\r
- cmd=_T("git.exe --version");\r
- if(g_Git.Run(cmd,&out,CP_UTF8))\r
+ if( !FindGitPath() )\r
{\r
return false;\r
}\r
else\r
+ {\r
+ bInitialized = TRUE;\r
return true;\r
-\r
+ }\r
}
\ No newline at end of file
/>\r
<Tool\r
Name="VCLibrarianTool"\r
- AdditionalDependencies="wingit.lib"\r
- AdditionalLibraryDirectories="../../ext/wingit"\r
+ AdditionalLibraryDirectories=""\r
/>\r
<Tool\r
Name="VCALinkTool"\r
LinkIncremental="2"\r
AdditionalLibraryDirectories="../../ext/wingit"\r
IgnoreDefaultLibraryNames="libc"\r
+ DelayLoadDLLs="wingit.dll"\r
GenerateDebugInformation="true"\r
ProgramDatabaseFile="$(OutDir)/TGitCache.pdb"\r
SubSystem="2"\r
OutputFile="$(OutDir)/TGitCache.exe"\r
LinkIncremental="1"\r
AdditionalLibraryDirectories="../../ext/wingit"\r
+ DelayLoadDLLs="wingit.dll"\r
GenerateDebugInformation="true"\r
SubSystem="2"\r
OptimizeReferences="2"\r
<?xml version="1.0" encoding="gb2312"?>\r
<VisualStudioProject\r
ProjectType="Visual C++"\r
- Version="9.00"\r
+ Version="9,00"\r
Name="TortoiseGitBlame"\r
ProjectGUID="{62507C2F-9290-4342-910F-BFC44DF99B01}"\r
RootNamespace="TortoiseGitBlame"\r
/>\r
<Tool\r
Name="VCLinkerTool"\r
- AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib"\r
+ AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib wingit.lib"\r
LinkIncremental="2"\r
+ AdditionalLibraryDirectories="../../ext/wingit"\r
IgnoreDefaultLibraryNames="LIBCMTD"\r
+ DelayLoadDLLs="wingit.dll"\r
GenerateDebugInformation="true"\r
SubSystem="2"\r
TargetMachine="1"\r
/>\r
<Tool\r
Name="VCLinkerTool"\r
- AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib"\r
+ AdditionalDependencies="Crypt32.lib gdiplus.lib shfolder.lib shell32.lib comctl32.lib ws2_32.lib rpcrt4.lib shlwapi.lib wininet.lib version.lib wingit.lib"\r
LinkIncremental="1"\r
+ AdditionalLibraryDirectories="../../ext/wingit"\r
+ DelayLoadDLLs="wingit.dll"\r
GenerateDebugInformation="true"\r
SubSystem="2"\r
OptimizeReferences="2"\r
>\r
</File>\r
<File\r
- RelativePath=".\res\output_wnd.ico"\r
+ RelativePath="..\Resources\blameres\output_wnd.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\blameres\output_wnd.ico"\r
+ RelativePath=".\res\output_wnd.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\res\output_wnd_hc.ico"\r
+ RelativePath="..\Resources\blameres\output_wnd_hc.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\blameres\output_wnd_hc.ico"\r
+ RelativePath=".\res\output_wnd_hc.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\blameres\properties_hc.bmp"\r
+ RelativePath=".\res\properties_hc.bmp"\r
>\r
</File>\r
<File\r
- RelativePath=".\res\properties_hc.bmp"\r
+ RelativePath="..\Resources\blameres\properties_hc.bmp"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\blameres\properties_wnd.ico"\r
+ RelativePath=".\res\properties_wnd.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\res\properties_wnd.ico"\r
+ RelativePath="..\Resources\blameres\properties_wnd.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\blameres\Toolbar.bmp"\r
+ RelativePath=".\res\Toolbar.bmp"\r
>\r
</File>\r
<File\r
- RelativePath=".\res\Toolbar.bmp"\r
+ RelativePath="..\Resources\blameres\Toolbar.bmp"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\blameres\Toolbar256.bmp"\r
+ RelativePath=".\res\Toolbar256.bmp"\r
>\r
</File>\r
<File\r
- RelativePath=".\res\Toolbar256.bmp"\r
+ RelativePath="..\Resources\blameres\Toolbar256.bmp"\r
>\r
</File>\r
<File\r
</FileConfiguration>\r
</File>\r
<File\r
- RelativePath="..\Resources\blameres\TortoiseGitBlameDoc.ico"\r
+ RelativePath=".\res\TortoiseGitBlameDoc.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\res\TortoiseGitBlameDoc.ico"\r
+ RelativePath="..\Resources\blameres\TortoiseGitBlameDoc.ico"\r
>\r
</File>\r
<File\r
LinkIncremental="2"\r
AdditionalLibraryDirectories="../../ext/wingit"\r
IgnoreDefaultLibraryNames="libcd.lib;libc;shell32;LIBCMTD;"\r
- DelayLoadDLLs="gdiplus.dll"\r
+ DelayLoadDLLs="gdiplus.dll;wingit.dll"\r
GenerateDebugInformation="true"\r
SubSystem="2"\r
RandomizedBaseAddress="1"\r
LinkIncremental="1"\r
AdditionalLibraryDirectories="../../ext/wingit"\r
IgnoreDefaultLibraryNames="libcd.lib;libc;shell32;LIBCMT"\r
- DelayLoadDLLs="gdiplus.dll"\r
+ DelayLoadDLLs="gdiplus.dll;wingit.dll"\r
GenerateDebugInformation="true"\r
SubSystem="2"\r
OptimizeReferences="2"\r
>\r
</File>\r
<File\r
- RelativePath=".\explorer.ico"\r
+ RelativePath="..\Resources\explorer.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\explorer.ico"\r
+ RelativePath=".\explorer.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\newfolder.ico"\r
+ RelativePath="..\Resources\newfolder.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\newfolder.ico"\r
+ RelativePath=".\newfolder.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\open.ico"\r
+ RelativePath="..\Resources\open.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\open.ico"\r
+ RelativePath=".\open.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\save.ico"\r
+ RelativePath="..\Resources\save.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\save.ico"\r
+ RelativePath=".\save.ico"\r
>\r
</File>\r
<File\r
- RelativePath=".\saveas.ico"\r
+ RelativePath="..\Resources\saveas.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\saveas.ico"\r
+ RelativePath=".\saveas.ico"\r
>\r
</File>\r
<File\r
>\r
</File>\r
<File\r
- RelativePath=".\up.ico"\r
+ RelativePath="..\Resources\up.ico"\r
>\r
</File>\r
<File\r
- RelativePath="..\Resources\up.ico"\r
+ RelativePath=".\up.ico"\r
>\r
</File>\r
<File\r
IgnoreAllDefaultLibraries="false"\r
IgnoreDefaultLibraryNames="LIBC"\r
ModuleDefinitionFile=".\ShellExt.def"\r
- DelayLoadDLLs="gdiplus.dll"\r
+ DelayLoadDLLs="gdiplus.dll;wingit.dll"\r
GenerateDebugInformation="true"\r
ProgramDatabaseFile="$(OutDir)/TortoiseGit.pdb"\r
OptimizeReferences="1"\r
AdditionalLibraryDirectories="../../ext/wingit"\r
IgnoreDefaultLibraryNames="libcd, libc, shell32"\r
ModuleDefinitionFile=".\ShellExt.def"\r
- DelayLoadDLLs="gdiplus.dll"\r
+ DelayLoadDLLs="gdiplus.dll;wingit.dll"\r
GenerateDebugInformation="true"\r
ProgramDatabaseFile="$(OutDir)/TortoiseShell.pdb"\r
SubSystem="2"\r