OSDN Git Service

Support Git svn-clone at clone dialog.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Commands / CloneCommand.cpp
index 67b74db..50c1777 100644 (file)
@@ -26,6 +26,7 @@
 \r
 #include "CloneDlg.h"\r
 #include "ProgressDlg.h"\r
+#include "AppUtils.h"\r
 \r
 bool CloneCommand::Execute()\r
 {\r
@@ -33,12 +34,73 @@ bool CloneCommand::Execute()
        dlg.m_Directory=this->orgCmdLinePath.GetWinPathString();\r
        if(dlg.DoModal()==IDOK)\r
        {\r
+               if(dlg.m_bAutoloadPuttyKeyFile)\r
+               {\r
+                       CAppUtils::LaunchPAgent(&dlg.m_strPuttyKeyFile);\r
+               }\r
                CString dir=dlg.m_Directory;\r
                CString url=dlg.m_URL;\r
+               // is this a windows format UNC path, ie starts with \\ \r
+               if (url.Find(_T("\\\\")) == 0)\r
+               {\r
+                       // yes, change all \ to /\r
+                       // this should not be necessary but msysgit does not support the use \ here yet\r
+                       url.Replace( _T('\\'), _T('/'));\r
+               }\r
                CString cmd;\r
-               cmd.Format(_T("git.exe clone \"%s\" \"%s\""),\r
+               cmd.Format(_T("git.exe clone -v \"%s\" \"%s\""),\r
                                                url,\r
                                                dir);\r
+\r
+               // Handle Git SVN-clone\r
+               if(dlg.m_bSVN)\r
+               {\r
+                       WIN32_FILE_ATTRIBUTE_DATA attribs;\r
+                       if(GetFileAttributesEx(dlg.m_Directory, GetFileExInfoStandard, &attribs))\r
+                       {\r
+                               if(!(attribs.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))\r
+                               {\r
+                                       CString errstr;\r
+                                       errstr.Format(_T("%s is not valid direcotry"),dlg.m_Directory);\r
+                                       CMessageBox::Show(NULL,errstr,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+                                       return FALSE;\r
+                               }\r
+                       }       \r
+                       else\r
+                       {\r
+                               DWORD err = GetLastError();\r
+                               if(err == ERROR_PATH_NOT_FOUND)\r
+                               {\r
+                                       if(!CAppUtils::CreateMultipleDirectory(dlg.m_Directory))\r
+                                       {\r
+                                               CString errstr;\r
+                                               errstr.Format(_T("Fail create dir: %s"),dlg.m_Directory);\r
+                                               CMessageBox::Show(NULL,errstr,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+                                               return FALSE;\r
+                                       }\r
+\r
+                               }\r
+                               else\r
+                               {\r
+                                       CMessageBox::Show(NULL,_T("Unknow ERROR"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+                                       return FALSE;\r
+                               }\r
+                       }\r
+\r
+                       g_Git.m_CurrentDir=dlg.m_Directory;\r
+                       cmd.Format(_T("git.exe svn clone \"%s\" "),\r
+                                               url);\r
+\r
+                       if(dlg.m_bSVNTrunk)\r
+                               cmd+=_T(" -T ")+dlg.m_strSVNTrunk;\r
+\r
+                       if(dlg.m_bSVNBranch)\r
+                               cmd+=_T(" -b ")+dlg.m_strSVNBranchs;\r
+\r
+                       if(dlg.m_bSVNTags)\r
+                               cmd+=_T(" -t ")+dlg.m_strSVNTags;\r
+\r
+               }\r
                CProgressDlg progress;\r
                progress.m_GitCmd=cmd;\r
                if(progress.DoModal()==IDOK)\r