BOOL CSwitchDlg::OnInitDialog() { CResizableStandAloneDialog::OnInitDialog(); ExtendFrameIntoClientArea(IDC_REVGROUP); m_aeroControls.SubclassOkCancelHelp(this); CTSVNPath svnPath(m_path); SetDlgItemText(IDC_SWITCHPATH, m_path); m_bFolder = svnPath.IsDirectory(); SVN svn; CString sUUID; m_repoRoot = svn.GetRepositoryRootAndUUID(svnPath, true, sUUID); m_repoRoot.TrimRight('/'); CString url = svn.GetURLFromPath(svnPath); m_URLCombo.LoadHistory(_T("Software\\TortoiseSVN\\History\\repoPaths\\")+sUUID, _T("url")); m_URLCombo.SetCurSel(0); if (!url.IsEmpty()) { CString relPath = url.Mid(m_repoRoot.GetLength()); CTSVNPath r = CTSVNPath(relPath); relPath = r.GetUIPathString(); relPath.Replace('\\', '/'); m_URLCombo.AddString(relPath, 0); m_URLCombo.SelectString(-1, relPath); m_URL = url; SetDlgItemText(IDC_DESTURL, CPathUtils::CombineUrls(m_repoRoot, relPath)); } if (m_sTitle.IsEmpty()) GetWindowText(m_sTitle); SetWindowText(m_sTitle); if (m_sLabel.IsEmpty()) GetDlgItemText(IDC_URLLABEL, m_sLabel); SetDlgItemText(IDC_URLLABEL, m_sLabel); // set head revision as default revision SetRevision(SVNRev::REV_HEAD); m_depthCombo.AddString(CString(MAKEINTRESOURCE(IDS_SVN_DEPTH_WORKING))); m_depthCombo.AddString(CString(MAKEINTRESOURCE(IDS_SVN_DEPTH_INFINITE))); m_depthCombo.AddString(CString(MAKEINTRESOURCE(IDS_SVN_DEPTH_IMMEDIATE))); m_depthCombo.AddString(CString(MAKEINTRESOURCE(IDS_SVN_DEPTH_FILES))); m_depthCombo.AddString(CString(MAKEINTRESOURCE(IDS_SVN_DEPTH_EMPTY))); m_depthCombo.AddString(CString(MAKEINTRESOURCE(IDS_SVN_DEPTH_EXCLUDE))); m_depthCombo.SetCurSel(0); RECT rect; GetWindowRect(&rect); m_height = rect.bottom - rect.top; AddAnchor(IDC_SWITCHLABEL, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_SWITCHPATH, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_URLLABEL, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_URLCOMBO, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_BROWSE, TOP_RIGHT); AddAnchor(IDC_DESTLABEL, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_DESTURL, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_REVGROUP, TOP_LEFT); AddAnchor(IDC_REVISION_HEAD, TOP_LEFT); AddAnchor(IDC_REVISION_N, TOP_LEFT); AddAnchor(IDC_REVISION_NUM, TOP_LEFT); AddAnchor(IDC_LOG, TOP_LEFT); AddAnchor(IDC_GROUPMIDDLE, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_DEPTH, TOP_LEFT, TOP_RIGHT); AddAnchor(IDC_NOEXTERNALS, TOP_LEFT, TOP_RIGHT); AddAnchor(IDOK, BOTTOM_RIGHT); AddAnchor(IDCANCEL, BOTTOM_RIGHT); AddAnchor(IDHELP, BOTTOM_RIGHT); if ((m_pParentWnd==NULL)&&(hWndExplorer)) CenterWindow(CWnd::FromHandle(hWndExplorer)); EnableSaveRestore(_T("SwitchDlg")); return TRUE; }
PDMBUILDER_API bool checkSourceCode() { SourceCode *sourceCode = getSourceCode(); //string url = sourceCode->GetUrl(); string fullpath(workspace+"\\"+sourceCode->GetLocalPath()); //string fullpath = sourceCode->GetLocalPath(); string log ; fullpath = changeSeparator(fullpath); string svnPath(fullpath+"\\.svn"); if (!PathFileExists(svnPath.c_str())) { //printf("to checkout"); log += checkout(workspace); //printf("svn checkout\n"); int accessInt = log.find("Access to"); if (accessInt!=string::npos) { if (log.find("forbidden")!=string::npos) { string nextNumFile(fullpath+"\\nextBuildNumber"); if (!PathFileExists(nextNumFile.c_str())) { writeLog(log,workspace+"\\log"); delete sourceCode; return true; } if (forceFlag!="false") { writeLog(log,workspace+"\\log"); } delete sourceCode; return false; } } int errorint = log.find("error"); if (errorint!=string::npos&&errorint==log.length()-5) { writeLog(log,workspace+"\\log"); delete sourceCode; return false; } writeLog(log,workspace+"\\log"); //writeLog(log,workspace+"\\log"); delete sourceCode; return true; } char updateCmd[500]; memset(updateCmd,0,sizeof(updateCmd)); sprintf(updateCmd,"svn update --force --non-interactive --username %s --password %s --accept tf \"%s\"",buildName.c_str(),buildPassword.c_str(),sourceCode->GetLocalPath().c_str()); //printf("to update"); int exitCode = 0; log.assign("<---------------------------checkout--------------------------->\n "); log += ExeCommand(updateCmd,exitCode,(char *)workspace.c_str()); //printf("svn update\n"); if (exitCode>0&&exitCode!=STILL_ACTIVE) { log += "update source code error"; if (forceFlag!="false") { writeLog(log,workspace+"\\log"); } delete sourceCode; return false; }else if (log.find("svn cleanup")!=string::npos) { char cleanupCmd[100]; memset(cleanupCmd,0,sizeof(cleanupCmd)); sprintf(cleanupCmd,"svn cleanup"); ExeCommand(cleanupCmd,exitCode,(char *)workspace.c_str()); log = ExeCommand(updateCmd,exitCode,(char *)workspace.c_str()); if (exitCode>0&&exitCode!=STILL_ACTIVE) { log += "update source code error"; if (forceFlag!="false") { writeLog(log,workspace+"\\log"); } delete sourceCode; return false; } } int index = log.find("Updated to revision"); if (index>0) { index += 20; int in = log.find_last_of("."); sourceVersion = log.substr(index,in-index); writeLog(log,workspace+"\\log"); delete sourceCode; return true; }else { int rindex = log.rfind("At revision"); if (rindex!=string::npos) { int lindex = log.rfind("."); rindex += 12; sourceVersion = log.substr(rindex,lindex-rindex); } if (forceFlag!="false") { writeLog(log,workspace+"\\log"); } delete sourceCode; return false; } }