本文整理汇总了C++中SVN::GetRepositoryRootAndUUID方法的典型用法代码示例。如果您正苦于以下问题:C++ SVN::GetRepositoryRootAndUUID方法的具体用法?C++ SVN::GetRepositoryRootAndUUID怎么用?C++ SVN::GetRepositoryRootAndUUID使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SVN
的用法示例。
在下文中一共展示了SVN::GetRepositoryRootAndUUID方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnInitDialog
BOOL CCopyDlg::OnInitDialog()
{
CResizableStandAloneDialog::OnInitDialog();
CAppUtils::MarkWindowAsUnpinnable(m_hWnd);
ExtendFrameIntoClientArea(IDC_EXTGROUP);
m_aeroControls.SubclassControl(this, IDC_DOSWITCH);
m_aeroControls.SubclassControl(this, IDC_MAKEPARENTS);
m_aeroControls.SubclassOkCancelHelp(this);
m_bCancelled = false;
DWORD exStyle = LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_CHECKBOXES;
m_ExtList.SetExtendedStyle(exStyle);
SetWindowTheme(m_ExtList.GetSafeHwnd(), L"Explorer", NULL);
m_ExtList.ShowText(CString(MAKEINTRESOURCE(IDS_COPY_WAITFOREXTERNALS)));
AdjustControlSize(IDC_COPYHEAD);
AdjustControlSize(IDC_COPYREV);
AdjustControlSize(IDC_COPYWC);
AdjustControlSize(IDC_DOSWITCH);
AdjustControlSize(IDC_MAKEPARENTS);
CTSVNPath path(m_path);
CString sWindowTitle;
GetWindowText(sWindowTitle);
CAppUtils::SetWindowTitle(m_hWnd, path.GetUIPathString(), sWindowTitle);
m_History.SetMaxHistoryItems((LONG)CRegDWORD(L"Software\\TortoiseSVN\\MaxHistoryItems", 25));
SetRevision(m_CopyRev);
m_tooltips.AddTool(IDC_HISTORY, IDS_COMMITDLG_HISTORY_TT);
if (SVN::PathIsURL(path))
{
DialogEnableWindow(IDC_COPYWC, FALSE);
DialogEnableWindow(IDC_DOSWITCH, FALSE);
SetDlgItemText(IDC_COPYSTARTLABEL, CString(MAKEINTRESOURCE(IDS_COPYDLG_FROMURL)));
}
SVN svn;
CString sUUID;
m_repoRoot = svn.GetRepositoryRootAndUUID(path, true, sUUID);
m_repoRoot.TrimRight('/');
m_wcURL = svn.GetURLFromPath(path);
if (m_wcURL.IsEmpty() || (!path.IsUrl() && !path.Exists()))
{
CString Wrong_URL=path.GetSVNPathString();
CString temp;
temp.Format(IDS_ERR_NOURLOFFILE, (LPCTSTR)Wrong_URL);
::MessageBox(this->m_hWnd, temp, L"TortoiseSVN", MB_ICONERROR);
this->EndDialog(IDCANCEL); //exit
}
m_URLCombo.LoadHistory(L"Software\\TortoiseSVN\\History\\repoPaths\\"+sUUID, L"url");
m_URLCombo.SetCurSel(0);
CString relPath = m_wcURL.Mid(m_repoRoot.GetLength());
if (!m_URL.IsEmpty())
{
// allow the use of urls relative to the repo root
if (m_URL[0] != '^')
relPath = m_URL.Mid(m_repoRoot.GetLength());
else
relPath = m_URL.Mid(1);
}
CTSVNPath r = CTSVNPath(relPath);
relPath = r.GetUIPathString();
relPath.Replace('\\', '/');
m_URLCombo.AddString(relPath, 0);
m_URLCombo.SelectString(-1, relPath);
m_URL = m_wcURL;
SetDlgItemText(IDC_DESTURL, CPathUtils::CombineUrls(m_repoRoot, relPath));
SetDlgItemText(IDC_FROMURL, m_wcURL);
CString reg;
reg.Format(L"Software\\TortoiseSVN\\History\\commit%s", (LPCTSTR)sUUID);
m_History.Load(reg, L"logmsgs");
m_ProjectProperties.ReadProps(m_path);
if (CRegDWORD(L"Software\\TortoiseSVN\\AlwaysWarnIfNoIssue", FALSE))
m_ProjectProperties.bWarnIfNoIssue = TRUE;
m_cLogMessage.Init(m_ProjectProperties);
m_cLogMessage.SetFont((CString)CRegString(L"Software\\TortoiseSVN\\LogFontName", L"Courier New"), (DWORD)CRegDWORD(L"Software\\TortoiseSVN\\LogFontSize", 8));
GetDlgItem(IDC_BUGTRAQBUTTON)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUGTRAQBUTTON)->EnableWindow(FALSE);
CBugTraqAssociations bugtraq_associations;
bugtraq_associations.Load(m_ProjectProperties.GetProviderUUID(), m_ProjectProperties.sProviderParams);
if (bugtraq_associations.FindProvider(CTSVNPathList(m_path), &m_bugtraq_association))
{
CComPtr<IBugTraqProvider> pProvider;
HRESULT hr = pProvider.CoCreateInstance(m_bugtraq_association.GetProviderClass());
if (SUCCEEDED(hr))
{
m_BugTraqProvider = pProvider;
ATL::CComBSTR temp;
ATL::CComBSTR parameters;
parameters.Attach(m_bugtraq_association.GetParameters().AllocSysString());
hr = pProvider->GetLinkText(GetSafeHwnd(), parameters, &temp);
//.........这里部分代码省略.........
示例2: Execute
bool RemoveCommand::Execute()
{
bool bRet = false;
// removing items from a working copy is done item-by-item so we
// have a chance to show a progress bar
//
// removing items from an URL in the repository requires that we
// ask the user for a log message.
#if 0
BOOL bForce = FALSE;
SVN svn;
if ((!pathList.IsEmpty())&&(SVN::PathIsURL(pathList[0])))
{
// Delete using URL's, not wc paths
svn.SetPromptApp(&theApp);
CInputLogDlg dlg;
CString sUUID;
svn.GetRepositoryRootAndUUID(pathList[0], sUUID);
dlg.SetUUID(sUUID);
CString sHint;
if (pathList.GetCount() == 1)
sHint.Format(IDS_INPUT_REMOVEONE, (LPCTSTR)pathList[0].GetSVNPathString());
else
sHint.Format(IDS_INPUT_REMOVEMORE, pathList.GetCount());
dlg.SetActionText(sHint);
if (dlg.DoModal()==IDOK)
{
if (!svn.Remove(pathList, TRUE, parser.HasKey(_T("keep")), dlg.GetLogMessage()))
{
CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);
return FALSE;
}
return true;
}
return FALSE;
}
else
{
for (int nPath = 0; nPath < pathList.GetCount(); ++nPath)
{
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": remove file %s\n"), (LPCTSTR)pathList[nPath].GetUIPathString());
// even though SVN::Remove takes a list of paths to delete at once
// we delete each item individually so we can prompt the user
// if something goes wrong or unversioned/modified items are
// to be deleted
CTSVNPathList removePathList(pathList[nPath]);
if (bForce)
{
CTSVNPath delPath = removePathList[0];
delPath.Delete(true);
}
if (!svn.Remove(removePathList, bForce, parser.HasKey(_T("keep"))))
{
if ((svn.Err->apr_err == SVN_ERR_UNVERSIONED_RESOURCE) ||
(svn.Err->apr_err == SVN_ERR_CLIENT_MODIFIED))
{
CString msg, yes, no, yestoall;
if (pathList[nPath].IsDirectory())
{
msg.Format(IDS_PROC_REMOVEFORCEFOLDER, pathList[nPath].GetWinPath());
}
else
{
msg.Format(IDS_PROC_REMOVEFORCE, (LPCTSTR)svn.GetLastErrorMessage());
}
yes.LoadString(IDS_MSGBOX_YES);
no.LoadString(IDS_MSGBOX_NO);
yestoall.LoadString(IDS_PROC_YESTOALL);
UINT ret = CMessageBox::Show(hwndExplorer, msg, _T("TortoiseGit"), 2, IDI_ERROR, yes, no, yestoall);
if (ret == 3)
bForce = TRUE;
if ((ret == 1)||(ret==3))
{
CTSVNPath delPath = removePathList[0];
delPath.Delete(true);
if (!svn.Remove(removePathList, TRUE, parser.HasKey(_T("keep"))))
{
CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);
}
else
bRet = true;
}
}
else
CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseGit"), MB_ICONERROR);
}
}
}
if (bRet)
CShellUpdater::Instance().AddPathsForUpdate(pathList);
#endif
//we don't ask user about if keep local copy.
//because there are command "Delete(keep local copy)" at explore context menu
//int key=CMessageBox::Show(hwndExplorer, _T("File will removed from version control\r\n Do you want to keep local copy"), _T("TortoiseGit"), MB_ICONINFORMATION|MB_YESNOCANCEL);
//if(key == IDCANCEL)
CString format;
BOOL keepLocal = parser.HasKey(_T("keep"));
if (pathList.GetCount() > 1)
//.........这里部分代码省略.........
示例3: Execute
bool RenameCommand::Execute()
{
bool bRet = false;
CString filename = cmdLinePath.GetFileOrDirectoryName();
CString basePath = cmdLinePath.GetContainingDirectory().GetGitPathString();
//::SetCurrentDirectory(basePath);
// show the rename dialog until the user either cancels or enters a new
// name (one that's different to the original name
CString sNewName;
do
{
CRenameDlg dlg;
dlg.m_name = filename;
if (dlg.DoModal() != IDOK)
return FALSE;
sNewName = dlg.m_name;
} while(PathIsRelative(sNewName) && !PathIsURL(sNewName) && (sNewName.IsEmpty() || (sNewName.Compare(filename)==0)));
if(!basePath.IsEmpty())
sNewName=basePath+"/"+sNewName;
CString cmd;
CString output;
cmd.Format(_T("git.exe mv -- \"%s\" \"%s\""),
cmdLinePath.GetGitPathString(),
sNewName);
if(g_Git.Run(cmd,&output,CP_ACP))
{
CMessageBox::Show(hwndExplorer, output, _T("TortoiseGit"), MB_OK);
}
CTGitPath newpath;
newpath.SetFromGit(sNewName);
CShellUpdater::Instance().AddPathForUpdate(newpath);
#if 0
TRACE(_T("rename file %s to %s\n"), (LPCTSTR)cmdLinePath.GetWinPathString(), (LPCTSTR)sNewName);
CTSVNPath destinationPath(basePath);
if (PathIsRelative(sNewName) && !PathIsURL(sNewName))
destinationPath.AppendPathString(sNewName);
else
destinationPath.SetFromWin(sNewName);
// check if a rename just with case is requested: that's not possible on windows file systems
// and we have to show an error.
if (cmdLinePath.GetWinPathString().CompareNoCase(destinationPath.GetWinPathString())==0)
{
//rename to the same file!
CString sHelpPath = theApp.m_pszHelpFilePath;
sHelpPath += _T("::/tsvn-dug-rename.html#tsvn-dug-renameincase");
CMessageBox::Show(hwndExplorer, IDS_PROC_CASERENAME, IDS_APPNAME, MB_OK|MB_HELP, sHelpPath);
}
else
{
CString sMsg;
if (SVN::PathIsURL(cmdLinePath))
{
// rename an URL.
// Ask for a commit message, then rename directly in
// the repository
CInputLogDlg input;
CString sUUID;
SVN svn;
svn.GetRepositoryRootAndUUID(cmdLinePath, sUUID);
input.SetUUID(sUUID);
CString sHint;
sHint.Format(IDS_INPUT_MOVE, (LPCTSTR)cmdLinePath.GetSVNPathString(), (LPCTSTR)destinationPath.GetSVNPathString());
input.SetActionText(sHint);
if (input.DoModal() == IDOK)
{
sMsg = input.GetLogMessage();
}
else
{
return FALSE;
}
}
if ((cmdLinePath.IsDirectory())||(pathList.GetCount() > 1))
{
// renaming a directory can take a while: use the
// progress dialog to show the progress of the renaming
// operation.
CSVNProgressDlg progDlg;
progDlg.SetCommand(CSVNProgressDlg::SVNProgress_Rename);
if (parser.HasVal(_T("closeonend")))
progDlg.SetAutoClose(parser.GetLongVal(_T("closeonend")));
progDlg.SetPathList(pathList);
progDlg.SetUrl(destinationPath.GetWinPathString());
progDlg.SetCommitMessage(sMsg);
progDlg.SetRevision(SVNRev::REV_WC);
progDlg.DoModal();
bRet = !progDlg.DidErrorsOccur();
}
else
{
SVN svn;
CString sFilemask = cmdLinePath.GetFilename();
if (sFilemask.ReverseFind('.')>=0)
{
//.........这里部分代码省略.........
示例4: Execute
bool RenameCommand::Execute()
{
bool bRet = false;
CString filename = cmdLinePath.GetFileOrDirectoryName();
CString basePath = cmdLinePath.GetContainingDirectory().GetWinPathString();
::SetCurrentDirectory(basePath);
// show the rename dialog until the user either cancels or enters a new
// name (one that's different to the original name
CString sNewName;
do
{
CRenameDlg dlg;
dlg.m_name = filename;
if (!SVN::PathIsURL(cmdLinePath))
dlg.SetFileSystemAutoComplete();
if (dlg.DoModal() != IDOK)
return FALSE;
sNewName = dlg.m_name;
} while(PathIsRelative(sNewName) && !PathIsURL(sNewName) && (sNewName.IsEmpty() || (sNewName.Compare(filename)==0)));
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) L": rename file %s to %s\n", (LPCTSTR)cmdLinePath.GetWinPathString(), (LPCTSTR)sNewName);
CTSVNPath destinationPath(basePath);
if (PathIsRelative(sNewName) && !PathIsURL(sNewName))
destinationPath.AppendPathString(sNewName);
else
destinationPath.SetFromWin(sNewName);
CString sMsg;
if (SVN::PathIsURL(cmdLinePath))
{
// rename an URL.
// Ask for a commit message, then rename directly in
// the repository
CInputLogDlg input;
CString sUUID;
SVN svn;
svn.GetRepositoryRootAndUUID(cmdLinePath, true, sUUID);
input.SetUUID(sUUID);
CString sHint;
sHint.FormatMessage(IDS_INPUT_MOVE, (LPCTSTR)cmdLinePath.GetSVNPathString(), (LPCTSTR)destinationPath.GetSVNPathString());
input.SetActionText(sHint);
if (input.DoModal() == IDOK)
{
sMsg = input.GetLogMessage();
}
else
{
return FALSE;
}
}
if ((cmdLinePath.IsDirectory())||(pathList.GetCount() > 1))
{
// renaming a directory can take a while: use the
// progress dialog to show the progress of the renaming
// operation.
CSVNProgressDlg progDlg;
progDlg.SetCommand(CSVNProgressDlg::SVNProgress_Rename);
progDlg.SetAutoClose (parser);
progDlg.SetPathList(pathList);
progDlg.SetUrl(destinationPath.GetWinPathString());
progDlg.SetCommitMessage(sMsg);
progDlg.DoModal();
bRet = !progDlg.DidErrorsOccur();
}
else
{
CString sFilemask = cmdLinePath.GetFilename();
int slashpos = 0;
// find out up to which char sFilemask and sNewName are identical
int minlen = min(sFilemask.GetLength(), sNewName.GetLength());
for (; slashpos < minlen; ++slashpos)
{
if (sFilemask[slashpos] != sNewName[slashpos])
break;
}
if (sFilemask.ReverseFind('.') >= slashpos)
{
while (sFilemask.ReverseFind('.') >= slashpos)
sFilemask = sFilemask.Left(sFilemask.ReverseFind('.'));
}
else
sFilemask.Empty();
CString sNewMask = sNewName;
if (sNewMask.ReverseFind('.') >= slashpos)
{
while (sNewMask.ReverseFind('.') >= slashpos)
sNewMask = sNewMask.Left(sNewMask.ReverseFind('.'));
}
else
sNewMask.Empty();
CString sRightPartNew = sNewName.Mid(sNewMask.GetLength());
CString sRightPartOld = cmdLinePath.GetFilename().Mid(sFilemask.GetLength());
// if the file extension changed, or the old and new right parts are not the
// same then we can not correctly guess the new names of similar files, so
// just do the plain rename of the selected file and don't offer to rename similar ones.
if (((!sFilemask.IsEmpty()) && (parser.HasKey(L"noquestion"))) ||
(cmdLinePath.GetFileExtension().Compare(destinationPath.GetFileExtension())!=0) ||
//.........这里部分代码省略.........
示例5: Execute
bool RemoveCommand::Execute()
{
bool bRet = false;
// removing items from a working copy is done item-by-item so we
// have a chance to show a progress bar
//
// removing items from an URL in the repository requires that we
// ask the user for a log message.
SVN svn;
if ((pathList.GetCount())&&(SVN::PathIsURL(pathList[0])))
{
// Delete using URL's, not wc paths
svn.SetPromptApp(&theApp);
CInputLogDlg dlg;
CString sUUID;
svn.GetRepositoryRootAndUUID(pathList[0], true, sUUID);
dlg.SetUUID(sUUID);
CString sHint;
if (pathList.GetCount() == 1)
sHint.Format(IDS_INPUT_REMOVEONE, (LPCTSTR)pathList[0].GetSVNPathString());
else
sHint.Format(IDS_INPUT_REMOVEMORE, pathList.GetCount());
dlg.SetActionText(sHint);
if (dlg.DoModal()==IDOK)
{
if (!svn.Remove(pathList, true, !!parser.HasKey(L"keep"), dlg.GetLogMessage()))
{
svn.ShowErrorDialog(GetExplorerHWND(), pathList.GetCommonDirectory());
return false;
}
return true;
}
return false;
}
else
{
bool bForce = false;
for(int nPath = 0; nPath < pathList.GetCount(); nPath++)
{
CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) L": remove file %s\n", (LPCTSTR)pathList[nPath].GetUIPathString());
// even though SVN::Remove takes a list of paths to delete at once
// we delete each item individually so we can prompt the user
// if something goes wrong or unversioned/modified items are
// to be deleted
CTSVNPathList removePathList(pathList[nPath]);
if ((bForce)&&(!parser.HasKey(L"keep")))
{
CTSVNPath delPath = removePathList[0];
if (!delPath.IsDirectory())
delPath.Delete(true);
// note: we don't move folders to the trash bin, so they can't
// get restored anymore - svn removes *all* files in a removed
// folder, even modified and unversioned ones
// We could move the folders here to the trash bin too, but then
// the folder would be gone and will require a recursive commit.
// Of course: a solution would be to first create a copy of the folder,
// move the original folder to the trash, then rename the copied folder
// to the original name, then let svn delete the folder - but
// that would just take too much time for bigger folders...
}
if (!svn.Remove(removePathList, bForce, !!parser.HasKey(L"keep")))
{
if ((svn.GetSVNError()->apr_err == SVN_ERR_UNVERSIONED_RESOURCE) ||
(svn.GetSVNError()->apr_err == SVN_ERR_CLIENT_MODIFIED))
{
UINT ret = 0;
CString msg;
if (pathList[nPath].IsDirectory())
msg.Format(IDS_PROC_REMOVEFORCE_TASK1_2, (LPCTSTR)svn.GetLastErrorMessage(0), (LPCTSTR)pathList[nPath].GetFileOrDirectoryName());
else
msg.Format(IDS_PROC_REMOVEFORCE_TASK1, (LPCTSTR)svn.GetLastErrorMessage(0), (LPCTSTR)pathList[nPath].GetFileOrDirectoryName());
CTaskDialog taskdlg(msg,
CString(MAKEINTRESOURCE(IDS_PROC_REMOVEFORCE_TASK2)),
L"TortoiseSVN",
0,
TDF_ENABLE_HYPERLINKS | TDF_USE_COMMAND_LINKS | TDF_ALLOW_DIALOG_CANCELLATION | TDF_POSITION_RELATIVE_TO_WINDOW);
taskdlg.AddCommandControl(IDYES, CString(MAKEINTRESOURCE(IDS_PROC_REMOVEFORCE_TASK3)));
taskdlg.AddCommandControl(IDNO, CString(MAKEINTRESOURCE(IDS_PROC_REMOVEFORCE_TASK4)));
taskdlg.SetCommonButtons(TDCBF_CANCEL_BUTTON);
taskdlg.SetVerificationCheckboxText(CString(MAKEINTRESOURCE(IDS_PROC_REMOVEFORCE_TASK5)));
taskdlg.SetDefaultCommandControl(IDNO);
taskdlg.SetMainIcon(TD_WARNING_ICON);
ret = (UINT)taskdlg.DoModal(GetExplorerHWND());
if (taskdlg.GetVerificationCheckboxState())
bForce = true;
if (ret == IDYESTOALL)
bForce = true;
if ((ret == IDYES)||(ret==IDYESTOALL))
{
if (!parser.HasKey(L"keep"))
{
CTSVNPath delPath = removePathList[0];
if (!delPath.IsDirectory())
delPath.Delete(true);
// note: see comment for the delPath.Delete() above
}
if (!svn.Remove(removePathList, true, !!parser.HasKey(L"keep")))
{
svn.ShowErrorDialog(GetExplorerHWND(), removePathList.GetCommonDirectory());
}
//.........这里部分代码省略.........
示例6: OnInitDialog
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;
}
示例7: Execute
bool RemoveCommand::Execute()
{
bool bRet = false;
// removing items from a working copy is done item-by-item so we
// have a chance to show a progress bar
//
// removing items from an URL in the repository requires that we
// ask the user for a log message.
bool bForce = false;
SVN svn;
if ((pathList.GetCount())&&(SVN::PathIsURL(pathList[0])))
{
// Delete using URL's, not wc paths
svn.SetPromptApp(&theApp);
CInputLogDlg dlg;
CString sUUID;
svn.GetRepositoryRootAndUUID(pathList[0], true, sUUID);
dlg.SetUUID(sUUID);
CString sHint;
if (pathList.GetCount() == 1)
sHint.Format(IDS_INPUT_REMOVEONE, (LPCTSTR)pathList[0].GetSVNPathString());
else
sHint.Format(IDS_INPUT_REMOVEMORE, pathList.GetCount());
dlg.SetActionText(sHint);
if (dlg.DoModal()==IDOK)
{
if (!svn.Remove(pathList, true, !!parser.HasKey(_T("keep")), dlg.GetLogMessage()))
{
CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);
return false;
}
return true;
}
return false;
}
else
{
for(int nPath = 0; nPath < pathList.GetCount(); nPath++)
{
TRACE(_T("remove file %s\n"), (LPCTSTR)pathList[nPath].GetUIPathString());
// even though SVN::Remove takes a list of paths to delete at once
// we delete each item individually so we can prompt the user
// if something goes wrong or unversioned/modified items are
// to be deleted
CTSVNPathList removePathList(pathList[nPath]);
if ((bForce)&&(!parser.HasKey(_T("keep"))))
{
CTSVNPath delPath = removePathList[0];
if (!delPath.IsDirectory())
delPath.Delete(true);
// note: we don't move folders to the trash bin, so they can't
// get restored anymore - svn removes *all* files in a removed
// folder, even modified and unversioned ones
// We could move the folders here to the trash bin too, but then
// the folder would be gone and will require a recursive commit.
// Of course: a solution would be to first create a copy of the folder,
// move the original folder to the trash, then rename the copied folder
// to the original name, then let svn delete the folder - but
// that would just take too much time for bigger folders...
}
if (!svn.Remove(removePathList, bForce, !!parser.HasKey(_T("keep"))))
{
if ((svn.Err->apr_err == SVN_ERR_UNVERSIONED_RESOURCE) ||
(svn.Err->apr_err == SVN_ERR_CLIENT_MODIFIED))
{
CString msg, yes, no, yestoall;
if (pathList[nPath].IsDirectory())
{
msg.Format(IDS_PROC_REMOVEFORCEFOLDER, pathList[nPath].GetWinPath());
}
else
{
msg.Format(IDS_PROC_REMOVEFORCE, (LPCTSTR)svn.GetLastErrorMessage());
}
yes.LoadString(IDS_MSGBOX_YES);
no.LoadString(IDS_MSGBOX_NO);
yestoall.LoadString(IDS_PROC_YESTOALL);
UINT ret = CMessageBox::Show(hwndExplorer, msg, _T("TortoiseSVN"), 2, IDI_ERROR, yes, no, yestoall);
if (ret == 3)
bForce = true;
if ((ret == 1)||(ret==3))
{
if (!parser.HasKey(_T("keep")))
{
CTSVNPath delPath = removePathList[0];
if (!delPath.IsDirectory())
delPath.Delete(true);
// note: see comment for the delPath.Delete() above
}
if (!svn.Remove(removePathList, true, !!parser.HasKey(_T("keep"))))
{
CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);
}
else
bRet = true;
}
}
else
CMessageBox::Show(hwndExplorer, svn.GetLastErrorMessage(), _T("TortoiseSVN"), MB_ICONERROR);
}
//.........这里部分代码省略.........