package org.tmatesoft.svn.core.internal.wc2.old; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.internal.wc.admin.ISVNAdminAreaFactorySelector; import org.tmatesoft.svn.core.internal.wc.admin.SVNAdminAreaFactory; import org.tmatesoft.svn.core.internal.wc16.SVNUpdateClient16; import org.tmatesoft.svn.core.internal.wc17.SVNWCContext; import org.tmatesoft.svn.core.internal.wc2.SvnWcGeneration; import org.tmatesoft.svn.core.internal.wc2.compat.SvnCodec; import org.tmatesoft.svn.core.wc2.SvnCheckout; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; public class SvnOldCheckout extends SvnOldRunner<Long, SvnCheckout> { @Override public boolean isApplicable(SvnCheckout operation, SvnWcGeneration wcGeneration) throws SVNException { final int targetWorkingCopyFormat = operation.getTargetWorkingCopyFormat(); if (targetWorkingCopyFormat > 0) { return targetWorkingCopyFormat < SVNWCContext.WC_NG_VERSION; } return super.isApplicable(operation, wcGeneration); } @Override protected Long run() throws SVNException { final int targetWorkingCopyFormat = getOperation().getTargetWorkingCopyFormat(); final ISVNAdminAreaFactorySelector oldSelector = SVNAdminAreaFactory.getSelector(); try { if (targetWorkingCopyFormat > 0) { SVNAdminAreaFactory.setSelector(new ISVNAdminAreaFactorySelector() { public Collection getEnabledFactories(File path, Collection factories, boolean writeAccess) throws SVNException { List<SVNAdminAreaFactory> adminAreaFactories = new ArrayList<SVNAdminAreaFactory>(factories); int index = findFactoryByFormat(adminAreaFactories, targetWorkingCopyFormat); if (index > 0) { //move the factory to the start of the list SVNAdminAreaFactory adminAreaFactory = adminAreaFactories.get(index); adminAreaFactories.remove(index); adminAreaFactories.add(0, adminAreaFactory); } return adminAreaFactories; } private int findFactoryByFormat(List<SVNAdminAreaFactory> factories, int workingCopyFormat) { for (int i = 0; i < factories.size(); i++) { final SVNAdminAreaFactory factory = factories.get(i); if (factory.getSupportedVersion() == workingCopyFormat) { return i; } } return -1; } }); } SVNUpdateClient16 client = new SVNUpdateClient16(getOperation().getRepositoryPool(), getOperation().getOptions()); client.setIgnoreExternals(getOperation().isIgnoreExternals()); client.setUpdateLocksOnDemand(getOperation().isUpdateLocksOnDemand()); client.setEventHandler(getOperation().getEventHandler()); client.setExternalsHandler(SvnCodec.externalsHandler(getOperation().getExternalsHandler())); return client.doCheckout(getOperation().getSource().getURL(), getFirstTarget(), getOperation().getSource().getResolvedPegRevision(), getOperation().getRevision(), getOperation().getDepth(), getOperation().isAllowUnversionedObstructions()); } finally { if (targetWorkingCopyFormat > 0) { SVNAdminAreaFactory.setSelector(oldSelector); } } } }