OSDN Git Service

Merge branch 'log_cache'
authorFrank Li <lznuaa@gmail.com>
Wed, 28 Jan 2009 03:02:48 +0000 (11:02 +0800)
committerFrank Li <lznuaa@gmail.com>
Wed, 28 Jan 2009 03:02:48 +0000 (11:02 +0800)
src/Git/Git.cpp
src/Git/Git.h
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/Settings/SetMainPage.cpp
src/TortoiseProc/TortoiseProc.cpp
src/TortoiseProc/resource.h

index d776a13..86a3e59 100644 (file)
@@ -6,6 +6,7 @@
 #include "GitConfig.h"\r
 \r
 #define MAX_DIRBUFFER 1000\r
+CString CGit::ms_LastMsysGitDir;\r
 CGit g_Git;\r
 CGit::CGit(void)\r
 {\r
@@ -22,7 +23,7 @@ int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CStri
 {\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
@@ -507,7 +508,12 @@ BOOL CGit::CheckMsysGitDir()
        {\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
@@ -523,17 +529,36 @@ BOOL CGit::CheckMsysGitDir()
        {               \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
index dfcd4b1..406bfa9 100644 (file)
@@ -11,6 +11,7 @@ private:
        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
index b1c6321..5cc9561 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index 8c4529f..a8e9e1c 100644 (file)
@@ -79,12 +79,19 @@ BEGIN_MESSAGE_MAP(CSetMainPage, ISettingsPropPage)
        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
@@ -204,8 +211,17 @@ BOOL CSetMainPage::OnApply()
                        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
index 2d100c7..e6560a6 100644 (file)
@@ -58,16 +58,16 @@ BEGIN_MESSAGE_MAP(CTortoiseProcApp, CWinAppEx)
        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
@@ -126,16 +126,16 @@ BOOL CTortoiseProcApp::InitInstance()
                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
index 7a43b72..63938bb 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ