package org.tmatesoft.svn.core.internal.wc2.old; import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; import org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess; import org.tmatesoft.svn.core.internal.wc16.SVNStatusClient16; import org.tmatesoft.svn.core.wc.ISVNStatusHandler; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.SVNStatus; import org.tmatesoft.svn.core.wc.SVNStatusType; import org.tmatesoft.svn.core.wc2.SvnGetStatusSummary; import org.tmatesoft.svn.core.wc2.SvnStatusSummary; public class SvnOldGetStatusSummary extends SvnOldRunner<SvnStatusSummary, SvnGetStatusSummary> { @Override protected SvnStatusSummary run() throws SVNException { SVNWCAccess wcAccess = SVNWCAccess.newInstance(getOperation().getEventHandler()); try { wcAccess.open(getFirstTarget(), false, 0); } finally { wcAccess.close(); } SVNStatusClient16 statusClient = new SVNStatusClient16((ISVNAuthenticationManager) null, getOperation().getOptions()); statusClient.setIgnoreExternals(true); final long[] maxRevision = new long[1]; final long[] minRevision = new long[] { -1 }; final boolean[] switched = new boolean[3]; final String[] wcURL = new String[1]; statusClient.doStatus(getFirstTarget(), SVNRevision.WORKING, SVNDepth.INFINITY, false, true, false, false, new ISVNStatusHandler() { public void handleStatus(SVNStatus status) { if (status.getEntryProperties() == null || status.getEntryProperties().isEmpty()) { return; } if (status.getContentsStatus() != SVNStatusType.STATUS_ADDED && !status.isFileExternal()) { SVNRevision revision = getOperation().isCommitted() ? status.getCommittedRevision() : status.getRevision(); if (revision != null) { if (minRevision[0] < 0 || minRevision[0] > revision.getNumber()) { minRevision[0] = revision.getNumber(); } maxRevision[0] = Math.max(maxRevision[0], revision.getNumber()); } } switched[0] |= status.isSwitched(); switched[1] |= status.getContentsStatus() != SVNStatusType.STATUS_NORMAL; switched[1] |= status.getPropertiesStatus() != SVNStatusType.STATUS_NORMAL && status.getPropertiesStatus() != SVNStatusType.STATUS_NONE; switched[2] |= status.getEntry() != null && status.getEntry().getDepth() != SVNDepth.INFINITY; if (wcURL[0] == null && status.getFile() != null && status.getFile().equals(getFirstTarget()) && status.getURL() != null) { wcURL[0] = status.getURL().toString(); } } }, null); if (!switched[0] && getOperation().getTrailUrl() != null) { if (wcURL[0] == null) { switched[0] = true; } else { switched[0] = !wcURL[0].endsWith(getOperation().getTrailUrl()); } } SvnStatusSummary summary = new SvnStatusSummary(); summary.setMaxRevision(maxRevision[0]); summary.setMinRevision(maxRevision[0]); summary.setModified(switched[1]); summary.setSwitched(switched[0]); summary.setSparseCheckout(switched[2]); StringBuffer id = new StringBuffer(); id.append(minRevision[0]); if (minRevision[0] != maxRevision[0]) { id.append(":").append(maxRevision[0]); } if (switched[1]) { id.append("M"); } if (switched[0]) { id.append("S"); } if (switched[2]) { id.append("P"); } return summary; } }