package org.tmatesoft.svn.core.wc2; import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.wc.SVNRevision; /** * Represents info command. * {@link #run()} method collects information about item(s) in a repository * or working copy, and returns it as {@link SvnInfo} objects. * * <p/> * If <code>revision</code> and <code>target</code>'s <code>pegRevision</code> * are either <code>null</code> or {@link SVNRevision#isLocal() local}, * or {@link SVNRevision#isValid() invalid}, then information will be pulled * solely from the working copy; no network connections will be made. * * <p/> * Otherwise, information will be pulled from a repository. The actual node * revision selected is determined by the <code>target</code> as it exists in * its <code>pegRevision</code>. If <code>pegRevision</code> is * {@link SVNRevision#UNDEFINED}, then it defaults to * {@link SVNRevision#HEAD} if <code>target</code> is URL, * and it defaults to {@link SVNRevision#WORKING} if if <code>target</code> * working copy path. * * <p/> * If <code>target</code> is a file, collects its info. * If it is a directory, then descends according to <code>depth</code>. * If <code>depth</code> is{@link SVNDepth#EMPTY}, fetches info for * <code>target</code> and nothing else; if {@link SVNDepth#FILES}, for * <code>target</code> and its immediate file children; if * {@link SVNDepth#IMMEDIATES}, for the preceding plus on each immediate * subdirectory; if {@link SVNDepth#INFINITY}, then recurses fully, * for <code>target</code> and everything beneath it. * * <p/> * <code>changeLists</code> is a collection of <code>String</code> * changelist names, used as a restrictive filter on items whose info is * reported; that is, doesn't report info about any item unless it's a * member of one of those changelists. If <code>changeLists</code> is empty * (or <code>null</code>), no changelist filtering occurs. * * @author TMate Software Ltd. * @version 1.7 */ public class SvnGetInfo extends SvnReceivingOperation<SvnInfo> { protected SvnGetInfo(SvnOperationFactory factory) { super(factory); } private boolean fetchExcluded; private boolean fetchActualOnly; @Override public void initDefaults() { super.initDefaults(); setFetchActualOnly(true); setFetchExcluded(true); } /** * Sets whether to fetch excluded items. * * @param fetchExcluded <code>true</code> if excluded items should be fetched, otherwise <code>false</code> */ public void setFetchExcluded(boolean fetchExcluded) { this.fetchExcluded = fetchExcluded; } /** * Sets whether to fetch actual nodes, those are unversioned nodes that describe tree conflicts. * * @param fetchActualOnly <code>true</code> if actual nodes should be , otherwise <code>false</code> */ public void setFetchActualOnly(boolean fetchActualOnly) { this.fetchActualOnly = fetchActualOnly; } /** * Gets whether to fetch excluded items. * * @return <code>true</code> if excluded items should be fetched, otherwise <code>false</code> */ public boolean isFetchExcluded() { return fetchExcluded; } /** * Gets whether to fetch actual nodes, those are unversioned nodes that describe tree conflicts. * * @return <code>true</code> if actual nodes should be , otherwise <code>false</code> */ public boolean isFetchActualOnly() { return fetchActualOnly; } @Override protected void ensureArgumentsAreValid() throws SVNException { if (getFirstTarget().getPegRevision() == null || getFirstTarget().getPegRevision() == SVNRevision.UNDEFINED) { if (getRevision() == null || !getRevision().isValid()) { setRevision(hasRemoteTargets() ? SVNRevision.HEAD : SVNRevision.WORKING); } } else { // TODO: should we add setRevision(getFirstTarget().getPegRevision()); ? currently everything is working without this line } if (getDepth() == null || getDepth() == SVNDepth.UNKNOWN) { setDepth(SVNDepth.EMPTY); } super.ensureArgumentsAreValid(); } /** * Gets whether the operation changes working copy * @return <code>true</code> if the operation changes the working copy, otherwise <code>false</code> */ @Override public boolean isChangesWorkingCopy() { return false; } }