use of org.tigris.subversion.subclipse.core.commands.RevertResourcesCommand in project subclipse by subclipse.
the class ResolveTreeConflictWizard method performFinish.
public boolean performFinish() {
if (mainPage.getReplace()) {
mergeException = null;
try {
BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
public void run() {
try {
svnClient = svnResource.getRepository().getSVNClient();
File file = svnResource.getResource().getLocation().toFile();
svnClient.remove(new File[] { file }, true);
SVNUrl url = new SVNUrl(treeConflict.getConflictDescriptor().getSrcRightVersion().getReposURL() + "/" + treeConflict.getConflictDescriptor().getSrcRightVersion().getPathInRepos());
SVNRevision revision;
int index = treeConflict.getConflictDescriptor().getSrcRightVersion().toString().lastIndexOf(// $NON-NLS-1$
"@");
if (index == -1) {
revision = SVNRevision.HEAD;
} else {
long number = Long.parseLong(treeConflict.getConflictDescriptor().getSrcRightVersion().toString().substring(index + 1));
revision = new SVNRevision.Number(number);
}
svnClient.copy(url, file, revision);
} catch (Exception e) {
mergeException = e;
}
}
});
if (mergeException != null) {
SVNUIPlugin.log(IStatus.ERROR, mergeException.getMessage(), mergeException);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_2, mergeException.getMessage());
return false;
}
svnResource.getResource().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
} catch (Exception e) {
SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_2, e.getMessage());
return false;
}
return true;
}
compare = mainPage.getCompare();
if (mainPage.getMergeFromRepository()) {
try {
final SVNUrl url = new SVNUrl(mainPage.getMergeFromUrl());
SVNRevision revision1;
if (treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() == treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision())
revision1 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() - 1);
else
revision1 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision());
final SVNRevision revision2 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision());
if (treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() == treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision())
revision1 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() - 1);
final IResource mergeTarget = mainPage.getMergeTarget();
final SVNRevision rev1 = revision1;
svnClient = svnResource.getRepository().getSVNClient();
mergeException = null;
BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
public void run() {
try {
mergePath = mergeTarget.getLocation().toFile();
svnClient.merge(url, rev1, url, revision2, mergePath, true, false, false, true);
try {
// Refresh the resource after merge
if (mergeTarget.getParent() != null)
mergeTarget.getParent().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
else
mergeTarget.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
} catch (CoreException e1) {
}
} catch (Exception e) {
mergeException = e;
}
}
});
if (mergeException != null) {
SVNUIPlugin.log(IStatus.ERROR, mergeException.getMessage(), mergeException);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_mergeError, mergeException.getMessage());
return false;
}
} catch (Exception e) {
SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_mergeError, e.getMessage());
return false;
} finally {
svnResource.getRepository().returnSVNClient(svnClient);
}
}
if (mainPage.getCompare()) {
if (mainPage.getCompareResource2() == null) {
ISVNLocalResource svnCompareResource = mainPage.getSvnCompareResource();
if (svnCompareResource == null)
svnCompareResource = svnResource;
ISVNRemoteResource remoteResource = mainPage.getRemoteResource();
try {
// $NON-NLS-1$ //$NON-NLS-2$
File file = File.createTempFile("revision", ".diff");
file.deleteOnExit();
File path = new File(svnCompareResource.getResource().getLocation().toString());
SVNUrl toUrl = remoteResource.getUrl();
SVNRevision toRevision = remoteResource.getRevision();
ShowDifferencesAsUnifiedDiffOperationWC operation = new ShowDifferencesAsUnifiedDiffOperationWC(targetPart, path, toUrl, toRevision, file);
SVNLocalCompareInput compareInput = new SVNLocalCompareInput(svnCompareResource, remoteResource);
compareInput.setDiffOperation(operation);
CompareUI.openCompareEditorOnPage(compareInput, targetPart.getSite().getPage());
CompareCloseListener closeListener = new CompareCloseListener(Messages.ResolveTreeConflictWizard_compare + svnCompareResource.getName() + // $NON-NLS-1$
" <workspace>");
targetPart.getSite().getPage().addPartListener(closeListener);
} catch (Exception e) {
SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_compareError, e.getMessage());
return false;
}
} else {
ISelection selection = new IStructuredSelection() {
public Object getFirstElement() {
return mainPage.getCompareResource1();
}
public Iterator iterator() {
return toList().iterator();
}
public int size() {
return 2;
}
public Object[] toArray() {
IResource[] compareResources = { mainPage.getCompareResource1(), mainPage.getCompareResource2() };
return compareResources;
}
public List toList() {
List compareList = new ArrayList();
compareList.add(mainPage.getCompareResource1());
compareList.add(mainPage.getCompareResource2());
return compareList;
}
public boolean isEmpty() {
return false;
}
};
CompareAction compareAction = new CompareAction();
compareAction.setActivePart(null, targetPart);
IAction action = new Action() {
};
compareAction.selectionChanged(action, selection);
compareAction.run(selection);
CompareCloseListener closeListener = new CompareCloseListener(Messages.ResolveTreeConflictWizard_compare2 + mainPage.getCompareResource1().getName() + "' - '" + mainPage.getCompareResource2().getName() + // $NON-NLS-1$ //$NON-NLS-2$
"')");
targetPart.getSite().getPage().addPartListener(closeListener);
}
}
if (mainPage.getRevertResource() != null) {
revertException = null;
BusyIndicator.showWhile(Display.getCurrent(), new Runnable() {
public void run() {
try {
IResource[] revertResources = { mainPage.getRevertResource() };
RevertResourcesCommand revertCommand = new RevertResourcesCommand(svnResource.getWorkspaceRoot(), revertResources);
revertCommand.run(new NullProgressMonitor());
} catch (Exception e) {
revertException = e;
}
}
});
if (revertException != null) {
SVNUIPlugin.log(IStatus.ERROR, revertException.getMessage(), revertException);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_revertError, revertException.getMessage());
return false;
}
}
if (mainPage.getDeleteResource() != null) {
try {
mainPage.getDeleteResource().delete(true, new NullProgressMonitor());
} catch (CoreException e) {
SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_deleteError, e.getMessage());
return false;
}
}
if (mainPage.getMarkResolved() || mainPage.refreshConflicts()) {
try {
if (mainPage.getMarkResolved()) {
IResource[] resolvedResources = { treeConflict.getResource() };
ResolveOperation resolveOperation = new ResolveOperation(targetPart, resolvedResources, ISVNConflictResolver.Choice.chooseMerged) {
protected boolean canRunAsJob() {
return false;
}
};
resolveOperation.run();
}
if (mainPage.refreshConflicts()) {
IResource[] refreshResources = { svnResource.getResource() };
TreeConflictsView.refresh(refreshResources);
}
} catch (Exception e) {
SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e);
MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_markResolvedError, e.getMessage());
return false;
}
}
return true;
}
use of org.tigris.subversion.subclipse.core.commands.RevertResourcesCommand in project subclipse by subclipse.
the class OverrideAndUpdateSynchronizeOperation method run.
protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
if (!revertAndUpdate)
return;
if (!prompted) {
getShell().getDisplay().syncExec(new Runnable() {
public void run() {
revertAndUpdate = MessageDialog.openQuestion(getShell(), Policy.bind("SyncAction.override.title"), // $NON-NLS-1$ //$NON-NLS-2$
Policy.bind("SyncAction.override.confirm"));
}
});
prompted = true;
}
if (!revertAndUpdate)
return;
IResource[] modifiedResourceArray = extractResources(modifiedResources, set);
IResource[] resourceArray = extractResources(resources, set);
if (modifiedResourceArray != null && modifiedResourceArray.length > 0) {
monitor.beginTask(null, 100);
try {
new RevertResourcesCommand(provider.getSVNWorkspaceRoot(), modifiedResourceArray).run(Policy.subMonitorFor(monitor, 100));
} catch (SVNException e) {
collectStatus(e.getStatus());
} finally {
monitor.done();
}
}
if (monitor.isCanceled()) {
return;
}
SVNRevision revision = SVNRevision.HEAD;
monitor.beginTask(null, 100);
try {
IResource[] incomingResources = getIncoming(resourceArray);
SVNWorkspaceSubscriber.getInstance().updateRemote(incomingResources);
if (changeSetSelected) {
List<IResource> existingResources = new ArrayList<IResource>();
for (IResource resource : incomingResources) {
if (resource.exists()) {
existingResources.add(resource);
} else {
UpdateResourcesCommand command = new UpdateResourcesCommand(provider.getSVNWorkspaceRoot(), new IResource[] { resource }, revision);
command.setConflictResolver(new SVNConflictResolver());
command.run(Policy.subMonitorFor(monitor, 100));
}
}
if (!existingResources.isEmpty()) {
IResource[] existingResourceArray = new IResource[existingResources.size()];
existingResources.toArray(existingResourceArray);
UpdateResourcesCommand command = new UpdateResourcesCommand(provider.getSVNWorkspaceRoot(), existingResourceArray, revision);
command.setDepth(Depth.empty);
command.setSetDepth(false);
command.setConflictResolver(new SVNConflictResolver());
command.run(Policy.subMonitorFor(monitor, 100));
}
} else {
UpdateResourcesCommand command = new UpdateResourcesCommand(provider.getSVNWorkspaceRoot(), incomingResources, revision);
command.setConflictResolver(new SVNConflictResolver());
command.run(Policy.subMonitorFor(monitor, 100));
}
} catch (SVNException e) {
collectStatus(e.getStatus());
} catch (TeamException e) {
collectStatus(e.getStatus());
} finally {
monitor.done();
}
}
use of org.tigris.subversion.subclipse.core.commands.RevertResourcesCommand in project subclipse by subclipse.
the class RevertOperation method execute.
/* (non-Javadoc)
* @see org.tigris.subversion.subclipse.ui.operations.RepositoryProviderOperation#execute(org.tigris.subversion.subclipse.core.SVNTeamProvider, org.eclipse.core.resources.IResource[], org.eclipse.core.runtime.IProgressMonitor)
*/
protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException {
monitor.beginTask(null, 100);
try {
RevertResourcesCommand command = new RevertResourcesCommand(provider.getSVNWorkspaceRoot(), resources);
command.setRecurse(recurse);
command.setResourcesToRevert(resourcesToRevert);
command.setProject(provider.getProject());
command.run(Policy.subMonitorFor(monitor, 100));
} catch (SVNException e) {
if (e.operationInterrupted()) {
showCancelledMessage();
} else {
collectStatus(e.getStatus());
}
} finally {
monitor.done();
}
}
Aggregations