OSDN Git Service

Add Git submodule update and fix ProgressDlg show Okay when command still running.
[tortoisegit/TortoiseGitJp.git] / src / Git / Git.cpp
index 2d00110..cdc7c0c 100644 (file)
@@ -171,6 +171,9 @@ int CGit::RunAsync(CString cmd,PROCESS_INFORMATION *piOut,HANDLE *hReadOut,CStri
 \r
        LPTSTR pEnv = l_processEnv;\r
        DWORD dwFlags = pEnv ? CREATE_UNICODE_ENVIRONMENT : 0;\r
+       \r
+       //DETACHED_PROCESS make ssh recognize that it has no console to launch askpass to input password. \r
+       dwFlags |= DETACHED_PROCESS; \r
 \r
        if(!CreateProcess(NULL,(LPWSTR)cmd.GetString(), NULL,NULL,TRUE,dwFlags,pEnv,(LPWSTR)m_CurrentDir.GetString(),&si,&pi))\r
        {\r
@@ -684,6 +687,30 @@ int CGit::GetRemoteList(STRING_VECTOR &list)
        return ret;\r
 }\r
 \r
+int CGit::GetRefList(STRING_VECTOR &list)\r
+{\r
+       int ret;\r
+       CString cmd,output;\r
+       cmd=_T("git show-ref -d");\r
+       ret=g_Git.Run(cmd,&output,CP_UTF8);\r
+       if(!ret)\r
+       {\r
+               int pos=0;\r
+               CString one;\r
+               while( pos>=0 )\r
+               {\r
+                       one=output.Tokenize(_T("\n"),pos);\r
+                       int start=one.Find(_T(" "),0);\r
+                       if(start>0)\r
+                       {\r
+                               CString name;\r
+                               name=one.Right(one.GetLength()-start-1);\r
+                               list.push_back(name);\r
+                       }\r
+               }\r
+       }\r
+       return ret;\r
+}\r
 int CGit::GetMapHashToFriendName(MAP_HASH_NAME &map)\r
 {\r
        int ret;\r
@@ -735,17 +762,33 @@ BOOL CGit::CheckMsysGitDir()
        }\r
 \r
        //setup ssh client\r
-       CRegString sshclient=CRegString(_T("Software\\TortoiseGit\\SSH"));\r
-       CString ssh=sshclient;\r
+       CString sshclient=CRegString(_T("Software\\TortoiseGit\\SSH"));\r
 \r
-       if(!ssh.IsEmpty())\r
+       if(!sshclient.IsEmpty())\r
        {\r
-               _tputenv_s(_T("GIT_SSH"),ssh);\r
+               _tputenv_s(_T("GIT_SSH"),sshclient);\r
        }else\r
        {\r
-               _tputenv_s(_T("GIT_SSH"),_T(""));\r
+               TCHAR sPlink[MAX_PATH];\r
+               GetModuleFileName(NULL, sPlink, _countof(sPlink));\r
+               LPTSTR ptr = _tcsrchr(sPlink, _T('\\'));\r
+               if (ptr) {\r
+                       _tcscpy(ptr + 1, _T("TortoisePlink.exe"));\r
+                       _tputenv_s(_T("GIT_SSH"), sPlink);\r
+               }\r
        }\r
 \r
+       {\r
+               TCHAR sAskPass[MAX_PATH];\r
+               GetModuleFileName(NULL, sAskPass, _countof(sAskPass));\r
+               LPTSTR ptr = _tcsrchr(sAskPass, _T('\\'));\r
+               if (ptr) \r
+               {\r
+                       _tcscpy(ptr + 1, _T("SshAskPass.exe"));\r
+                       _tputenv_s(_T("DISPLAY"),_T(":9999"));\r
+                       _tputenv_s(_T("SSH_ASKPASS"),sAskPass);\r
+               }\r
+       }\r
        // search PATH if git/bin directory is alredy present\r
        if ( FindGitPath() )\r
        {\r
@@ -1023,13 +1066,13 @@ int CGit::Revert(CTGitPath &path,bool keep)
                if(g_Git.Run(cmd,&out,CP_OEMCP))\r
                        return -1;\r
                \r
-               cmd.Format(_T("git.exe checkout -f -- \"%s\""),path.GetGitOldPathString());\r
+               cmd.Format(_T("git.exe checkout HEAD -f -- \"%s\""),path.GetGitOldPathString());\r
                if(g_Git.Run(cmd,&out,CP_OEMCP))\r
                        return -1;\r
        }\r
        else\r
        {\r
-               cmd.Format(_T("git.exe checkout -f -- \"%s\""),path.GetGitPathString());\r
+               cmd.Format(_T("git.exe checkout HEAD -f -- \"%s\""),path.GetGitPathString());\r
                if(g_Git.Run(cmd,&out,CP_OEMCP))\r
                        return -1;\r
        }\r