#include "GitConfig.h"\r
\r
#define MAX_DIRBUFFER 1000\r
+CString CGit::ms_LastMsysGitDir;\r
CGit g_Git;\r
CGit::CGit(void)\r
{\r
{\r
SECURITY_ATTRIBUTES sa;\r
HANDLE hRead, hWrite;\r
- HANDLE hStdioFile;\r
+ HANDLE hStdioFile = NULL;\r
\r
sa.nLength = sizeof(SECURITY_ATTRIBUTES);\r
sa.lpSecurityDescriptor=NULL;\r
{\r
CRegString msysinstalldir=CRegString(REG_MSYSGIT_INSTALL,_T(""),FALSE,HKEY_LOCAL_MACHINE);\r
str=msysinstalldir;\r
- str+="\\bin";\r
+ // check it has a trailing blank\r
+ if (str.Right(1) != _T("\\"))\r
+ {\r
+ str += _T("\\");\r
+ }\r
+ str+=_T("bin");\r
msysdir=str;\r
msysdir.write();\r
\r
{ \r
_tdupenv_s(&home,&size,_T("USERPROFILE")); \r
_tputenv_s(_T("HOME"),home);\r
- free(home);\r
}\r
+ free(home);\r
+ \r
//set path\r
_tdupenv_s(&oldpath,&size,_T("PATH")); \r
\r
CString path;\r
+ CString unterminated_path = str; // path to msysgit without semicolon\r
+ CString oldpath_s = oldpath;\r
path.Format(_T("%s;"),str);\r
- path+=oldpath;\r
-\r
- _tputenv_s(_T("PATH"),path);\r
-\r
+ // check msysgit not already in path\r
+ if ( oldpath_s.Find( path ) < 0 && oldpath_s.Right( unterminated_path.GetLength() ) != unterminated_path )\r
+ {\r
+ // not already there, see if we have to take out one we added last time\r
+ if ( ms_LastMsysGitDir != _T("") )\r
+ {\r
+ // we have added one so take it out\r
+ int index = oldpath_s.Find( ms_LastMsysGitDir );\r
+ if ( index >= 0 )\r
+ {\r
+ oldpath_s = oldpath_s.Left( index ) + \r
+ oldpath_s.Right( oldpath_s.GetLength() - (index+ms_LastMsysGitDir.GetLength()) );\r
+ }\r
+ }\r
+ // save the new msysdir path that we are about to add\r
+ ms_LastMsysGitDir = path;\r
+ // add the new one on the front of the existing path\r
+ path+=oldpath_s;\r
+ _tputenv_s(_T("PATH"),path);\r
+ }\r
free(oldpath);\r
\r
CString cmd,out;\r
GitAdminDir m_GitDir;\r
public:\r
static BOOL CheckMsysGitDir();\r
+ static CString ms_LastMsysGitDir; // the last msysgitdir added to the path, blank if none\r
\r
// static CString m_MsysGitPath;\r
CGit(void);\r
ON_BN_CLICKED(IDC_ASPDOTNETHACK, OnASPHACK)\r
ON_BN_CLICKED(IDC_MSYSGIT_BROWSE,OnBrowseDir)\r
ON_BN_CLICKED(IDC_MSYSGIT_CHECK,OnCheck)\r
+ ON_EN_CHANGE(IDC_MSYSGIT_PATH, OnModified)\r
END_MESSAGE_MAP()\r
\r
BOOL CSetMainPage::OnInitDialog()\r
{\r
ISettingsPropPage::OnInitDialog();\r
\r
+ // disable features that have not yet been implemented\r
+ GetDlgItem(IDC_CHECKNEWERVERSION)->EnableWindow( FALSE );\r
+ GetDlgItem(IDC_CHECKNEWERBUTTON)->EnableWindow( FALSE );\r
+ GetDlgItem(IDC_SOUNDS)->EnableWindow( FALSE );\r
+ GetDlgItem(IDC_SOUNDS_TEXT)->EnableWindow( FALSE );\r
+ \r
EnableToolTips();\r
\r
m_sMsysGitPath = m_regMsysGitPath;\r
m_restart = Restart_System;\r
}\r
}\r
- SetModified(FALSE);\r
- return ISettingsPropPage::OnApply();\r
+ // only complete if the msysgit directory is ok\r
+ if(g_Git.CheckMsysGitDir())\r
+ {\r
+ SetModified(FALSE);\r
+ return ISettingsPropPage::OnApply();\r
+ }\r
+ else\r
+ {\r
+ CMessageBox::Show(NULL,_T("Msys Git Install Path Error"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+ return 0;\r
+ }\r
}\r
\r
void CSetMainPage::OnBnClickedEditconfig()\r
ON_COMMAND(ID_HELP, CWinAppEx::OnHelp)\r
END_MESSAGE_MAP()\r
\r
-CString g_version;\r
+//CString g_version;\r
//CString CGit::m_MsysGitPath;\r
//////////////////////////////////////////////////////////////////////////\r
\r
CTortoiseProcApp::CTortoiseProcApp()\r
{\r
EnableHtmlHelp();\r
- int argc = 0;\r
- g_version=_T("abc");\r
- const char* const * argv = NULL;\r
+// int argc = 0;\r
+// g_version=_T("abc");\r
+// const char* const * argv = NULL;\r
// apr_app_initialize(&argc, &argv, NULL);\r
// svn_dso_initialize2();\r
SYS_IMAGE_LIST();\r
if(CMessageBox::Show(NULL,_T("MSysGit(http://code.google.com/p/msysgit) have not installed Correctly\n\\r
or MSysGit Path setting error\n\\r
Click Yes to open setting dialog to setup MSysGit Path"),\r
- _T("TortoiseGit"),MB_YESNO|MB_ICONERROR)==IDYES);\r
+ _T("TortoiseGit"),MB_YESNO|MB_ICONERROR)==IDYES)\r
{\r
- //todo open setting\r
- CSettings dlg(IDS_PROC_SETTINGS_TITLE);\r
- dlg.SetTreeViewMode(TRUE, TRUE, TRUE);\r
- dlg.SetTreeWidth(220);\r
-\r
- dlg.DoModal();\r
- dlg.HandleRestart();\r
- return TRUE;\r
+ // open settings dialog\r
+ CSettings dlg(IDS_PROC_SETTINGS_TITLE);\r
+ dlg.SetTreeViewMode(TRUE, TRUE, TRUE);\r
+ dlg.SetTreeWidth(220);\r
+ \r
+ dlg.DoModal();\r
+ dlg.HandleRestart();\r
+ return TRUE;\r
}\r
return FALSE; \r
}\r