From 4bd980308d80c2ea333c602de649b107685c1811 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 27 Jun 2009 15:33:30 +0800 Subject: [PATCH] Support Git svn-clone at clone dialog. Signed-off-by: Frank Li --- src/Resources/TortoiseProcENG.rc | Bin 436864 -> 438248 bytes src/TortoiseProc/AppUtils.cpp | 35 +++++++++++++++- src/TortoiseProc/AppUtils.h | 2 + src/TortoiseProc/CloneDlg.cpp | 65 +++++++++++++++++++++++++++-- src/TortoiseProc/CloneDlg.h | 12 ++++++ src/TortoiseProc/Commands/CloneCommand.cpp | 50 ++++++++++++++++++++++ src/TortoiseProc/TortoiseProc.vcproj | 24 +++++------ src/TortoiseProc/resource.h | Bin 161508 -> 162320 bytes src/Utils/Utils.vcproj | 4 ++ 9 files changed, 175 insertions(+), 17 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 1b8630e0706ea33a5e0bd00d77c6f01f166b5b29..d240b74b6d5487209712ff2a81b974596ec38f31 100644 GIT binary patch delta 567 zcmZWmy)Q#i6hH4=PxTdTQ=gU6NPL8*ywZBzm<$A^OcEin_=*T21~CvO5m%h8L1H0< zkaQx%UmzhCQp8~Bz{En__mnn~n>*Zl&hP7-`5Wg;%sIaxonU0wqCyZn;06^mvWM|9 zI*WBqudDQ0$%3_79iDkU;)|;ifP{q;l8eL_wT)sJ5Ne|gf zDKWs%2Vv-hZfJuR(bE8a1K|_m*7xd-N#-?&VFIRL42JpJbiTt75Zx&_9(o9wwFE9m z_81oasmMPTn?BHC@k4#0$^T1EwgXJ#t2;UL`izPxK~5Lt=%BBAY&EODhR7PjqCZ+! z(tHy%8>|5lQxBVBoz6cohks2g)>PL5K>c@8$l^1Wq$4zvB3MW(gIM)%s^r;6rJ`93 zsa=ezLj?cP7W)x;LC}NOB^K%@b%?oW?i$mVdXF*Md(5^q+TLPb^2FHyZQL;1QY6mA LO^Zh2^3&-zjaic| delta 168 zcmaEHU#j7%R6`5n7N&Wtn2i_=r@t0uIz4?s0W;h7qSZ`Itc;eE7jCkhK0%vVjn#}n zhXKTuo~}^GsI-0FMkXspRtun@*<`^fhSN86Fv+l+F_=JA2~WRplSyW})+c6x$x(k4 zCKtr8wEx(_wEf2p<~)n(PxdhDOi!4>%rbr6d}guf4$aJ7lUe=?On=wKEI0k#S7x?$ Pphh5O*{=18b>Ch9{y;xv diff --git a/src/TortoiseProc/AppUtils.cpp b/src/TortoiseProc/AppUtils.cpp index 44c464a..fe45e2f 100644 --- a/src/TortoiseProc/AppUtils.cpp +++ b/src/TortoiseProc/AppUtils.cpp @@ -2080,4 +2080,37 @@ bool CAppUtils::Push() } return FALSE; -} \ No newline at end of file +} + +bool CAppUtils::CreateMultipleDirectory(CString& szPath) +{ + CString strDir(szPath); + if (strDir.GetAt(strDir.GetLength()-1)!=_T('\\')) + { + strDir.AppendChar(_T('\\')); + } + std::vector vPath; + CString strTemp; + bool bSuccess = false; + + for (int i=0;i::const_iterator vIter; + for (vIter = vPath.begin(); vIter != vPath.end(); vIter++) + { + bSuccess = CreateDirectory(*vIter, NULL) ? true : false; + } + + return bSuccess; +} diff --git a/src/TortoiseProc/AppUtils.h b/src/TortoiseProc/AppUtils.h index 27d1274..f6bc9a1 100644 --- a/src/TortoiseProc/AppUtils.h +++ b/src/TortoiseProc/AppUtils.h @@ -202,6 +202,8 @@ public: static bool Push(); + static bool CreateMultipleDirectory(CString &dir); + private: static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2); static bool GetMimeType(const CTGitPath& file, CString& mimetype); diff --git a/src/TortoiseProc/CloneDlg.cpp b/src/TortoiseProc/CloneDlg.cpp index 37c2cc5..67c9ebc 100644 --- a/src/TortoiseProc/CloneDlg.cpp +++ b/src/TortoiseProc/CloneDlg.cpp @@ -16,6 +16,14 @@ CCloneDlg::CCloneDlg(CWnd* pParent /*=NULL*/) , m_Directory(_T("")) { m_bAutoloadPuttyKeyFile = CAppUtils::IsSSHPutty(); + + m_bSVN = FALSE; + m_bSVNTrunk = FALSE; + m_bSVNTags = FALSE; + m_bSVNBranch = FALSE;; + m_strSVNTrunk = _T("trunk"); + m_strSVNTags = _T("tags"); + m_strSVNBranchs = _T("branches"); } CCloneDlg::~CCloneDlg() @@ -30,6 +38,15 @@ void CCloneDlg::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_CLONE_DIR, m_Directory); DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD, m_bAutoloadPuttyKeyFile); + DDX_Check(pDX,IDC_CHECK_SVN, m_bSVN); + DDX_Check(pDX,IDC_CHECK_SVN_TRUNK, m_bSVNTrunk); + DDX_Check(pDX,IDC_CHECK_SVN_TAG, m_bSVNTags); + DDX_Check(pDX,IDC_CHECK_SVN_BRANCH, m_bSVNBranch); + + DDX_Text(pDX, IDC_EDIT_SVN_TRUNK, m_strSVNTrunk); + DDX_Text(pDX, IDC_EDIT_SVN_TAG, m_strSVNTags); + DDX_Text(pDX, IDC_EDIT_SVN_BRANCH, m_strSVNBranchs); + } BOOL CCloneDlg::OnInitDialog() @@ -42,10 +59,11 @@ BOOL CCloneDlg::OnInitDialog() AddAnchor(IDOK,BOTTOM_RIGHT); AddAnchor(IDCANCEL,BOTTOM_RIGHT); - AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,BOTTOM_RIGHT); - AddAnchor(IDC_PUTTYKEYFILE_BROWSE,BOTTOM_RIGHT); - AddAnchor(IDC_PUTTYKEY_AUTOLOAD,BOTTOM_LEFT); - AddAnchor(IDC_PUTTYKEYFILE,BOTTOM_LEFT,BOTTOM_RIGHT); + AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,TOP_RIGHT); + AddAnchor(IDC_PUTTYKEYFILE_BROWSE,TOP_RIGHT); + AddAnchor(IDC_PUTTYKEY_AUTOLOAD,TOP_LEFT); + AddAnchor(IDC_PUTTYKEYFILE,TOP_LEFT,TOP_RIGHT); + AddAnchor(IDC_CLONE_GROUP_SVN,TOP_LEFT,TOP_RIGHT); AddAnchor(IDHELP, BOTTOM_RIGHT); this->AddOthersToAnchor(); @@ -76,6 +94,9 @@ BOOL CCloneDlg::OnInitDialog() this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile); EnableSaveRestore(_T("CloneDlg")); + + OnBnClickedCheckSvn(); + return TRUE; // return TRUE unless you set the focus to a control } @@ -88,6 +109,10 @@ BEGIN_MESSAGE_MAP(CCloneDlg, CResizableStandAloneDialog) ON_NOTIFY(CBEN_BEGINEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenBegineditUrlcombo) ON_NOTIFY(CBEN_ENDEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenEndeditUrlcombo) ON_CBN_EDITCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnEditchangeUrlcombo) + ON_BN_CLICKED(IDC_CHECK_SVN, &CCloneDlg::OnBnClickedCheckSvn) + ON_BN_CLICKED(IDC_CHECK_SVN_TRUNK, &CCloneDlg::OnBnClickedCheckSvnTrunk) + ON_BN_CLICKED(IDC_CHECK_SVN_TAG, &CCloneDlg::OnBnClickedCheckSvnTag) + ON_BN_CLICKED(IDC_CHECK_SVN_BRANCH, &CCloneDlg::OnBnClickedCheckSvnBranch) END_MESSAGE_MAP() @@ -273,3 +298,35 @@ void CCloneDlg::OnCbnEditchangeUrlcombo() } this->UpdateData(FALSE); } + +void CCloneDlg::OnBnClickedCheckSvn() +{ + // TODO: Add your control notification handler code here + OnBnClickedCheckSvnTrunk(); + OnBnClickedCheckSvnTag(); + OnBnClickedCheckSvnBranch(); +} + +void CCloneDlg::OnBnClickedCheckSvnTrunk() +{ + // TODO: Add your control notification handler code here + UpdateData(TRUE); + this->GetDlgItem(IDC_CHECK_SVN_TRUNK)->EnableWindow(this->m_bSVN); + this->GetDlgItem(IDC_EDIT_SVN_TRUNK)->EnableWindow(this->m_bSVNTrunk&&this->m_bSVN); +} + +void CCloneDlg::OnBnClickedCheckSvnTag() +{ + // TODO: Add your control notification handler code here + UpdateData(TRUE); + this->GetDlgItem(IDC_CHECK_SVN_TAG)->EnableWindow(this->m_bSVN); + this->GetDlgItem(IDC_EDIT_SVN_TAG)->EnableWindow(this->m_bSVNTags&&this->m_bSVN); +} + +void CCloneDlg::OnBnClickedCheckSvnBranch() +{ + // TODO: Add your control notification handler code here + UpdateData(TRUE); + this->GetDlgItem(IDC_CHECK_SVN_BRANCH)->EnableWindow(this->m_bSVN); + this->GetDlgItem(IDC_EDIT_SVN_BRANCH)->EnableWindow(this->m_bSVNBranch&&this->m_bSVN); +} diff --git a/src/TortoiseProc/CloneDlg.h b/src/TortoiseProc/CloneDlg.h index 327399b..0820aac 100644 --- a/src/TortoiseProc/CloneDlg.h +++ b/src/TortoiseProc/CloneDlg.h @@ -39,6 +39,14 @@ public: CString m_strPuttyKeyFile; CString m_URL; BOOL m_bAutoloadPuttyKeyFile; + BOOL m_bSVN; + BOOL m_bSVNTrunk; + BOOL m_bSVNTags; + BOOL m_bSVNBranch; + CString m_strSVNTrunk; + CString m_strSVNTags; + CString m_strSVNBranchs; + afx_msg void OnBnClickedPuttykeyfileBrowse(); afx_msg void OnBnClickedPuttykeyAutoload(); afx_msg void OnCbnSelchangeUrlcombo(); @@ -46,4 +54,8 @@ public: afx_msg void OnCbenEndeditUrlcombo(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnCbnEditchangeUrlcombo(); + afx_msg void OnBnClickedCheckSvn(); + afx_msg void OnBnClickedCheckSvnTrunk(); + afx_msg void OnBnClickedCheckSvnTag(); + afx_msg void OnBnClickedCheckSvnBranch(); }; diff --git a/src/TortoiseProc/Commands/CloneCommand.cpp b/src/TortoiseProc/Commands/CloneCommand.cpp index 029f605..50c1777 100644 --- a/src/TortoiseProc/Commands/CloneCommand.cpp +++ b/src/TortoiseProc/Commands/CloneCommand.cpp @@ -51,6 +51,56 @@ bool CloneCommand::Execute() cmd.Format(_T("git.exe clone -v \"%s\" \"%s\""), url, dir); + + // Handle Git SVN-clone + if(dlg.m_bSVN) + { + WIN32_FILE_ATTRIBUTE_DATA attribs; + if(GetFileAttributesEx(dlg.m_Directory, GetFileExInfoStandard, &attribs)) + { + if(!(attribs.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + CString errstr; + errstr.Format(_T("%s is not valid direcotry"),dlg.m_Directory); + CMessageBox::Show(NULL,errstr,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return FALSE; + } + } + else + { + DWORD err = GetLastError(); + if(err == ERROR_PATH_NOT_FOUND) + { + if(!CAppUtils::CreateMultipleDirectory(dlg.m_Directory)) + { + CString errstr; + errstr.Format(_T("Fail create dir: %s"),dlg.m_Directory); + CMessageBox::Show(NULL,errstr,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return FALSE; + } + + } + else + { + CMessageBox::Show(NULL,_T("Unknow ERROR"),_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return FALSE; + } + } + + g_Git.m_CurrentDir=dlg.m_Directory; + cmd.Format(_T("git.exe svn clone \"%s\" "), + url); + + if(dlg.m_bSVNTrunk) + cmd+=_T(" -T ")+dlg.m_strSVNTrunk; + + if(dlg.m_bSVNBranch) + cmd+=_T(" -b ")+dlg.m_strSVNBranchs; + + if(dlg.m_bSVNTags) + cmd+=_T(" -t ")+dlg.m_strSVNTags; + + } CProgressDlg progress; progress.m_GitCmd=cmd; if(progress.DoModal()==IDOK) diff --git a/src/TortoiseProc/TortoiseProc.vcproj b/src/TortoiseProc/TortoiseProc.vcproj index b9bf06e..6dc63f4 100644 --- a/src/TortoiseProc/TortoiseProc.vcproj +++ b/src/TortoiseProc/TortoiseProc.vcproj @@ -580,11 +580,11 @@ > eCwn85Jfwc(P2N5Wpz1{7eud z<8*~IMlRN129T2fp^Ta!C2Z5z1v6HGWH=a2Cp&WJPEHVEna&o%sD!KPYYqJ)0})Efo&QuBNx9rLlA>MLnuQ4Lp%e}zR7{MveP%z04+OJ z%UA|>CnHEu6C$Wq2NmQ7x(uiz1gJZ7a$tcxSbFl57jn}V)GKVnRA1GxKnci2%6b1l8J6UM} delta 125 zcmbR6h4aZ<&I#*yT^Lds%78eBA)le3arM^Kj6Van1v5%8PEQDCy6F6NsfYeVs0&*z^w#j0#|h$p-E$)4LiO?ZCY4c1?^y->0|L Q1C_j~U=o?WtCA@U0MHIBApigX diff --git a/src/Utils/Utils.vcproj b/src/Utils/Utils.vcproj index 788b4f2..d85f21b 100644 --- a/src/Utils/Utils.vcproj +++ b/src/Utils/Utils.vcproj @@ -401,6 +401,10 @@ > + + -- 2.11.0