Search in sources :

Example 1 with StatusAndInfoCommand

use of org.tigris.subversion.subclipse.core.client.StatusAndInfoCommand in project subclipse by subclipse.

the class SVNWorkspaceSubscriber method findChanges.

private IResource[] findChanges(IResource resource, int depth, IProgressMonitor monitor) throws TeamException {
    try {
        monitor.beginTask("", 100);
        remoteSyncStateStore.flushBytes(resource, depth);
        // ISVNClientAdapter client = SVNProviderPlugin.getPlugin().createSVNClient();
        boolean descend = (depth == IResource.DEPTH_INFINITE) ? true : false;
        boolean showOutOfDate = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS);
        StatusAndInfoCommand cmd = new StatusAndInfoCommand(SVNWorkspaceRoot.getSVNResourceFor(resource), descend, showOutOfDate, true);
        cmd.setCallback(new CancelableSVNStatusCallback(monitor));
        cmd.run(monitor);
        if (monitor.isCanceled()) {
            return new IResource[0];
        }
        monitor.worked(70);
        RemoteResourceStatus[] statuses = cmd.getRemoteResourceStatuses();
        List<IResource> result = new ArrayList<IResource>(statuses.length);
        for (RemoteResourceStatus status : statuses) {
            IResource changedResource = SVNWorkspaceRoot.getResourceFor(resource, status);
            if (changedResource == null)
                continue;
            if (isSupervised(changedResource) || (status.getTextStatus() != SVNStatusKind.NONE)) {
                if (!ignoreHiddenChanges || !Util.isHidden(changedResource)) {
                    result.add(changedResource);
                    remoteSyncStateStore.setBytes(changedResource, status.getBytes());
                    registerChangedResourceParent(changedResource);
                }
            }
        }
        // Ensure that the local sync state is also updated
        IContainer container = resource.getType() == IResource.FILE ? resource.getParent() : (IContainer) resource;
        SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus(container, true);
        monitor.worked(30);
        return (IResource[]) result.toArray(new IResource[result.size()]);
    } catch (SVNException e) {
        if (e.getMessage().contains("Operation cancelled")) {
            return new IResource[0];
        } else {
            throw new TeamException("Error getting status for resource " + resource + " " + e.getMessage(), e);
        }
    } finally {
        monitor.done();
    }
}
Also used : RemoteResourceStatus(org.tigris.subversion.subclipse.core.resources.RemoteResourceStatus) TeamException(org.eclipse.team.core.TeamException) CancelableSVNStatusCallback(org.tigris.subversion.subclipse.core.CancelableSVNStatusCallback) ArrayList(java.util.ArrayList) StatusAndInfoCommand(org.tigris.subversion.subclipse.core.client.StatusAndInfoCommand) SVNException(org.tigris.subversion.subclipse.core.SVNException) IContainer(org.eclipse.core.resources.IContainer) IResource(org.eclipse.core.resources.IResource)

Aggregations

ArrayList (java.util.ArrayList)1 IContainer (org.eclipse.core.resources.IContainer)1 IResource (org.eclipse.core.resources.IResource)1 TeamException (org.eclipse.team.core.TeamException)1 CancelableSVNStatusCallback (org.tigris.subversion.subclipse.core.CancelableSVNStatusCallback)1 SVNException (org.tigris.subversion.subclipse.core.SVNException)1 StatusAndInfoCommand (org.tigris.subversion.subclipse.core.client.StatusAndInfoCommand)1 RemoteResourceStatus (org.tigris.subversion.subclipse.core.resources.RemoteResourceStatus)1