package org.tmatesoft.svn.core.wc2.hooks;
import java.io.File;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.wc.SVNRevision;
import org.tmatesoft.svn.core.wc2.AbstractSvnUpdate;
import org.tmatesoft.svn.core.wc2.SvnRemoteCopy;
/**
* Implementing this interface allows handle an external definition and control whether
* to skip externals definitions processing in some operations.
*
* <p/>
* Such handlers, if provided, are used in update, wc-to-url copying operations.
*
* @author TMate Software Ltd.
* @version 1.7
* @see AbstractSvnUpdate
* @see SvnRemoteCopy
*/
public interface ISvnExternalsHandler {
/**
* Handles an external definition and says whether to skip it or not.
* This method receives external definition parameters and returns whether
* <code>null</code> to indicate that this external definition must be excluded
* from processing (for example, not updated during an update), or a non-
* <code>null</code> array. This array should contain at least two {@link SVNRevision}
* objects [revision, pegRevision] which will be used by the operation instead of
* <code>externalRevision</code> and <code>externalPegRevision</code> respectively passed into
* this handle method.
*
* <p/>
* <code>externalWorkingRevision</code> is always {@link SVNRevision#UNDEFINED} for update/checkout operations.
*
* @param externalPath path of the external to be processed
* @param externalURL URL of the external to be processed or <code>null</code>
* if external is about to be removed
* @param externalRevision default revision to checkout/copy external at or update to
* @param externalPegRevision default peg revision to use for checkout/update/copy of external
* @param externalsDefinition raw <span class="javastring">svn:externals</span> property value
* @param externalsWorkingRevision current external working copy revision (relevant only for wc-to-url
* copying operations)
* @return array of {@link SVNRevision}s in form of {revision, pegRevision} or
* <code>null</code> to skip processing
* of this external
*/
public SVNRevision[] handleExternal(File externalPath, SVNURL externalURL, SVNRevision externalRevision,
SVNRevision externalPegRevision, String externalsDefinition, SVNRevision externalsWorkingRevision);
}