package org.tmatesoft.svn.core.internal.wc17; import java.io.File; import java.util.Collection; import org.tmatesoft.svn.core.ISVNDirEntryHandler; import org.tmatesoft.svn.core.ISVNLogEntryHandler; import org.tmatesoft.svn.core.SVNDepth; import org.tmatesoft.svn.core.SVNDirEntry; import org.tmatesoft.svn.core.SVNErrorCode; import org.tmatesoft.svn.core.SVNErrorMessage; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNLogEntry; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; import org.tmatesoft.svn.core.internal.wc.SVNErrorManager; import org.tmatesoft.svn.core.internal.wc16.SVNBasicDelegate; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.wc.ISVNAnnotateHandler; import org.tmatesoft.svn.core.wc.ISVNEventHandler; import org.tmatesoft.svn.core.wc.ISVNOptions; import org.tmatesoft.svn.core.wc.ISVNRepositoryPool; import org.tmatesoft.svn.core.wc.SVNDiffOptions; import org.tmatesoft.svn.core.wc.SVNEventAction; import org.tmatesoft.svn.core.wc.SVNRevision; import org.tmatesoft.svn.core.wc.SVNRevisionRange; import org.tmatesoft.svn.core.wc.SVNWCUtil; import org.tmatesoft.svn.util.SVNLogType; /** * The <b>SVNLogClient</b> class is intended for such purposes as getting * revisions history, browsing repository entries and annotating file contents. * <p> * Here's a list of the <b>SVNLogClient</b>'s methods matched against * corresponing commands of the <b>SVN</b> command line client: * <table cellpadding="3" cellspacing="1" border="0" width="40%" bgcolor="#999933"> * <tr bgcolor="#ADB8D9" align="left"> * <td><b>SVNKit</b></td> * <td><b>Subversion</b></td> * </tr> * <tr bgcolor="#EAEAEA" align="left"> * <td>doLog()</td> * <td>'svn log'</td> * </tr> * <tr bgcolor="#EAEAEA" align="left"> * <td>doList()</td> * <td>'svn list'</td> * </tr> * <tr bgcolor="#EAEAEA" align="left"> * <td>doAnnotate()</td> * <td>'svn blame'</td> * </tr> * </table> * * @version 1.3 * @author TMate Software Ltd. * @since 1.2 */ public class SVNLogClient17 extends SVNBasicDelegate { private SVNDiffOptions myDiffOptions; /** * Constructs and initializes an <b>SVNLogClient</b> object with the * specified run-time configuration and authentication drivers. * <p> * If <code>options</code> is <span class="javakeyword">null</span>, then * this <b>SVNLogClient</b> will be using a default run-time configuration * driver which takes client-side settings from the default SVN's run-time * configuration area but is not able to change those settings (read more on * {@link ISVNOptions} and {@link SVNWCUtil}). * <p> * If <code>authManager</code> is <span class="javakeyword">null</span>, * then this <b>SVNLogClient</b> will be using a default authentication and * network layers driver (see * {@link SVNWCUtil#createDefaultAuthenticationManager()}) which uses * server-side settings and auth storage from the default SVN's run-time * configuration area (or system properties if that area is not found). * * @param authManager * an authentication and network layers driver * @param options * a run-time configuration options driver */ public SVNLogClient17(ISVNAuthenticationManager authManager, ISVNOptions options) { super(authManager, options); } /** * Constructs and initializes an <b>SVNLogClient</b> object with the * specified run-time configuration and authentication drivers. * <p> * If <code>options</code> is <span class="javakeyword">null</span>, then * this <b>SVNLogClient</b> will be using a default run-time configuration * driver which takes client-side settings from the default SVN's run-time * configuration area but is not able to change those settings (read more on * {@link ISVNOptions} and {@link SVNWCUtil}). * <p/> * If <code>repositoryPool</code> is <span class="javakeyword">null</span>, * then {@link org.tmatesoft.svn.core.io.SVNRepositoryFactory} will be used * to create {@link SVNRepository repository access objects}. * * @param repositoryPool * a repository pool object * @param options * a run-time configuration options driver */ public SVNLogClient17(ISVNRepositoryPool repositoryPool, ISVNOptions options) { super(repositoryPool, options); } /** * Sets diff options for this client to use in annotate operations. * * @param diffOptions * diff options object */ public void setDiffOptions(SVNDiffOptions diffOptions) { myDiffOptions = diffOptions; } /** * Gets the diff options that are used in annotate operations by this * client. Creates a new one if none was used before. * * @return diff options */ public SVNDiffOptions getDiffOptions() { if (myDiffOptions == null) { myDiffOptions = new SVNDiffOptions(); } return myDiffOptions; } /** * Obtains annotation information for each file text line from a repository * (using a Working Copy path to get a corresponding URL) and passes it to a * provided annotation handler. * <p/> * This method is equivalent to a call to * <code>doAnnotate(path, pegRevision, startRevision, endRevision, false, false, handler, null)</code>. * * @param path * a WC file item to be annotated * @param pegRevision * a revision in which <code>path</code> is first looked up in * the repository * @param startRevision * a revision for an operation to start from * @param endRevision * a revision for an operation to stop at * @param handler * a caller's handler to process annotation information * @throws SVNException * if <code>startRevision > endRevision</code> * @see #doAnnotate(File,SVNRevision,SVNRevision,SVNRevision,boolean,boolean,ISVNAnnotateHandler,String) */ public void doAnnotate(File path, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, ISVNAnnotateHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Obtains annotation information for each file text line from a repository * (using a Working Copy path to get a corresponding URL) and passes it to a * provided annotation handler. * <p/> * This method is equivalent to a call to * <code>doAnnotate(path, pegRevision, startRevision, endRevision, ignoreMimeType, false, handler, null)</code>. * * @param path * a WC file item to be annotated * @param pegRevision * a revision in which <code>path</code> is first looked up in * the repository * @param startRevision * a revision for an operation to start from * @param endRevision * a revision for an operation to stop at * @param ignoreMimeType * forces operation to run (all files to be treated as text, no * matter what SVNKit has inferred from the mime-type property) * @param handler * a caller's handler to process annotation information * @throws SVNException * @see #doAnnotate(File,SVNRevision,SVNRevision,SVNRevision,boolean,boolean,ISVNAnnotateHandler,String) * @since 1.1 */ public void doAnnotate(File path, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, boolean ignoreMimeType, ISVNAnnotateHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Invokes <code>handler</code> on each line-blame item associated with * revision <code>endRevision</code> of <code>path</code>, using * <code>startRevision</code> as the default source of all blame. * <p/> * <code>pegRevision</code> indicates in which revision <code>path</code> is * valid. If <code>pegRevision</code> is {@link SVNRevision#UNDEFINED}, then * it defaults to {@link SVNRevision#WORKING}. * <p/> * If <code>startRevision</code> is <span class="javakeyword">null</span> or * {@link SVNRevision#isValid() invalid}, then it defaults to revision 1. If * <code>endRevision</code> is <span class="javakeyword">null</span> or * {@link SVNRevision#isValid() invalid}, then in defaults to * {@link SVNRevision#HEAD}. * <p/> * Note: this routine requires repository access. * * @param path * a WC file item to be annotated * @param pegRevision * a revision in which <code>path</code> is first looked up in * the repository * @param startRevision * a revision for an operation to start from * @param endRevision * a revision for an operation to stop at * @param ignoreMimeType * forces operation to run (all files to be treated as text, no * matter what SVNKit has inferred from the mime-type property) * @param includeMergedRevisions * if <span class="javakeyword">true</span>, then also returns * data based upon revisions which have been merged to * <code>path</code> * @param handler * a caller's handler to process annotation information * @param inputEncoding * character set to decode input bytes with * @throws SVNException * in the following cases: * <ul> * <li/>exception with {@link SVNErrorCode#CLIENT_BAD_REVISION} * error code - if both <code>startRevision</code> and <code> * endRevision</code> are either <span * class="javakeyword">null</span> or * {@link SVNRevision#isValid() invalid} <li/>exception with * {@link SVNErrorCode#UNSUPPORTED_FEATURE} error code - if * either of <code>startRevision</code> or <code>endRevision * </code> is {@link SVNRevision#WORKING} <li/>exception with * {@link SVNErrorCode#CLIENT_IS_BINARY_FILE} error code - if * any of the revisions of <code>path</code> have a binary * mime-type, unless <code>ignoreMimeType</code> is <span * class="javakeyword">true</span>, in which case blame * information will be generated regardless of the MIME types of * the revisions * </ul> * @since 1.2, SVN 1.5 */ public void doAnnotate(File path, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, boolean ignoreMimeType, boolean includeMergedRevisions, ISVNAnnotateHandler handler, String inputEncoding) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Obtains annotation information for each file text line from a repository * and passes it to a provided annotation handler. * <p> * This method is equivalent to a call to * <code>doAnnotate(url, pegRevision, startRevision, endRevision, false, false, handler, null)</code>. * * @param url * a URL of a text file that is to be annotated * @param pegRevision * a revision in which <code>path</code> is first looked up in * the repository * @param startRevision * a revision for an operation to start from * @param endRevision * a revision for an operation to stop at * @param handler * a caller's handler to process annotation information * @throws SVNException * if <code>startRevision > endRevision</code> * @see #doAnnotate(SVNURL,SVNRevision,SVNRevision,SVNRevision,boolean,boolean,ISVNAnnotateHandler,String) */ public void doAnnotate(SVNURL url, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, ISVNAnnotateHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Obtains annotation information for each file text line from a repository * and passes it to a provided annotation handler. * <p> * This method is equivalent to a call to * <code>doAnnotate(url, pegRevision, startRevision, endRevision, false, false, handler, inputEncoding)</code>. * * @param url * a URL of a text file that is to be annotated * @param pegRevision * a revision in which <code>path</code> is first looked up in * the repository * @param startRevision * a revision for an operation to start from * @param endRevision * a revision for an operation to stop at * @param handler * a caller's handler to process annotation information * @param inputEncoding * a desired character set (encoding) of text lines * @throws SVNException * @see #doAnnotate(SVNURL,SVNRevision,SVNRevision,SVNRevision,boolean,boolean,ISVNAnnotateHandler,String) */ public void doAnnotate(SVNURL url, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, ISVNAnnotateHandler handler, String inputEncoding) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Obtains annotation information for each file text line from a repository * and passes it to a provided annotation handler. * <p> * This method is equivalent to a call to * * <code>doAnnotate(url, pegRevision, startRevision, endRevision, ignoreMimeType, false, handler, inputEncoding)</code>. * * @param url * a URL of a text file that is to be annotated * @param pegRevision * a revision in which <code>path</code> is first looked up in * the repository * @param startRevision * a revision for an operation to start from * @param endRevision * a revision for an operation to stop at * @param ignoreMimeType * forces operation to run (all files to be treated as text, no * matter what SVNKit has inferred from the mime-type property) * @param handler * a caller's handler to process annotation information * @param inputEncoding * a desired character set (encoding) of text lines * @throws SVNException * @see #doAnnotate(SVNURL,SVNRevision,SVNRevision,SVNRevision,boolean,boolean,ISVNAnnotateHandler,String) * @since 1.1 */ public void doAnnotate(SVNURL url, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, boolean ignoreMimeType, ISVNAnnotateHandler handler, String inputEncoding) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Invokes <code>handler</code> on each line-blame item associated with * revision <code>endRevision</code> of <code>url</code>, using * <code>startRevision</code> as the default source of all blame. * <p/> * <code>pegRevision</code> indicates in which revision <code>url</code> is * valid. If <code>pegRevision</code> is {@link SVNRevision#UNDEFINED}, then * it defaults to {@link SVNRevision#HEAD}. * <p/> * If <code>startRevision</code> is <span class="javakeyword">null</span> or * {@link SVNRevision#isValid() invalid}, then it defaults to revision 1. If * <code>endRevision</code> is <span class="javakeyword">null</span> or * {@link SVNRevision#isValid() invalid}, then in defaults to * {@link SVNRevision#HEAD}. * <p/> * Note: this routine requires repository access * * @param url * a URL of a text file that is to be annotated * @param pegRevision * a revision in which <code>url</code> is first looked up in the * repository * @param startRevision * a revision for an operation to start from * @param endRevision * a revision for an operation to stop at * @param ignoreMimeType * forces operation to run (all files to be treated as text, no * matter what SVNKit has inferred from the mime-type property) * @param includeMergedRevisions * if <span class="javakeyword">true</span>, then also returns * data based upon revisions which have been merged to * <code>url</code> * @param handler * a caller's handler to process annotation information * @param inputEncoding * character set to decode input bytes with * @throws SVNException * in the following cases: * <ul> * <li/>exception with {@link SVNErrorCode#CLIENT_BAD_REVISION} * error code - if both <code>startRevision</code> and <code> * endRevision</code> are either <span * class="javakeyword">null</span> or * {@link SVNRevision#isValid() invalid} <li/>exception with * {@link SVNErrorCode#UNSUPPORTED_FEATURE} error code - if * either of <code>startRevision</code> or <code>endRevision * </code> is {@link SVNRevision#WORKING} <li/>exception with * {@link SVNErrorCode#CLIENT_IS_BINARY_FILE} error code - if * any of the revisions of <code>url</code> have a binary * mime-type, unless <code>ignoreMimeType</code> is <span * class="javakeyword">true</span>, in which case blame * information will be generated regardless of the MIME types of * the revisions * </ul> * @since 1.2, SVN 1.5 */ public void doAnnotate(SVNURL url, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, boolean ignoreMimeType, boolean includeMergedRevisions, ISVNAnnotateHandler handler, String inputEncoding) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Gets commit log messages with other revision specific information from a * repository (using Working Copy paths to get corresponding URLs) and * passes them to a log entry handler for processing. Useful for observing * the history of affected paths, author, date and log comments information * per revision. * <p> * Calling this method is equivalent to * * <code>doLog(paths, startRevision, endRevision, SVNRevision.UNDEFINED, stopOnCopy, discoverChangedPaths, false, limit, null, handler)</code>. * * @param paths * an array of Working Copy paths, should not be <span * class="javakeyword">null</span> * @param startRevision * a revision for an operation to start from (including this * revision) * @param endRevision * a revision for an operation to stop at (including this * revision) * @param stopOnCopy * <span class="javakeyword">true</span> not to cross copies * while traversing history, otherwise copies history will be * also included into processing * @param discoverChangedPaths * <span class="javakeyword">true</span> to report of all changed * paths for every revision being processed (those paths will be * available by calling * {@link org.tmatesoft.svn.core.SVNLogEntry#getChangedPaths()}) * @param limit * a maximum number of log entries to be processed * @param handler * a caller's log entry handler * @throws SVNException * if one of the following is true: * <ul> * <li>a path is not under version control <li>can not obtain a * URL of a WC path - there's no such entry in the Working Copy * <li><code>paths</code> contain entries that belong to * different repositories * </ul> * @see #doLog(File[],SVNRevision,SVNRevision,SVNRevision,boolean,boolean,boolean,long,String[],ISVNLogEntryHandler) */ public void doLog(File[] paths, SVNRevision startRevision, SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, final ISVNLogEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Invokes <code>handler</code> on each log message from * <code>startRevision</code> to <code>endRevision</code> in turn, inclusive * (but never invokes <code>handler</code> on a given log message more than * once). * <p/> * <code>handler</code> is invoked only on messages whose revisions involved * a change to some path in <code>paths</code>. <code>pegRevision</code> * indicates in which revision <code>paths</code> are valid. If * <code>pegRevision</code> is{@link SVNRevision#isValid() invalid}, it * defaults to {@link SVNRevision#WORKING}. * <p/> * If <code>limit</code> is non-zero, only invokes <code>handler</code> on * the first <code>limit</code> logs. * <p/> * If <code>discoverChangedPaths</code> is set, then the changed paths * <code>Map</code> argument will be passed to a constructor of * {@link SVNLogEntry} on each invocation of <code>handler</code>. * <p/> * If <code>stopOnCopy</code> is set, copy history (if any exists) will not * be traversed while harvesting revision logs for each target. * <p/> * If <code>includeMergedRevisions</code> is set, log information for * revisions which have been merged to <code>paths</code> will also be * returned. * <p/> * Refer to {@link org.tmatesoft.svn.core.SVNLogEntry#hasChildren()} for * additional information on how to handle mergeinfo information during a * log operation. * <p/> * If * <code>revisionProperties is <span class="javakeyword">null</span>, retrieves all revision properties; * else, retrieves only the revprops named in the array (i.e. retrieves none if the array is empty). * <p/> * If <code>startRevision</code> is {@link SVNRevision#isValid() valid} but * <code>endRevision</code> is not, then <code>endRevision</code> defaults * to <code>startRevision</code>. If both <code>startRevision</code> and * <code>endRevision</code> are invalid, then <code>endRevision</code> * defaults to revision <code>0</code>, and <code>startRevision</code> * defaults either to <code>pegRevision</code> in case the latter one is * valid, or to {@link SVNRevision#BASE}, if it is not. * <p/> * Important: to avoid an exception with the * {@link SVNErrorCode#FS_NO_SUCH_REVISION} error code when invoked against * an empty repository (i.e. one not containing a revision 1), callers * should specify the range {@link SVNRevision#HEAD}:<code>0</code>. * <p/> * If the caller has provided a non-<span class="javakeyword">null</span> * {@link ISVNEventHandler}, it will be called with the * {@link SVNEventAction#SKIP} event action on any unversioned paths. * <p/> * Note: this routine requires repository access. * * @param paths * an array of Working Copy paths, for which log messages are * desired * @param startRevision * a revision for an operation to start from (including this * revision) * @param endRevision * a revision for an operation to stop at (including this * revision) * @param pegRevision * a revision in which <code>paths</code> are first looked up in * the repository * @param stopOnCopy * <span class="javakeyword">true</span> not to cross copies * while traversing history, otherwise copies history will be * also included into processing * @param discoverChangedPaths * <span class="javakeyword">true</span> to report of all changed * paths for every revision being processed (those paths will be * available by calling * {@link org.tmatesoft.svn.core.SVNLogEntry#getChangedPaths()}) * @param includeMergedRevisions * if <span class="javakeyword">true</span>, merged revisions * will be also reported * @param limit * a maximum number of log entries to be processed * @param revisionProperties * names of revision properties to retrieve * @param handler * a caller's log entry handler * @throws SVNException * if one of the following is true: * <ul> * <li>can not obtain a URL of a WC path - there's no such entry * in the Working Copy <li><code>paths</code> contain entries * that belong to different repositories * </ul> * @since 1.2, SVN 1.5 */ public void doLog(File[] paths, SVNRevision startRevision, SVNRevision endRevision, SVNRevision pegRevision, boolean stopOnCopy, boolean discoverChangedPaths, boolean includeMergedRevisions, long limit, String[] revisionProperties, final ISVNLogEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Invokes <code>handler</code> on each log message from the given * <code>revisionRanges</code> in turn, inclusive (but never invokes * <code>handler</code> on a given log message more than once). * <p/> * <code>handler</code> is invoked only on messages whose revisions involved * a change to some path in <code>paths</code>. <code>pegRevision</code> * indicates in which revision <code>paths</code> are valid. If * <code>pegRevision</code> is{@link SVNRevision#isValid() invalid}, it * defaults to {@link SVNRevision#WORKING}. * <p/> * If <code>limit</code> is non-zero, only invokes <code>handler</code> on * the first <code>limit</code> logs. * <p/> * If <code>discoverChangedPaths</code> is set, then the changed paths * <code>Map</code> argument will be passed to a constructor of * {@link SVNLogEntry} on each invocation of <code>handler</code>. * <p/> * If <code>stopOnCopy</code> is set, copy history (if any exists) will not * be traversed while harvesting revision logs for each target. * <p/> * If <code>includeMergedRevisions</code> is set, log information for * revisions which have been merged to <code>paths</code> will also be * returned. * <p/> * Refer to {@link org.tmatesoft.svn.core.SVNLogEntry#hasChildren()} for * additional information on how to handle mergeinfo information during a * log operation. * <p/> * If * <code>revisionProperties is <span class="javakeyword">null</span>, retrieves all revision properties; * else, retrieves only the revprops named in the array (i.e. retrieves none if the array is empty). * <p/> * For every {@link SVNRevisionRange} in <code>revisionRanges</code>: <b/> * If <code>startRevision</code> is {@link SVNRevision#isValid() valid} but * <code>endRevision</code> is not, then <code>endRevision</code> defaults * to <code>startRevision</code>. If both <code>startRevision</code> and * <code>endRevision</code> are invalid, then <code>endRevision</code> * defaults to revision <code>0</code>, and <code>startRevision</code> * defaults either to <code>pegRevision</code> in case the latter one is * valid, or to {@link SVNRevision#BASE}, if it is not. * <p/> * Important: to avoid an exception with the * {@link SVNErrorCode#FS_NO_SUCH_REVISION} error code when invoked against * an empty repository (i.e. one not containing a revision 1), callers * should specify the range {@link SVNRevision#HEAD}:<code>0</code>. * <p/> * If the caller has provided a non-<span class="javakeyword">null</span> * {@link ISVNEventHandler}, it will be called with the * {@link SVNEventAction#SKIP} event action on any unversioned paths. * <p/> * Note: this routine requires repository access. * * @param paths * an array of Working Copy paths, for which log messages are * desired * @param revisionRanges * collection of {@link SVNRevisionRange} objects * @param pegRevision * a revision in which <code>paths</code> are first looked up in * the repository * @param stopOnCopy * <span class="javakeyword">true</span> not to cross copies * while traversing history, otherwise copies history will be * also included into processing * @param discoverChangedPaths * <span class="javakeyword">true</span> to report of all changed * paths for every revision being processed (those paths will be * available by calling * {@link org.tmatesoft.svn.core.SVNLogEntry#getChangedPaths()}) * @param includeMergedRevisions * if <span class="javakeyword">true</span>, merged revisions * will be also reported * @param limit * a maximum number of log entries to be processed * @param revisionProperties * names of revision properties to retrieve * @param handler * a caller's log entry handler * @throws SVNException * if one of the following is true: * <ul> * <li>can not obtain a URL of a WC path - there's no such entry * in the Working Copy <li><code>paths</code> contain entries * that belong to different repositories * </ul> * @since 1.3, SVN 1.6 */ public void doLog(File[] paths, Collection revisionRanges, SVNRevision pegRevision, boolean stopOnCopy, boolean discoverChangedPaths, boolean includeMergedRevisions, long limit, String[] revisionProperties, final ISVNLogEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Gets commit log messages with other revision specific information from a * repository (using Working Copy paths to get corresponding URLs) and * passes them to a log entry handler for processing. Useful for observing * the history of affected paths, author, date and log comments information * per revision. * <p> * Calling this method is equivalent to * * <code>doLog(paths, startRevision, endRevision, pegRevision, stopOnCopy, discoverChangedPaths, false, limit, null, handler)</code>. * * @param paths * an array of Working Copy paths, should not be <span * class="javakeyword">null</span> * @param pegRevision * a revision in which <code>path</code> is first looked up in * the repository * @param startRevision * a revision for an operation to start from (including this * revision) * @param endRevision * a revision for an operation to stop at (including this * revision) * @param stopOnCopy * <span class="javakeyword">true</span> not to cross copies * while traversing history, otherwise copies history will be * also included into processing * @param discoverChangedPaths * <span class="javakeyword">true</span> to report of all changed * paths for every revision being processed (those paths will be * available by calling * {@link org.tmatesoft.svn.core.SVNLogEntry#getChangedPaths()}) * @param limit * a maximum number of log entries to be processed * @param handler * a caller's log entry handler * @throws SVNException * if one of the following is true: * <ul> * <li>a path is not under version control <li>can not obtain a * URL of a WC path - there's no such entry in the Working Copy * <li><code>paths</code> contain entries that belong to * different repositories * </ul> * @see #doLog(File[],SVNRevision,SVNRevision,SVNRevision,boolean,boolean,boolean,long,String[],ISVNLogEntryHandler) */ public void doLog(File[] paths, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, final ISVNLogEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Gets commit log messages with other revision specific information from a * repository and passes them to a log entry handler for processing. Useful * for observing the history of affected paths, author, date and log * comments information per revision. * <p> * Calling this method is equivalent to * * <code> doLog(url, paths, pegRevision, startRevision, endRevision, stopOnCopy, discoverChangedPaths, false, limit, null, handler)</code>. * * @param url * a target URL * @param paths * an array of paths relative to the target <code>url</code> * @param pegRevision * a revision in which <code>url</code> is first looked up * @param startRevision * a revision for an operation to start from (including this * revision) * @param endRevision * a revision for an operation to stop at (including this * revision) * @param stopOnCopy * <span class="javakeyword">true</span> not to cross copies * while traversing history, otherwise copies history will be * also included into processing * @param discoverChangedPaths * <span class="javakeyword">true</span> to report of all changed * paths for every revision being processed (those paths will be * available by calling * {@link org.tmatesoft.svn.core.SVNLogEntry#getChangedPaths()}) * @param limit * a maximum number of log entries to be processed * @param handler * a caller's log entry handler * @throws SVNException * @see #doLog(SVNURL,String[],SVNRevision,SVNRevision,SVNRevision,boolean,boolean,boolean,long,String[],ISVNLogEntryHandler) * @since 1.1, new in Subversion 1.4 */ public void doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, long limit, final ISVNLogEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Invokes <code>handler</code> on each log message from * <code>startRevision</code> to <code>endRevision</code> in turn, inclusive * (but never invokes <code>handler</code> on a given log message more than * once). * <p/> * <code>handler</code> is invoked only on messages whose revisions involved * a change to some path in <code>paths</code>. <code>pegRevision</code> * indicates in which revision <code>paths</code> are valid. If * <code>pegRevision</code> is{@link SVNRevision#isValid() invalid}, it * defaults to {@link SVNRevision#HEAD}. * <p/> * If <code>limit</code> is non-zero, only invokes <code>handler</code> on * the first <code>limit</code> logs. * <p/> * If <code>discoverChangedPaths</code> is set, then the changed paths * <code>Map</code> argument will be passed to a constructor of * {@link SVNLogEntry} on each invocation of <code>handler</code>. * <p/> * If <code>stopOnCopy</code> is set, copy history (if any exists) will not * be traversed while harvesting revision logs for each target. * <p/> * If <code>includeMergedRevisions</code> is set, log information for * revisions which have been merged to <code>paths</code> will also be * returned. * <p/> * If * <code>revisionProperties is <span class="javakeyword">null</span>, retrieves all revision properties; * else, retrieves only the revision properties named in the array (i.e. retrieves none if the array is empty). * <p/> * Important: to avoid an exception with the {@link SVNErrorCode#FS_NO_SUCH_REVISION} error code * when invoked against an empty repository (i.e. one not containing a revision 1), callers should specify * the range {@link SVNRevision#HEAD}:<code>0</code>. * <p/> * Note: this routine requires repository access. * * @param url * repository URL * @param paths * an array of paths relative to <code>url</code> * @param pegRevision * a revision in which <code>paths</code> are first looked up in * the repository * @param startRevision * a revision for an operation to start from (including this * revision) * @param endRevision * a revision for an operation to stop at (including this * revision) * @param stopOnCopy * <span class="javakeyword">true</span> not to cross copies * while traversing history, otherwise copies history will be * also included into processing * @param discoverChangedPaths * <span class="javakeyword">true</span> to report of all changed * paths for every revision being processed (those paths will be * available by calling * {@link org.tmatesoft.svn.core.SVNLogEntry#getChangedPaths()}) * @param includeMergedRevisions * if <span class="javakeyword">true</span>, merged revisions * will be also reported * @param limit * a maximum number of log entries to be processed * @param revisionProperties * names of revision properties to retrieve * @param handler * a caller's log entry handler * @throws SVNException * @since 1.2, SVN 1.5 */ public void doLog(SVNURL url, String[] paths, SVNRevision pegRevision, SVNRevision startRevision, SVNRevision endRevision, boolean stopOnCopy, boolean discoverChangedPaths, boolean includeMergedRevisions, long limit, String[] revisionProperties, final ISVNLogEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Invokes <code>handler</code> on each log message from the given * <code></code> in turn, inclusive (but never invokes <code>handler</code> * on a given log message more than once). * <p/> * <code>handler</code> is invoked only on messages whose revisions involved * a change to some path in <code>paths</code>. <code>pegRevision</code> * indicates in which revision <code>paths</code> are valid. If * <code>pegRevision</code> is{@link SVNRevision#isValid() invalid}, it * defaults to {@link SVNRevision#HEAD}. * <p/> * If <code>limit</code> is non-zero, only invokes <code>handler</code> on * the first <code>limit</code> logs. * <p/> * If <code>discoverChangedPaths</code> is set, then the changed paths * <code>Map</code> argument will be passed to a constructor of * {@link SVNLogEntry} on each invocation of <code>handler</code>. * <p/> * If <code>stopOnCopy</code> is set, copy history (if any exists) will not * be traversed while harvesting revision logs for each target. * <p/> * If <code>includeMergedRevisions</code> is set, log information for * revisions which have been merged to <code>paths</code> will also be * returned. * <p/> * If * <code>revisionProperties is <span class="javakeyword">null</span>, retrieves all revision properties; * else, retrieves only the revision properties named in the array (i.e. retrieves none if the array is empty). * <p/> * Important: to avoid an exception with the {@link SVNErrorCode#FS_NO_SUCH_REVISION} error code * when invoked against an empty repository (i.e. one not containing a revision 1), callers should specify * the range {@link SVNRevision#HEAD}:<code>0</code>. * <p/> * Note: this routine requires repository access. * * @param url * repository URL * @param paths * an array of paths relative to <code>url</code> * @param pegRevision * a revision in which <code>paths</code> are first looked up in * the repository * @param revisionRanges * collection of {@link SVNRevisionRange} objects * @param stopOnCopy * <span class="javakeyword">true</span> not to cross copies * while traversing history, otherwise copies history will be * also included into processing * @param discoverChangedPaths * <span class="javakeyword">true</span> to report of all changed * paths for every revision being processed (those paths will be * available by calling * {@link org.tmatesoft.svn.core.SVNLogEntry#getChangedPaths()}) * @param includeMergedRevisions * if <span class="javakeyword">true</span>, merged revisions * will be also reported * @param limit * a maximum number of log entries to be processed * @param revisionProperties * names of revision properties to retrieve * @param handler * a caller's log entry handler * @throws SVNException * @since 1.3, SVN 1.6 */ public void doLog(SVNURL url, String[] paths, SVNRevision pegRevision, Collection revisionRanges, boolean stopOnCopy, boolean discoverChangedPaths, boolean includeMergedRevisions, long limit, String[] revisionProperties, final ISVNLogEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Browses directory entries from a repository (using Working Copy paths to * get corresponding URLs) and uses the provided dir entry handler to * process them. * <p> * On every entry that this method stops it gets some useful entry * information which is packed into an * {@link org.tmatesoft.svn.core.SVNDirEntry}object and passed to the * <code>handler</code>'s * {@link org.tmatesoft.svn.core.ISVNDirEntryHandler#handleDirEntry(SVNDirEntry) * handleDirEntry()} method. * * @param path * a WC item to get its repository location * @param pegRevision * a revision in which the item's URL is first looked up * @param revision * a target revision * @param fetchLocks * <span class="javakeyword">true</span> to fetch locks * information from a repository * @param recursive * <span class="javakeyword">true</span> to descend recursively * (relevant for directories) * @param handler * a caller's directory entry handler (to process info on an * entry) * @throws SVNException * @deprecated use * {@link #doList(File,SVNRevision,SVNRevision,boolean,SVNDepth,int,ISVNDirEntryHandler)} * instead */ public void doList(File path, SVNRevision pegRevision, SVNRevision revision, boolean fetchLocks, boolean recursive, ISVNDirEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Reports the directory entry, and possibly children, for <code>path</code> * at <code>revision</code>. The actual node revision selected is determined * by the path as it exists in <code>pegRevision</code>. If * <code>pegRevision</code> is {@link SVNRevision#isValid() invalid}, then * it defaults to {@link SVNRevision#WORKING}. * <p/> * Reports directory entries by invoking <code>handler</code>, * {@link SVNDirEntry#setRelativePath(String) setting} a relative to * <code>path</code> path to the {@link SVNDirEntry} object. The directory * entry for <code>path</code> is reported using an empty path. If * <code>path</code> is a directory, also reports its children. * <p/> * If <code>depth</code> is {@link SVNDepth#EMPTY}, lists just * <code>path</code> itself. If <code>depth</code> is {@link SVNDepth#FILES} * , lists <code>path</code> and its file entries. If * {@link SVNDepth#IMMEDIATES}, lists its immediate file and directory * entries. If {@link SVNDepth#INFINITY}, lists file entries and recurses * (with {@link SVNDepth#INFINITY}) on directory entries. * <p/> * <code>entryFields</code> controls which fields in the {@link SVNDirEntry} * are filled in. To have them totally filled in use * {@link SVNDirEntry#DIRENT_ALL}, otherwise simply bitwise OR together the * combination of fields you care about. * <p/> * Note: this routine requires repository access. * * @param path * a WC item to get its repository location * @param pegRevision * a revision in which the item's URL is first looked up * @param revision * a target revision * @param fetchLocks * <span class="javakeyword">true</span>, includes locks when * reporting directory entries * @param depth * tree depth to process * @param entryFields * entry fields to fill * @param handler * a caller's directory entry handler (to process info on an * entry) * @throws SVNException * in the following cases: * <ul> * <li/>exception with {@link SVNErrorCode#FS_NOT_FOUND} error * code - if <code>path</code> is non-existent in the repository * <ul/> * @since 1.2, SVN 1.5 */ public void doList(File path, SVNRevision pegRevision, SVNRevision revision, boolean fetchLocks, SVNDepth depth, int entryFields, ISVNDirEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Browses directory entries from a repository (using Working Copy paths to * get corresponding URLs) and uses the provided dir entry handler to * process them. * <p> * On every entry that this method stops it gets some useful entry * information which is packed into an * {@link org.tmatesoft.svn.core.SVNDirEntry}object and passed to the * <code>handler</code>'s * {@link org.tmatesoft.svn.core.ISVNDirEntryHandler#handleDirEntry(SVNDirEntry) * handleDirEntry()} method. * * @param path * a WC item to get its repository location * @param pegRevision * a revision in which the item's URL is first looked up * @param revision * a target revision * @param recursive * <span class="javakeyword">true</span> to descend recursively * (relevant for directories) * @param handler * a caller's directory entry handler (to process info on an * entry) * @throws SVNException * @deprecated use * {@link #doList(File,SVNRevision,SVNRevision,boolean,SVNDepth,int,ISVNDirEntryHandler)} * instead */ public void doList(File path, SVNRevision pegRevision, SVNRevision revision, boolean recursive, ISVNDirEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Browses directory entries from a repository and uses the provided dir * entry handler to process them. This method is especially useful when * having no Working Copy. * <p> * On every entry that this method stops it gets some useful entry * information which is packed into an * {@link org.tmatesoft.svn.core.SVNDirEntry}object and passed to the * <code>handler</code>'s * {@link org.tmatesoft.svn.core.ISVNDirEntryHandler#handleDirEntry(SVNDirEntry) * handleDirEntry()} method. * * @param url * a repository location to be "listed" * @param pegRevision * a revision in which the item's URL is first looked up * @param revision * a target revision * @param fetchLocks * <span class="javakeyword">true</span> to fetch locks * information from repository * @param recursive * <span class="javakeyword">true</span> to descend recursively * (relevant for directories) * @param handler * a caller's directory entry handler (to process info on an * entry) * @throws SVNException * @see #doList(File,SVNRevision,SVNRevision,boolean,ISVNDirEntryHandler) */ public void doList(SVNURL url, SVNRevision pegRevision, SVNRevision revision, boolean fetchLocks, boolean recursive, ISVNDirEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Reports the directory entry, and possibly children, for <code>url</code> * at <code>revision</code>. The actual node revision selected is determined * by the path as it exists in <code>pegRevision</code>. If * <code>pegRevision</code> is {@link SVNRevision#isValid() invalid}, then * it defaults to {@link SVNRevision#HEAD}. * <p/> * Reports directory entries by invoking <code>handler</code>, * {@link SVNDirEntry#setRelativePath(String) setting} a relative to * <code>url</code> path to the {@link SVNDirEntry} object. The directory * entry for <code>url</code> is reported using an empty path. If * <code>url</code> is a directory, also reports its children. * <p/> * If <code>depth</code> is {@link SVNDepth#EMPTY}, lists just * <code>url</code> itself. If <code>depth</code> is {@link SVNDepth#FILES}, * lists <code>url</code> and its file entries. If * {@link SVNDepth#IMMEDIATES}, lists its immediate file and directory * entries. If {@link SVNDepth#INFINITY}, lists file entries and recurses * (with {@link SVNDepth#INFINITY}) on directory entries. * <p/> * <code>entryFields</code> controls which fields in the {@link SVNDirEntry} * are filled in. To have them totally filled in use * {@link SVNDirEntry#DIRENT_ALL}, otherwise simply bitwise OR together the * combination of fields you care about. * <p/> * Note: this routine requires repository access. * * @param url * a repository url to be "listed" * @param pegRevision * a revision in which the item's URL is first looked up * @param revision * a target revision * @param fetchLocks * <span class="javakeyword">true</span>, includes locks when * reporting directory entries * @param depth * tree depth to process * @param entryFields * entry fields to fill * @param handler * a caller's directory entry handler (to process info on an * entry) * @throws SVNException * in the following cases: * <ul> * <li/>exception with {@link SVNErrorCode#FS_NOT_FOUND} error * code - if <code>url</code> is non-existent in the repository * <ul/> * @since 1.2, SVN 1.5 */ public void doList(SVNURL url, SVNRevision pegRevision, SVNRevision revision, boolean fetchLocks, SVNDepth depth, int entryFields, ISVNDirEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } /** * Browses directory entries from a repository and uses the provided dir * entry handler to process them. This method is especially useful when * having no Working Copy. * <p> * On every entry that this method stops it gets some useful entry * information which is packed into an * {@link org.tmatesoft.svn.core.SVNDirEntry}object and passed to the * <code>handler</code>'s * {@link org.tmatesoft.svn.core.ISVNDirEntryHandler#handleDirEntry(SVNDirEntry) * handleDirEntry()} method. * * @param url * a repository location to be "listed" * @param pegRevision * a revision in which the item's URL is first looked up * @param revision * a target revision * @param recursive * <span class="javakeyword">true</span> to descend recursively * (relevant for directories) * @param handler * a caller's directory entry handler (to process info on an * entry) * @throws SVNException * @deprecated use * {@link #doList(SVNURL,SVNRevision,SVNRevision,boolean,SVNDepth,int,ISVNDirEntryHandler)} * instead */ public void doList(SVNURL url, SVNRevision pegRevision, SVNRevision revision, boolean recursive, ISVNDirEntryHandler handler) throws SVNException { SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.WC_UNSUPPORTED_FORMAT); SVNErrorManager.error(err, SVNLogType.CLIENT); } }