+
+ Writes the specified message to the result writer and appends a
+
+
+ Writes the progress message to the result writer
+ The default implementation calls with the specified message
+
+
+ Writes the specified message to the result writer
+
+
+ Subversion Client Context wrapper; base class of objects using client context
+
+
+
+ Extended Parameter container of and
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container of
+
+
+
+ originalPath and modifiedPath must live at least as long as pool
+
+
+ Gets the of the command
+
+
+ Gets the of the command
+
+
+ Gets or sets a replacement for the conflict separator (null is use original)
+
+
+ Gets or sets a replacement for the Conflict latest line (null is use original)
+
+
+ Gets or sets a replacement for the Conflict modified line (null is use original)
+
+
+ Gets or sets a replacement for the Ancestor Path (null is use original)
+
+
+ Gets or sets a replacement for the Latest Path (null is use original)
+
+
+ Gets or sets a replacement for the Modified Path (null is use original)
+
+
+ Gets or sets a replacement for the Original Path (null is use original)
+
+
+ Gets the of the command
+
+
+ Like svn_diff_conflict_display_modified_original_latest, but
+*only* showing conflicts.
+
+
+ Just display latest, with no markers.
+
+
+ Just display modified, with no markers.
+
+
+ Display modified, original, and latest, with conflict markers.
+
+
+ Like svn_diff_conflict_display_modified_latest, but with an
+extra effort to identify common sequences between modified and
+latest.
+
+
+ Display modified and latest, with conflict markers
+
+
+ Creates the comparer used to compare the tokens. Defaults to Comparer<TToken>::Default
+
+
+ Gets the comparer used to compare the tokens
+ The instance returned is creatd by
+
+
+ Gets a boolean indicating whether the merge result contains differences
+
+
+ Gets a boolean indicating whether the merge result contains conflicts
+
+
+ Extended Parameter container of and
+
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of 's GetSuggestedMergeSources method
+
+
+
+ Gets or sets the blame range as
+
+
+ Extended Parameter container for SvnClient.Blame
+
+
+
+ Extended Parameter container for SvnClient.List
+
+
+
+ Extended Parameter container of 's RecoverRepository method
+
+
+
+ Extended Parameter container of 's GetAppliedMergeInfo method
+
+
+
+ Gets or sets a boolean indicating whether to retrieve real property
+and content changes. If set to false only marker changes are sent. (Changes on ""
+property and empty file deltas
+
+
+ Gets or sets the maximum version the client knows about. Deltas will be
+based on this version
+
+
+ Extended Parameter container of .ReplayRevision
+
+
+
+ Gets or sets a boolean that if set to true tells copy not to process
+externals definitions as part of this operation.
+
+
+ Always copies the result to below the target (this behaviour is always used if multiple targets are provided)
+
+
+ Creates parent directories if required
+
+
+ Extended Parameter container of SvnClient.Copy(SvnTarget^,String^,SvnCopyArgs^)" /> and
+
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container of
+
+
+
+ Gets the list of changelist-names
+
+
+ Gets or sets a boolean indicating whether externals should be ignored
+
+If IgnoreExternals is not set, then recurse into externals
+definitions (if any exist) after handling the main target. This
+calls the client notification function (in @a ctx) with the @c
+svn_wc_notify_status_external action before handling each externals
+definition, and with @c svn_wc_notify_status_completed
+after each.
+
+
+
+ Gets or sets a boolean indicating whether ignored files should be retrieved
+ If RetrieveIgnoredEntries is set add files or directories that match ignore patterns.
+
+
+ Gets or sets a boolean indicating whether the repository should be contacted to retrieve aut of date information
+
+If Update is set, contact the repository and augment the
+status structures with information about out-of-dateness (with
+respect to @a revision). Also, if @a result_rev is not @c NULL,
+set @a *result_rev to the actual revision against which the
+working copy was compared (result_rev is not meaningful unless
+update is set
+
+
+
+ Gets or sets a boolean indicating whether all status properties should be retrieved
+
+If @a get_all is set, retrieve all entries; otherwise,
+retrieve only "interesting" entries (local mods and/or
+out of date
+
+
+
+ Extended Parameter container for SvnClient.Status
+
+
+
+
+If TRUE, recurse up path's directory and look for
+a versioned directory. If found, add all intermediate paths between it
+and path. If not found, fail with SVN_ERR_CLIENT_NO_VERSIONED_PARENTS.
+
+
+
+ If force is not set and path is already under version control, return the error
+SVN_ERR_ENTRY_EXISTS. If force is set, do not error on already-versioned items. When used
+on a directory in conjunction with the recursive flag, this has the effect of scheduling
+for addition unversioned files and directories scattered deep within a versioned tree.
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of 's CreateRepository method
+
+
+
+ Gets the list of changelist-names to commit
+
+
+ Extended Parameter container of
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container of 's GetProperty
+
+
+
+An @a entry was found at @a path.
+
+
+ Gets the of the command
+
+
+ The depth to walk for entries; reeds all entries in path when depth is unknown (default)
+
+
+ Gets or sets a boolean indicating whether to return deleted or absent entries
+
+
+ Creates parent directories if required
+
+
+ Extended Parameter container of and
+
+
+
+
+ Extended Parameter container of 's DeleteRepository method
+
+
+
+ Extended Parameter container of and
+
+
+
+ Formats a DateTime in Subversions string format
+
+
+ Tries to parse a Svn property into a value
+
+
+ Gets a list of TortoiseSvn defined directory properties, which are applied recursively on all directories below the set root
+
+
+
+Properties whose values are interpreted as booleans (such as
+svn:executable, svn:needs_lock, and svn:special) always fold their
+value to this.
+
+
+
+ All Subversion property names start with this
+
+
+ Gets a list of TortoiseSvn defined directory properties, which are applied recursively on all directories below the set root
+
+
+ A full combination of the first four keywords.
+
+
+ A compressed combination of the other four keywords.
+
+
+ Short version of HeadURL
+
+
+ The URL for the head revision of this file.
+
+
+ Short version of LastChangedBy
+
+
+ Who most recently committed to this file.
+
+
+ Short version of LastChangedDate
+
+
+ The most recent date (repository time) when this file was changed.
+
+
+ Medium version of LastChangedRevision, matching the one CVS uses
+
+
+ Short version of LastChangedRevision
+
+
+ The most recent revision in which this file was changed
+
+
+ The maximum size of an expanded or un-expanded keyword.
+
+
+ Extended Parameter container of
+
+
+
+
+ Looks up a localized string similar to The value {0} is not a valid {1}.
+
+
+
+
+ Looks up a localized string similar to The passed Uri is not absolute.
+
+
+
+
+ Looks up a localized string similar to The specified target is not a valid Uri target.
+
+
+
+
+ Looks up a localized string similar to The specified target is not a value Uri or Path target.
+
+
+
+
+ Looks up a localized string similar to The specified target is not a valid Path target.
+
+
+
+
+ Looks up a localized string similar to The passed target must contain an explicit revision.
+
+
+
+
+ Looks up a localized string similar to Subversion reported a malfunction '{0}' on line {2} of '{1}'..
+
+
+
+
+ Looks up a localized string similar to Svn operation in progress; an SvnClient instance can handle only one command at a time.
+
+
+
+
+ Looks up a localized string similar to This function is not available from managed code. .
+
+
+
+
+ Looks up a localized string similar to Revision type must be head, date or a specific revision number.
+
+
+
+
+ Looks up a localized string similar to The Working revision type is not supported here.
+
+
+
+
+ Looks up a localized string similar to Revision number must be at least 0.
+
+
+
+
+ Looks up a localized string similar to Revision must be >= 0.
+
+
+
+
+ Looks up a localized string similar to Property name is not valid.
+
+
+
+
+ Looks up a localized string similar to Please restart this application before continuing.\n\nStack trace:\n{0}.
+
+
+
+
+ Looks up a localized string similar to Paths with a length above MAX_PATH (like '{0}') must be rooted..
+
+
+
+
+ Looks up a localized string similar to Path '{0}' contains invalid characters.
+
+
+
+
+ Looks up a localized string similar to The number of elements in the paths collection does not match the number in revisions.
+
+
+
+
+ Looks up a localized string similar to '{0}' unlocked..
+
+
+
+
+ Looks up a localized string similar to '{0}' locked by user '{1}'..
+
+
+
+
+ Looks up a localized string similar to Updated to revision {0}..
+
+
+
+
+ Looks up a localized string similar to Updated external to revision {0}..
+
+
+
+
+ Looks up a localized string similar to Transmitting file data.
+
+
+
+
+ Looks up a localized string similar to Status against revision: {0}.
+
+
+
+
+ Looks up a localized string similar to Skipped missing '{0}'.
+
+
+
+
+ Looks up a localized string similar to Skipped missing target '{0}'.
+
+
+
+
+ Looks up a localized string similar to Reverted '{0}'.
+
+
+
+
+ Looks up a localized string similar to --- Reverse-merging r{0} through r{1} into '{2}':.
+
+
+
+
+ Looks up a localized string similar to --- Reverse-merging r{0} into '{1}':.
+
+
+
+
+ Looks up a localized string similar to Restored '{0}'.
+
+
+
+
+ Looks up a localized string similar to Resolved conflicted state of '{0}'.
+
+
+
+
+ Looks up a localized string similar to Performing status on external item at '{0}'.
+
+
+
+
+ Looks up a localized string similar to Path '{0}' is now a member of change list '{1}'..
+
+
+
+
+ Looks up a localized string similar to Path '{0}' is no longer a member of a change list..
+
+
+
+
+ Looks up a localized string similar to --- Merging r{0} through r{1} into '{2}':.
+
+
+
+
+ Looks up a localized string similar to --- Merging r{0} into '{1}':.
+
+
+
+
+ Looks up a localized string similar to --- Merging differences between repository URLs into '{0}':.
+
+
+
+
+ Looks up a localized string similar to Fetching external item into '{0}'.
+
+
+
+
+ Looks up a localized string similar to Failed to revert '{0}' -- try updating instead.
+
+
+
+
+ Looks up a localized string similar to External at revision {0}..
+
+
+
+
+ Looks up a localized string similar to Exported revision {0}..
+
+
+
+
+ Looks up a localized string similar to Exported external at revision {0}..
+
+
+
+
+ Looks up a localized string similar to Checked out revision {0}..
+
+
+
+
+ Looks up a localized string similar to Checked out external at revision {0}..
+
+
+
+
+ Looks up a localized string similar to At revision {0}..
+
+
+
+
+ Looks up a localized string similar to {This line does contain non-Utf8 characters}.
+
+
+
+
+ Looks up a localized string similar to The loading of the subversion mime mapping file failed.
+
+
+
+
+ Looks up a localized string similar to One or more items in the list are null.
+
+
+
+
+ Looks up a localized string similar to The IO Thread Blocked -- Do you have a deadlock?.
+
+
+
+
+ Looks up a localized string similar to Invalid Uri string.
+
+
+
+
+ Looks up a localized string similar to Invalid SvnRevisionType value specified.
+
+
+
+
+ Looks up a localized string similar to Invalid character in client name.
+
+
+
+
+ Looks up a localized string similar to The handler is not registered at this time.
+
+
+
+
+ Looks up a localized string similar to File '{0}' not found.
+
+
+
+
+ Looks up a localized string similar to A fatal error occurred within the subversion API - (Use Ctrl+C to copy message).
+
+
+
+
+ Looks up a localized string similar to Depth must be Empty, Files or Infinity in 1.4 compatible compilation.
+
+
+
+
+ Looks up a localized string similar to You can only crop a node to a depth between empty and files..
+
+
+
+
+ Looks up a localized string similar to The collection must at least contain one item.
+
+
+
+
+ Looks up a localized string similar to The argument must be a valid absolute repository Uri.
+
+
+
+
+ Looks up a localized string similar to This argument is not a valid path. A Uri was specified.
+
+
+
+
+ Looks up a localized string similar to All provided Uri's must be on the same server.
+
+
+
+
+ Looks up a localized string similar to All targets must either be Uri or Path.
+
+
+
+
+ Overrides the current thread's CurrentUICulture property for all
+ resource lookups using this strongly typed resource class.
+
+
+
+
+ Returns the cached ResourceManager instance used by this class.
+
+
+
+
+ A strongly-typed resource class, for looking up localized strings, etc.
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_io.h
+ @brief General file I/O for Subversion
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2006-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_mergeinfo.h
+ @brief mergeinfo handling and processing
+
+
+
+ Possibly update the filesystem located in the directory @a path
+ to use disk space more efficiently.
+
+ @since New in 1.6.
+
+
+
+The type of a pack notification function. @a shard is the shard being
+ * acted upon; @a action is the type of action being performed. @a baton is
+ * the corresponding baton for the notification function, and @a pool can
+ * be used for temporary allocations, but will be cleared between invocations.
+
+
+
+packing of the shard is completed
+
+
+packing of the shard has commenced
+
+
+@}
+ Append a textual list of all available FS modules to the stringbuf
+ @a output.
+
+ @since New in 1.2.
+
+
+
+Report locks on or below @a path in @a fs using the @a
+ * get_locks_func / @a get_locks_baton. Use @a pool for necessary
+ * allocations.
+ *
+ * If the @a get_locks_func callback implementation returns an error,
+ * lock iteration will terminate and that error will be returned by
+ * this function.
+
+
+
+The type of a lock discovery callback function. @a baton is the
+ * value specified in the call to svn_fs_get_locks(); the filesystem
+ * passes it through to the callback. @a lock is a lock structure.
+ * @a pool is a temporary subpool for use by the callback
+ * implementation -- it is cleared after invocation of the callback.
+
+
+
+If @a path is locked in @a fs, set @a *lock to an svn_lock_t which
+ * represents the lock, allocated in @a pool.
+ *
+ * If @a path is not locked, set @a *lock to NULL.
+
+
+
+Remove the lock on @a path represented by @a token in @a fs.
+ *
+ * If @a token doesn't point to a lock, return @c SVN_ERR_FS_BAD_LOCK_TOKEN.
+ * If @a token points to an expired lock, return @c SVN_ERR_FS_LOCK_EXPIRED.
+ * If @a fs has no username associated with it, return @c SVN_ERR_FS_NO_USER
+ * unless @a break_lock is specified.
+ *
+ * If @a token points to a lock, but the username of @a fs's access
+ * context doesn't match the lock's owner, return @c
+ * SVN_ERR_FS_LOCK_OWNER_MISMATCH. If @a break_lock is TRUE, however, don't
+ * return error; allow the lock to be "broken" in any case. In the latter
+ * case, @a token shall be @c NULL.
+ *
+ * Use @a pool for temporary allocations.
+
+
+
+Generate a unique lock-token using @a fs. Return in @a *token,
+ * allocated in @a pool.
+ *
+ * This can be used in to populate lock->token before calling
+ * svn_fs_attach_lock().
+
+
+
+@defgroup svn_fs_locks Filesystem locks
+ * @{
+ * @since New in 1.2.
+A lock represents one user's exclusive right to modify a path in a
+ * filesystem. In order to create or destroy a lock, a username must
+ * be associated with the filesystem's access context (see @c
+ * svn_fs_access_t).
+ *
+ * When a lock is created, a 'lock-token' is returned. The lock-token
+ * is a unique URI that represents the lock (treated as an opaque
+ * string by the client), and is required to make further use of the
+ * lock (including removal of the lock.) A lock-token can also be
+ * queried to return a svn_lock_t structure that describes the details
+ * of the lock. lock-tokens must not contain any newline character,
+ * mainly due to the serialization for tokens for pre-commit hook.
+ *
+ * Locks are not secret; anyone can view existing locks in a
+ * filesystem. Locks are not omnipotent: they can broken and stolen
+ * by people who don't "own" the lock. (Though admins can tailor a
+ * custom break/steal policy via libsvn_repos pre-lock hook script.)
+ *
+ * Locks can be created with an optional expiration date. If a lock
+ * has an expiration date, then the act of fetching/reading it might
+ * cause it to automatically expire, returning either nothing or an
+ * expiration error (depending on the API).
+
+Lock @a path in @a fs, and set @a *lock to a lock
+ * representing the new lock, allocated in @a pool.
+ *
+ * @warning You may prefer to use svn_repos_fs_lock() instead,
+ * which see.
+ *
+ * @a fs must have a username associated with it (see @c
+ * svn_fs_access_t), else return @c SVN_ERR_FS_NO_USER. Set the
+ * 'owner' field in the new lock to the fs username.
+ *
+ * @a comment is optional: it's either an xml-escapable UTF8 string
+ * which describes the lock, or it is @c NULL.
+ *
+ * @a is_dav_comment describes whether the comment was created by a
+ * generic DAV client; only mod_dav_svn's autoversioning feature needs
+ * to use it. If in doubt, pass 0.
+ *
+ * If path is already locked, then return @c SVN_ERR_FS_PATH_ALREADY_LOCKED,
+ * unless @a steal_lock is TRUE, in which case "steal" the existing
+ * lock, even if the FS access-context's username does not match the
+ * current lock's owner: delete the existing lock on @a path, and
+ * create a new one.
+ *
+ * @a token is a lock token such as can be generated using
+ * svn_fs_generate_lock_token() (indicating that the caller wants to
+ * dictate the lock token used), or it is @c NULL (indicating that the
+ * caller wishes to have a new token generated by this function). If
+ * @a token is not @c NULL, and represents an existing lock, then @a
+ * path must match the path associated with that existing lock.
+ *
+ * If @a expiration_date is zero, then create a non-expiring lock.
+ * Else, the lock will expire at @a expiration_date.
+ *
+ * If @a current_rev is a valid revnum, then do an out-of-dateness
+ * check. If the revnum is less than the last-changed-revision of @a
+ * path (or if @a path doesn't exist in HEAD), return @c
+ * SVN_ERR_FS_OUT_OF_DATE.
+ *
+ * @note At this time, only files can be locked.
+
+
+
+If not @c NULL, associate @a *uuid with @a fs. Otherwise (if @a
+ * uuid is @c NULL), generate a new UUID for @a fs. Use @a pool for
+ * any scratchwork.
+
+
+
+Populate @a *uuid with the UUID associated with @a fs. Allocate
+ @a *uuid in @a pool.
+
+
+Set @a *stream_p to a pointer to a delta stream that will turn the
+ * contents of the file @a source into the contents of the file @a target.
+ * If @a source_root is zero, use a file with zero length as the source.
+ *
+ * This function does not compare the two files' properties.
+ *
+ * Allocate @a *stream_p, and do any necessary temporary allocation, in
+ * @a pool.
+
+
+
+Change a revision's property's value, or add/delete a property.
+ *
+ * - @a fs is a filesystem, and @a rev is the revision in that filesystem
+ * whose property should change.
+ * - @a name is the name of the property to change.
+ * - @a value is the new value of the property, or zero if the property should
+ * be removed altogether.
+ *
+ * Note that revision properties are non-historied --- you can change
+ * them after the revision has been committed. They are not protected
+ * via transactions.
+ *
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Set @a *table_p to the entire property list of revision @a rev in
+ * filesystem @a fs, as an APR hash table allocated in @a pool. The table
+ * maps char * property names to @c svn_string_t * values; the names
+ * and values are allocated in @a pool.
+
+
+
+Set @a *value_p to the value of the property named @a propname on
+ * revision @a rev in the filesystem @a fs. If @a rev has no property by
+ * that name, set @a *value_p to zero. Allocate the result in @a pool.
+
+
+
+Provide filesystem @a fs the opportunity to compress storage relating to
+ * associated with @a revision in filesystem @a fs. Use @a pool for all
+ * allocations.
+ *
+ * @note This can be a time-consuming process, depending the breadth
+ * of the changes made in @a revision, and the depth of the history of
+ * those changed paths. This may also be a no op.
+
+
+
+Set @a *youngest_p to the number of the youngest revision in filesystem
+ * @a fs. Use @a pool for all temporary allocation.
+ *
+ * The oldest revision in any filesystem is numbered zero.
+
+
+
+Check if the contents of two root/path combos have changed.
+ *
+ * Set @a *changed_p to 1 if the contents at @a path1 under @a root1 differ
+ * from those at @a path2 under @a root2, or set it to 0 if they are the
+ * same. Both paths must exist under their respective roots, and both
+ * roots must be in the same filesystem.
+
+
+
+Write data directly to the file @a path in @a root. @a root must be the
+ * root of a transaction, not a revision.
+ *
+ * Set @a *contents_p to a stream ready to receive full textual data.
+ * When the caller closes this stream, the data replaces the previous
+ * contents of the file. The caller must write all file data and close
+ * the stream before making further changes to the transaction.
+ *
+ * If @a path does not exist in @a root, return an error. (You cannot use
+ * this routine to create new files; use svn_fs_make_file() to create
+ * an empty file first.)
+ *
+ * @a result_checksum is the hex MD5 digest for the final fulltext
+ * written to the stream. It is ignored if NULL, but if not null, it
+ * must match the checksum of the result; if it does not, then the @a
+ * *contents_p call which detects the mismatch will return the error
+ * @c SVN_ERR_CHECKSUM_MISMATCH.
+ *
+ * Do any necessary temporary allocation in @a pool.
+ *
+ * ### This is like svn_fs_apply_textdelta(), but takes the text
+ * straight. It is currently used only by the loader, see
+ * libsvn_repos/load.c. It should accept a checksum, of course, which
+ * would come from an (optional) header in the dump file. See
+ * http://subversion.tigris.org/issues/show_bug.cgi?id=1102 for more.
+
+
+
+Apply a text delta to the file @a path in @a root. @a root must be the
+ * root of a transaction, not a revision.
+ *
+ * Set @a *contents_p to a function ready to receive text delta windows
+ * describing how to change the file's contents, relative to its
+ * current contents. Set @a *contents_baton_p to a baton to pass to
+ * @a *contents_p.
+ *
+ * If @a path does not exist in @a root, return an error. (You cannot use
+ * this routine to create new files; use svn_fs_make_file() to create
+ * an empty file first.)
+ *
+ * @a base_checksum is the hex MD5 digest for the base text against
+ * which the delta is to be applied; it is ignored if NULL, and may be
+ * ignored even if not NULL. If it is not ignored, it must match the
+ * checksum of the base text against which svndiff data is being
+ * applied; if not, svn_fs_apply_textdelta() or the @a *contents_p call
+ * which detects the mismatch will return the error
+ * @c SVN_ERR_CHECKSUM_MISMATCH (if there is no base text, there may
+ * still be an error if @a base_checksum is neither NULL nor the
+ * checksum of the empty string).
+ *
+ * @a result_checksum is the hex MD5 digest for the fulltext that
+ * results from this delta application. It is ignored if NULL, but if
+ * not NULL, it must match the checksum of the result; if it does not,
+ * then the @a *contents_p call which detects the mismatch will return
+ * the error @c SVN_ERR_CHECKSUM_MISMATCH.
+ *
+ * The caller must send all delta windows including the terminating
+ * NULL window to @a *contents_p before making further changes to the
+ * transaction.
+ *
+ * Do temporary allocation in @a pool.
+
+
+
+Create a new file named @a path in @a root. The file's initial contents
+ * are the empty string, and it has no properties. @a root must be the
+ * root of a transaction, not a revision.
+ *
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Set @a *contents to a readable generic stream that will yield the
+ * contents of the file @a path in @a root. Allocate the stream in
+ * @a pool. You can only use @a *contents for as long as the underlying
+ * filesystem is open. If @a path is not a file, return
+ * @c SVN_ERR_FS_NOT_FILE.
+ *
+ * If @a root is the root of a transaction, it is possible that the
+ * contents of the file @a path will change between calls to
+ * svn_fs_file_contents(). In that case, the result of reading from
+ * @a *contents is undefined.
+ *
+ * ### @todo kff: I am worried about lifetime issues with this pool vs
+ * the trail created farther down the call stack. Trace this function
+ * to investigate...
+
+
+
+ Same as svn_fs_file_checksum(), only always put the MD5 checksum of file
+ @a path into @a digest, which should point to @c APR_MD5_DIGESTSIZE bytes
+ of storage. If the checksum doesn't exist, put all 0's into @a digest.
+
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+Set @a *checksum to the checksum of type @a kind for the file @a path.
+ * @a *checksum will be allocated out of @a pool, which will also be used
+ * for temporary allocations.
+ *
+ * If the filesystem does not have a prerecorded checksum of @a kind for
+ * @a path, and @a force is not TRUE, do not calculate a checksum
+ * dynamically, just put NULL into @a checksum. (By convention, the NULL
+ * checksum is considered to match any checksum.)
+ *
+ * Notes:
+ *
+ * You might wonder, why do we only provide this interface for file
+ * contents, and not for properties or directories?
+ *
+ * The answer is that property lists and directory entry lists are
+ * essentially data structures, not text. We serialize them for
+ * transmission, but there is no guarantee that the consumer will
+ * parse them into the same form, or even the same order, as the
+ * producer. It's difficult to find a checksumming method that
+ * reaches the same result given such variation in input. (I suppose
+ * we could calculate an independent MD5 sum for each propname and
+ * value, and XOR them together; same with directory entry names.
+ * Maybe that's the solution?) Anyway, for now we punt. The most
+ * important data, and the only data that goes through svndiff
+ * processing, is file contents, so that's what we provide
+ * checksumming for.
+ *
+ * Internally, of course, the filesystem checksums everything, because
+ * it has access to the lowest level storage forms: strings behind
+ * representations.
+ *
+ * @since New in 1.6.
+
+
+
+Set @a *length_p to the length of the file @a path in @a root, in bytes.
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Like svn_fs_copy(), but doesn't record copy history, and preserves
+ * the PATH. You cannot use svn_fs_copied_from() later to find out
+ * where this copy came from.
+ *
+ * Use svn_fs_revision_link() in situations where you don't care
+ * about the copy history, and where @a to_path and @a from_path are
+ * the same, because it is cheaper than svn_fs_copy().
+
+
+
+Create a copy of @a from_path in @a from_root named @a to_path in
+ * @a to_root. If @a from_path in @a from_root is a directory, copy the
+ * tree it refers to recursively.
+ *
+ * The copy will remember its source; use svn_fs_copied_from() to
+ * access this information.
+ *
+ * @a to_root must be the root of a transaction; @a from_root must be the
+ * root of a revision. (Requiring @a from_root to be the root of a
+ * revision makes the implementation trivial: there is no detectable
+ * difference (modulo node revision ID's) between copying @a from and
+ * simply adding a reference to it. So the operation takes place in
+ * constant time. However, there's no reason not to extend this to
+ * mutable nodes --- it's just more code.) Further, @a to_root and @a
+ * from_root must represent the same filesystem.
+ *
+ * @note To do a copy without preserving copy history, use
+ * svn_fs_revision_link().
+ *
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Delete the node named @a path in @a root. If the node being deleted is
+ * a directory, its contents will be deleted recursively. @a root must be
+ * the root of a transaction, not of a revision. Use @a pool for
+ * temporary allocation.
+ *
+ * This function may be more efficient than making the equivalent
+ * series of calls to svn_fs_delete(), because it takes advantage of the
+ * fact that, to delete an immutable subtree, shared with some
+ * committed revision, you need only remove the directory entry. The
+ * dumb algorithm would recurse into the subtree and end up cloning
+ * each non-empty directory it contains, only to delete it later.
+ *
+ * If return @c SVN_ERR_FS_NO_SUCH_ENTRY, then the basename of @a path is
+ * missing from its parent, that is, the final target of the deletion
+ * is missing.
+ *
+ * Attempting to remove the root dir also results in an error,
+ * @c SVN_ERR_FS_ROOT_DIR, even if the dir is empty.
+
+
+
+Create a new directory named @a path in @a root. The new directory has
+ * no entries, and no properties. @a root must be the root of a transaction,
+ * not a revision.
+ *
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Set @a *entries_p to a newly allocated APR hash table containing the
+ * entries of the directory at @a path in @a root. The keys of the table
+ * are entry names, as byte strings, excluding the final NULL
+ * character; the table's values are pointers to @c svn_fs_dirent_t
+ * structures. Allocate the table and its contents in @a pool.
+
+
+
+The node kind.
+
+
+The node revision ID it names.
+
+
+The name of this directory entry.
+
+
+The type of a Subversion directory entry.
+
+
+Merge changes between two nodes into a third node.
+ *
+ * Given nodes @a source and @a target, and a common ancestor @a ancestor,
+ * modify @a target to contain all the changes made between @a ancestor and
+ * @a source, as well as the changes made between @a ancestor and @a target.
+ * @a target_root must be the root of a transaction, not a revision.
+ *
+ * @a source, @a target, and @a ancestor are generally directories; this
+ * function recursively merges the directories' contents. If they are
+ * files, this function simply returns an error whenever @a source,
+ * @a target, and @a ancestor are all distinct node revisions.
+ *
+ * If there are differences between @a ancestor and @a source that conflict
+ * with changes between @a ancestor and @a target, this function returns an
+ * @c SVN_ERR_FS_CONFLICT error.
+ *
+ * If the merge is successful, @a target is left in the merged state, and
+ * the base root of @a target's txn is set to the root node of @a source.
+ * If an error is returned (whether for conflict or otherwise), @a target
+ * is left unaffected.
+ *
+ * If @a conflict_p is non-NULL, then: a conflict error sets @a *conflict_p
+ * to the name of the node in @a target which couldn't be merged,
+ * otherwise, success sets @a *conflict_p to NULL.
+ *
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Retrieve mergeinfo for multiple nodes.
+ *
+ * @a *catalog is a catalog for @a paths. It will never be @c NULL,
+ * but may be empty.
+ *
+ * @a root is revision root to use when looking up paths.
+ *
+ * @a paths are the paths you are requesting information for.
+ *
+ * @a inherit indicates whether to retrieve explicit,
+ * explicit-or-inherited, or only inherited mergeinfo.
+ *
+ * If @a include_descendants is TRUE, then additionally return the
+ * mergeinfo for any descendant of any element of @a paths which has
+ * the @c SVN_PROP_MERGEINFO property explicitly set on it. (Note
+ * that inheritance is only taken into account for the elements in @a
+ * paths; descendants of the elements in @a paths which get their
+ * mergeinfo via inheritance are not included in @a *mergeoutput.)
+ *
+ * Do any necessary temporary allocation in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Set @a *root_p and @a *path_p to the revision root and path of the
+ * destination of the most recent copy event that caused @a path to
+ * exist where it does in @a root, or to NULL if no such copy exists.
+ * When non-NULL, allocate @a *root_p and @a *path_p in @a pool.
+ *
+ * @a *path_p might be a parent of @a path, rather than @a path
+ * itself. However, it will always be the deepest relevant path.
+ * That is, if a copy occurs underneath another copy in the same txn,
+ * this function makes sure to set @a *path_p to the longest copy
+ * destination path that is still a parent of or equal to @a path.
+ *
+ * @since New in 1.3.
+
+
+
+Discover a node's copy ancestry, if any.
+ *
+ * If the node at @a path in @a root was copied from some other node, set
+ * @a *rev_p and @a *path_p to the revision and path of the other node,
+ * allocating @a *path_p in @a pool.
+ *
+ * Else if there is no copy ancestry for the node, set @a *rev_p to
+ * @c SVN_INVALID_REVNUM and @a *path_p to NULL.
+ *
+ * If an error is returned, the values of @a *rev_p and @a *path_p are
+ * undefined, but otherwise, if one of them is set as described above,
+ * you may assume the other is set correspondingly.
+ *
+ * @a root may be a revision root or a transaction root.
+ *
+ * Notes:
+ * - Copy ancestry does not descend. After copying directory D to
+ * E, E will have copy ancestry referring to D, but E's children
+ * may not. See also svn_fs_copy().
+ *
+ * - Copy ancestry *under* a copy is preserved. That is, if you
+ * copy /A/D/G/pi to /A/D/G/pi2, and then copy /A/D/G to /G, then
+ * /G/pi2 will still have copy ancestry pointing to /A/D/G/pi.
+ * We don't know if this is a feature or a bug yet; if it turns
+ * out to be a bug, then the fix is to make svn_fs_copied_from()
+ * observe the following logic, which currently callers may
+ * choose to follow themselves: if node X has copy history, but
+ * its ancestor A also has copy history, then you may ignore X's
+ * history if X's revision-of-origin is earlier than A's --
+ * because that would mean that X's copy history was preserved in
+ * a copy-under-a-copy scenario. If X's revision-of-origin is
+ * the same as A's, then it was copied under A during the same
+ * transaction that created A. (X's revision-of-origin cannot be
+ * greater than A's, if X has copy history.) @todo See how
+ * people like this, it can always be hidden behind the curtain
+ * if necessary.
+ *
+ * - Copy ancestry is not stored as a regular subversion property
+ * because it is not inherited. Copying foo to bar results in a
+ * revision of bar with copy ancestry; but committing a text
+ * change to bar right after that results in a new revision of
+ * bar without copy ancestry.
+
+
+
+Determine if the properties of two path/root combinations are different.
+ *
+ * Set @a *changed_p to 1 if the properties at @a path1 under @a root1 differ
+ * from those at @a path2 under @a root2, or set it to 0 if they are the
+ * same. Both paths must exist under their respective roots, and both
+ * roots must be in the same filesystem.
+
+
+
+Change a node's property's value, or add/delete a property.
+ *
+ * - @a root and @a path indicate the node whose property should change.
+ * @a root must be the root of a transaction, not the root of a revision.
+ * - @a name is the name of the property to change.
+ * - @a value is the new value of the property, or zero if the property should
+ * be removed altogether.
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Set @a *table_p to the entire property list of @a path in @a root,
+ * as an APR hash table allocated in @a pool. The resulting table maps
+ * property names to pointers to @c svn_string_t objects containing the
+ * property value.
+
+
+
+Set @a *value_p to the value of the property named @a propname of
+ * @a path in @a root. If the node has no property by that name, set
+ * @a *value_p to zero. Allocate the result in @a pool.
+
+
+
+Set @a *created_path to the path at which @a path under @a root was
+ * created. Use @a pool for all allocations. Callers may use this
+ * function in conjunction with svn_fs_node_created_rev() to perform a
+ * reverse lookup of the mapping of (path, revision) -> node-id that
+ * svn_fs_node_id() performs.
+
+
+
+Set @a *revision to the revision in which the line of history
+ * represented by @a path under @a root originated. Use @a pool for
+ * any temporary allocations. If @a root is a transaction root, @a
+ * *revision will be set to @c SVN_INVALID_REVNUM for any nodes newly
+ * added in that transaction (brand new files or directories created
+ * using @c svn_fs_make_dir or @c svn_fs_make_file).
+ *
+ * @since New in 1.5.
+
+
+
+Set @a *revision to the revision in which @a path under @a root was
+ * created. Use @a pool for any temporary allocations. @a *revision will
+ * be set to @c SVN_INVALID_REVNUM for uncommitted nodes (i.e. modified nodes
+ * under a transaction root). Note that the root of an unmodified transaction
+ * is not itself considered to be modified; in that case, return the revision
+ * upon which the transaction was based.
+
+
+
+Get the id of a node.
+ *
+ * Set @a *id_p to the node revision ID of @a path in @a root, allocated in
+ * @a pool.
+ *
+ * If @a root is the root of a transaction, keep in mind that other
+ * changes to the transaction can change which node @a path refers to,
+ * and even whether the path exists at all.
+
+
+
+Set @a *is_file to @c TRUE iff @a path in @a root is a file.
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Set @a *is_dir to @c TRUE iff @a path in @a root is a directory.
+ * Do any necessary temporary allocation in @a pool.
+
+
+
+Set @a *path and @a *revision to the path and revision,
+ * respectively, of the @a history object. Use @a pool for all
+ * allocations.
+
+
+
+Set @a *prev_history_p to an opaque node history object which
+ * represents the previous (or "next oldest") interesting history
+ * location for the filesystem node represented by @a history, or @c
+ * NULL if no such previous history exists. If @a cross_copies is @c
+ * FALSE, also return @c NULL if stepping backwards in history to @a
+ * *prev_history_p would cross a filesystem copy operation.
+ *
+ * @note If this is the first call to svn_fs_history_prev() for the @a
+ * history object, it could return a history object whose location is
+ * the same as the original. This will happen if the original
+ * location was an interesting one (where the node was modified, or
+ * took place in a copy event). This behavior allows looping callers
+ * to avoid the calling svn_fs_history_location() on the object
+ * returned by svn_fs_node_history(), and instead go ahead and begin
+ * calling svn_fs_history_prev().
+ *
+ * @note This function uses node-id ancestry alone to determine
+ * modifiedness, and therefore does NOT claim that in any of the
+ * returned revisions file contents changed, properties changed,
+ * directory entries lists changed, etc.
+ *
+ * @note The revisions returned for @a path will be older than or
+ * the same age as the revision of that path in @a root. That is, if
+ * @a root is a revision root based on revision X, and @a path was
+ * modified in some revision(s) younger than X, those revisions
+ * younger than X will not be included for @a path.
+
+
+Set @a *history_p to an opaque node history object which
+ * represents @a path under @a root. @a root must be a revision root.
+ * Use @a pool for all allocations.
+
+
+
+An opaque node history object.
+
+
+@}
+Set @a *kind_p to the type of node present at @a path under @a
+ * root. If @a path does not exist under @a root, set @a *kind_p to @c
+ * svn_node_none. Use @a pool for temporary allocation.
+
+
+
+Same as svn_fs_paths_changed2(), only with @c svn_fs_path_change_t * values
+ * in the hash (and thus no kind or copyfrom data).
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+Determine what has changed under a @a root.
+ *
+ * Allocate and return a hash @a *changed_paths_p containing descriptions
+ * of the paths changed under @a root. The hash is keyed with
+ * const char * paths, and has @c svn_fs_path_change2_t * values.
+ *
+ * Callers can assume that this function takes time proportional to
+ * the amount of data output, and does not need to do tree crawls;
+ * however, it is possible that some of the @c node_kind fields in the
+ * @c svn_fs_path_change2_t * values will be @c svn_node_unknown or
+ * that and some of the @c copyfrom_known fields will be FALSE.
+ *
+ * Use @c pool for all allocations, including the hash and its values.
+ *
+ * @since New in 1.6.
+
+
+
+ Allocate an @c svn_fs_path_change2_t structure in @a pool, initialize and
+ return it.
+
+ Set the @c node_rev_id field of the created struct to @a node_rev_id, and
+ @c change_kind to @a change_kind. Set all other fields to their
+ @c _unknown, @c NULL or invalid value, respectively.
+
+ @since New in 1.6.
+
+
+
+were there property mods?
+
+
+were there text mods?
+
+
+kind of change
+
+
+node revision id of changed path
+
+
+Similar to @c svn_fs_path_change2_t, but without kind and copyfrom
+ * information.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
+
+
+
+Copyfrom revision and path; this is only valid if copyfrom_known
+ * is true.
+
+
+what node kind is the path?
+ (Note: it is legal for this to be @c svn_node_unknown.)
+
+
+were there property mods?
+
+
+were there text mods?
+
+
+kind of change
+
+
+node revision id of changed path
+
+
+Change descriptor.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions. Therefore, to preserve binary compatibility, users
+ * should not directly allocate structures of this type.
+ *
+ * @since New in 1.6.
+
+
+ignore all previous change items for path (internal-use only)
+
+
+path removed and re-added in txn
+
+
+path removed in txn
+
+
+path added in txn
+
+
+path modified in txn
+
+
+If @a root is the root of a revision, return the revision number.
+ * Otherwise, return @c SVN_INVALID_REVNUM.
+
+
+
+If @a root is the root of a transaction, return the number of the
+ * revision on which is was based when created. Otherwise, return @c
+ * SVN_INVALID_REVNUM.
+ *
+ * @since New in 1.5.
+
+
+
+If @a root is the root of a transaction, return the name of the
+ * transaction, allocated in @a pool; otherwise, return NULL.
+
+
+
+Return @c TRUE iff @a root is a revision root.
+
+
+Return @c TRUE iff @a root is a transaction root.
+
+
+Return the filesystem to which @a root belongs.
+
+
+Free the root directory @a root. Simply clearing or destroying the
+ * pool @a root was allocated in will have the same effect as calling
+ * this function.
+
+
+
+Set @a *root_p to the root directory of @a txn. Allocate @a *root_p in
+ * @a pool.
+
+
+
+Set @a *root_p to the root directory of revision @a rev in filesystem
+ * @a fs. Allocate @a *root_p in @a pool.
+
+
+
+@}
+Roots.
+ *
+ * An @c svn_fs_root_t object represents the root directory of some
+ * revision or transaction in a filesystem. To refer to particular
+ * node, you provide a root, and a directory path relative that root.
+ *
+ * @defgroup svn_fs_roots Filesystem roots
+ * @{
+
+The Filesystem Root object.
+
+
+Change, add, and/or delete transaction property values in
+ * transaction @a txn. @a props is an array of svn_prop_t
+ * elements. This is equivalent to calling svn_fs_change_txp_prop
+ * multiple times with the @c name and @c value fields of each
+ * successive svn_prop_t, but may be more efficient.
+ * (Properties not mentioned are left alone.) Do any necessary
+ * temporary allocation in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Change a transactions @a txn's property's value, or add/delete a
+ * property. @a name is the name of the property to change, and @a value
+ * is the new value of the property, or zero if the property should be
+ * removed altogether. Do any necessary temporary allocation in @a pool.
+
+
+
+Set @a *table_p to the entire property list of transaction @a txn, as
+ * an APR hash table allocated in @a pool. The resulting table maps property
+ * names to pointers to @c svn_string_t objects containing the property value.
+
+
+
+Set @a *value_p to the value of the property named @a propname on
+ * transaction @a txn. If @a txn has no property by that name, set
+ * @a *value_p to zero. Allocate the result in @a pool.
+
+
+
+Set @a *names_p to an array of const char * ids which are the
+ * names of all the currently active transactions in the filesystem @a fs.
+ * Allocate the array in @a pool.
+
+
+
+Open the transaction named @a name in the filesystem @a fs. Set @a *txn
+ * to the transaction.
+ *
+ * If there is no such transaction, @c SVN_ERR_FS_NO_SUCH_TRANSACTION is
+ * the error returned.
+ *
+ * Allocate the new transaction in @a pool; when @a pool is freed, the new
+ * transaction will be closed (neither committed nor aborted).
+
+
+
+Return @a txn's base revision.
+
+
+Set @a *name_p to the name of the transaction @a txn, as a
+ * NULL-terminated string. Allocate the name in @a pool.
+
+
+
+Cleanup the dead transaction in @a fs whose ID is @a txn_id. Use
+ * @a pool for all allocations. If the transaction is not yet dead,
+ * the error @c SVN_ERR_FS_TRANSACTION_NOT_DEAD is returned. (The
+ * caller probably forgot to abort the transaction, or the cleanup
+ * step of that abort failed for some reason.)
+
+
+
+Abort the transaction @a txn. Any changes made in @a txn are
+ * discarded, and the filesystem is left unchanged. Use @a pool for
+ * any necessary allocations.
+ *
+ * @note This function first sets the state of @a txn to "dead", and
+ * then attempts to purge it and any related data from the filesystem.
+ * If some part of the cleanup process fails, @a txn and some portion
+ * of its data may remain in the database after this function returns.
+ * Use svn_fs_purge_txn() to retry the transaction cleanup.
+
+
+
+Commit @a txn.
+ *
+ * @note You usually don't want to call this directly.
+ * Instead, call svn_repos_fs_commit_txn(), which honors the
+ * repository's hook configurations.
+ *
+ * If the transaction conflicts with other changes committed to the
+ * repository, return an @c SVN_ERR_FS_CONFLICT error. Otherwise, create
+ * a new filesystem revision containing the changes made in @a txn,
+ * storing that new revision number in @a *new_rev, and return zero.
+ *
+ * If @a conflict_p is non-zero, use it to provide details on any
+ * conflicts encountered merging @a txn with the most recent committed
+ * revisions. If a conflict occurs, set @a *conflict_p to the path of
+ * the conflict in @a txn, with the same lifetime as @a txn;
+ * otherwise, set @a *conflict_p to NULL.
+ *
+ * If the commit succeeds, @a txn is invalid.
+ *
+ * If the commit fails, @a txn is still valid; you can make more
+ * operations to resolve the conflict, or call svn_fs_abort_txn() to
+ * abort the transaction.
+ *
+ * @note Success or failure of the commit of @a txn is determined by
+ * examining the value of @a *new_rev upon this function's return. If
+ * the value is a valid revision number, the commit was successful,
+ * even though a non-@c NULL function return value may indicate that
+ * something else went wrong.
+
+
+
+ Same as svn_fs_begin_txn2(), but with @a flags set to 0.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+@defgroup svn_fs_begin_txn2_flags Bitmask flags for svn_fs_begin_txn2()
+ * @since New in 1.2.
+ * @{
+Do on-the-fly out-of-dateness checks. That is, an fs routine may
+ * throw error if a caller tries to edit an out-of-date item in the
+ * transaction.
+ *
+ * @warning ### Not yet implemented.
+
+Do on-the-fly lock checks. That is, an fs routine may throw error
+ * if a caller tries to edit a locked item without having rights to the lock.
+
+@}
+ Begin a new transaction on the filesystem @a fs, based on existing
+ revision @a rev. Set @a *txn_p to a pointer to the new transaction.
+ When committed, this transaction will create a new revision.
+
+ Allocate the new transaction in @a pool; when @a pool is freed, the new
+ transaction will be closed (neither committed nor aborted).
+
+ @a flags determines transaction enforcement behaviors, and is composed
+ from the constants SVN_FS_TXN_* (@c SVN_FS_TXN_CHECK_OOD etc.).
+
+ @note If you're building a txn for committing, you probably
+ don't want to call this directly. Instead, call
+ svn_repos_fs_begin_txn_for_commit(), which honors the
+ repository's hook configurations.
+
+ @since New in 1.2.
+
+
+
+@}
+Filesystem Transactions.
+ *
+ * To make a change to a Subversion filesystem:
+ * - Create a transaction object, using svn_fs_begin_txn().
+ * - Call svn_fs_txn_root(), to get the transaction's root directory.
+ * - Make whatever changes you like in that tree.
+ * - Commit the transaction, using svn_fs_commit_txn().
+ *
+ * The filesystem implementation guarantees that your commit will
+ * either:
+ * - succeed completely, so that all of the changes are committed to
+ * create a new revision of the filesystem, or
+ * - fail completely, leaving the filesystem unchanged.
+ *
+ * Until you commit the transaction, any changes you make are
+ * invisible. Only when your commit succeeds do they become visible
+ * to the outside world, as a new revision of the filesystem.
+ *
+ * If you begin a transaction, and then decide you don't want to make
+ * the change after all (say, because your net connection with the
+ * client disappeared before the change was complete), you can call
+ * svn_fs_abort_txn(), to cancel the entire transaction; this
+ * leaves the filesystem unchanged.
+ *
+ * The only way to change the contents of files or directories, or
+ * their properties, is by making a transaction and creating a new
+ * revision, as described above. Once a revision has been committed, it
+ * never changes again; the filesystem interface provides no means to
+ * go back and edit the contents of an old revision. Once history has
+ * been recorded, it is set in stone. Clients depend on this property
+ * to do updates and commits reliably; proxies depend on this property
+ * to cache changes accurately; and so on.
+ *
+ * There are two kinds of nodes in the filesystem: mutable, and
+ * immutable. Revisions in the filesystem consist entirely of
+ * immutable nodes, whose contents never change. A transaction in
+ * progress, which the user is still constructing, uses mutable nodes
+ * for those nodes which have been changed so far, and refers to
+ * immutable nodes from existing revisions for portions of the tree
+ * which haven't been changed yet in that transaction.
+ *
+ * Immutable nodes, as part of revisions, never refer to mutable
+ * nodes, which are part of uncommitted transactions. Mutable nodes
+ * may refer to immutable nodes, or other mutable nodes.
+ *
+ * Note that the terms "immutable" and "mutable" describe whether or
+ * not the nodes have been changed as part of a transaction --- not
+ * the permissions on the nodes they refer to. Even if you aren't
+ * authorized to modify the filesystem's root directory, you might be
+ * authorized to change some descendant of the root; doing so would
+ * create a new mutable copy of the root directory. Mutability refers
+ * to the role of the node: part of an existing revision, or part of a
+ * new one. This is independent of your authorization to make changes
+ * to a given node.
+ *
+ * Transactions are actually persistent objects, stored in the
+ * database. You can open a filesystem, begin a transaction, and
+ * close the filesystem, and then a separate process could open the
+ * filesystem, pick up the same transaction, and continue work on it.
+ * When a transaction is successfully committed, it is removed from
+ * the database.
+ *
+ * Every transaction is assigned a name. You can open a transaction
+ * by name, and resume work on it, or find out the name of a
+ * transaction you already have open. You can also list all the
+ * transactions currently present in the database.
+ *
+ * You may assign properties to transactions; these are name/value
+ * pairs. When you commit a transaction, all of its properties become
+ * unversioned revision properties of the new revision. (There is one
+ * exception: the svn:date property will be automatically set on new
+ * transactions to the date that the transaction was created, and will
+ * be overwritten when the transaction is committed by the current
+ * time; changes to a transaction's svn:date property will not affect
+ * its committed value.)
+ *
+ * Transaction names are guaranteed to contain only letters (upper-
+ * and lower-case), digits, `-', and `.', from the ASCII character
+ * set.
+ *
+ * The Subversion filesystem will make a best effort to not reuse
+ * transaction names. The Berkeley DB backend generates transaction
+ * names using a sequence, or a counter, which is stored in the BDB
+ * database. Each new transaction increments the counter. The
+ * current value of the counter is not serialized into a filesystem
+ * dump file, so dumping and restoring the repository will reset the
+ * sequence and reuse transaction names. The FSFS backend generates a
+ * transaction name using the hostname, process ID and current time in
+ * microseconds since 00:00:00 January 1, 1970 UTC. So it is
+ * extremely unlikely that a transaction name will be reused.
+ *
+ * @defgroup svn_fs_txns Filesystem transactions
+ * @{
+
+The type of a Subversion transaction object.
+
+
+Return a Subversion string containing the unparsed form of the
+ * node or node revision id @a id. Allocate the string containing the
+ * unparsed form in @a pool.
+
+
+
+ @note This function is not guaranteed to work with all filesystem
+ types. There is currently no un-deprecated equivalent; contact the
+ Subversion developers if you have a need for it.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+Return non-zero IFF the nodes associated with @a id1 and @a id2 are
+ * related, else return zero.
+
+
+
+Return -1, 0, or 1 if node revisions @a a and @a b are unrelated,
+ * equivalent, or otherwise related (respectively).
+
+
+
+@}
+Filesystem Nodes.
+ *
+ * In a Subversion filesystem, a `node' corresponds roughly to an
+ * `inode' in a Unix filesystem:
+ * - A node is either a file or a directory.
+ * - A node's contents change over time.
+ * - When you change a node's contents, it's still the same node; it's
+ * just been changed. So a node's identity isn't bound to a specific
+ * set of contents.
+ * - If you rename a node, it's still the same node, just under a
+ * different name. So a node's identity isn't bound to a particular
+ * filename.
+ *
+ * A `node revision' refers to a node's contents at a specific point in
+ * time. Changing a node's contents always creates a new revision of that
+ * node. Once created, a node revision's contents never change.
+ *
+ * When we create a node, its initial contents are the initial revision of
+ * the node. As users make changes to the node over time, we create new
+ * revisions of that same node. When a user commits a change that deletes
+ * a file from the filesystem, we don't delete the node, or any revision
+ * of it --- those stick around to allow us to recreate prior revisions of
+ * the filesystem. Instead, we just remove the reference to the node
+ * from the directory.
+ *
+ * @defgroup svn_fs_nodes Filesystem nodes
+ * @{
+
+An object representing a node-id.
+
+
+ Same as svn_fs_access_add_lock_token2(), but with @a path set to value 1.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+Push a lock-token @a token associated with path @a path into the
+ * context @a access_ctx. The context remembers all tokens it
+ * receives, and makes them available to fs functions. The token and
+ * path are not duplicated into @a access_ctx's pool; make sure the
+ * token's lifetime is at least as long as @a access_ctx.
+ *
+ * @since New in 1.6.
+
+
+Accessors for the access context:
+Set @a *username to the name represented by @a access_ctx.
+
+
+Set @a *access_ctx to the current @a fs access context, or NULL if
+ * there is no current fs access context.
+
+
+
+Associate @a access_ctx with an open @a fs.
+ *
+ * This function can be run multiple times on the same open
+ * filesystem, in order to change the filesystem access context for
+ * different filesystem operations. Pass a NULL value for @a
+ * access_ctx to disassociate the current access context from the
+ * filesystem.
+
+
+
+Set @a *access_ctx to a new @c svn_fs_access_t object representing
+ * @a username, allocated in @a pool. @a username is presumed to
+ * have been authenticated by the caller.
+ *
+ * Make a deep copy of @a username.
+
+
+
+@}
+@}
+Filesystem Access Contexts.
+ *
+ * @since New in 1.2.
+ *
+ * At certain times, filesystem functions need access to temporary
+ * user data. For example, which user is changing a file? If the
+ * file is locked, has an appropriate lock-token been supplied?
+ *
+ * This temporary user data is stored in an "access context" object,
+ * and the access context is then connected to the filesystem object.
+ * Whenever a filesystem function requires information, it can pull
+ * things out of the context as needed.
+ *
+ * @defgroup svn_fs_access_ctx Filesystem access contexts
+ * @{
+
+An opaque object representing temporary user data.
+
+
+@deprecated Provided for backward compatibility with the 1.4 API.
+
+
+@deprecated Provided for backward compatibility with the 1.0 API.
+
+
+@deprecated Provided for backward compatibility with the 1.0 API.
+
+
+@deprecated Provided for backward compatibility with the 1.0 API.
+
+
+@deprecated Provided for backward compatibility with the 1.0 API.
+
+
+@deprecated Provided for backward compatibility with the 1.0 API.
+
+
+ The following functions are similar to their generic counterparts.
+
+ In Subversion 1.2 and earlier, they only work on Berkeley DB filesystems.
+ In Subversion 1.3 and later, they perform largely as aliases for their
+ generic counterparts (with the exception of recover, which only gained
+ a generic counterpart in 1.5).
+
+ @defgroup svn_fs_bdb_deprecated Berkeley DB filesystem compatibility
+ @{
+
+@deprecated Provided for backward compatibility with the 1.0 API.
+
+
+Set @a *logfiles to an array of const char * log file names
+ * of Berkeley DB-based Subversion filesystem.
+ *
+ * If @a only_unused is @c TRUE, set @a *logfiles to an array which
+ * contains only the names of Berkeley DB log files no longer in use
+ * by the filesystem. Otherwise, all log files (used and unused) are
+ * returned.
+
+ * This function wraps the Berkeley DB 'log_archive' function
+ * called by the db_archive binary. Repository administrators may
+ * want to run this function periodically and delete the unused log
+ * files, as a way of reclaiming disk space.
+
+
+
+Subversion filesystems based on Berkeley DB.
+ *
+ * The following functions are specific to Berkeley DB filesystems.
+ *
+ * @defgroup svn_fs_bdb Berkeley DB filesystems
+ * @{
+
+Register an error handling function for Berkeley DB error messages.
+ *
+ * @deprecated Provided for backward compatibility with the 1.2 API.
+ *
+ * Despite being first declared deprecated in Subversion 1.3, this API
+ * is redundant in versions 1.1 and 1.2 as well.
+ *
+ * Berkeley DB's error codes are seldom sufficiently informative to allow
+ * adequate troubleshooting. Berkeley DB provides extra messages through
+ * a callback function - if an error occurs, the @a handler will be called
+ * with two strings: an error message prefix, which will be zero, and
+ * an error message. @a handler might print it out, log it somewhere,
+ * etc.
+ *
+ * Subversion 1.1 and later install their own handler internally, and
+ * wrap the messages from Berkeley DB into the standard svn_error_t object,
+ * making any information gained through this interface redundant.
+ *
+ * It is only worth using this function if your program will be used
+ * with Subversion 1.0.
+ *
+ * This function connects to the Berkeley DB @c DBENV->set_errcall interface.
+ * Since that interface supports only a single callback, Subversion's internal
+ * callback is registered with Berkeley DB, and will forward notifications to
+ * a user provided callback after performing its own processing.
+
+
+
+Perform any necessary non-catastrophic recovery on the Subversion
+ * filesystem located at @a path.
+ *
+ * If @a cancel_func is not @c NULL, it is called periodically with
+ * @a cancel_baton as argument to see if the client wishes to cancel
+ * recovery. BDB filesystems do not currently support cancellation.
+ *
+ * Do any necessary allocation within @a pool.
+ *
+ * For FSFS filesystems, recovery is currently limited to recreating
+ * the db/current file, and does not require exclusive access.
+ *
+ * For BDB filesystems, recovery requires exclusive access, and is
+ * described in detail below.
+ *
+ * After an unexpected server exit, due to a server crash or a system
+ * crash, a Subversion filesystem based on Berkeley DB needs to run
+ * recovery procedures to bring the database back into a consistent
+ * state and release any locks that were held by the deceased process.
+ * The recovery procedures require exclusive access to the database
+ * --- while they execute, no other process or thread may access the
+ * database.
+ *
+ * In a server with multiple worker processes, like Apache, if a
+ * worker process accessing the filesystem dies, you must stop the
+ * other worker processes, and run recovery. Then, the other worker
+ * processes can re-open the database and resume work.
+ *
+ * If the server exited cleanly, there is no need to run recovery, but
+ * there is no harm in it, either, and it take very little time. So
+ * it's a fine idea to run recovery when the server process starts,
+ * before it begins handling any requests.
+ *
+ * @since New in 1.5.
+
+
+
+ Copy a possibly live Subversion filesystem from @a src_path to
+ @a dest_path. If @a clean is @c TRUE, perform cleanup on the
+ source filesystem as part of the copy operation; currently, this
+ means deleting copied, unused logfiles for a Berkeley DB source
+ filesystem.
+
+ @since New in 1.1.
+
+
+
+ Delete the filesystem at @a path.
+
+ @since New in 1.1.
+
+
+
+ Return the path to @a fs's repository, allocated in @a pool.
+ @note This is just what was passed to svn_fs_create() or
+ svn_fs_open() -- might be absolute, might not.
+
+ @since New in 1.1.
+
+
+
+ Return, in @a *fs_type, a string identifying the back-end type of
+ the Subversion filesystem located in @a path. Allocate @a *fs_type
+ in @a pool.
+
+ The string should be equal to one of the @c SVN_FS_TYPE_* defined
+ constants, unless the filesystem is a new back-end type added in
+ a later version of Subversion.
+
+ In general, the type should make no difference in the filesystem's
+ semantics, but there are a few situations (such as backups) where
+ it might matter.
+
+ @since New in 1.3.
+
+
+
+ Upgrade the Subversion filesystem located in the directory @a path
+ to the latest version supported by this library. Return @c
+ SVN_ERR_FS_UNSUPPORTED_UPGRADE and make no changes to the
+ filesystem if the requested upgrade is not supported. Use @a pool
+ for necessary allocations.
+
+ @note You probably don't want to use this directly. Take a look at
+ svn_repos_upgrade() instead.
+
+ @since New in 1.5.
+
+
+
+ Open a Subversion filesystem located in the directory @a path, and
+ return a pointer to it in @a *fs_p. If @a fs_config is not @c
+ NULL, the options it contains modify the behavior of the
+ filesystem. The interpretation of @a fs_config is specific to the
+ filesystem back-end. The opened filesystem may be closed by
+ destroying @a pool.
+
+ @note The lifetime of @a fs_config must not be shorter than @a
+ pool's. It's a good idea to allocate @a fs_config from @a pool or
+ one of its ancestors.
+
+ Only one thread may operate on any given filesystem object at once.
+ Two threads may access the same filesystem simultaneously only if
+ they open separate filesystem objects.
+
+ @note You probably don't want to use this directly. Take a look at
+ svn_repos_open() instead.
+
+ @since New in 1.1.
+
+
+
+ Create a new, empty Subversion filesystem, stored in the directory
+ @a path, and return a pointer to it in @a *fs_p. @a path must not
+ currently exist, but its parent must exist. If @a fs_config is not
+ @c NULL, the options it contains modify the behavior of the
+ filesystem. The interpretation of @a fs_config is specific to the
+ filesystem back-end. The new filesystem may be closed by
+ destroying @a pool.
+
+ @note The lifetime of @a fs_config must not be shorter than @a
+ pool's. It's a good idea to allocate @a fs_config from @a pool or
+ one of its ancestors.
+
+ If @a fs_config contains a value for @c SVN_FS_CONFIG_FS_TYPE, that
+ value determines the filesystem type for the new filesystem.
+ Currently defined values are:
+
+ SVN_FS_TYPE_BDB Berkeley-DB implementation
+ SVN_FS_TYPE_FSFS Native-filesystem implementation
+
+ If @a fs_config is @c NULL or does not contain a value for
+ @c SVN_FS_CONFIG_FS_TYPE then the default filesystem type will be used.
+ This will typically be BDB for version 1.1 and FSFS for later versions,
+ though the caller should not rely upon any particular default if they
+ wish to ensure that a filesystem of a specific type is created.
+
+ @since New in 1.1.
+
+
+
+Provide a callback function, @a warning, that @a fs should use to
+ * report (non-fatal) errors. To print an error, the filesystem will call
+ * @a warning, passing it @a warning_baton and the error.
+ *
+ * By default, this is set to a function that will crash the process.
+ * Dumping to @c stderr or /dev/tty is not acceptable default
+ * behavior for server processes, since those may both be equivalent to
+ * /dev/null.
+
+
+
+The type of a warning callback function. @a baton is the value specified
+ * in the call to svn_fs_set_warning_func(); the filesystem passes it through
+ * to the callback. @a err contains the warning message.
+ *
+ * The callback function should not clear the error that is passed to it;
+ * its caller should do that.
+
+
+
+@name Filesystem configuration options
+@{
+
+@since New in 1.1.
+@since New in 1.1.
+@since New in 1.1.
+Create repository format compatible with Subversion versions
+ * earlier than 1.4.
+ *
+ * @since New in 1.4.
+
+Create repository format compatible with Subversion versions
+ * earlier than 1.5.
+ *
+ * @since New in 1.5.
+
+Create repository format compatible with Subversion versions
+ * earlier than 1.6.
+ *
+ * @since New in 1.6.
+
+@}
+ Callers should invoke this function to initialize global state in
+ the FS library before creating FS objects. If this function is
+ invoked, no FS objects may be created in another thread at the same
+ time as this invocation, and the provided @a pool must last longer
+ than any FS object created subsequently.
+
+ If this function is not called, the FS library will make a best
+ effort to bootstrap a mutex for protecting data common to FS
+ objects; however, there is a small window of failure. Also, a
+ small amount of data will be leaked if the Subversion FS library is
+ dynamically unloaded, and using the bdb FS can potentially segfault
+ or invoke other undefined behavior if this function is not called
+ with an appropriate pool (such as the pool the module was loaded into)
+ when loaded dynamically.
+
+ If this function is called multiple times before the pool passed to
+ the first call is destroyed or cleared, the later calls will have
+ no effect.
+
+ @since New in 1.2.
+
+
+
+@defgroup fs_handling Filesystem interaction subsystem
+@{
+
+An object representing a Subversion filesystem.
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2002-2009 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_auth.h
+ @brief Subversion's authentication system
+
+
+
+Similar to svn_diff_mem_string_output_merge2, but with @a
+ * display_original_in_conflict and @a display_resolved_conflicts
+ * booleans instead of the @a conflict_style enum.
+ *
+ * If both booleans are false, acts like
+ * svn_diff_conflict_display_modified_latest; if @a
+ * display_original_in_conflict is true, acts like
+ * svn_diff_conflict_display_modified_original_latest; if @a
+ * display_resolved_conflicts is true, acts like
+ * svn_diff_conflict_display_resolved_modified_latest. The booleans
+ * may not both be true.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+Output the @a diff generated by svn_diff_mem_string_diff3() in diff3
+ * format on @a output_stream, using @a original, @a modified and @a latest
+ * for content changes.
+ *
+ * Use the conflict markers @a conflict_original, @a conflict_modified,
+ * @a conflict_latest and @a conflict_separator or the default one for
+ * each of these if @c NULL is passed.
+ *
+ * @a conflict_style dictates how conflicts are displayed.
+ *
+ * @since New in 1.6.
+
+
+
+Outputs the @a diff object generated by svn_diff_mem_string_diff()
+ * in unified diff format on @a output_stream, using @a original
+ * and @a modified for the text in the output.
+ * Outputs the header and markers in @a header_encoding.
+ *
+ * @a original_header and @a modified header are
+ * used to fill the field after the "---" and "+++" header markers.
+ *
+ * @since New in 1.5.
+
+
+
+Generate @a diff output from the @a original, @a modified and @a latest
+ * in-memory strings, using @a ancestor. @a diff will be allocated in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Generate @a diff output from the @a orginal, @a modified and @a latest
+ * in-memory strings. @a diff will be allocated in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Generate @a diff output from the @a original and @a modified
+ * in-memory strings. @a diff will be allocated from @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Similar to svn_diff_file_output_merge2, but with @a
+ * display_original_in_conflict and @a display_resolved_conflicts
+ * booleans instead of the @a conflict_style enum.
+ *
+ * If both booleans are false, acts like
+ * svn_diff_conflict_display_modified_latest; if @a
+ * display_original_in_conflict is true, acts like
+ * svn_diff_conflict_display_modified_original_latest; if @a
+ * display_resolved_conflicts is true, acts like
+ * svn_diff_conflict_display_resolved_modified_latest. The booleans
+ * may not both be true.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+A convenience function to produce diff3 output from the
+ * diff generated by svn_diff_file_diff3().
+ *
+ * Output a @a diff between @a original_path, @a modified_path and
+ * @a latest_path in merged format to @a output_stream. Optionally supply
+ * @a conflict_modified, @a conflict_original, @a conflict_separator and/or
+ * @a conflict_latest to be displayed as conflict markers in the output.
+ * If @a conflict_original, @a conflict_modified, @a conflict_latest and/or
+ * @a conflict_separator is @c NULL, a default marker will be displayed.
+ * @a conflict_style dictates how conflicts are displayed.
+ *
+ * @since New in 1.6.
+
+
+
+Similar to svn_diff_file_output_unified2(), but with @a header_encoding
+ * set to @c APR_LOCALE_CHARSET.
+ *
+ * @deprecated Provided for backward compatibility with the 1.2 API.
+
+
+
+Similar to svn_diff_file_output_unified3(), but with @a relative_to_dir
+ * set to NULL and @a show_c_function to false.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+A convenience function to produce unified diff output from the
+ * diff generated by svn_diff_file_diff().
+ *
+ * @since New in 1.5.
+ *
+ * Output a @a diff between @a original_path and @a modified_path in unified
+ * context diff format to @a output_stream. Optionally supply
+ * @a original_header and/or @a modified_header to be displayed in the header
+ * of the output. If @a original_header or @a modified_header is @c NULL, a
+ * default header will be displayed, consisting of path and last modified time.
+ * Output all headers and markers in @a header_encoding. If @a relative_to_dir
+ * is not @c NULL, the @a original_path and @a modified_path will have the
+ * @a relative_to_dir stripped from the front of the respective paths. If
+ * @a relative_to_dir is @c NULL, paths will be not be modified. If
+ * @a relative_to_dir is not @c NULL but @a relative_to_dir is not a parent
+ * path of the target, an error is returned. Finally, if @a relative_to_dir
+ * is a URL, an error will be returned.
+
+
+
+Simliar to svn_file_diff4_2(), but with @a options set to a struct with
+ * default options.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+A convenience function to produce a diff between four files.
+ *
+ * @since New in 1.4.
+ *
+ * Return a diff object in @a *diff (allocated from @a pool) that represents
+ * the difference between an @a original file, @a modified file, @a latest
+ * and @a ancestor file. (The file arguments must be full paths to the files.)
+ *
+ * Compare lines according to the relevant fields of @a options.
+
+
+
+Similar to svn_diff_file_diff3_2(), but with @a options set to a struct
+ * with default options.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+A convenience function to produce a diff between three files.
+ *
+ * @since New in 1.4.
+ *
+ * Return a diff object in @a *diff (allocated from @a pool) that represents
+ * the difference between an @a original file, @a modified file, and @a latest
+ * file.
+ *
+ * Compare lines according to the relevant fields of @a options.
+
+
+
+Similar to svn_file_diff_2(), but with @a options set to a struct with
+ * default options.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+A convenience function to produce a diff between two files.
+ *
+ * @since New in 1.4.
+ *
+ * Return a diff object in @a *diff (allocated from @a pool) that represents
+ * the difference between an @a original file and @a modified file.
+ * (The file arguments must be full paths to the files.)
+ *
+ * Compare lines according to the relevant fields of @a options.
+
+
+
+ Parse @a args, an array of const char * command line switches
+ and adjust @a options accordingly. @a options is assumed to be initialized
+ with default values. @a pool is used for temporary allocation.
+
+ @since New in 1.4.
+
+ The following options are supported:
+ - --ignore-space-change, -b
+ - --ignore-all-space, -w
+ - --ignore-eol-style
+ - --unified, -u (for compatibility, does nothing).
+
+
+
+Allocate a @c svn_diff_file_options_t structure in @a pool, initializing
+ * it with default values.
+ *
+ * @since New in 1.4.
+
+
+
+Whether the '@@' lines of the unified diff output should include a prefix
+ * of the nearest preceding line that starts with a character that might be
+ * the initial character of a C language identifier. The default is
+ * @c FALSE.
+
+
+
+Whether to treat all end-of-line markers the same when comparing lines.
+ * The default is @c FALSE.
+
+
+To what extent whitespace should be ignored when comparing lines.
+ * The default is @c svn_diff_file_ignore_space_none.
+
+
+Options to control the behaviour of the file diff routines.
+ *
+ * @since New in 1.4.
+ *
+ * @note This structure may be extended in the future, so to preserve binary
+ * compatibility, users must not allocate structs of this type themselves.
+ * @see svn_diff_file_options_create().
+ *
+ * @note Although its name suggests otherwise, this structure is used to
+ * pass options to file as well as in-memory diff functions.
+
+
+
+To what extent whitespace should be ignored when comparing lines.
+ *
+ * @since New in 1.4.
+
+
+
+Ignore all whitespace characters.
+
+
+Ignore changes in sequences of whitespace characters, treating each
+ * sequence of whitespace characters as a single space.
+
+
+Ignore no whitespace.
+
+
+Given a vtable of @a output_fns/@a output_baton for consuming
+ * differences, output the differences in @a diff.
+
+
+
+Style for displaying conflicts during diff3 output.
+ *
+ * @since New in 1.6.
+
+
+
+Like svn_diff_conflict_display_modified_original_latest, but
+ *only* showing conflicts.
+
+
+Just display latest, with no markers.
+
+
+Just display modified, with no markers.
+
+
+Display modified, original, and latest, with conflict
+ markers.
+
+
+Like svn_diff_conflict_display_modified_latest, but with an
+ extra effort to identify common sequences between modified and
+ latest.
+
+
+Display modified and latest, with conflict markers.
+
+
+All three datasources have conflicting data ranges. The range
+ * @a latest_start, @a latest_length in the "latest" datasource conflicts
+ * with the range @a original_start, @a original_length in the "original"
+ * datasource, and also conflicts with the range @a modified_start,
+ * @a modified_length in the "modified" datasource.
+ * If there are common ranges in the "modified" and "latest" datasources
+ * in this conflicting range, @a resolved_diff will contain a diff
+ * which can be used to retrieve the common and conflicting ranges.
+
+
+
+An identical data range was discovered between the "modified" and
+ * "latest" datasources, but this conflicts with a range in the
+ * "original" datasource.
+
+
+
+An identical data range was discovered between the "original" and
+ * "modified" datasources, but this conflicts with a range in the
+ * "latest" datasource.
+
+
+
+ If doing a two-way diff, then an *conflicting* data range was found
+ between the "original" and "modified" datasources. Specifically,
+ the conflict starts at @a original_start and goes for @a original_length
+ tokens in the original data, and at @a modified_start for
+ @a modified_length tokens in the modified data.
+
+ If doing a three-way diff, then an identical data range was discovered
+ between the "original" and "latest" datasources, but this conflicts with
+ a range in the "modified" datasource.
+
+
+
+ If doing a two-way diff, then an *identical* data range was found
+ between the "original" and "modified" datasources. Specifically,
+ the match starts at @a original_start and goes for @a original_length
+ tokens in the original data, and at @a modified_start for
+ @a modified_length tokens in the modified data.
+
+ If doing a three-way diff, then all three datasources have
+ matching data ranges. The range @a latest_start, @a latest_length in
+ the "latest" datasource is identical to the range @a original_start,
+ @a original_length in the original data, and is also identical to
+ the range @a modified_start, @a modified_length in the modified data.
+
+
+
+A vtable for displaying (or consuming) differences between datasources.
+ *
+ * Differences, similarities, and conflicts are described by lining up
+ * "ranges" of data.
+ *
+ * @note These callbacks describe data ranges in units of "tokens".
+ * A "token" is whatever you've defined it to be in your datasource
+ * @c svn_diff_fns_t vtable.
+
+
+
+Determine if a diff object contains actual differences between the
+ * datasources. If so, return @c TRUE, else return @c FALSE.
+
+
+
+Determine if a diff object contains conflicts. If it does, return
+ * @c TRUE, else return @c FALSE.
+
+
+
+Given a vtable of @a diff_fns/@a diff_baton for reading datasources,
+ * return a diff object in @a *diff that represents a difference between
+ * two datasources: "original" and "latest", adjusted to become a full
+ * difference between "original", "modified" and "latest" using "ancestor".
+ * Do all allocation in @a pool.
+
+
+
+Given a vtable of @a diff_fns/@a diff_baton for reading datasources,
+ * return a diff object in @a *diff that represents a difference between
+ * three datasources: "original", "modified", and "latest". Do all
+ * allocation in @a pool.
+
+
+
+Given a vtable of @a diff_fns/@a diff_baton for reading datasources,
+ * return a diff object in @a *diff that represents a difference between
+ * an "original" and "modified" datasource. Do all allocation in @a pool.
+
+
+
+Free *all* tokens from memory, they're no longer needed.
+
+
+Free @a token from memory, the diff algorithm is done with it.
+
+
+Get the next "token" from the datasource of type @a datasource.
+ * Return a "token" in @a *token. Return a hash of "token" in @a *hash.
+ * Leave @a token and @a hash untouched when the datasource is exhausted.
+
+
+
+Close the datasource of type @a datasource.
+
+
+Open the datasource of type @a datasource.
+
+
+A vtable for reading data from the three datasources.
+
+
+There are four types of datasources. In GNU diff3 terminology,
+the first three types correspond to the phrases "older", "mine",
+and "yours".
+
+
+
+The common ancestor of original and modified.
+
+
+The latest version of the data, possibly different than the
+ * user's modified version.
+
+
+
+The same data, but potentially changed by the user.
+
+
+The oldest form of the data.
+
+
+An opaque type that represents a difference between either two or
+ * three datasources. This object is returned by svn_diff_diff(),
+ * svn_diff_diff3() and svn_diff_diff4(), and consumed by a number of
+ * other routines.
+
+
+
+Crop @a target according to @a depth.
+ *
+ * Remove any item that exceeds the boundary of @a depth (relative to
+ * @a target) from revision control. Leave modified items behind
+ * (unversioned), while removing unmodified ones completely.
+ *
+ * If @a target starts out with a shallower depth than @a depth, do not
+ * upgrade it to @a depth (that would not be cropping); however, do
+ * check children and crop them appropriately according to @a depth.
+ *
+ * Returns immediately with no error if @a target is not a directory,
+ * or if @a depth is not restrictive (e.g., @c svn_depth_infinity).
+ *
+ * @a anchor is an access baton, with a tree lock, for the local path to the
+ * working copy which will be used as the root of this operation. If
+ * @a target is not empty, it represents an entry in the @a anchor path;
+ * otherwise, the @a anchor path is the target. @a target may not be
+ * @c NULL.
+ *
+ * If @a cancel_func is not @c NULL, call it with @a cancel_baton at
+ * various points to determine if the client has cancelled the operation.
+ *
+ * If @a notify_func is not @c NULL, call it with @a notify_baton to
+ * report changes as they are made.
+ *
+ * @note: svn_depth_exclude currently does nothing; passing it results
+ * in immediate success with no side effects.
+ *
+ * @since New in 1.6
+
+
+
+ Set @a path's entry's 'changelist' attribute to @a changelist iff
+ @a changelist is not @c NULL; otherwise, remove any current
+ changelist assignment from @a path. @a changelist may not be the
+ empty string. @a adm_access is an access baton set that contains
+ @a path.
+
+ If @a cancel_func is not @c NULL, call it with @a cancel_baton to
+ determine if the client has cancelled the operation.
+
+ If @a notify_func is not @c NULL, call it with @a notify_baton to
+ report the change (using notification types @c
+ svn_wc_notify_changelist_set and @c svn_wc_notify_changelist_clear).
+
+ @note For now, directories are NOT allowed to be associated with
+ changelists; there is confusion about whether they should behave
+ as depth-0 or depth-infinity objects. If @a path is a directory,
+ return @c SVN_ERR_UNSUPPORTED_FEATURE.
+
+ @note This metadata is purely a client-side "bookkeeping"
+ convenience, and is entirely managed by the working copy.
+
+ @since New in 1.5.
+
+
+
+Set @a *result_p to point to a new @c svn_wc_revision_status_t structure
+ * containing a summary of the revision range and status of the working copy
+ * at @a wc_path (not including "externals").
+ *
+ * Set @a (*result_p)->min_rev and @a (*result_p)->max_rev respectively to the
+ * lowest and highest revision numbers in the working copy. If @a committed
+ * is TRUE, summarize the last-changed revisions, else the base revisions.
+ *
+ * Set @a (*result_p)->switched to indicate whether any item in the WC is
+ * switched relative to its parent. If @a trail_url is non-NULL, use it to
+ * determine if @a wc_path itself is switched. It should be any trailing
+ * portion of @a wc_path's expected URL, long enough to include any parts
+ * that the caller considers might be changed by a switch. If it does not
+ * match the end of @a wc_path's actual URL, then report a "switched"
+ * status.
+ *
+ * Set @a (*result_p)->modified to indicate whether any item is locally
+ * modified.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ * if the client has cancelled the operation.
+ *
+ * Allocate *result_p in @a pool.
+ *
+ * @since New in 1.4
+
+
+
+Whether any WC paths are at a depth other than @c svn_depth_infinity.
+ * @since New in 1.5.
+
+
+
+A structure to report a summary of a working copy, including the
+ * mix of revisions found within it, whether any parts are switched or
+ * locally modified, and whether it is a sparse checkout.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions. Therefore, to preserve binary compatibility, users
+ * should not directly allocate structures of this type.
+ *
+ * @since New in 1.4
+
+
+
+Remove any lock from @a path. @a adm_access must contain a
+ * write-lock for @a path. If @a path has a lock and the locking
+ * so specifies, make the file read-only. Don't return an error if @a
+ * path didn't have a lock. Perform temporary allocations in @a pool.
+
+
+Add @a lock to the working copy for @a path. @a adm_access must contain
+ * a write lock for @a path. If @a path is read-only, due to locking
+ * properties, make it writable. Perform temporary allocations in @a
+ * pool.
+
+
+Return TRUE iff @a str matches any of the elements of @a list, a
+ * list of zero or more ignore patterns.
+ *
+ * @since New in 1.5.
+
+
+
+Get the list of ignore patterns from the @c svn_config_t's in the
+ * @a config hash and the local ignore patterns from the directory
+ * in @a adm_access, and store them in @a *patterns.
+ * Allocate @a *patterns and its contents in @a pool.
+ *
+ * @since New in 1.3.
+
+
+
+Get the run-time configured list of ignore patterns from the
+ * @c svn_config_t's in the @a config hash, and store them in @a *patterns.
+ * Allocate @a *patterns and its contents in @a pool.
+
+
+
+Given a @a path with its accompanying @a entry, transmit all local
+ * property modifications using the appropriate @a editor method (in
+ * conjunction with @a baton). @a adm_access is an access baton set
+ * that contains @a path. Use @a pool for all allocations.
+ *
+ * If a temporary file remains after this function is finished, the
+ * path to that file is returned in @a *tempfile (so the caller can
+ * clean this up if it wishes to do so).
+ *
+ * @note Starting version 1.5, no tempfile will ever be returned
+ * anymore. If @a *tempfile is passed, its value is set to @c NULL.
+
+
+
+Similar to svn_wc_transmit_text_deltas2(), but with @a digest set to NULL.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+Send the local modifications for versioned file @a path (with
+ * matching @a file_baton) through @a editor, then close @a file_baton
+ * afterwards. Use @a pool for any temporary allocation and
+ * @a adm_access as an access baton for @a path.
+ *
+ * This process creates a copy of @a path with keywords and eol
+ * untranslated. If @a tempfile is non-NULL, set @a *tempfile to the
+ * path to this copy. Do not clean up the copy; caller can do that.
+ * If @a digest is non-NULL, put the MD5 checksum of the
+ * temporary file into @a digest, which must point to @c APR_MD5_DIGESTSIZE
+ * bytes of storage. (The purpose of handing back the tmp copy is that
+ * it is usually about to become the new text base anyway, but the
+ * installation of the new text base is outside the scope of this
+ * function.)
+ *
+ * If @a fulltext, send the untranslated copy of @a path through @a editor
+ * as full-text; else send it as svndiff against the current text base.
+ *
+ * If sending a diff, and the recorded checksum for @a path's text-base
+ * does not match the current actual checksum, then remove the tmp
+ * copy (and set @a *tempfile to NULL if appropriate), and return the
+ * error @c SVN_ERR_WC_CORRUPT_TEXT_BASE.
+ *
+ * @note This is intended for use with both infix and postfix
+ * text-delta styled editor drivers.
+ *
+ * @since New in 1.4.
+
+
+
+Returns a @a stream allocated in @a pool with access to the given
+ * @a path taking the file properties from @a versioned_file using
+ * @a adm_access.
+ *
+ * When translation from normal form is requested
+ * (@c SVN_WC_TRANSLATE_FROM_NF is specified in @a flags), @a path
+ * is used as target path and stream read operations are not supported.
+ * Conversely, if translation to normal form is requested
+ * (@c SVN_WC_TRANSLATE_TO_NF is specified in @a flags), @a path is
+ * used as source path and stream write operations are not supported.
+ *
+ * The @a flags are the same constants as those used for
+ * svn_wc_translated_file().
+ *
+ * @since New in 1.5.
+
+
+
+Same as svn_wc_translated_file2, but will never clean up
+ * temporary files.
+ *
+ * @deprecated Provided for compatibility with the 1.3 API
+
+
+
+Set @a xlated_path to a translated copy of @a src
+ * or to @a src itself if no translation is necessary.
+ * That is, if @a versioned_file's properties indicate newline conversion or
+ * keyword expansion, point @a *xlated_path to a copy of @a src
+ * whose newlines and keywords are converted using the translation
+ * as requested by @a flags.
+ *
+ * When translating to the normal form, inconsistent eol styles will be
+ * repaired when appropriate for the given setting. When translating
+ * from normal form, no EOL repair is performed (consistency is assumed).
+ * This behaviour can be overridden by specifying
+ * @c SVN_WC_TRANSLATE_FORCE_EOL_REPAIR.
+ *
+ * The caller can explicitly request a new file to be returned by setting the
+ * @c SVN_WC_TRANSLATE_FORCE_COPY flag in @a flags.
+ *
+ * This function is generally used to get a file that can be compared
+ * meaningfully against @a versioned_file's text base, if
+ * @c SVN_WC_TRANSLATE_TO_NF is specified, against @a versioned_file itself
+ * if @c SVN_WC_TRANSLATE_FROM_NF is specified.
+ *
+ * Output files are created in the temp file area belonging to
+ * @a versioned_file. By default they will be deleted at pool cleanup.
+ *
+ * If @c SVN_WC_TRANSLATE_NO_OUTPUT_CLEANUP is specified, the default
+ * pool cleanup handler to remove @a *xlated_path is not registered.
+ *
+ * If an error is returned, the effect on @a *xlated_path is undefined.
+ *
+ * @since New in 1.4
+
+
+
+Same as svn_wc_create_tmp_file2(), but with @a new_name set to @c NULL,
+ * and without the ability to delete the file on pool cleanup.
+ *
+ * @deprecated For compatibility with 1.3 API
+
+
+
+Create a unique temporary file in administrative tmp/ area of
+ * directory @a path. Return a handle in @a *fp and the path
+ * in @a *new_name. Either @a fp or @a new_name can be NULL.
+ *
+ * The flags will be APR_WRITE | APR_CREATE | APR_EXCL and
+ * optionally @c APR_DELONCLOSE (if the @a delete_when argument is
+ * set to @c svn_io_file_del_on_close).
+ *
+ * This means that as soon as @a fp is closed, the tmp file will vanish.
+ *
+ * @since New in 1.4
+
+
+
+ Similar to svn_wc_revert2(), but takes an @c svn_wc_notify_func_t instead.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_wc_revert3(), but with @a changelists passed as @c
+ NULL, and @a depth set according to @a recursive: if @a recursive
+ is TRUE, @a depth is @c svn_depth_infinity; if FALSE, @a depth is
+ @c svn_depth_empty.
+
+ @note Most APIs map @a recurse==FALSE to @a depth==svn_depth_files;
+ revert is deliberately different.
+
+ @deprecated Provided for backward compatibility with the 1.2 API.
+
+
+
+ Revert changes to @a path. Perform necessary allocations in @a pool.
+
+ @a parent_access is an access baton for the directory containing @a
+ path, unless @a path is a working copy root (as determined by @c
+ svn_wc_is_wc_root), in which case @a parent_access refers to @a
+ path itself.
+
+ If @a depth is @c svn_depth_empty, revert just @a path (if a
+ directory, then revert just the properties on that directory).
+ Else if @c svn_depth_files, revert @a path and any files
+ directly under @a path if it is directory. Else if
+ @c svn_depth_immediates, revert all of the preceding plus
+ properties on immediate subdirectories; else if @c svn_depth_infinity,
+ revert path and everything under it fully recursively.
+
+ @a changelists is an array of const char * changelist
+ names, used as a restrictive filter on items reverted; that is,
+ don't revert any item unless it's a member of one of those
+ changelists. If @a changelists is empty (or altogether @c NULL),
+ no changelist filtering occurs.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ various points during the reversion process. If it returns an
+ error (typically @c SVN_ERR_CANCELLED), return that error
+ immediately.
+
+ If @a use_commit_times is TRUE, then all reverted working-files
+ will have their timestamp set to the last-committed-time. If
+ FALSE, the reverted working-files will be touched with the 'now' time.
+
+ For each item reverted, @a notify_func will be called with @a notify_baton
+ and the path of the reverted item. @a notify_func may be @c NULL if this
+ notification is not needed.
+
+ If @a path is not under version control, return the error
+ SVN_ERR_UNVERSIONED_RESOURCE.
+
+ @since New in 1.5.
+
+
+
+Similar to svn_wc_relocate2(), but uses @c svn_wc_relocation_validator_t.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+Similar to svn_wc_relocate3(), but uses @c svn_wc_relocation_validator2_t.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
+
+
+Change repository references at @a path that begin with @a from
+ * to begin with @a to instead. Perform necessary allocations in @a pool.
+ * If @a recurse is TRUE, do so. @a validator (and its baton,
+ * @a validator_baton), will be called for each newly generated URL.
+ *
+ * @a adm_access is an access baton for the directory containing
+ * @a path.
+ *
+ * @since New in 1.5.
+
+
+
+Similar to @c svn_wc_relocation_validator2_t, but without
+ * the @a root and @a pool arguments. @a uuid will not be NULL in this version
+ * of the function.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+Similar to @c svn_wc_relocation_validator3_t, but without
+ * the @a root_url arguments.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
+
+
+
+Relocation validation callback typedef.
+ *
+ * Called for each relocated file/directory. @a uuid, if non-NULL, contains
+ * the expected repository UUID, @a url contains the tentative URL.
+ *
+ * @a baton is a closure object; it should be provided by the
+ * implementation, and passed by the caller.
+ *
+ * If @a root is TRUE, then the implementation should make sure that @a url
+ * is the repository root. Else, it can be an URL inside the repository.
+ * @a pool may be used for temporary allocations.
+ *
+ * @since New in 1.5.
+
+
+
+ Similar to svn_wc_cleanup2(). @a optional_adm_access is an historic
+ relic and not used, it may be NULL.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Recurse from @a path, cleaning up unfinished log business. Perform
+ necessary allocations in @a pool. Any working copy locks under @a path
+ will be taken over and then cleared by this function. If @a diff3_cmd
+ is non-NULL, then use it as the diff3 command for any merging; otherwise,
+ use the built-in merge code.
+
+ WARNING: there is no mechanism that will protect locks that are still
+ being used.
+
+ If @a cancel_func is non-NULL, invoke it with @a cancel_baton at
+ various points during the operation. If it returns an error
+ (typically @c SVN_ERR_CANCELLED), return that error immediately.
+
+ @since New in 1.2.
+
+
+
+Returns a path to the pristine copy of @a path. Should use
+ * svn_wc_get_pristine_contents() instead.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
+
+
+
+Given a @a path to a wc file, return a stream to the @a contents of
+ * the pristine copy of the file. This is needed so clients can do
+ * diffs. If the WC has no text-base, return a @c NULL instead of a
+ * stream.
+ *
+ * @since New in 1.6.
+
+
+
+ Similar to svn_wc_merge_props(), but no baseprops are given.
+ Instead, it's assumed that the incoming propchanges are based
+ against the working copy's own baseprops. While this assumption is
+ correct for 'svn update', it's incorrect for 'svn merge', and can
+ cause flawed behavior. (See issue #2035.)
+
+ @deprecated Provided for backward compatibility with the 1.2 API.
+
+
+
+ Same as svn_wc_merge_props2(), but with a @a conflict_func (and
+ baton) of NULL.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+
+Given a @a path under version control, merge an array of @a
+ * propchanges into the path's existing properties. @a propchanges is
+ * an array of @c svn_prop_t objects, and @a baseprops is a hash
+ * representing the original set of properties that @a propchanges is
+ * working against. @a adm_access is an access baton for the directory
+ * containing @a path.
+ *
+ * If @a base_merge is @c FALSE only the working properties will be changed,
+ * if it is @c TRUE both the base and working properties will be changed.
+ *
+ * If @a state is non-NULL, set @a *state to the state of the properties
+ * after the merge.
+ *
+ * If conflicts are found when merging working properties, they are
+ * described in a temporary .prej file (or appended to an already-existing
+ * .prej file), and the entry is marked "conflicted". Base properties
+ * are changed unconditionally, if @a base_merge is @c TRUE, they never result
+ * in a conflict.
+ *
+ * If @a path is not under version control, return the error
+ * SVN_ERR_UNVERSIONED_RESOURCE and don't touch anyone's properties.
+ *
+ * @since New in 1.5.
+
+
+
+Similar to svn_wc_merge2(), but with @a merge_options set to NULL.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+Similar to svn_wc_merge3(), but with @a prop_diff, @a
+ * conflict_func, @a conflict_baton set to NULL.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
+
+
+
+Given paths to three fulltexts, merge the differences between @a left
+ * and @a right into @a merge_target. (It may help to know that @a left,
+ * @a right, and @a merge_target correspond to "OLDER", "YOURS", and "MINE",
+ * respectively, in the diff3 documentation.) Use @a pool for any
+ * temporary allocation.
+ *
+ * @a adm_access is an access baton with a write lock for the directory
+ * containing @a merge_target.
+ *
+ * This function assumes that @a left and @a right are in repository-normal
+ * form (linefeeds, with keywords contracted); if necessary,
+ * @a merge_target is temporarily converted to this form to receive the
+ * changes, then translated back again.
+ *
+ * If @a merge_target is absent, or present but not under version
+ * control, then set @a *merge_outcome to @c svn_wc_merge_no_merge and
+ * return success without merging anything. (The reasoning is that if
+ * the file is not versioned, then it is probably unrelated to the
+ * changes being considered, so they should not be merged into it.)
+ *
+ * @a dry_run determines whether the working copy is modified. When it
+ * is @c FALSE the merge will cause @a merge_target to be modified, when it
+ * is @c TRUE the merge will be carried out to determine the result but
+ * @a merge_target will not be modified.
+ *
+ * If @a diff3_cmd is non-NULL, then use it as the diff3 command for
+ * any merging; otherwise, use the built-in merge code. If @a
+ * merge_options is non-NULL, either pass its elements to @a diff3_cmd or
+ * parse it and use as options to the internal merge code (see
+ * svn_diff_file_options_parse()). @a merge_options must contain
+ * const char * elements.
+ *
+ * The outcome of the merge is returned in @a *merge_outcome. If there
+ * is a conflict and @a dry_run is @c FALSE, then attempt to call @a
+ * conflict_func with @a conflict_baton (if non-NULL). If the
+ * conflict callback cannot resolve the conflict, then:
+ *
+ * * Put conflict markers around the conflicting regions in
+ * @a merge_target, labeled with @a left_label, @a right_label, and
+ * @a target_label. (If any of these labels are @c NULL, default
+ * values will be used.)
+ *
+ * * Copy @a left, @a right, and the original @a merge_target to unique
+ * names in the same directory as @a merge_target, ending with the
+ * suffixes ".LEFT_LABEL", ".RIGHT_LABEL", and ".TARGET_LABEL"
+ * respectively.
+ *
+ * * Mark the entry for @a merge_target as "conflicted", and track the
+ * above mentioned backup files in the entry as well.
+ *
+ * Binary case:
+ *
+ * If @a merge_target is a binary file, then no merging is attempted,
+ * the merge is deemed to be a conflict. If @a dry_run is @c FALSE the
+ * working @a merge_target is untouched, and copies of @a left and
+ * @a right are created next to it using @a left_label and @a right_label.
+ * @a merge_target's entry is marked as "conflicted", and begins
+ * tracking the two backup files. If @a dry_run is @c TRUE no files are
+ * changed. The outcome of the merge is returned in @a *merge_outcome.
+ *
+ * @since New in 1.5.
+
+
+
+The outcome of a merge carried out (or tried as a dry-run) by
+ * svn_wc_merge()
+
+
+
+No merge was performed, probably because the target file was
+ * either absent or not under version control.
+
+
+
+The working copy has been (or would be) changed, but there was (or
+ * would be) a conflict
+
+
+
+The working copy has been (or would be) changed.
+
+
+The working copy is (or would be) unchanged. The changes to be
+ * merged were already present in the working copy
+
+
+
+Given a @a path to a file or directory under version control, discover
+ * any local changes made to properties and/or the set of 'pristine'
+ * properties. @a adm_access is an access baton set for @a path.
+ *
+ * If @a propchanges is non-@c NULL, return these changes as an array of
+ * @c svn_prop_t structures stored in @a *propchanges. The structures and
+ * array will be allocated in @a pool. If there are no local property
+ * modifications on @a path, then set @a *propchanges to @c NULL.
+ *
+ * If @a original_props is non-@c NULL, then set @a *original_props to
+ * hashtable (const char *name -> const svn_string_t *value)
+ * that represents the 'pristine' property list of @a path. This hashtable is
+ * allocated in @a pool, and can be used to compare old and new values of
+ * properties.
+
+
+
+ Similar to svn_wc_diff2(), but with @a ignore_ancestry always set
+ to @c FALSE.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_diff3(), but with a @c svn_wc_diff_callbacks_t argument
+ instead of @c svn_wc_diff_callbacks2_t.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_wc_diff4(), but with @a changelists passed @c NULL,
+ and @a depth set to @c svn_depth_infinity if @a recurse is TRUE, or
+ @c svn_depth_files if @a recurse is FALSE.
+
+ @deprecated Provided for backward compatibility with the 1.2 API.
+
+
+
+ Similar to svn_wc_diff5(), but with a @c svn_wc_diff_callbacks2_t argument
+ instead of @c svn_wc_diff_callbacks3_t.
+
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ Compare working copy against the text-base.
+
+ @a anchor/@a target represent the base of the hierarchy to be compared.
+
+ @a callbacks/@a callback_baton is the callback table to use when two
+ files are to be compared.
+
+ If @a depth is @c svn_depth_empty, just diff exactly @a target or
+ @a anchor if @a target is empty. If @c svn_depth_files then do the same
+ and for top-level file entries as well (if any). If
+ @c svn_depth_immediates, do the same as @c svn_depth_files but also diff
+ top-level subdirectories at @c svn_depth_empty. If @c svn_depth_infinity,
+ then diff fully recursively. In the latter case, @a anchor should be part
+ of an access baton set for the @a target hierarchy.
+
+ @a ignore_ancestry determines whether paths that have discontinuous node
+ ancestry are treated as delete/add or as simple modifications. If
+ @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will
+ result in the diff given as a full delete followed by an add.
+
+ @a changelists is an array of const char * changelist
+ names, used as a restrictive filter on items whose differences are
+ reported; that is, don't generate diffs about any item unless
+ it's a member of one of those changelists. If @a changelists is
+ empty (or altogether @c NULL), no changelist filtering occurs.
+
+ @since New in 1.6.
+
+
+
+ Similar to svn_wc_get_diff_editor2(), but with @a ignore_ancestry
+ always set to @c FALSE.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_get_diff_editor3(), but with an
+ @c svn_wc_diff_callbacks_t instead of @c svn_wc_diff_callbacks2_t.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ * Similar to svn_wc_get_diff_editor4(), but with @a changelists
+ * passed as @c NULL, and @a depth set to @c svn_depth_infinity if @a
+ * recurse is TRUE, or @c svn_depth_files if @a recurse is FALSE.
+ *
+ * @deprecated Provided for backward compatibility with the 1.4 API.
+
+ * @since New in 1.2.
+
+
+
+ Similar to svn_wc_get_diff_editor5(), but with an
+ @c svn_wc_diff_callbacks2_t instead of @c svn_wc_diff_callbacks3_t.
+
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ Return an @a editor/@a edit_baton for diffing a working copy against the
+ repository.
+
+ @a anchor/@a target represent the base of the hierarchy to be compared.
+
+ @a callbacks/@a callback_baton is the callback table to use when two
+ files are to be compared.
+
+ If @a depth is @c svn_depth_empty, just diff exactly @a target or
+ @a anchor if @a target is empty. If @c svn_depth_files then do the same
+ and for top-level file entries as well (if any). If
+ @c svn_depth_immediates, do the same as @c svn_depth_files but also diff
+ top-level subdirectories at @c svn_depth_empty. If @c svn_depth_infinity,
+ then diff fully recursively. In the latter case, @a anchor should be part
+ of an access baton set for the @a target hierarchy.
+
+ @a ignore_ancestry determines whether paths that have discontinuous node
+ ancestry are treated as delete/add or as simple modifications. If
+ @a ignore_ancestry is @c FALSE, then any discontinuous node ancestry will
+ result in the diff given as a full delete followed by an add.
+
+ If @a use_text_base is TRUE, then compare the repository against
+ the working copy's text-base files, rather than the working files.
+
+ Normally, the difference from repository->working_copy is shown.
+ If @a reverse_order is TRUE, then show working_copy->repository diffs.
+
+ If @a cancel_func is non-NULL, it will be used along with @a cancel_baton
+ to periodically check if the client has canceled the operation.
+
+ @a changelists is an array of const char * changelist
+ names, used as a restrictive filter on items whose differences are
+ reported; that is, don't generate diffs about any item unless
+ it's a member of one of those changelists. If @a changelists is
+ empty (or altogether @c NULL), no changelist filtering occurs.
+
+ @since New in 1.6.
+
+
+
+Canonicalize the value of an svn:* property @a propname with
+ * value @a propval.
+ *
+ * If the property is not appropriate for a node of kind @a kind, or
+ * is otherwise invalid, throw an error. Otherwise, set @a *propval_p
+ * to a canonicalized version of the property value. If @a
+ * skip_some_checks is TRUE, only some validity checks are taken.
+ *
+ * Some validity checks require access to the contents and MIME type
+ * of the target if it is a file; they will call @a prop_getter with @a
+ * getter_baton, which then needs to set the MIME type and print the
+ * contents of the file to the given stream.
+ *
+ * @a path should be the path of the file in question; it is only used
+ * for error messages.
+ *
+ * ### This is not actually related to the WC, but it does need to call
+ * ### svn_wc_parse_externals_description2.
+
+
+
+Callback type used by @c svn_wc_canonicalize_svn_prop.
+ *
+ * If @a mime_type is non-null, it sets @a *mime_type to the value of
+ * @c SVN_PROP_MIME_TYPE for the path passed to @c
+ * svn_wc_canonicalize_svn_prop (allocated from @a pool). If @a
+ * stream is non-null, it writes the contents of the file to @a
+ * stream.
+ *
+ * (Currently, this is used if you are attempting to set the @c
+ * SVN_PROP_EOL_STYLE property, to make sure that the value matches
+ * the mime type and contents.)
+
+
+
+Return TRUE iff @a name is a 'entry' property name.
+
+
+Return TRUE iff @a name is a 'wc' property name.
+
+
+Return TRUE iff @a name is a 'normal' property name. 'Normal' is
+ * defined as a user-visible and user-tweakable property that shows up
+ * when you fetch a proplist.
+ *
+ * The function currently parses the namespace like so:
+ *
+ * - 'svn:wc:' ==> a wcprop, stored/accessed separately via different API.
+ *
+ * - 'svn:entry:' ==> an "entry" prop, shunted into the 'entries' file.
+ *
+ * If these patterns aren't found, then the property is assumed to be
+ * Normal.
+
+
+
+ Like svn_wc_prop_set2(), but with @a skip_checks always FALSE.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Like svn_wc_prop_set3(), but without the notification callbacks.
+
+ @since New in 1.2.
+
+
+
+ Set property @a name to @a value for @a path, or if @a value is
+ NULL, remove property @a name from @a path. @a adm_access is an
+ access baton with a write lock for @a path.
+
+ If @a skip_checks is TRUE, do no validity checking. But if @a
+ skip_checks is FALSE, and @a name is not a valid property for @a
+ path, return an error, either @c SVN_ERR_ILLEGAL_TARGET (if the
+ property is not appropriate for @a path), or @c
+ SVN_ERR_BAD_MIME_TYPE (if @a name is "svn:mime-type", but @a value
+ is not a valid mime-type).
+
+ @a name may be a wc property or a regular property; but if it is an
+ entry property, return the error @c SVN_ERR_BAD_PROP_KIND, even if
+ @a skip_checks is TRUE.
+
+ For each file or directory operated on, @a notify_func will be called
+ with its path and the @a notify_baton. @a notify_func may be @c NULL
+ if you are not interested in this information.
+
+ Use @a pool for temporary allocation.
+
+ @since New in 1.6.
+
+
+
+Set @a *value to the value of property @a name for @a path, allocating
+ * @a *value in @a pool. If no such prop, set @a *value to @c NULL.
+ * @a name may be a regular or wc property; if it is an entry property,
+ * return the error @c SVN_ERR_BAD_PROP_KIND. @a adm_access is an access
+ * baton set that contains @a path.
+
+
+
+Set @a *props to a hash table mapping char * names onto
+ * svn_string_t * values for all the regular properties of
+ * @a path. Allocate the table, names, and values in @a pool. If
+ * the node has no properties, or does not exist in the working copy,
+ * then an empty hash is returned. @a adm_access is an access baton
+ * set that contains @a path.
+
+
+
+ Similar to svn_wc_get_switch_editor2(), but takes an
+ @c svn_wc_notify_func_t instead.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_wc_get_switch_editor3() but with the
+ @a allow_unver_obstructions parameter always set to FALSE,
+ @a preserved_exts set to NULL, @a conflict_func and baton set to NULL,
+ @a depth_is_sticky set to FALSE, and @a depth set according to @a
+ recurse: if @a recurse is TRUE, pass @c svn_depth_infinity, if
+ FALSE, pass @c svn_depth_files.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ A variant of svn_wc_get_update_editor().
+
+ Set @a *editor and @a *edit_baton to an editor and baton for "switching"
+ a working copy to a new @a switch_url. (Right now, this URL must be
+ within the same repository that the working copy already comes
+ from.) @a switch_url must not be @c NULL.
+
+ If @a ti is non-NULL, record traversal info in @a ti, for use by
+ post-traversal accessors such as svn_wc_edited_externals().
+
+ @a anchor is an access baton, with a write lock, for the local path to the
+ working copy which will be used as the root of our editor. Further
+ locks will be acquired if the switch creates new directories. All
+ locks, both those in @a anchor and newly acquired ones, will be released
+ when the editor driver calls @c close_edit.
+
+ @a target is the entry in @a anchor that will actually be updated, or
+ empty if all of @a anchor should be updated.
+
+ The editor invokes @a notify_func with @a notify_baton as the switch
+ progresses, if @a notify_func is non-NULL.
+
+ If @a cancel_func is non-NULL, it will be called with @a cancel_baton as
+ the switch progresses to determine if it should continue.
+
+ If @a conflict_func is non-NULL, then invoke it with @a
+ conflict_baton whenever a conflict is encountered, giving the
+ callback a chance to resolve the conflict before the editor takes
+ more drastic measures (such as marking a file conflicted, or
+ bailing out of the switch).
+
+ If @a diff3_cmd is non-NULL, then use it as the diff3 command for
+ any merging; otherwise, use the built-in merge code.
+
+ @a preserved_exts is an array of filename patterns which, when
+ matched against the extensions of versioned files, determine for
+ which such files any related generated conflict files will preserve
+ the original file's extension as their own. If a file's extension
+ does not match any of the patterns in @a preserved_exts (which is
+ certainly the case if @a preserved_exts is @c NULL or empty),
+ generated conflict files will carry Subversion's custom extensions.
+
+ @a target_revision is a pointer to a revision location which, after
+ successful completion of the drive of this editor, will be
+ populated with the revision to which the working copy was updated.
+
+ If @a use_commit_times is TRUE, then all edited/added files will
+ have their working timestamp set to the last-committed-time. If
+ FALSE, the working files will be touched with the 'now' time.
+
+ @a depth and @a depth_is_sticky behave as for svn_wc_get_update_editor3().
+
+ If @a allow_unver_obstructions is TRUE, then allow unversioned
+ obstructions when adding a path.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_wc_get_update_editor2(), but takes an svn_wc_notify_func_t
+ instead.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_wc_get_update_editor3() but with the @a
+ allow_unver_obstructions parameter always set to FALSE, @a
+ conflict_func and baton set to NULL, @a fetch_func and baton set to
+ NULL, @a preserved_exts set to NULL, @a depth_is_sticky set to
+ FALSE, and @a depth set according to @a recurse: if @a recurse is
+ TRUE, pass @c svn_depth_infinity, if FALSE, pass @c
+ svn_depth_files.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Set @a *editor and @a *edit_baton to an editor and baton for updating a
+ working copy.
+
+ If @a ti is non-NULL, record traversal info in @a ti, for use by
+ post-traversal accessors such as svn_wc_edited_externals().
+
+ @a anchor is an access baton, with a write lock, for the local path to the
+ working copy which will be used as the root of our editor. Further
+ locks will be acquired if the update creates new directories. All
+ locks, both those in @a anchor and newly acquired ones, will be released
+ when the editor driver calls @c close_edit.
+
+ @a target is the entry in @a anchor that will actually be updated, or
+ the empty string if all of @a anchor should be updated.
+
+ The editor invokes @a notify_func with @a notify_baton as the update
+ progresses, if @a notify_func is non-NULL.
+
+ If @a cancel_func is non-NULL, the editor will invoke @a cancel_func with
+ @a cancel_baton as the update progresses to see if it should continue.
+
+ If @a conflict_func is non-NULL, then invoke it with @a
+ conflict_baton whenever a conflict is encountered, giving the
+ callback a chance to resolve the conflict before the editor takes
+ more drastic measures (such as marking a file conflicted, or
+ bailing out of the update).
+
+ If @a fetch_func is non-NULL, then use it (with @a fetch_baton) as
+ a fallback for retrieving repository files whenever 'copyfrom' args
+ are sent into editor->add_file().
+
+ If @a diff3_cmd is non-NULL, then use it as the diff3 command for
+ any merging; otherwise, use the built-in merge code.
+
+ @a preserved_exts is an array of filename patterns which, when
+ matched against the extensions of versioned files, determine for
+ which such files any related generated conflict files will preserve
+ the original file's extension as their own. If a file's extension
+ does not match any of the patterns in @a preserved_exts (which is
+ certainly the case if @a preserved_exts is @c NULL or empty),
+ generated conflict files will carry Subversion's custom extensions.
+
+ @a target_revision is a pointer to a revision location which, after
+ successful completion of the drive of this editor, will be
+ populated with the revision to which the working copy was updated.
+
+ If @a use_commit_times is TRUE, then all edited/added files will
+ have their working timestamp set to the last-committed-time. If
+ FALSE, the working files will be touched with the 'now' time.
+
+ If @a allow_unver_obstructions is TRUE, then allow unversioned
+ obstructions when adding a path.
+
+ If @a depth is @c svn_depth_infinity, update fully recursively.
+ Else if it is @c svn_depth_immediates, update the uppermost
+ directory, its file entries, and the presence or absence of
+ subdirectories (but do not descend into the subdirectories).
+ Else if it is @c svn_depth_files, update the uppermost directory
+ and its immediate file entries, but not subdirectories.
+ Else if it is @c svn_depth_empty, update exactly the uppermost
+ target, and don't touch its entries.
+
+ If @a depth_is_sticky is set and @a depth is not @c
+ svn_depth_unknown, then in addition to updating PATHS, also set
+ their sticky ambient depth value to @a depth.
+
+ @since New in 1.5.
+
+
+
+Conditionally split @a path into an @a anchor and @a target for the
+ * purpose of updating and committing.
+ *
+ * @a anchor is the directory at which the update or commit editor
+ * should be rooted.
+ *
+ * @a target is the actual subject (relative to the @a anchor) of the
+ * update/commit, or "" if the @a anchor itself is the subject.
+ *
+ * Allocate @a anchor and @a target in @a pool.
+
+
+
+Set @a *wc_root to @c TRUE if @a path represents a "working copy root",
+ * @c FALSE otherwise. Here, @a path is a "working copy root" if its parent
+ * directory is not a WC or if its parent directory's repository URL is not
+ * the parent of its own repository URL. Thus, a switched subtree is
+ * considered to be a working copy root. Also, a deleted tree-conflict
+ * victim is considered a "working copy root" because it has no URL.
+ *
+ * If @a path is not found, return the error @c SVN_ERR_ENTRY_NOT_FOUND.
+ *
+ * Use @a pool for any intermediate allocations.
+ *
+ * @note Due to the way in which "WC-root-ness" is calculated, passing
+ * a @a path of `.' to this function will always return @c TRUE.
+
+
+
+ Similar to svn_wc_crawl_revisions2(), but takes an svn_wc_notify_func_t
+ and a @c svn_reporter_t instead.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_wc_crawl_revisions3, but taking svn_ra_reporter2_t
+ instead of svn_ra_reporter3_t, and therefore only able to report @c
+ svn_depth_infinity for depths; and taking @a recurse instead of @a
+ depth; and with @a depth_compatibility_trick always false.
+
+ @deprecated Provided for compatibility with the 1.4 API.
+
+
+
+ Similar to svn_wc_crawl_revisions4, but with @a honor_depth_exclude always
+ set to false.
+
+ @deprecated Provided for compatibility with the 1.5 API.
+
+
+
+ Do a depth-first crawl in a working copy, beginning at @a path.
+
+ Communicate the `state' of the working copy's revisions and depths
+ to @a reporter/@a report_baton. Obviously, if @a path is a file
+ instead of a directory, this depth-first crawl will be a short one.
+
+ No locks are or logs are created, nor are any animals harmed in the
+ process. No cleanup is necessary. @a adm_access must be an access
+ baton for the @a path hierarchy, it does not require a write lock.
+
+ After all revisions are reported, @a reporter->finish_report() is
+ called, which immediately causes the RA layer to update the working
+ copy. Thus the return value may very well reflect the result of
+ the update!
+
+ If @a depth is @c svn_depth_empty, then report state only for
+ @a path itself. If @c svn_depth_files, do the same and include
+ immediate file children of @a path. If @c svn_depth_immediates,
+ then behave as if for @c svn_depth_files but also report the
+ property states of immediate subdirectories. If @a depth is
+ @c svn_depth_infinity, then report state fully recursively. All
+ descents are only as deep as @a path's own depth permits, of
+ course. If @a depth is @c svn_depth_unknown, then just use
+ @c svn_depth_infinity, which in practice means depth of @a path.
+
+ Iff @a honor_depth_exclude is TRUE, the crawler will report paths
+ whose ambient depth is @c svn_depth_exclude as being excluded, and
+ thus prevent the server from pushing update data for those paths;
+ therefore, don't set this flag if you wish to pull in excluded paths.
+ Note that @c svn_depth_exclude on the target @a path is never
+ honored, even if @a honor_depth_exclude is TRUE, because we need to
+ be able to explicitly pull in a target. For example, if this is
+ the working copy...
+
+ svn co greek_tree_repos wc_dir
+ svn up --set-depth exclude wc_dir/A/B/E # now A/B/E is excluded
+
+ ...then 'svn up wc_dir/A/B' would report E as excluded (assuming
+ @a honor_depth_exclude is TRUE), but 'svn up wc_dir/A/B/E' would
+ not, because the latter is trying to explicitly pull in E. In
+ general, we never report the update target as excluded.
+
+ Iff @a depth_compatibility_trick is TRUE, then set the @c start_empty
+ flag on @a reporter->set_path() and @a reporter->link_path() calls
+ as necessary to trick a pre-1.5 (i.e., depth-unaware) server into
+ sending back all the items the client might need to upgrade a
+ working copy from a shallower depth to a deeper one.
+
+ If @a restore_files is TRUE, then unexpectedly missing working files
+ will be restored from the administrative directory's cache. For each
+ file restored, the @a notify_func function will be called with the
+ @a notify_baton and the path of the restored file. @a notify_func may
+ be @c NULL if this notification is not required. If @a
+ use_commit_times is TRUE, then set restored files' timestamps to
+ their last-commit-times.
+
+ If @a traversal_info is non-NULL, then record pre-update traversal
+ state in it. (Caller should obtain @a traversal_info from
+ svn_wc_init_traversal_info().)
+
+ @since New in 1.6.
+
+
+
+@see svn_wc_process_committed4()
+ *
+ * @deprecated Use the svn_wc_committed_queue_* functions instead. Provided
+ * for backward compatibility with the 1.1 API.
+
+
+
+@see svn_wc_process_committed4()
+ *
+ * @deprecated Use the svn_wc_committed_queue_* functions instead. Provided
+ * for backwards compatibility with the 1.3 API.
+
+
+
+@see svn_wc_process_committed4()
+ *
+ * @deprecated Use the svn_wc_committed_queue_* functions instead. Provided
+ * for backwards compatibility with the 1.4 API.
+
+
+
+ @note this function has improper expectations around the operation and
+ execution of other parts of the Subversion WC library. The resulting
+ coupling makes this interface near-impossible to support. Documentation
+ has been removed, as a result.
+
+ @deprecated Use the svn_wc_committed_queue_* functions instead. Provided
+ for backwards compatibility with the 1.5 API.
+
+
+
+ Bump all items in @a queue to @a new_revnum after a commit succeeds.
+ @a rev_date and @a rev_author are the (server-side) date and author
+ of the new revision; one or both may be @c NULL.
+
+ @a adm_access must be associated with all affected directories, and
+ must hold a write lock in each one.
+
+ @since New in 1.5.
+
+
+
+Same as svn_wc_queue_committed2() but the @a queue parameter has an
+ * extra indirection and @a digest is supplied instead of a checksum type.
+ *
+ * @note despite the extra indirection, this function does NOT allocate
+ * the queue for you. svn_wc_committed_queue_create() must be called.
+ *
+ * @since New in 1.5
+ *
+ * @deprecated Provided for backwards compatibility with 1.5
+
+
+
+ Queue committed items to be processed later by
+ svn_wc_process_committed_queue().
+
+ All pointer data passed to this function (@a path, @a adm_access,
+ @a wcprop_changes and @a checksum) should remain valid until the queue
+ has been processed by svn_wc_process_committed_queue().
+
+ Record in @a queue that @a path will need to be bumped after a commit
+ succeeds. @a adm_access must hold a write lock appropriate for @a path.
+
+ If non-NULL, @a wcprop_changes is an array of svn_prop_t *
+ changes to wc properties; if an @c svn_prop_t->value is NULL, then
+ that property is deleted.
+
+ If @a remove_lock is @c TRUE, any entryprops related to a repository
+ lock will be removed.
+
+ If @a remove_changelist is @c TRUE, any association with a
+ changelist will be removed.
+
+ If @a path is a file and @a checksum is non-NULL, use @a checksum as
+ the checksum for the new text base. Otherwise, calculate the checksum
+ if needed.
+
+ If @a recurse is TRUE and @a path is a directory, then bump every
+ versioned object at or under @a path. This is usually done for
+ copied trees.
+
+ Temporary allocations will be performed in @a scratch_pool, and persistent
+ allocations will use the same pool as @a queue used when it was created.
+
+ @note the @a recurse parameter should be used with extreme care since
+ it will bump ALL nodes under the directory, regardless of their
+ actual inclusion in the new revision.
+
+ @since New in 1.6.
+
+
+
+ Create a queue for use with svn_wc_queue_committed() and
+ svn_wc_process_committed_queue().
+
+ The returned queue and all further allocations required for queueing
+ new items will also be done from @a pool.
+
+ @since New in 1.5.
+
+
+
+ Storage type for queued post-commit data.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_wc_resolved_conflict2(), but takes an
+ svn_wc_notify_func_t and doesn't have cancellation support.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_resolved_conflict3(), but without automatic conflict
+ resolution support, and with @a depth set according to @a recurse:
+ if @a recurse is TRUE, @a depth is @c svn_depth_infinity, else it is
+ @c svn_depth_files.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Similar to svn_wc_resolved_conflict4(), but without tree-conflict
+ resolution support.
+
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ Assuming @a path is under version control and in a state of conflict,
+ then take @a path *out* of this state. If @a resolve_text is TRUE then
+ any text conflict is resolved, if @a resolve_props is TRUE then any
+ property conflicts are resolved, if @a resolve_tree is TRUE then any
+ tree conflicts are resolved.
+
+ If @a depth is @c svn_depth_empty, act only on @a path; if
+ @c svn_depth_files, resolve @a path and its conflicted file
+ children (if any); if @c svn_depth_immediates, resolve @a path and
+ all its immediate conflicted children (both files and directories,
+ if any); if @c svn_depth_infinity, resolve @a path and every
+ conflicted file or directory anywhere beneath it.
+
+ If @a conflict_choice is @c svn_wc_conflict_choose_base, resolve the
+ conflict with the old file contents; if
+ @c svn_wc_conflict_choose_mine_full, use the original working contents;
+ if @c svn_wc_conflict_choose_theirs_full, the new contents; and if
+ @c svn_wc_conflict_choose_merged, don't change the contents at all,
+ just remove the conflict status, which is the pre-1.5 behavior.
+
+ @c svn_wc_conflict_choose_theirs_conflict and @c
+ svn_wc_conflict_choose_mine_conflict are not legal for binary
+ files or properties.
+
+ @a adm_access is an access baton, with a write lock, for @a path.
+
+ Needless to say, this function doesn't touch conflict markers or
+ anything of that sort -- only a human can semantically resolve a
+ conflict. Instead, this function simply marks a file as "having
+ been resolved", clearing the way for a commit.
+
+ The implementation details are opaque, as our "conflicted" criteria
+ might change over time. (At the moment, this routine removes the
+ three fulltext 'backup' files and any .prej file created in a conflict,
+ and modifies @a path's entry.)
+
+ If @a path is not under version control, return @c SVN_ERR_ENTRY_NOT_FOUND.
+ If @a path isn't in a state of conflict to begin with, do nothing, and
+ return @c SVN_NO_ERROR.
+
+ If @c path was successfully taken out of a state of conflict, report this
+ information to @c notify_func (if non-@c NULL.) If only text, only
+ property, or only tree conflict resolution was requested, and it was
+ successful, then success gets reported.
+
+ @since New in 1.6.
+
+
+
+Remove entry @a name in @a adm_access from revision control. @a name
+ * must be either a file or @c SVN_WC_ENTRY_THIS_DIR. @a adm_access must
+ * hold a write lock.
+ *
+ * If @a name is a file, all its info will be removed from @a adm_access's
+ * administrative directory. If @a name is @c SVN_WC_ENTRY_THIS_DIR, then
+ * @a adm_access's entire administrative area will be deleted, along with
+ * *all* the administrative areas anywhere in the tree below @a adm_access.
+ *
+ * Normally, only administrative data is removed. However, if
+ * @a destroy_wf is TRUE, then all working file(s) and dirs are deleted
+ * from disk as well. When called with @a destroy_wf, any locally
+ * modified files will *not* be deleted, and the special error
+ * @c SVN_ERR_WC_LEFT_LOCAL_MOD might be returned. (Callers only need to
+ * check for this special return value if @a destroy_wf is TRUE.)
+ *
+ * If @a instant_error is TRUE, then return @c
+ * SVN_ERR_WC_LEFT_LOCAL_MOD the instant a locally modified file is
+ * encountered. Otherwise, leave locally modified files in place and
+ * return the error only after all the recursion is complete.
+ *
+ * If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ * various points during the removal. If it returns an error
+ * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+ *
+ * WARNING: This routine is exported for careful, measured use by
+ * libsvn_client. Do *not* call this routine unless you really
+ * understand what the heck you're doing.
+
+
+
+Same as svn_wc_add_repos_file3(), except that it doesn't have the
+ * BASE arguments or cancellation.
+ *
+ * @deprecated Provided for compatibility with the 1.3 API
+
+
+
+Same as svn_wc_add_repos_file3(), except that it has pathnames rather
+ * than streams for the text base, and actual text, and has no cancellation.
+ *
+ * @since New in 1.4.
+ * @deprecated Provided for compatibility with the 1.5 API
+
+
+
+Add a file to a working copy at @a dst_path, obtaining the text-base's
+ * contents from @a new_base_contents, the wc file's content from
+ * @a new_contents, its base properties from @a new_base_props and
+ * wc properties from @a new_props.
+ *
+ * The base text and props normally come from the repository file
+ * represented by the copyfrom args, see below. The new file will
+ * be scheduled for addition with history.
+ *
+ * @a new_contents and @a new_props may be NULL, in which case
+ * the working copy text and props are taken from the base files with
+ * appropriate translation of the file's content.
+ *
+ * @a new_contents must be provided in Normal Form. This is required
+ * in order to pass both special and non-special files through a stream.
+ *
+ * @a adm_access, or an access baton in its associated set, must
+ * contain a write lock for the parent of @a dst_path.
+ *
+ * If @a copyfrom_url is non-NULL, then @a copyfrom_rev must be a
+ * valid revision number, and together they are the copyfrom history
+ * for the new file.
+ *
+ * The @a cancel_func and @a cancel_baton are a standard cancellation
+ * callback, or NULL if no callback is needed. @a notify_func and
+ * @a notify_baton are a notification callback, and will be notified
+ * of the addition of this file.
+ *
+ * Use @a scratch_pool for temporary allocations.
+ *
+ * ### NOTE: the notification callback/baton is not yet used.
+ *
+ * ### This function is very redundant with svn_wc_add(). Ideally,
+ * we'd merge them, so that svn_wc_add() would just take optional
+ * new_props and optional copyfrom information. That way it could be
+ * used for both 'svn add somefilesittingonmydisk' and for adding
+ * files from repositories, with or without copyfrom history.
+ *
+ * The problem with this Ideal Plan is that svn_wc_add() also takes
+ * care of recursive URL-rewriting. There's a whole comment in its
+ * doc string about how that's really weird, outside its core mission,
+ * etc, etc. So another part of the Ideal Plan is that that
+ * functionality of svn_wc_add() would move into a separate function.
+ *
+ * @since New in 1.6
+
+
+
+ Similar to svn_wc_add2(), but takes an @c svn_wc_notify_func_t instead.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_wc_add3(), but with the @a depth parameter always
+ @c svn_depth_infinity.
+
+ @since New in 1.2.
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ Put @a path under version control by adding an entry in its parent,
+ and, if @a path is a directory, adding an administrative area. The
+ new entry and anything under it is scheduled for addition to the
+ repository. @a parent_access should hold a write lock for the parent
+ directory of @a path. If @a path is a directory then an access baton
+ for @a path will be added to the set containing @a parent_access.
+
+ If @a path does not exist, return @c SVN_ERR_WC_PATH_NOT_FOUND.
+
+ If @a path is a directory, add it at @a depth; otherwise, ignore
+ @a depth.
+
+ If @a copyfrom_url is non-NULL, it and @a copyfrom_rev are used as
+ `copyfrom' args. This is for copy operations, where one wants
+ to schedule @a path for addition with a particular history.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ various points during the operation. If it returns an error
+ (typically @c SVN_ERR_CANCELLED), return that error immediately.
+
+ When the @a path has been added, then @a notify_func will be called
+ (if it is not @c NULL) with the @a notify_baton and the path.
+
+ Return @c SVN_ERR_WC_NODE_KIND_CHANGE if @a path is both an unversioned
+ directory and a file that is scheduled for deletion or in state deleted.
+
+ ### This function currently does double duty -- it is also
+ ### responsible for "switching" a working copy directory over to a
+ ### new copyfrom ancestry and scheduling it for addition. Here is
+ ### the old doc string from Ben, lightly edited to bring it
+ ### up-to-date, explaining the TRUE, secret life of this function:
+
+ Given a @a path within a working copy of type KIND, follow this algorithm:
+
+ - if @a path is not under version control:
+ - Place it under version control and schedule for addition;
+ if @a copyfrom_url is non-NULL, use it and @a copyfrom_rev as
+ 'copyfrom' history
+
+ - if @a path is already under version control:
+ (This can only happen when a directory is copied, in which
+ case ancestry must have been supplied as well.)
+
+ - Schedule the directory itself for addition with copyfrom history.
+ - Mark all its children with a 'copied' flag
+ - Rewrite all the URLs to what they will be after a commit.
+ - ### @todo Remove old wcprops too, see the '###' below.
+
+ ### I think possibly the "switchover" functionality should be
+ ### broken out into a separate function, but its all intertwined in
+ ### the code right now. Ben, thoughts? Hard? Easy? Mauve?
+
+ ### Update: see "###" comment in svn_wc_add_repos_file3()'s doc
+ string about this.
+
+ @since New in 1.6.
+
+
+
+ Similar to svn_wc_delete2(), but takes an @c svn_wc_notify_func_t instead.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_wc_delete3(), but with @a keep_local always set to FALSE.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Schedule @a path for deletion, it will be deleted from the repository on
+ the next commit. If @a path refers to a directory, then a recursive
+ deletion will occur. @a adm_access must hold a write lock for the parent
+ of @a path.
+
+ If @a keep_local is FALSE, this function immediately deletes all files,
+ modified and unmodified, versioned and unversioned from the working copy.
+ It also immediately deletes unversioned directories and directories that
+ are scheduled to be added. Only versioned directories will remain in the
+ working copy, these get deleted by the update following the commit.
+
+ If @a keep_local is TRUE, all files and directories will be kept in the
+ working copy (and will become unversioned on the next commit).
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ various points during the operation. If it returns an error
+ (typically @c SVN_ERR_CANCELLED), return that error immediately.
+
+ For each path marked for deletion, @a notify_func will be called with
+ the @a notify_baton and that path. The @a notify_func callback may be
+ @c NULL if notification is not needed.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_wc_copy2(), but takes an @c svn_wc_notify_func_t instead.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+@}
+ Copy @a src to @a dst_basename in @a dst_parent, and schedule
+ @a dst_basename for addition to the repository, remembering the copy
+ history.
+
+ @a src must be a file or directory under version control; @a dst_parent
+ must be a directory under version control in the same working copy;
+ @a dst_basename will be the name of the copied item, and it must not
+ exist already.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton at
+ various points during the operation. If it returns an error
+ (typically @c SVN_ERR_CANCELLED), return that error immediately.
+
+ For each file or directory copied, @a notify_func will be called
+ with its path and the @a notify_baton. @a notify_func may be @c NULL
+ if you are not interested in this information.
+
+ @par Important:
+ This is a variant of svn_wc_add(). No changes will happen
+ to the repository until a commit occurs. This scheduling can be
+ removed with svn_client_revert2().
+
+ @since New in 1.2.
+
+
+
+ Associate @a locks, a hash table mapping const char*
+ absolute repository paths to svn_lock_t objects, with a
+ @a set_locks_baton returned by an earlier call to
+ svn_wc_get_status_editor3(). @a repos_root is the repository root URL.
+ Perform all allocations in @a pool.
+
+ @note @a locks will not be copied, so it must be valid throughout the
+ edit. @a pool must also not be destroyed or cleared before the edit is
+ finished.
+
+ @since New in 1.2.
+
+
+
+ Same as svn_wc_get_status_editor2(), but with @a set_locks_baton set
+ to @c NULL, and taking a deprecated svn_wc_status_func_t argument.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Like svn_wc_get_status_editor3(), but with @a ignore_patterns
+ provided from the corresponding value in @a config, and @a recurse
+ instead of @a depth. If @a recurse is TRUE, behave as if for @c
+ svn_depth_infinity; else if @a recurse is FALSE, behave as if for
+ @c svn_depth_immediates.
+
+ @since New in 1.2.
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Same as svn_wc_get_status_editor4(), but using @c svn_wc_status_func2_t
+ instead of @c svn_wc_status_func3_t.
+
+ @since New in 1.5.
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Set @a *editor and @a *edit_baton to an editor that generates @c
+ svn_wc_status2_t structures and sends them through @a status_func /
+ @a status_baton. @a anchor is an access baton, with a tree lock,
+ for the local path to the working copy which will be used as the
+ root of our editor. If @a target is not empty, it represents an
+ entry in the @a anchor path which is the subject of the editor
+ drive (otherwise, the @a anchor is the subject).
+
+ If @a set_locks_baton is non-@c NULL, it will be set to a baton that can
+ be used in a call to the svn_wc_status_set_repos_locks() function.
+
+ Callers drive this editor to describe working copy out-of-dateness
+ with respect to the repository. If this information is not
+ available or not desired, callers should simply call the
+ close_edit() function of the @a editor vtable.
+
+ If the editor driver calls @a editor's set_target_revision() vtable
+ function, then when the edit drive is completed, @a *edit_revision
+ will contain the revision delivered via that interface.
+
+ Assuming the target is a directory, then:
+
+ - If @a get_all is FALSE, then only locally-modified entries will be
+ returned. If TRUE, then all entries will be returned.
+
+ - If @a depth is @c svn_depth_empty, a status structure will
+ be returned for the target only; if @c svn_depth_files, for the
+ target and its immediate file children; if
+ @c svn_depth_immediates, for the target and its immediate
+ children; if @c svn_depth_infinity, for the target and
+ everything underneath it, fully recursively.
+
+ If @a depth is @c svn_depth_unknown, take depths from the
+ working copy and behave as above in each directory's case.
+
+ If the given @a depth is incompatible with the depth found in a
+ working copy directory, the found depth always governs.
+
+ If @a no_ignore is set, statuses that would typically be ignored
+ will instead be reported.
+
+ @a ignore_patterns is an array of file patterns matching
+ unversioned files to ignore for the purposes of status reporting,
+ or @c NULL if the default set of ignorable file patterns should be used.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton while building
+ the @a statushash to determine if the client has cancelled the operation.
+
+ If @a traversal_info is non-NULL, then record pre-update traversal
+ state in it. (Caller should obtain @a traversal_info from
+ svn_wc_init_traversal_info().)
+
+ Allocate the editor itself in @a pool, but the editor does temporary
+ allocations in a subpool of @a pool.
+
+ @since New in 1.6.
+
+
+
+ Same as svn_wc_status_func2_t(), but for older svn_wc_status_t structures.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Same as svn_wc_status_func3_t(), but without a provided pool or
+ the ability to propagate errors.
+
+ @since New in 1.2.
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ A callback for reporting a @a status about @a path.
+
+ @a baton is a closure object; it should be provided by the
+ implementation, and passed by the caller.
+
+ @a pool will be cleared between invocations to the callback.
+
+ @since New in 1.6.
+
+
+
+ Same as svn_wc_status2(), but for older svn_wc_status_t structures.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Fill @a *status for @a path, allocating in @a pool.
+ @a adm_access must be an access baton for @a path.
+
+ Here are some things to note about the returned structure. A quick
+ examination of the @c status->text_status after a successful return of
+ this function can reveal the following things:
+
+ - @c svn_wc_status_none : @a path is not versioned, and is either not
+ present on disk, or is ignored by svn's
+ default ignore regular expressions or the
+ svn:ignore property setting for @a path's
+ parent directory.
+
+ - @c svn_wc_status_missing : @a path is versioned, but is missing from
+ the working copy.
+
+ - @c svn_wc_status_unversioned : @a path is not versioned, but is
+ present on disk and not being
+ ignored (see above).
+
+ The other available results for the @c text_status field are more
+ straightforward in their meanings. See the comments on the
+ @c svn_wc_status_kind structure for some hints.
+
+ @since New in 1.2.
+
+
+
+ Same as svn_wc_dup_status2(), but for older svn_wc_status_t structures.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Return a deep copy of the @a orig_stat status structure, allocated
+ in @a pool.
+
+ @since New in 1.2.
+
+
+
+a file or directory can be 'switched' if the switch command has been
+ * used.
+
+
+
+a file or directory can be 'copied' if it's scheduled for
+ * addition-with-history (or part of a subtree that is scheduled as such.).
+
+
+
+a directory can be 'locked' if a working copy update was interrupted.
+
+
+Can be @c NULL if not under version control.
+
+
+ Same as @c svn_wc_status2_t, but without the svn_lock_t 'repos_lock' field.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+If the item is a file that was added to the working copy with an
+ * svn:externals; if file_external is TRUE, then switched is always
+ * FALSE.
+ * @since New in 1.6
+
+
+
+@}
+Non-NULL if the entry is the victim of a tree conflict.
+ * @since New in 1.6
+
+
+
+Set to the user name of the youngest commit, or @c NULL if not
+ * out of date or non-existent. Because a non-existent @c
+ * svn:author property has the same behavior as an out-of-date
+ * working copy, examine @c ood_last_cmt_rev to determine whether
+ * the working copy is out of date.
+ * @since New in 1.3
+
+
+
+Set to the node kind of the youngest commit, or @c svn_node_none
+ * if not out of date.
+ * @since New in 1.3
+
+
+
+Set to the most recent commit date, or @c 0 if not out of date.
+ * @since New in 1.3
+
+
+
+ @defgroup svn_wc_status_ood WC out-of-date info from the repository
+ @{
+
+ When the working copy item is out-of-date compared to the
+ repository, the following fields represent the state of the
+ youngest revision of the item in the repository. If the working
+ copy is not out of date, the fields are initialized as described
+ below.
+
+Set to the youngest committed revision, or @c SVN_INVALID_REVNUM
+ * if not out of date.
+ * @since New in 1.3
+
+
+
+Set to the URI (actual or expected) of the item.
+ * @since New in 1.3
+
+
+
+The entry's lock in the repository, if any.
+
+
+a file or directory can be 'switched' if the switch command has been
+ * used. If this is TRUE, then file_external will be FALSE.
+
+
+
+a file or directory can be 'copied' if it's scheduled for
+ * addition-with-history (or part of a subtree that is scheduled as such.).
+
+
+
+a directory can be 'locked' if a working copy update was interrupted.
+
+
+Can be @c NULL if not under version control.
+
+
+ Structure for holding the "status" of a working copy item.
+
+ The item's entry data is in @a entry, augmented and possibly shadowed
+ by the other fields. @a entry is @c NULL if this item is not under
+ version control.
+
+ @note Fields may be added to the end of this structure in future
+ versions. Therefore, to preserve binary compatibility, users
+ should not directly allocate structures of this type.
+
+ @since New in 1.2.
+
+
+
+ @defgroup svn_wc_status Working copy status.
+ @{
+
+ We have two functions for getting working copy status: one function
+ for getting the status of exactly one thing, and another for
+ getting the statuses of (potentially) multiple things.
+
+ The concept of depth, as explained in the documentation for
+ svn_depth_t, may be useful in understanding this. Suppose we're
+ getting the status of directory D:
+
+ To offer all three levels, we could have one unified function,
+ taking a `depth' parameter. Unfortunately, because this function
+ would have to handle multiple return values as well as the single
+ return value case, getting the status of just one entity would
+ become cumbersome: you'd have to roll through a hash to find one
+ lone status.
+
+ So we have svn_wc_status() for depth-empty (just D itself), and
+ svn_wc_get_status_editor() for depth-immediates and depth-infinity,
+ since the latter two involve multiple return values.
+
+ @note The status structures may contain a @c NULL ->entry field.
+ This indicates an item that is not versioned in the working copy.
+
+The type of status for the working copy.
+
+The status of the entries text.
+
+The status of the entries properties.
+
+The entry's text status in the repository.
+
+The entry's property status in the repository.
+
+The actual status of the text compared to the pristine base of the
+ * file. This value isn't masked by other working copy statuses.
+ * @c pristine_text_status is @c svn_wc_status_none if this value was
+ * not calculated during the status walk.
+ * @since New in 1.6
+
+
+The actual status of the properties compared to the pristine base of
+ * the node. This value isn't masked by other working copy statuses.
+ * @c pristine_prop_status is @c svn_wc_status_none if this value was
+ * not calculated during the status walk.
+ * @since New in 1.6
+
+
+The status of the entries text.
+
+The status of the entries properties.
+
+The entry's text status in the repository.
+
+The entry's property status in the repository.
+
+
+a directory doesn't contain a complete entries list
+
+
+an unversioned directory path populated by an svn:externals
+ property; this status is not used for file externals
+
+
+an unversioned resource is in the way of the versioned resource
+
+
+is unversioned but configured to be ignored
+
+
+local mods received conflicting repos mods
+
+
+local mods received repos mods
+
+
+text or props have been modified
+
+
+was deleted and then re-added
+
+
+scheduled for deletion
+
+
+under v.c., but is missing
+
+
+is scheduled for addition
+
+
+exists, but uninteresting
+
+
+is not a versioned thing in this wc
+
+
+does not exist
+
+
+Set the repository root URL of @a path to @a repos, if possible.
+ *
+ * @a adm_access must contain @a path and be write-locked, if @a path
+ * is versioned. Return no error if path is missing or unversioned.
+ * Use @a pool for temporary allocations.
+ *
+ * @note In some circumstances, the repository root can't be set
+ * without making the working copy corrupt. In such cases, this
+ * function just returns no error, without modifying the @a path entry.
+ *
+ * @note This function exists to make it possible to try to set the repository
+ * root in old working copies; new working copies normally get this set at
+ * creation time.
+ *
+ * @since New in 1.3.
+
+
+
+ Similar to svn_wc_ensure_adm2(), but with @a repos set to @c NULL.
+
+ @deprecated Provided for backwards compatibility with the 1.2 API.
+
+
+
+ Similar to svn_wc_ensure_adm3(), but with @a depth set to
+ @c svn_depth_infinity.
+
+ @deprecated Provided for backwards compatibility with the 1.4 API.
+
+ @since New in 1.3.
+
+
+
+Ensure that an administrative area exists for @a path, so that @a
+ * path is a working copy subdir based on @a url at @a revision, with
+ * depth @a depth, and with repository UUID @a uuid and repository
+ * root URL @a repos.
+ *
+ * @a depth must be a definite depth, it cannot be @c svn_depth_unknown.
+ * @a uuid and @a repos may be @c NULL. If non-@c NULL, @a repos must
+ * be a prefix of @a url.
+ *
+ * If the administrative area does not exist, then create it and
+ * initialize it to an unlocked state.
+ *
+ * If the administrative area already exists then the given @a url
+ * must match the URL in the administrative area and the given
+ * @a revision must match the BASE of the working copy dir unless
+ * the admin directory is scheduled for deletion or the
+ * SVN_ERR_WC_OBSTRUCTED_UPDATE error will be returned.
+ *
+ * Do not ensure existence of @a path itself; if @a path does not
+ * exist, return error.
+ *
+ * @since New in 1.5.
+
+
+
+Mark missing @a path as 'deleted' in its @a parent's list of entries.
+ *
+ * Return @c SVN_ERR_WC_PATH_FOUND if @a path isn't actually missing.
+
+
+
+ Similar to svn_wc_walk_entries2(), but without cancellation support.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_walk_entries3(), but without cancellation support
+ or error handling from @a walk_callbacks, and with @a depth always
+ set to @c svn_depth_infinity.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ A generic entry-walker.
+
+ Do a potentially recursive depth-first entry-walk beginning on
+ @a path, which can be a file or dir. Call callbacks in
+ @a walk_callbacks, passing @a walk_baton to each. Use @a pool for
+ looping, recursion, and to allocate all entries returned.
+ @a adm_access must be an access baton for @a path.
+
+ If @a depth is @c svn_depth_empty, invoke the callbacks on @a path
+ and return without recursing further. If @c svn_depth_files, do
+ the same and invoke the callbacks on file children (if any) of
+ @a path, then return. If @c svn_depth_immediates, do the preceding
+ but also invoke callbacks on immediate subdirectories, then return.
+ If @c svn_depth_infinity, recurse fully starting from @a path.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ if the client has cancelled the operation.
+
+ Like our other entries interfaces, entries that are in a 'excluded',
+ 'deleted' or 'absent' state (and not scheduled for re-addition) are not
+ discovered, unless @a show_hidden is TRUE. Excluded entries are those with
+ their depth set to @c svn_depth_exclude.
+
+ When a new directory is entered, @c SVN_WC_ENTRY_THIS_DIR will always
+ be returned first.
+
+ @note Callers should be aware that each directory will be
+ returned *twice*: first as an entry within its parent, and
+ subsequently as the '.' entry within itself. The two calls can be
+ distinguished by looking for @c SVN_WC_ENTRY_THIS_DIR in the 'name'
+ field of the entry.
+
+ @since New in 1.5.
+
+
+
+An @a entry was found at @a path.
+
+
+@deprecated Provided for backward compatibility with the 1.4 API.
+
+
+Handle the error @a err encountered while processing @a path.
+ * Wrap or squelch @a err as desired, and return an @c svn_error_t
+ * *, or @c SVN_NO_ERROR.
+
+
+
+An @a entry was found at @a path.
+
+
+A callback vtable invoked by the generic entry-walker function.
+ * @since New in 1.5.
+
+
+
+Set @a *url and @a *rev to the ancestor URL and revision for @a path,
+ * allocating in @a pool. @a adm_access must be an access baton for @a path.
+ *
+ * If @a url or @a rev is NULL, then ignore it (just don't return the
+ * corresponding information).
+
+
+
+Given a @a dir_path under version control, decide if one of its entries
+ * (@a entry) is in a state of conflict; return the answers in @a
+ * text_conflicted_p and @a prop_conflicted_p. These pointers must not be
+ * null.
+ *
+ * If the @a entry mentions that text conflict files (with suffix .mine,
+ * .theirs, etc.) exist, but they cannot be found, assume the text conflict
+ * has been resolved by the user and return FALSE in @a *text_conflicted_p.
+ *
+ * Similarly, if the @a entry mentions that a property conflicts file (.prej
+ * suffix) exists, but it cannot be found, assume the property conflicts
+ * have been resolved by the user and return FALSE in @a *prop_conflicted_p.
+ *
+ * The @a entry is not updated.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+Given a @a path in a dir under version control, decide if it is in a
+ * state of conflict; return the answers in @a *text_conflicted_p, @a
+ * *prop_conflicted_p, and @a *tree_conflicted_p. If one or two of the
+ * answers are uninteresting, simply pass @c NULL pointers for those.
+ *
+ * If @a path is unversioned or does not exist, @a *text_conflicted_p and
+ * @a *prop_conflicted_p will be @c FALSE if non-NULL.
+ *
+ * @a adm_access is the admin access baton of the parent directory.
+ *
+ * If the @a path has corresponding text conflict files (with suffix .mine,
+ * .theirs, etc.) that cannot be found, assume that the text conflict has
+ * been resolved by the user and return @c FALSE in @a *text_conflicted_p.
+ *
+ * Similarly, if a property conflicts file (.prej suffix) is said to exist,
+ * but it cannot be found, assume that the property conflicts have been
+ * resolved by the user and return @c FALSE in @a *prop_conflicted_p.
+ *
+ * @a *tree_conflicted_p can't be auto-resolved in this fashion. An
+ * explicit `resolved' is needed.
+ *
+ * @since New in 1.6.
+
+
+
+Return a duplicate of @a entry, allocated in @a pool. No part of the new
+ * entry will be shared with @a entry.
+
+
+
+Parse the `entries' file for @a adm_access and return a hash @a entries,
+ * whose keys are (const char *) entry names and values are
+ * (svn_wc_entry_t *). The hash @a entries, and its keys and
+ * values, are allocated from the pool used to open the @a adm_access
+ * baton (that's how the entries caching works). @a pool is used for
+ * transient allocations.
+ *
+ * Entries that are in a 'excluded', 'deleted' or 'absent' state (and not
+ * scheduled for re-addition) are not returned in the hash, unless
+ * @a show_hidden is TRUE. Excluded entries are those with their depth set to
+ * @c svn_depth_exclude.
+ *
+ * @par Important:
+ * The @a entries hash is the entries cache in @a adm_access
+ * and so usually the hash itself, the keys and the values should be treated
+ * as read-only. If any of these are modified then it is the caller's
+ * responsibility to ensure that the entries file on disk is updated. Treat
+ * the hash values as type (const svn_wc_entry_t *) if you wish to
+ * avoid accidental modification. Modifying the schedule member is a
+ * particularly bad idea, as the entries writing process relies on having
+ * access to the original schedule. Use a duplicate entry to modify the
+ * schedule.
+ *
+ * @par Important:
+ * Only the entry structures representing files and
+ * @c SVN_WC_ENTRY_THIS_DIR contain complete information. The entry
+ * structures representing subdirs have only the `kind' and `state'
+ * fields filled in. If you want info on a subdir, you must use this
+ * routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR
+ * structure, or call svn_wc_entry() on its @a path.
+
+
+
+How an entries file's owner dir is named in the entries file.
+Set @a *entry to an entry for @a path, allocated in the access baton pool.
+ * If @a show_hidden is TRUE, return the entry even if it's in 'excluded',
+ * 'deleted' or 'absent' state. Excluded entries are those with their depth
+ * set to @c svn_depth_exclude. If @a path is not under revision control, or
+ * if entry is hidden, not scheduled for re-addition, and @a show_hidden is @c
+ * FALSE, then set @a *entry to @c NULL.
+ *
+ * @a *entry should not be modified, since doing so modifies the entries
+ * cache in @a adm_access without changing the entries file on disk.
+ *
+ * If @a path is not a directory then @a adm_access must be an access baton
+ * for the parent directory of @a path. To avoid needing to know whether
+ * @a path is a directory or not, if @a path is a directory @a adm_access
+ * can still be an access baton for the parent of @a path so long as the
+ * access baton for @a path itself is in the same access baton set.
+ *
+ * @a path can be relative or absolute but must share the same base used
+ * to open @a adm_access.
+ *
+ * Note that it is possible for @a path to be absent from disk but still
+ * under revision control; and conversely, it is possible for @a path to
+ * be present, but not under revision control.
+ *
+ * Use @a pool only for local processing.
+
+
+
+The entry is a intra-repository file external and this is the
+ * operative revision number specified in the externals definition.
+ * This field is only valid when the file_external_path field is
+ * non-NULL. The only permissible values are
+ * svn_opt_revision_unspecified if the entry is not an external,
+ * svn_opt_revision_head if the external revision is unspecified or
+ * specified with -r HEAD or svn_opt_revision_number for a specific
+ * revision number.
+ *
+ * @since New in 1.6.
+
+
+The entry is a intra-repository file external and this is the
+ * peg revision number specified in the externals definition. This
+ * field is only valid when the file_external_path field is
+ * non-NULL. The only permissible values are
+ * svn_opt_revision_unspecified if the entry is not an external,
+ * svn_opt_revision_head if the external revision is unspecified or
+ * specified with -r HEAD or svn_opt_revision_number for a specific
+ * revision number.
+ *
+ * @since New in 1.6.
+
+
+The entry is a intra-repository file external and this is the
+ * repository root relative path to the file specified in the
+ * externals definition, otherwise NULL if the entry is not a file
+ * external.
+ *
+ * @since New in 1.6.
+
+
+Serialized data for all of the tree conflicts detected in this_dir.
+ *
+ * @since New in 1.6.
+
+
+The depth of this entry.
+ *
+ * ### It's a bit annoying that we only use this on this_dir
+ * ### entries, yet it will exist (with value svn_depth_infinity) on
+ * ### all entries. Maybe some future extensibility would make this
+ * ### field meaningful on entries besides this_dir.
+ *
+ * @since New in 1.5.
+
+
+Whether a local copy of this entry should be kept in the working copy
+ * after a deletion has been committed, Only valid for the this-dir entry
+ * when it is scheduled for deletion.
+ *
+ * @since New in 1.5.
+
+
+Size of the file after being translated into local
+ * representation, or @c SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN if
+ * unknown.
+ *
+ * @since New in 1.5.
+
+
+
+which changelist this item is part of, or NULL if not part of any.
+ * @since New in 1.5.
+
+
+
+Cached property existence for this entry.
+ * This is a space-separated list of property names. If a name exists in
+ * @c cachable_props but not in this list, this entry does not have that
+ * property. If a name exists in both lists, the property is present on this
+ * entry.
+ *
+ * @since New in 1.4.
+ * @deprecated This value will always be "" in version 1.7 and later.
+
+
+A space-separated list of all properties whose presence/absence is cached
+ * in this entry.
+ *
+ * @see @c present_props.
+ *
+ * @since New in 1.4.
+ * @deprecated This value will always be "" in version 1.7 and later.
+
+
+Whether this entry has property modifications.
+ *
+ * @note For working copies in older formats, this flag is not valid.
+ *
+ * @see svn_wc_props_modified_p().
+ *
+ * @since New in 1.4.
+
+
+Whether this entry has any working properties.
+ * False if this information is not stored in the entry.
+ *
+ * @since New in 1.4.
+
+
+Lock creation date or 0 if not locked in this WC
+ * @since New in 1.2.
+
+
+
+lock comment or NULL if not locked in this WC or no comment
+ * @since New in 1.2.
+
+
+
+lock owner, or NULL if not locked in this WC
+ * @since New in 1.2.
+
+
+
+lock token or NULL if path not locked in this WC
+ * @since New in 1.2.
+
+
+
+last commit author of this item
+
+
+last date this was changed
+
+
+last revision this was changed
+
+
+Hex MD5 checksum for the untranslated text base file,
+ * can be @c NULL for backwards compatibility.
+
+
+
+last up-to-date time for properties (0 means no information available)
+ *
+ * @deprecated This value will always be 0 in version 1.4 and later.
+
+
+
+last up-to-date time for text contents (0 means no information available)
+
+
+
+property reject file. A file basename, relative to the user's
+ * directory that the THIS_DIR entry refers to.
+
+
+working version of conflicted file. A file basename, relative to the
+ * user's directory that the THIS_DIR entry refers to.
+
+
+new version of conflicted file. A file basename, relative to the
+ * user's directory that the THIS_DIR entry refers to.
+
+
+old version of conflicted file. A file basename, relative to the
+ * user's directory that the THIS_DIR entry refers to.
+
+
+copyfrom revision
+
+
+copyfrom location
+
+
+for THIS_DIR entry, implies whole entries file is incomplete
+
+
+absent -- we know an entry of this name exists, but that's all
+ (usually this happens because of authz restrictions)
+
+
+The directory containing this entry had a versioned child of this
+ * name, but this entry represents a different revision or a switched
+ * path at which no item exists in the repository. This typically
+ * arises from committing or updating to a deletion of this entry
+ * without committing or updating the parent directory.
+ *
+ * The schedule can be 'normal' or 'add'.
+
+
+in a copied state (possibly because the entry is a child of a
+ * path that is @c svn_wc_schedule_add or @c svn_wc_schedule_replace,
+ * when the entry itself is @c svn_wc_schedule_normal).
+ * COPIED is true for nodes under a directory that was copied, but
+ * COPYFROM_URL is null there. They are both set for the root
+ * destination of the copy.
+
+
+
+scheduling (add, delete, replace ...)
+
+
+node kind (file, dir, ...)
+
+
+repository uuid
+
+
+canonical repository URL or NULL if not known
+
+
+url in repository
+
+
+base revision
+
+
+entry's name
+
+
+ Values for the working_size field in svn_wc_entry_t
+ when it isn't set to the actual size value of the unchanged
+ working file.
+
+ @defgroup svn_wc_entry_working_size_constants Working size constants
+
+ @{
+
+The value of the working size is unknown (hasn't been
+ * calculated and stored in the past for whatever reason).
+ *
+ * @since New in 1.5
+
+@}
+A working copy entry -- that is, revision control information about
+ * one versioned entity.
+
+
+
+Administrative subdir.
+ *
+ * Ideally, this would be completely private to wc internals (in fact,
+ * it used to be that adm_subdir() in adm_files.c was the only function
+ * who knew the adm subdir's name). However, import wants to protect
+ * against importing administrative subdirs, so now the name is a
+ * matter of public record.
+ *
+ * @deprecated Provided for backward compatibility with the 1.2 API.
+
+The schedule states an entry can be in.
+
+
+Slated for replacement (delete + add)
+
+
+Slated for deletion
+
+
+Slated for addition
+
+
+Nothing special here
+
+
+Set @a *modified_p to non-zero if @a path's properties are modified
+ * with regard to the base revision, else set @a modified_p to zero.
+ * @a adm_access must be an access baton for @a path.
+
+
+
+Set @a *modified_p to non-zero if @a filename's text is modified
+ * with regard to the base revision, else set @a *modified_p to zero.
+ * @a filename is a path to the file, not just a basename. @a adm_access
+ * must be an access baton for @a filename.
+ *
+ * If @a force_comparison is @c TRUE, this function will not allow
+ * early return mechanisms that avoid actual content comparison.
+ * Instead, if there is a text base, a full byte-by-byte comparison
+ * will be done, and the entry checksum verified as well. (This means
+ * that if the text base is much longer than the working file, every
+ * byte of the text base will still be examined.)
+ *
+ * If @a filename does not exist, consider it unmodified. If it exists
+ * but is not under revision control (not even scheduled for
+ * addition), return the error @c SVN_ERR_ENTRY_NOT_FOUND.
+ *
+ * If @a filename is unmodified but has a timestamp variation then this
+ * function may "repair" @a filename's text-time by setting it to
+ * @a filename's last modification time.
+
+
+
+Set @a *has_binary_prop to @c TRUE iff @a path has been marked
+ * with a property indicating that it is non-text (in other words, binary).
+ * @a adm_access is an access baton set that contains @a path.
+
+
+
+Set @a *wc_format to @a path's working copy format version number if
+ * @a path is a valid working copy directory, else set it to 0.
+ * Return error @c APR_ENOENT if @a path does not exist at all.
+
+
+
+Similar to @c dir_props_changed in @c svn_wc_diff_callbacks2_t, but this
+ * function is called for files as well as directories.
+
+
+The same as @c dir_deleted in @c svn_wc_diff_callbacks2_t.
+
+
+The same as @c dir_added in @c svn_wc_diff_callbacks2_t.
+
+
+Similar to @c file_deleted in @c svn_wc_diff_callbacks2_t, but without
+ * the properties.
+
+
+Similar to @c file_added in @c svn_wc_diff_callbacks2_t, but without
+ * property change information. @a *state applies to the file contents.
+
+
+Similar to @c file_changed in @c svn_wc_diff_callbacks2_t, but without
+ * property change information. @a tmpfile2 is never NULL. @a state applies
+ * to the file contents.
+
+
+ Similar to @c svn_wc_diff_callbacks2_t, but with file additions/content
+ changes and property changes split into different functions.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+The same as @c dir_props_changed in @c svn_wc_diff_callbacks3_t.
+
+
+The same as @c dir_deleted in @c svn_wc_diff_callbacks3_t.
+
+
+The same as @c dir_added in @c svn_wc_diff_callbacks3_t.
+
+
+The same as @c file_deleted in @c svn_wc_diff_callbacks3_t.
+
+
+The same as @c file_added in @c svn_wc_diff_callbacks3_t.
+
+
+The same as @c file_changed in @c svn_wc_diff_callbacks3_t.
+
+
+ Similar to @c svn_wc_diff_callbacks3_t, but without the dir_opened()
+ function, and without the 'tree_conflicted' argument to the functions.
+
+ @deprecated Provided for backward compatibility with the 1.2 API.
+
+
+
+A directory @a path has been closed.
+
+
+
+ A directory @a path has been opened. @a rev is the revision that the
+ directory came from.
+
+ This function is called for @a path before any of the callbacks are
+ called for a child of @a path.
+
+
+
+ A list of property changes (@a propchanges) was applied to the
+ directory @a path.
+
+ The array is a list of (@c svn_prop_t) structures.
+
+ The original list of properties is provided in @a original_props,
+ which is a hash of @c svn_string_t values, keyed on the property
+ name.
+
+
+
+A directory @a path was deleted.
+
+
+
+A directory @a path was added. @a rev is the revision that the
+directory came from.
+
+
+
+ A file @a path was deleted. The [loss of] contents can be seen by
+ comparing @a tmpfile1 and @a tmpfile2. @a originalprops provides
+ the properties of the file.
+ ### Some existing callers include WC "entry props" in @a originalprops.
+
+ If known, the @c svn:mime-type value of each file is passed into
+ @a mimetype1 and @a mimetype2; either or both of the values can
+ be NULL. The implementor can use this information to decide if
+ (or how) to generate differences.
+
+
+
+ A file @a path was added. The contents can be seen by comparing
+ @a tmpfile1 and @a tmpfile2, which represent @a rev1 and @a rev2
+ of the file, respectively. (If either file is empty, the rev
+ will be 0.)
+
+ If known, the @c svn:mime-type value of each file is passed into
+ @a mimetype1 and @a mimetype2; either or both of the values can
+ be NULL. The implementor can use this information to decide if
+ (or how) to generate differences.
+
+ @a propchanges is an array of (@c svn_prop_t) structures. If it contains
+ any elements, the original list of properties is provided in
+ @a originalprops, which is a hash of @c svn_string_t values, keyed on the
+ property name.
+
+
+
+ A file @a path has changed. If @a tmpfile2 is non-NULL, the
+ contents have changed and those changes can be seen by comparing
+ @a tmpfile1 and @a tmpfile2, which represent @a rev1 and @a rev2 of
+ the file, respectively.
+
+ If known, the @c svn:mime-type value of each file is passed into
+ @a mimetype1 and @a mimetype2; either or both of the values can
+ be NULL. The implementor can use this information to decide if
+ (or how) to generate differences.
+
+ @a propchanges is an array of (@c svn_prop_t) structures. If it contains
+ any elements, the original list of properties is provided in
+ @a originalprops, which is a hash of @c svn_string_t values, keyed on the
+ property name.
+
+
+
+
+@}
+ A callback vtable invoked by our diff-editors, as they receive
+ diffs from the server. 'svn diff' and 'svn merge' both implement
+ their own versions of this table.
+
+ Common parameters:
+
+ @a adm_access will be an access baton for the directory containing
+ @a path, or @c NULL if the diff editor is not using access batons.
+
+ If @a state is non-NULL, set @a *state to the state of the item
+ after the operation has been performed. (In practice, this is only
+ useful with merge, not diff; diff callbacks will probably set
+ @a *state to @c svn_wc_notify_state_unknown, since they do not change
+ the state and therefore do not bother to know the state after the
+ operation.) By default, @a state refers to the item's content
+ state. Functions concerned with property state have separate
+ @a contentstate and @a propstate arguments.
+
+ If @a tree_conflicted is non-NULL, set @a *tree_conflicted to true if
+ this operation caused a tree conflict, else to false. (Like with @a
+ state, this is only useful with merge, not diff; diff callbacks
+ should set this to false.)
+
+ @since New in 1.6.
+
+
+
+A callback used in svn_client_merge3(), svn_client_update3(), and
+ * svn_client_switch2() for resolving conflicts during the application
+ * of a tree delta to a working copy.
+ *
+ * @a description describes the exact nature of the conflict, and
+ * provides information to help resolve it. @a baton is a closure
+ * object; it should be provided by the implementation, and passed by
+ * the caller. All allocations should be performed in @a pool. When
+ * finished, the callback signals its resolution by returning a
+ * structure in @a *result. (See @c svn_wc_conflict_result_t.)
+ *
+ * The values @c svn_wc_conflict_choose_mine_conflict and @c
+ * svn_wc_conflict_choose_theirs_conflict are not legal for conflicts
+ * in binary files or properties.
+ *
+ * Implementations of this callback are free to present the conflict
+ * using any user interface. This may include simple contextual
+ * conflicts in a file's text or properties, or more complex
+ * 'tree'-based conflcts related to obstructed additions, deletions,
+ * and edits. The callback implementation is free to decide which
+ * sorts of conflicts to handle; it's also free to decide which types
+ * of conflicts are automatically resolvable and which require user
+ * interaction.
+ *
+ * @since New in 1.5.
+
+
+
+ Allocate an @c svn_wc_conflict_result_t structure in @a pool,
+ initialize and return it.
+
+ Set the @c choice field of the structure to @a choice, and @c
+ merged_file to @a merged_file. Set all other fields to their @c
+ _unknown, @c NULL or invalid value, respectively. Make only a shallow
+ copy of the pointer argument @a merged_file.
+
+ @since New in 1.5.
+
+
+
+If true, save a backup copy of merged_file (or the original
+ merged_file from the conflict description, if merged_file is
+ NULL) in the user's working copy.
+
+
+If not NULL, this is a path to a file which contains the client's
+ (or more likely, the user's) merging of the three values in
+ conflict. libsvn_wc accepts this file if (and only if) @c choice
+ is set to @c svn_wc_conflict_choose_merged.
+
+
+A choice to either delay the conflict resolution or select a
+ particular file to resolve the conflict.
+
+
+The final result returned by @c svn_wc_conflict_resolver_func_t.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions. Therefore, to preserve binary compatibility, users
+ * should not directly allocate structures of this type. Instead,
+ * construct this structure using @c svn_wc_create_conflict_result()
+ * below.
+ *
+ * @since New in 1.5.
+
+
+
+The way in which the conflict callback chooses a course of action.
+ *
+ * @since New in 1.5.
+
+
+
+ Allocate an @c svn_wc_conflict_description_t structure in @a pool,
+ initialize to represent a tree conflict, and return it.
+
+ Set the @c path field of the created struct to @a path, the @c access
+ field to @a adm_access, the @c kind field to @c
+ svn_wc_conflict_kind_tree, the @c node_kind to @a node_kind, the @c
+ operation to @a operation, the @c src_left_version field to
+ @a src_left_version, and the @c src_right_version field to
+ @a src_right_version.
+ Make only shallow copies of the pointer arguments.
+
+ @note: It is the caller's responsibility to set the other required fields
+ (such as the four file names and @c action and @c reason).
+
+ @since New in 1.6.
+
+
+
+ Allocate an @c svn_wc_conflict_description_t structure in @a pool,
+ initialize to represent a property conflict, and return it.
+
+ Set the @c path field of the created struct to @a path, the @c access
+ field to @a adm_access, the @c kind field to @c
+ svn_wc_conflict_kind_prop, the @c node_kind to @a node_kind, and the @c
+ property_name to @a property_name. Make only shallow copies of the pointer
+ arguments.
+
+ @note: It is the caller's responsibility to set the other required fields
+ (such as the four file names and @c action and @c reason).
+
+ @since New in 1.6.
+
+
+
+ Allocate an @c svn_wc_conflict_description_t structure in @a pool,
+ initialize to represent a text conflict, and return it.
+
+ Set the @c path field of the created struct to @a path, the @c access
+ field to @a adm_access, the @c kind field to @c
+ svn_wc_conflict_kind_text, the @c node_kind to @c svn_node_file, the @c
+ action to @c svn_wc_conflict_action_edit, and the @c reason to @c
+ svn_wc_conflict_reason_edited. Make only shallow copies of the pointer
+ arguments.
+
+ @note: It is the caller's responsibility to set the other required fields
+ (such as the four file names and @c mime_type and @c is_binary).
+
+ @since New in 1.6.
+
+
+
+Info on the "merge-right source" or "their" version of incoming change.
+ * @since New in 1.6.
+
+
+Info on the "merge-left source" or "older" version of incoming change.
+ * @since New in 1.6.
+
+
+The operation that exposed the conflict.
+ * Used only for tree conflicts.
+ *
+ * @since New in 1.6.
+
+
+
+merged version; may contain conflict markers
+
+
+my locally-edited version of the file
+
+
+their version of the file
+
+
+If this is text-conflict and involves the merging of two files
+ * descended from a common ancestor, here are the paths of up to
+ * four fulltext files that can be used to interactively resolve the
+ * conflict. All four files will be in repository-normal form -- LF
+ * line endings and contracted keywords. (If any of these files are
+ * not available, they default to NULL.)
+ *
+ * On the other hand, if this is a property-conflict, then these
+ * paths represent temporary files that contain the three different
+ * property-values in conflict. The fourth path (@c merged_file)
+ * may or may not be NULL; if set, it represents libsvn_wc's
+ * attempt to merge the property values together. (Remember that
+ * property values are technically binary values, and thus can't
+ * always be merged.)
+
+
+
+The state of the target node or property, relative to its merge-left
+ * source, that is the reason for the conflict.
+ * (When @c kind is 'text', this reason must be 'edited'.)
+
+
+The action being attempted on the conflicted node or property.
+ * (When @c kind is 'text', this action must be 'edit'.)
+
+
+If not NULL, an open working copy access baton to either the
+ * path itself (if @c path is a directory), or to the parent
+ * directory (if @c path is a file.)
+ * For a tree conflict, this will always be an access baton
+ * to the parent directory of the path, even if the path is
+ * a directory.
+
+
+The svn:mime-type property of ('my' version of) @c path, if available,
+ * else NULL.
+ * (Only if @c kind is 'text', else undefined.)
+
+
+Whether svn thinks ('my' version of) @c path is a 'binary' file.
+ * (Only if @c kind is 'text', else undefined.)
+
+
+The name of the property whose conflict is being described.
+ * (Only if @a kind is 'property'; else undefined.)
+
+
+What sort of conflict are we describing?
+
+
+The node type of the path being operated on (for a tree conflict,
+ * ### which version?)
+
+
+The path that is in conflict (for a tree conflict, it is the victim)
+
+
+A struct that describes a conflict that has occurred in the
+ * working copy. Passed to @c svn_wc_conflict_resolver_func_t.
+ *
+ * The conflict described by this structure is one of:
+ * - a conflict on the content of the file node @a path
+ * - a conflict on the property @a property_name of @a path
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions. Therefore, to preserve binary compatibility, users
+ * should not directly allocate structures of this type but should use
+ * svn_wc_create_conflict_description_text() or
+ * svn_wc_create_conflict_description_prop() or
+ * svn_wc_create_conflict_description_tree() instead.
+ *
+ * @since New in 1.5.
+
+
+
+Return a duplicate of @a version, allocated in @a pool.
+ * No part of the new version will be shared with @a version.
+ *
+ * @since New in 1.6.
+
+
+
+ Allocate an @c svn_wc_conflict_version_t structure in @a pool,
+ initialize to contain a conflict origin, and return it.
+
+ Set the @c repos_url field of the created struct to @a repos_url, the
+ @c path_in_repos field to @a path_in_repos, the @c peg_rev field to
+ @a peg_rev and the the @c node_kind to @c node_kind. Make only shallow
+ copies of the pointer arguments.
+
+ @since New in 1.6.
+
+
+
+@}
+Info about this node
+
+
+path within repos; must not start with '/'
+
+
+revision at which to look up path_in_repos
+
+
+@name Where to find this node version in a repository
+@{
+URL of repository root
+
+
+Info about one of the conflicting versions of a node. Each field may
+ * have its respective null/invalid/unknown value if the corresponding
+ * information is not relevant or not available.
+ *
+ * @todo Consider making some or all of the info mandatory, to reduce
+ * complexity.
+ *
+ * @note Fields may be added to the end of this structure in future
+ * versions. Therefore, to preserve binary compatibility, users
+ * should not directly allocate structures of this type.
+ *
+ * @see svn_wc_conflict_version_create()
+ * @see svn_wc_conflict_version_dup()
+ *
+ * @since New in 1.6.
+
+
+
+The user operation that exposed a conflict.
+ *
+ * @since New in 1.6.
+
+
+
+The type of conflict being described by an @c
+ * svn_wc_conflict_description_t (see below).
+ *
+ * @since New in 1.5.
+
+
+
+tree conflict (on a dir) @since New in 1.6.
+
+
+property conflict (on a file or dir)
+
+
+textual conflict (on a file)
+
+
+The pre-existing condition which is causing a state of conflict.
+ *
+ * @since New in 1.5.
+
+
+
+Object is already added or schedule-add. @since New in 1.6.
+
+
+Object is unversioned
+
+
+Object is unknown or missing
+
+
+Object is already schedule-delete
+
+
+Another object is in the way
+
+
+Local edits are already present
+
+
+ Interactive conflict handling
+
+ @defgroup svn_wc_conflict Conflict callback functionality
+
+ @{
+
+ This API gives a Subversion client application the opportunity to
+ define a callback that allows the user to resolve conflicts
+ interactively during updates and merges.
+
+ If a conflict is discovered, libsvn_wc invokes the callback with an
+ @c svn_wc_conflict_description_t. This structure describes the
+ path in conflict, whether it's a text or property conflict, and may
+ also present up to three files that can be used to resolve the
+ conflict (perhaps by launching an editor or 3rd-party merging
+ tool). The structure also provides a possible fourth file (@c
+ merged_file) which, if not NULL, represents libsvn_wc's attempt to
+ contextually merge the first three files. (Note that libsvn_wc
+ will not attempt to merge a file that it believes is binary, and it
+ will only attempt to merge property values it believes to be a
+ series of multi-line text.)
+
+ When the callback is finished interacting with the user, it
+ responds by returning a @c svn_wc_conflict_result_t. This
+ structure indicates whether the user wants to postpone the conflict
+ for later (allowing libsvn_wc to mark the path "conflicted" as
+ usual), or whether the user wants libsvn_wc to use one of the four
+ files as the "final" state for resolving the conflict immediately.
+
+ Note that the callback is at liberty (and encouraged) to merge the
+ three files itself. If it does so, it signals this to libsvn_wc by
+ returning a choice of @c svn_wc_conflict_choose_merged. To return
+ the 'final' merged file to libsvn_wc, the callback has the option of
+ either:
+
+ - editing the original @c merged_file in-place
+
+ or, if libsvn_wc never supplied a merged_file in the
+ description structure (i.e. passed NULL for that field),
+
+ - return the merged file in the @c svn_wc_conflict_result_t.
+
+
+The type of action being attempted on an object.
+ *
+ * @since New in 1.5.
+
+
+
+@}
+ A simple callback type to wrap svn_ra_get_file(); see that
+ docstring for more information.
+
+ This technique allows libsvn_client to 'wrap' svn_ra_get_file() and
+ pass it down into libsvn_wc functions, thus allowing the WC layer
+ to legally call the RA function via (blind) callback.
+
+ @since New in 1.5
+
+
+
+ Similar to @c svn_wc_notify_func2_t, but takes the information as arguments
+ instead of struct fields.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Notify the world that @a notify->action has happened to @a notify->path.
+
+ Recommendation: callers of @c svn_wc_notify_func2_t should avoid
+ invoking it multiple times on the same path within a given
+ operation, and implementations should not bother checking for such
+ duplicate calls. For example, in an update, the caller should not
+ invoke the notify func on receiving a prop change and then again
+ on receiving a text change. Instead, wait until all changes have
+ been received, and then invoke the notify func once (from within
+ an @c svn_delta_editor_t's close_file(), for example), passing
+ the appropriate @a notify->content_state and @a notify->prop_state flags.
+
+ @since New in 1.2.
+
+
+
+ Return a deep copy of @a notify, allocated in @a pool.
+
+ @since New in 1.2.
+
+
+
+ Allocate an @c svn_wc_notify_t structure in @a pool, initialize and return
+ it.
+
+ Set the @c url field of the created struct to @a url, @c action to, @c path
+ to "." and @a action. Set all other fields to their @c _unknown, @c NULL or
+ invalid value, respectively. Make only a shallow copy of the pointer
+ @a url.
+
+ @since New in 1.6.
+
+
+
+ Allocate an @c svn_wc_notify_t structure in @a pool, initialize and return
+ it.
+
+ Set the @c path field of the created struct to @a path, and @c action to
+ @a action. Set all other fields to their @c _unknown, @c NULL or
+ invalid value, respectively. Make only a shallow copy of the pointer
+ @a path.
+
+ @since New in 1.2.
+
+
+
+If @c action is @c svn_wc_notify_update_update or @c
+ * svn_wc_notify_update_add, contains the revision before the update.
+ * In all other cases, it is @c SVN_INVALID_REVNUM.
+ * @since New in 1.7
+
+
+If @c action is @c svn_wc_notify_blame_revision, contains a list of
+ * revision properties for the specified revision
+ * @since New in 1.6
+
+
+If @c action relates to properties, specifies the name of the property.
+ * @since New in 1.6
+
+
+If non-NULL, specifies an absolute path prefix that can be subtracted
+ * from the start of the absolute path in @c path or @c url. Its purpose
+ * is to allow notification to remove a common prefix from all the paths
+ * displayed for an operation. @since New in 1.6
+
+
+Similar to @c path, but if non-NULL the notification is about a url.
+ * @since New in 1.6
+
+
+When @c action is @c svn_wc_notify_merge_begin, and both the
+ * left and right sides of the merge are from the same URL. In all
+ * other cases, it is @c NULL. @since New in 1.5
+
+
+When @c action is @c svn_wc_notify_changelist_add or name. In all other
+ * cases, it is @c NULL. @since New in 1.5
+
+
+When @c action is @c svn_wc_notify_update_completed, target revision
+ * of the update, or @c SVN_INVALID_REVNUM if not available; when @c
+ * action is @c svn_wc_notify_blame_revision, processed revision; Since
+ * Subversion 1.7 when action is @c svn_wc_notify_update_update or @c
+ * svn_wc_notify_update_add, the target revision.
+ * In all other cases, it is @c SVN_INVALID_REVNUM.
+
+
+
+Reflects the addition or removal of a lock token in the working copy.
+
+
+The type of notification that is occurring about node properties.
+
+
+The type of notification that is occurring about node content.
+
+
+Points to an error describing the reason for the failure when @c
+ * action is one of the following: @c svn_wc_notify_failed_lock, @c
+ * svn_wc_notify_failed_unlock, @c svn_wc_notify_failed_external.
+ * Is @c NULL otherwise.
+
+
+Points to the lock structure received from the repository when
+ * @c action is @c svn_wc_notify_locked. For other actions, it is
+ * @c NULL.
+
+
+If non-NULL, indicates the mime-type of @c path.
+ * It is always @c NULL for directories.
+
+
+Node kind of @c path.
+
+
+Action that describes what happened to @c path.
+
+
+Path, either absolute or relative to the current working directory
+ * (i.e., not relative to an anchor).@c path is "." or another valid path
+ * value for compatibilty reasons when the real target is an url that
+ * is available in @c url.
+
+
+ Structure used in the @c svn_wc_notify_func2_t function.
+
+ @c kind, @c content_state, @c prop_state and @c lock_state are from
+ after @c action, not before.
+
+ @note If @c action is @c svn_wc_notify_update, then @c path has
+ already been installed, so it is legitimate for an implementation of
+ @c svn_wc_notify_func2_t to examine @c path in the working copy.
+
+ @note The purpose of the @c kind, @c mime_type, @c content_state, and
+ @c prop_state fields is to provide "for free" information that an
+ implementation is likely to want, and which it would otherwise be
+ forced to deduce via expensive operations such as reading entries
+ and properties. However, if the caller does not have this
+ information, it will simply pass the corresponding `*_unknown'
+ values, and it is up to the implementation how to handle that
+ (i.e., whether to attempt deduction, or just to punt and
+ give a less informative notification).
+
+ @note Callers of notification functions should use svn_wc_create_notify()
+ or svn_wc_create_notify_url() to create structures of this type to allow
+ for extensibility.
+
+ @since New in 1.2.
+
+
+
+ What happened to a lock during an operation.
+
+ @since New in 1.2.
+
+
+
+The item was unlocked.
+
+
+The item was locked.
+
+
+The lock wasn't changed.
+
+
+The type of notification that is occurring.
+
+
+Modified state got conflicting mods.
+
+
+Modified state had mods merged in.
+
+
+Pristine state was modified.
+
+
+An unversioned item obstructed work.
+
+
+The item wasn't present.
+
+
+The state did not change.
+
+
+Notifier doesn't know or isn't saying.
+
+
+ @defgroup svn_wc_notifications Notification callback handling
+ @{
+
+ In many cases, the WC library will scan a working copy and make
+ changes. The caller usually wants to know when each of these changes
+ has been made, so that it can display some kind of notification to
+ the user.
+
+ These notifications have a standard callback function type, which
+ takes the path of the file that was affected, and a caller-
+ supplied baton.
+
+ Note that the callback is a 'void' return -- this is a simple
+ reporting mechanism, rather than an opportunity for the caller to
+ alter the operation of the WC library.
+
+ Note also that some of the actions are used across several
+ different Subversion commands. For example, the update actions are
+ also used for checkouts, switches, and merges.
+
+The type of action occurring.
+
+
+The path is a subdirectory referenced in an externals definition
+ * which is unable to be operated on. @since New in 1.6.
+
+
+The path is a tree-conflict victim of the intended action (*not*
+ * a persistent tree-conflict from an earlier operation, but *this*
+ * operation caused the tree-conflict). @since New in 1.6.
+
+
+The last notification in a merge. @since New in 1.6.
+
+
+Revprop deleted. @since New in 1.6.
+
+
+Revprop set. @since New in 1.6.
+
+
+Nonexistent property deleted. @since New in 1.6.
+
+
+Property deleted. @since New in 1.6.
+
+
+Property updated. @since New in 1.6.
+
+
+Property added. @since New in 1.6.
+
+
+Replace notification. @since New in 1.5.
+
+
+A merge operation (to path) from a foreign repository has begun.
+ See @c merge_range in @c svn_wc_notify_t. @since New in 1.5.
+
+
+A merge operation (to path) has begun. See @c merge_range in
+ @c svn_wc_notify_t. @since New in 1.5.
+
+
+Warn user that a path has moved from one changelist to another.
+ @since New in 1.5.
+
+
+Changelist name cleared. @since New in 1.5.
+
+
+Changelist name set. @since New in 1.5.
+
+
+Tried adding a path that already exists. @since New in 1.5.
+
+
+Failed to unlock a path. @since New in 1.2.
+
+
+Failed to lock a path. @since New in 1.2.
+
+
+Unlocking a path. @since New in 1.2.
+
+
+Locking a path. @since New in 1.2.
+
+
+Processed a single revision's blame.
+
+
+Transmitting post-fix text-delta data for a file.
+
+
+Committing a replacement.
+
+
+Committing a deletion.
+
+
+Committing an addition.
+
+
+Committing a modification.
+
+
+Running status on an external module.
+
+
+The last notification in a status (including status on externals).
+
+
+Updating an external module.
+
+
+The last notification in an update (including updates of externals).
+
+
+Got any other action in an update.
+
+
+Got an add in an update.
+
+
+Got a delete in an update.
+
+
+Skipping a path.
+
+
+Resolving a conflict.
+
+
+A revert operation has failed.
+
+
+Reverting a modified path.
+
+
+Restoring a missing path from the pristine text-base.
+
+
+Deleting a versioned path.
+
+
+Copying a versioned path.
+
+
+Adding a path to revision control.
+
+
+ Similar to svn_wc_parse_externals_description2(), but returns the
+ parsed externals in a hash instead of an array. This function
+ should not be used, as storing the externals in a hash causes their
+ order of evaluation to be not easily identifiable.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_parse_externals_description3() with @a
+ canonicalize_url set to @c TRUE, but returns an array of @c
+ svn_wc_external_item_t * objects instead of @c
+ svn_wc_external_item2_t * objects
+
+ @since New in 1.1.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ If @a externals_p is non-NULL, set @a *externals_p to an array of
+ @c svn_wc_external_item2_t * objects based on @a desc. The @a url
+ member of the objects will be canonicalized if @a canonicalize_url
+ is @c TRUE.
+
+ If the format of @a desc is invalid, don't touch @a *externals_p and
+ return @c SVN_ERR_CLIENT_INVALID_EXTERNALS_DESCRIPTION. Thus, if
+ you just want to check the validity of an externals description,
+ and don't care about the parsed result, pass NULL for @a externals_p.
+
+ The format of @a desc is the same as for values of the directory
+ property @c SVN_PROP_EXTERNALS, which see.
+
+ Allocate the table, keys, and values in @a pool.
+
+ Use @a parent_directory only in constructing error strings.
+
+ @since New in 1.5.
+
+
+
+ Return a duplicate of @a item, allocated in @a pool. No part of the new
+ item will be shared with @a item.
+
+ @since New in 1.3.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+Same as @c svn_wc_external_item2_t.revision
+
+
+Same as @c svn_wc_external_item2_t.url
+
+
+Same as @c svn_wc_external_item2_t.target_dir
+
+
+ One external item. Similar to svn_wc_external_item2_t, except
+ @a revision is interpreted as both the operational revision and the
+ peg revision.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Return a duplicate of @a item, allocated in @a pool. No part of the new
+ item will be shared with @a item.
+
+ @since New in 1.5.
+
+
+
+ Initialize an external item.
+ Set @a *item to an external item object, allocated in @a pool.
+
+ In order to avoid backwards compatibility problems, this function
+ is used to initialize and allocate the @c svn_wc_external_item2_t
+ structure rather than doing so explicitly, as the size of this
+ structure may change in the future.
+
+ The current implementation never returns error, but callers should
+ still check for error, for compatibility with future versions.
+
+ @since New in 1.5.
+
+
+
+The peg revision to use when checking out. The only valid kinds are
+ svn_opt_revision_number, svn_opt_revision_date, and
+ svn_opt_revision_head.
+
+
+What revision to check out. The only valid kinds for this are
+ svn_opt_revision_number, svn_opt_revision_date, and
+ svn_opt_revision_head.
+
+
+Where to check out from.
+
+
+The name of the subdirectory into which this external should be
+ checked out. This is relative to the parent directory that
+ holds this external item. (Note that these structs are often
+ stored in hash tables with the target dirs as keys, so this
+ field will often be redundant.)
+
+
+One external item. This usually represents one line from an
+ * svn:externals description but with the path and URL
+ * canonicalized.
+ *
+ * In order to avoid backwards compatibility problems clients should use
+ * svn_wc_external_item_create() to allocate and initialize this structure
+ * instead of doing so themselves.
+ *
+ * @since New in 1.5.
+
+
+
+Set @a *depths to a hash table mapping const char *
+ * directory names (directories traversed by @a traversal_info) to
+ * const char * values (the depths of those directories, as
+ * converted by svn_depth_to_word()).
+ *
+ * @a traversal_info is obtained from svn_wc_init_traversal_info(), but is
+ * only useful after it has been passed through another function, such
+ * as svn_wc_crawl_revisions(), svn_wc_get_update_editor(),
+ * svn_wc_get_switch_editor(), etc.
+ *
+ * The dir names are full paths -- that is, anchor plus target, not target
+ * alone. The values are not allocated, they are static constant strings.
+ * Although the values are never NULL, not all directories traversed
+ * are necessarily listed. For example, directories which did not
+ * have an svn:externals property set or modified are not included.
+ *
+ * The hashes and keys have the same lifetime as @a traversal_info.
+ *
+ * @since New in 1.5.
+
+
+
+Set @a *externals_old and @a *externals_new to hash tables representing
+ * changes to values of the svn:externals property on directories
+ * traversed by @a traversal_info.
+ *
+ * @a traversal_info is obtained from svn_wc_init_traversal_info(), but is
+ * only useful after it has been passed through another function, such
+ * as svn_wc_crawl_revisions(), svn_wc_get_update_editor(),
+ * svn_wc_get_switch_editor(), etc.
+ *
+ * Each hash maps const char * directory names onto
+ * const char * values of the externals property for that directory.
+ * The dir names are full paths -- that is, anchor plus target, not target
+ * alone. The values are not parsed, they are simply copied raw, and are
+ * never NULL: directories that acquired or lost the property are
+ * simply omitted from the appropriate table. Directories whose value
+ * of the property did not change show the same value in each hash.
+ *
+ * The hashes, keys, and values have the same lifetime as @a traversal_info.
+
+
+
+Return a new, empty traversal info object, allocated in @a pool.
+
+
+Traversal information is information gathered by a working copy
+ * crawl or update. For example, the before and after values of the
+ * svn:externals property are important after an update, and since
+ * we're traversing the working tree anyway (a complete traversal
+ * during the initial crawl, and a traversal of changed paths during
+ * the checkout/update/switch), it makes sense to gather the
+ * property's values then instead of making a second pass.
+
+
+
+ Use @a name for the administrative directory in the working copy.
+ Use @a pool for any temporary allocations.
+
+ The list of valid names is limited. Currently only ".svn" (the
+ default) and "_svn" are allowed.
+
+ @note This function changes global (per-process) state and must be
+ called in a single-threaded context during the initialization of a
+ Subversion client.
+
+ @since New in 1.3.
+
+
+
+ Return the name of the administrative directory.
+ Use @a pool for any temporary allocations.
+
+ The returned pointer will refer to either a statically allocated
+ string, or to a string allocated in @a pool.
+
+ @since New in 1.3.
+
+
+
+ Return @c TRUE if @a name is the name of the WC administrative
+ directory. Use @a pool for any temporary allocations. Only works
+ with base directory names, not paths or URIs.
+
+ For compatibility, the default name (.svn) will always be treated
+ as an admin dir name, even if the working copy is actually using an
+ alternative name.
+
+ @since New in 1.3.
+
+
+
+Set @a *locked to non-zero if @a path is locked, else set it to zero.
+
+
+Return @c TRUE is the access baton @a adm_access has a write lock,
+ * @c FALSE otherwise. Compared to svn_wc_locked() this is a cheap, fast
+ * function that doesn't access the filesystem.
+
+
+
+Return the pool used by access baton @a adm_access
+
+
+Return the path used to open the access baton @a adm_access
+
+
+Give up the access baton @a adm_access, and its lock if any. This will
+ * recursively close any batons in the same set that are direct
+ * subdirectories of @a adm_access. Any physical locks will be removed from
+ * the working copy. Lock removal is unconditional, there is no check to
+ * determine if cleanup is required.
+ *
+ * Any temporary allocations are performed using @a scratch_pool.
+ *
+ * @since New in 1.6
+
+
+
+ Similar to svn_wc_adm_probe_try2(), but with @a tree_lock instead of
+ @a levels_to_lock. @a levels_to_lock is set to -1 if @a tree_lock
+ is @c TRUE, else 0.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_adm_probe_try3() without the cancel
+ functionality.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Try various ways to obtain an access baton for @a path.
+
+ First, try to obtain @a *adm_access via svn_wc_adm_probe_retrieve(),
+ but if this fails because @a associated can't give a baton for
+ @a path or @a path's parent, then try svn_wc_adm_probe_open3(),
+ this time passing @a write_lock and @a levels_to_lock. If there is
+ still no access because @a path is not a versioned directory, then
+ just set @a *adm_access to NULL and return success. But if it is
+ because @a path is locked, then return the error @c SVN_ERR_WC_LOCKED,
+ and the effect on @a *adm_access is undefined. (Or if the attempt
+ fails for any other reason, return the corresponding error, and the
+ effect on @a *adm_access is also undefined.)
+
+ If svn_wc_adm_probe_open3() succeeds, then add @a *adm_access to
+ @a associated.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ if the client has cancelled the operation.
+
+ Use @a pool only for local processing, not to allocate @a *adm_access.
+
+ @since New in 1.2.
+
+
+
+Check the working copy to determine the node type of @a path. If
+ * @a path is a versioned directory then the behaviour is like that of
+ * svn_wc_adm_retrieve(), otherwise, if @a path is a file, an unversioned
+ * directory, or does not exist, then the behaviour is like that of
+ * svn_wc_adm_retrieve() with @a path replaced by the parent directory of
+ * @a path.
+
+
+
+Return, in @a *adm_access, a pointer to an existing access baton associated
+ * with @a path. @a path must be a directory that is locked as part of the
+ * set containing the @a associated access baton.
+ *
+ * If the requested access baton is marked as missing in, or is simply
+ * absent from, @a associated, return SVN_ERR_WC_NOT_LOCKED.
+ *
+ * @a pool is used only for local processing, it is not used for the batons.
+
+
+
+ Open access batons for @a path and return in @a *anchor_access and
+ @a *target the anchor and target required to drive an editor. Return
+ in @a *target_access the access baton for the target, which may be the
+ same as @a *anchor_access (in which case @a *target is the empty
+ string, never NULL). All the access batons will be in the
+ @a *anchor_access set.
+
+ @a levels_to_lock determines the levels_to_lock used when opening
+ @a path if @a path is a versioned directory, @a levels_to_lock is
+ ignored otherwise. If @a write_lock is @c TRUE the access batons
+ will hold write locks.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ if the client has cancelled the operation.
+
+ This function is essentially a combination of svn_wc_adm_open3() and
+ svn_wc_get_actual_target(), with the emphasis on reducing physical IO.
+
+ @since New in 1.2.
+
+
+
+ Similar to svn_wc_adm_probe_open2(), but with @a tree_lock instead of
+ @a levels_to_lock. @a levels_to_lock is set to -1 if @a tree_lock
+ is @c TRUE, else 0.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_adm_probe_open3() without the cancel
+ functionality.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Checks the working copy to determine the node type of @a path. If
+ @a path is a versioned directory then the behaviour is like that of
+ svn_wc_adm_open3(), otherwise, if @a path is a file or does not
+ exist, then the behaviour is like that of svn_wc_adm_open3() with
+ @a path replaced by the parent directory of @a path. If @a path is
+ an unversioned directory, the behaviour is also like that of
+ svn_wc_adm_open3() on the parent, except that if the open fails,
+ then the returned SVN_ERR_WC_NOT_DIRECTORY error refers to @a path,
+ not to @a path's parent.
+
+ @since New in 1.2.
+
+
+
+ Similar to svn_wc_adm_open2(), but with @a tree_lock instead of
+ @a levels_to_lock. @a levels_to_lock is set to -1 if @a tree_lock
+ is @c TRUE, else 0.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+ Similar to svn_wc_adm_open3(), but without cancellation support.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Return, in @a *adm_access, a pointer to a new access baton for the working
+ copy administrative area associated with the directory @a path. If
+ @a write_lock is TRUE the baton will include a write lock, otherwise the
+ baton can only be used for read access. If @a path refers to a directory
+ that is already write locked then the error @c SVN_ERR_WC_LOCKED will be
+ returned. The error @c SVN_ERR_WC_NOT_DIRECTORY will be returned if
+ @a path is not a versioned directory.
+
+ If @a associated is an open access baton then @a adm_access will be added
+ to the set containing @a associated. @a associated can be @c NULL, in
+ which case @a adm_access is the start of a new set.
+
+ @a levels_to_lock specifies how far to lock. Zero means just the specified
+ directory. Any negative value means to lock the entire working copy
+ directory hierarchy under @a path. A positive value indicates the number of
+ levels of directories to lock -- 1 means just immediate subdirectories, 2
+ means immediate subdirectories and their subdirectories, etc. All the
+ access batons will become part of the set containing @a adm_access. This
+ is an all-or-nothing option, if it is not possible to lock all the
+ requested directories then an error will be returned and @a adm_access will
+ be invalid, with the exception that subdirectories of @a path that are
+ missing from the physical filesystem will not be locked and will not cause
+ an error. The error @c SVN_ERR_WC_LOCKED will be returned if a
+ subdirectory of @a path is already write locked.
+
+ If @a cancel_func is non-NULL, call it with @a cancel_baton to determine
+ if the client has cancelled the operation.
+
+ @a pool will be used to allocate memory for the baton and any subsequently
+ cached items. If @a adm_access has not been closed when the pool is
+ cleared, it will be closed automatically at that point, and removed from
+ its set. A baton closed in this way will not remove physical locks from
+ the working copy if cleanup is required.
+
+ The first baton in a set, with @a associated passed as @c NULL, must have
+ the longest lifetime of all the batons in the set. This implies it must be
+ the root of the hierarchy.
+
+ @since New in 1.2.
+
+
+
+@defgroup svn_wc Working copy management
+@{
+
+Flags for use with svn_wc_translated_file2
+ *
+ * @defgroup translate_flags Translation flags
+ *
+ * @{
+
+Translate from Normal Form.
+ *
+ * The working copy text bases and repository files are stored
+ * in normal form. Some files' contents - or ever representation -
+ * differs between the working copy and the normal form. This flag
+ * specifies to take the latter form as input and transform it
+ * to the former.
+ *
+ * Either this flag or @c SVN_WC_TRANSLATE_TO_NF should be specified,
+ * but not both.
+
+Translate to Normal Form.
+ *
+ * Either this flag or @c SVN_WC_TRANSLATE_FROM_NF should be specified,
+ * but not both.
+
+Force repair of eol styles, making sure the output file consistently
+ * contains the one eol style as specified by the svn:eol-style
+ * property and the required translation direction.
+ *
+
+Don't register a pool cleanup to delete the output file
+Guarantee a new file is created on successful return.
+ * The default shortcuts translation by returning the path
+ * of the untranslated file when no translation is required.
+
+Use a non-wc-local tmp directory for creating output files,
+ * instead of in the working copy admin tmp area which is the default.
+ *
+ * @since New in 1.4.
+
+@}
+Baton for access to a working copy administrative area.
+ *
+ * One day all such access will require a baton, we're not there yet.
+ *
+ * Access batons can be grouped into sets, by passing an existing open
+ * baton when opening a new baton. Given one baton in a set, other batons
+ * may be retrieved. This allows an entire hierarchy to be locked, and
+ * then the set of batons can be passed around by passing a single baton.
+
+
+
+ Get libsvn_wc version information.
+
+ @since New in 1.1.
+
+
+
+ Return an RA vtable-@a library which can handle URL. A number of
+ svn_client_* routines will call this internally, but client apps might
+ use it too. $a ra_baton is a baton obtained by a call to
+ svn_ra_init_ra_libs().
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Initialize the compatibility wrapper, using @a pool for any allocations.
+ The caller must hold on to @a ra_baton as long as the RA library is used.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+Initialize libsvn_ra_serf.
+ *
+ * @since New in 1.4.
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+Initialize libsvn_ra_svn.
+ *
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+Initialize libsvn_ra_local.
+ *
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+ The current ABI (Application Binary Interface) version for the
+ RA plugin model. This version number will change when the ABI
+ between the SVN core (e.g. libsvn_client) and the RA plugin changes.
+
+ An RA plugin should verify that the passed version number is acceptable
+ before accessing the rest of the parameters, and before returning any
+ information.
+
+ It is entirely acceptable for an RA plugin to accept multiple ABI
+ versions. It can simply interpret the parameters based on the version,
+ and it can return different plugin structures.
+
+
+
+ VSN DATE REASON FOR CHANGE
+ --- ---------- ------------------------------------------------
+ 1 2001-02-17 Initial revision.
+ 2 2004-06-29 Preparing for svn 1.1, which adds new RA vtable funcs.
+ 2005-01-19 Rework the plugin interface and don't provide the vtable
+ to the client. Separate ABI versions are no longer used.
+
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+Initialize libsvn_ra_neon.
+ *
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+ All "ra_FOO" implementations *must* export a function named
+ svn_ra_FOO_init() of type @c svn_ra_init_func_t.
+
+ When called by libsvn_client, this routine adds an entry (or
+ entries) to the hash table for any URL schemes it handles. The hash
+ value must be of type (@c svn_ra_plugin_t *). @a pool is a
+ pool for allocating configuration / one-time data.
+
+ This type is defined to use the "C Calling Conventions" to ensure that
+ abi_version is the first parameter. The RA plugin must check that value
+ before accessing the other parameters.
+
+ ### need to force this to be __cdecl on Windows... how??
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Return the plugin's version information.
+
+ @since New in 1.1.
+
+
+
+ Call svn_ra_get_file_revs() with the session associated with
+ @a session_baton and all other arguments.
+
+ @since New in 1.1.
+
+
+
+ Call svn_ra_get_locations() with the session associated with
+ @a session_baton and all other arguments.
+
+ @since New in 1.1.
+
+
+
+Call svn_ra_get_repos_root() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_get_uuid() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_check_path() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_get_log() with the session associated with
+ * @a session_baton and all other arguments. @a limit is set to 0.
+
+
+
+Call svn_ra_do_diff() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_do_status() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_do_switch() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_do_update() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_get_dir() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_get_file() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_get_commit_editor() with the session associated with
+ * @a session_baton and all other arguments plus @a lock_tokens set to
+ * @c NULL and @a keep_locks set to @c TRUE.
+
+
+
+Call svn_ra_rev_prop() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_rev_proplist() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_change_rev_prop() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_get_dated_revision() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_get_latest_revnum() with the session associated with
+ * @a session_baton and all other arguments.
+
+
+
+Call svn_ra_open() and set @a session_baton to an object representing
+ * the new session. All other arguments are passed to svn_ra_open().
+
+
+
+Short doc string printed out by `svn --version`
+
+
+The proper name of the RA library, (like "ra_neon" or "ra_local")
+
+
+ Using this callback struct is similar to calling the newer public
+ interface that is based on @c svn_ra_session_t.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Similar to svn_ra_print_modules().
+ @a ra_baton is ignored.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ The capability of understanding @c svn_depth_t (e.g., the server
+ understands what the client means when the client describes the
+ depth of a working copy to the server.)
+
+ @since New in 1.5.
+
+ The capability of doing the right thing with merge-tracking
+ information. This capability should be reported bidirectionally,
+ because some repositories may want to reject clients that do not
+ self-report as knowing how to handle merge-tracking.
+
+ @since New in 1.5.
+
+ The capability of retrieving arbitrary revprops in svn_ra_get_log2.
+
+ @since New in 1.5.
+
+ The capability of replaying a directory in the repository (partial replay).
+
+ @since New in 1.5.
+
+ The capability of including revision properties in a commit.
+
+ @since New in 1.5.
+
+ Append a textual list of all available RA modules to the stringbuf
+ @a output.
+
+ @since New in 1.2.
+
+
+
+ Given @a path at revision @a peg_revision, set @a *revision_deleted to the
+ revision @a path was first deleted, within the inclusive revision range
+ defined by @a peg_revision and @a end_revision. @a path is relative
+ to the URL in @a session.
+
+ If @a path does not exist at @a peg_revision or was not deleted within
+ the specified range, then set @a *revision_deleted to @c SVN_INVALID_REVNUM.
+ If @a peg_revision or @a end_revision are invalid or if @a peg_revision is
+ greater than @a end_revision, then return @c SVN_ERR_CLIENT_BAD_REVISION.
+
+ Use @a pool for all allocations.
+
+ @since New in 1.6.
+
+
+
+ Set @a *has to TRUE if the server represented by @a session has
+ @a capability (one of the capabilities beginning with
+ @c "SVN_RA_CAPABILITY_"), else set @a *has to FALSE.
+
+ If @a capability isn't recognized, throw @c SVN_ERR_UNKNOWN_CAPABILITY,
+ with the effect on @a *has undefined.
+
+ Use @a pool for all allocation.
+
+ @since New in 1.5.
+
+
+
+ Replay the changes from @a revision through @a editor and @a edit_baton.
+
+ Changes will be limited to those that occur under @a session's URL, and
+ the server will assume that the client has no knowledge of revisions
+ prior to @a low_water_mark. These two limiting factors define the portion
+ of the tree that the server will assume the client already has knowledge of,
+ and thus any copies of data from outside that part of the tree will be
+ sent in their entirety, not as simple copies or deltas against a previous
+ version.
+
+ If @a send_deltas is @c TRUE, the actual text and property changes in
+ the revision will be sent, otherwise dummy text deltas and null property
+ changes will be sent instead.
+
+ @a pool is used for all allocation.
+
+ @since New in 1.4.
+
+
+
+ Replay the changes from a range of revisions between @a start_revision
+ and @a end_revision.
+
+ When receiving information for one revision, a callback @a revstart_func is
+ called; this callback will provide an editor and baton through which the
+ revision will be replayed.
+ When replaying the revision is finished, callback @a revfinish_func will be
+ called so the editor can be closed.
+
+ Changes will be limited to those that occur under @a session's URL, and
+ the server will assume that the client has no knowledge of revisions
+ prior to @a low_water_mark. These two limiting factors define the portion
+ of the tree that the server will assume the client already has knowledge of,
+ and thus any copies of data from outside that part of the tree will be
+ sent in their entirety, not as simple copies or deltas against a previous
+ version.
+
+ If @a send_deltas is @c TRUE, the actual text and property changes in
+ the revision will be sent, otherwise dummy text deltas and NULL property
+ changes will be sent instead.
+
+ @a pool is used for all allocation.
+
+ @since New in 1.5.
+
+
+
+ Set @a *locks to a hashtable which represents all locks on or
+ below @a path.
+
+ The hashtable maps (const char *) absolute fs paths to (const
+ svn_lock_t *) structures. The hashtable -- and all keys and
+ values -- are allocated in @a pool.
+
+ @note It is not considered an error for @a path to not exist in HEAD.
+ Such a search will simply return no locks.
+
+ @note This functionality is not available in pre-1.2 servers. If the
+ server doesn't implement it, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is
+ returned.
+
+ @since New in 1.2.
+
+
+
+ If @a path is locked, set @a *lock to an svn_lock_t which
+ represents the lock, allocated in @a pool. If @a path is not
+ locked, set @a *lock to NULL.
+
+ @since New in 1.2.
+
+
+
+ Remove the repository lock for each path in @a path_tokens.
+ @a path_tokens is a hash whose keys are the paths to be locked, and
+ whose values are the corresponding lock tokens for each path. If
+ the path has no corresponding lock token, or if @a break_lock is TRUE,
+ then the corresponding value shall be "".
+
+ Note that unlocking is never anonymous, so any server
+ implementing this function will have to "pull" a username from
+ the client, if it hasn't done so already.
+
+ If @a token points to a lock, but the RA username doesn't match the
+ lock's owner, call @a lock_func/@a lock_baton with an error. If @a
+ break_lock is TRUE, however, instead allow the lock to be "broken"
+ by the RA user.
+
+ After successfully unlocking a path, @a lock_func is called with
+ the @a lock_baton.
+
+ Use @a pool for temporary allocations.
+
+ @since New in 1.2.
+
+
+
+ Lock each path in @a path_revs, which is a hash whose keys are the
+ paths to be locked, and whose values are the corresponding base
+ revisions for each path.
+
+ Note that locking is never anonymous, so any server implementing
+ this function will have to "pull" a username from the client, if
+ it hasn't done so already.
+
+ @a comment is optional: it's either an xml-escapable string
+ which describes the lock, or it is NULL.
+
+ If any path is already locked by a different user, then call @a
+ lock_func/@a lock_baton with an error. If @a steal_lock is TRUE,
+ then "steal" the existing lock(s) anyway, even if the RA username
+ does not match the current lock's owner. Delete any lock on the
+ path, and unconditionally create a new lock.
+
+ For each path, if its base revision (in @a path_revs) is a valid
+ revnum, then do an out-of-dateness check. If the revnum is less
+ than the last-changed-revision of any path (or if a path doesn't
+ exist in HEAD), call @a lock_func/@a lock_baton with an
+ SVN_ERR_RA_OUT_OF_DATE error.
+
+ After successfully locking a file, @a lock_func is called with the
+ @a lock_baton.
+
+ Use @a pool for temporary allocations.
+
+ @since New in 1.2.
+
+
+
+ Similiar to svn_ra_get_file_revs2(), but with @a include_merged_revisions
+ set to FALSE.
+
+ @since New in 1.2.
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Retrieve a subset of the interesting revisions of a file @a path
+ as seen in revision @a end (see svn_fs_history_prev() for a
+ definition of "interesting revisions"). Invoke @a handler with
+ @a handler_baton as its first argument for each such revision.
+ @a session is an open RA session. Use @a pool for all allocations.
+
+ If there is an interesting revision of the file that is less than or
+ equal to @a start, the iteration will begin at that revision.
+ Else, the iteration will begin at the first revision of the file in
+ the repository, which has to be less than or equal to @a end. Note
+ that if the function succeeds, @a handler will have been called at
+ least once.
+
+ In a series of calls to @a handler, the file contents for the first
+ interesting revision will be provided as a text delta against the
+ empty file. In the following calls, the delta will be against the
+ fulltext contents for the previous call.
+
+ If @a include_merged_revisions is TRUE, revisions which a included as a
+ result of a merge between @a start and @a end will be included.
+
+ @note This functionality is not available in pre-1.1 servers. If the
+ server doesn't implement it, an alternative (but much slower)
+ implementation based on svn_ra_get_log2() is used.
+
+ @since New in 1.5.
+
+
+
+ Call @a receiver (with @a receiver_baton) for each segment in the
+ location history of @a path in @a peg_revision, working backwards in
+ time from @a start_rev to @a end_rev.
+
+ @a end_rev may be @c SVN_INVALID_REVNUM to indicate that you want
+ to trace the history of the object to its origin.
+
+ @a start_rev may be @c SVN_INVALID_REVNUM to indicate "the HEAD
+ revision". Otherwise, @a start_rev must be younger than @a end_rev
+ (unless @a end_rev is @c SVN_INVALID_REVNUM).
+
+ @a peg_revision may be @c SVN_INVALID_REVNUM to indicate "the HEAD
+ revision", and must evaluate to be at least as young as @a start_rev.
+
+ Use @a pool for all allocations.
+
+ @since New in 1.5.
+
+
+
+ Set @a *locations to the locations (at the repository revisions
+ @a location_revisions) of the file identified by @a path in
+ @a peg_revision. @a path is relative to the URL to which
+ @a session was opened. @a location_revisions is an array of
+ @c svn_revnum_t's. @a *locations will be a mapping from the revisions to
+ their appropriate absolute paths. If the file doesn't exist in a
+ location_revision, that revision will be ignored.
+
+ Use @a pool for all allocations.
+
+ @since New in 1.2.
+
+
+
+ Similar to svn_ra_get_repos_root2(), but returns the value
+ allocated in @a session's pool.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+ @since New in 1.2.
+
+
+
+ Set @a *url to the repository's root URL, allocated in @a pool.
+ The value will not include a trailing '/'. The returned URL is
+ guaranteed to be a prefix of the @a session's URL.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_ra_get_uuid2(), but returns the value allocated in
+ @a session's pool.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+ @since New in 1.2.
+
+
+
+ Set @a *uuid to the repository's UUID, allocated in @a pool.
+
+ @since New in 1.5.
+
+
+
+ Set @a *dirent to an @c svn_dirent_t associated with @a path at @a
+ revision. @a path is relative to the @a session's parent's URL.
+ If @a path does not exist in @a revision, set @a *dirent to NULL.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.2.
+
+
+
+ Set @a *kind to the node kind associated with @a path at @a revision.
+ If @a path does not exist under @a revision, set @a *kind to
+ @c svn_node_none. @a path is relative to the @a session's parent URL.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.2.
+
+
+
+ Similar to svn_ra_get_log2(), but uses @c svn_log_message_receiver_t
+ instead of @c svn_log_entry_receiver_t. Also, @a
+ include_merged_revisions is set to @c FALSE and @a revprops is
+ svn:author, svn:date, and svn:log.
+
+ @since New in 1.2.
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Invoke @a receiver with @a receiver_baton on each log message from
+ @a start to @a end. @a start may be greater or less than @a end;
+ this just controls whether the log messages are processed in descending
+ or ascending revision number order.
+
+ If @a start or @a end is @c SVN_INVALID_REVNUM, it defaults to youngest.
+
+ If @a paths is non-NULL and has one or more elements, then only show
+ revisions in which at least one of @a paths was changed (i.e., if
+ file, text or props changed; if dir, props changed or an entry
+ was added or deleted). Each path is an const char *, relative
+ to the @a session's common parent.
+
+ If @a limit is non-zero only invoke @a receiver on the first @a limit
+ logs.
+
+ If @a discover_changed_paths, then each call to receiver passes a
+ const apr_hash_t * for the receiver's @a changed_paths argument;
+ the hash's keys are all the paths committed in that revision.
+ Otherwise, each call to receiver passes NULL for @a changed_paths.
+
+ If @a strict_node_history is set, copy history will not be traversed
+ (if any exists) when harvesting the revision logs for each path.
+
+ If @a include_merged_revisions is set, log information for revisions
+ which have been merged to @a targets will also be returned.
+
+ If @a revprops is NULL, retrieve all revprops; else, retrieve only the
+ revprops named in the array (i.e. retrieve none if the array is empty).
+
+ If any invocation of @a receiver returns error, return that error
+ immediately and without wrapping it.
+
+ If @a start or @a end is a non-existent revision, return the error
+ @c SVN_ERR_FS_NO_SUCH_REVISION, without ever invoking @a receiver.
+
+ See also the documentation for @c svn_log_message_receiver_t.
+
+ The caller may not invoke any RA operations using @a session from
+ within @a receiver.
+
+ Use @a pool for memory allocation.
+
+ @note If @a paths is NULL or empty, the result depends on the
+ server. Pre-1.5 servers will send nothing; 1.5 servers will
+ effectively perform the log operation on the root of the
+ repository. This behavior may be changed in the future to ensure
+ consistency across all pedigrees of server.
+
+ @note Pre-1.5 servers do not support custom revprop retrieval; if @a
+ revprops is NULL or contains a revprop other than svn:author, svn:date,
+ or svn:log, an @c SVN_ERR_RA_NOT_IMPLEMENTED error is returned.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_ra_do_diff2(), but with @a text_deltas set to @c TRUE.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Similar to svn_ra_do_diff3(), but taking @c svn_ra_reporter2_t
+ instead of @c svn_ra_reporter3_t, and therefore only able to report
+ @c svn_depth_infinity for depths. Perform the diff according to
+ @a recurse: if TRUE, then @a depth is @c svn_depth_infinity, else
+ it is @c svn_depth_files.
+
+ @deprecated Provided for compatibility with the 1.4 API.
+
+
+
+ Ask the RA layer to 'diff' a working copy against @a versus_url;
+ it's another form of svn_ra_do_update2().
+
+ @note This function cannot be used to diff a single file, only a
+ working copy directory. See the svn_ra_do_switch2() function
+ for more details.
+
+ The client initially provides a @a diff_editor/@a diff_baton to the RA
+ layer; this editor contains knowledge of where the common diff
+ root is in the working copy (when open_root() is called).
+
+ In return, the client receives a @a reporter/@a report_baton. The
+ client then describes its working copy by making calls into the
+ @a reporter.
+
+ When finished, the client calls @a reporter->finish_report(). The
+ RA layer then does a complete drive of @a diff_editor, ending with
+ close_edit(), to transmit the diff.
+
+ @a diff_target is an optional single path component will restrict
+ the scope of the diff to an entry in the directory represented by
+ the @a session's URL, or empty if the entire directory is meant to be
+ one of the diff paths.
+
+ The working copy will be diffed against @a versus_url as it exists
+ in revision @a revision, or as it is in head if @a revision is
+ @c SVN_INVALID_REVNUM.
+
+ Use @a ignore_ancestry to control whether or not items being
+ diffed will be checked for relatedness first. Unrelated items
+ are typically transmitted to the editor as a deletion of one thing
+ and the addition of another, but if this flag is @c TRUE,
+ unrelated items will be diffed as if they were related.
+
+ Diff only as deeply as @a depth indicates.
+
+ The caller may not perform any RA operations using @a session before
+ finishing the report, and may not perform any RA operations using
+ @a session from within the editing operations of @a diff_editor.
+
+ @a text_deltas instructs the driver of the @a diff_editor to enable
+ the generation of text deltas. If @a text_deltas is FALSE the window
+ handler returned by apply_textdelta will be called once with a NULL
+ @c svn_txdelta_window_t pointer.
+
+ Use @a pool for memory allocation.
+
+ @note The reporter provided by this function does NOT supply copy-
+ from information to the diff editor callbacks.
+
+ @note In order to prevent pre-1.5 servers from doing more work than
+ needed, and sending too much data back, a pre-1.5 'recurse'
+ directive may be sent to the server, based on @a depth.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_ra_do_status2(), but taking @c svn_ra_reporter2_t
+ instead of @c svn_ra_reporter3_t, and therefore only able to report
+ @c svn_depth_infinity for depths. The status operation itself is
+ performed according to @a recurse: if TRUE, then @a depth is
+ @c svn_depth_infinity, else it is @c svn_depth_immediates.
+
+ @deprecated Provided for compatibility with the 1.4 API.
+
+
+
+ Ask the RA layer to describe the status of a working copy with respect
+ to @a revision of the repository (or HEAD, if @a revision is invalid).
+
+ The client initially provides a @a status_editor/@a status_baton to the RA
+ layer; this editor contains knowledge of where the change will
+ begin in the working copy (when open_root() is called).
+
+ In return, the client receives a @a reporter/@a report_baton. The
+ client then describes its working copy by making calls into the
+ @a reporter.
+
+ When finished, the client calls @a reporter->finish_report(). The RA
+ layer then does a complete drive of @a status_editor, ending with
+ close_edit(), to report, essentially, what would be modified in
+ the working copy were the client to call do_update().
+ @a status_target is an optional single path component will restrict
+ the scope of the status report to an entry in the directory
+ represented by the @a session's URL, or empty if the entire directory
+ is meant to be examined.
+
+ Get status only as deeply as @a depth indicates.
+
+ The caller may not perform any RA operations using @a session
+ before finishing the report, and may not perform any RA operations
+ using @a session from within the editing operations of @a status_editor.
+
+ Use @a pool for memory allocation.
+
+ @note The reporter provided by this function does NOT supply copy-
+ from information to the diff editor callbacks.
+
+ @note In order to prevent pre-1.5 servers from doing more work than
+ needed, and sending too much data back, a pre-1.5 'recurse'
+ directive may be sent to the server, based on @a depth.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_ra_do_switch2(), but taking @c svn_ra_reporter2_t
+ instead of @c svn_ra_reporter3_t, and therefore only able to report
+ @c svn_depth_infinity for depths. The switch itself is performed
+ according to @a recurse: if TRUE, then use @c svn_depth_infinity
+ for @a depth, else use @c svn_depth_files.
+
+ @deprecated Provided for compatibility with the 1.4 API.
+
+
+
+ Ask the RA layer to 'switch' a working copy to a new
+ @a switch_url; it's another form of svn_ra_do_update().
+
+ The client initially provides a @a switch_editor/@a switch_baton to the RA
+ layer; this editor contains knowledge of where the change will
+ begin in the working copy (when open_root() is called).
+
+ In return, the client receives a @a reporter/@a report_baton. The
+ client then describes its working copy by making calls into the
+ @a reporter.
+
+ When finished, the client calls @a reporter->finish_report(). The
+ RA layer then does a complete drive of @a switch_editor, ending with
+ close_edit(), to switch the working copy.
+
+ @a switch_target is an optional single path component will restrict
+ the scope of things affected by the switch to an entry in the
+ directory represented by the @a session's URL, or empty if the
+ entire directory is meant to be switched.
+
+ Switch the target only as deeply as @a depth indicates.
+
+ The working copy will be switched to @a revision_to_switch_to, or the
+ "latest" revision if this arg is invalid.
+
+ The caller may not perform any RA operations using
+ @a session before finishing the report, and may not perform
+ any RA operations using @a session from within the editing
+ operations of @a switch_editor.
+
+ Use @a pool for memory allocation.
+
+ @note The reporter provided by this function does NOT supply copy-
+ from information to the diff editor callbacks.
+
+ @note In order to prevent pre-1.5 servers from doing more work than
+ needed, and sending too much data back, a pre-1.5 'recurse'
+ directive may be sent to the server, based on @a depth.
+
+ @since New in 1.5.
+
+
+
+ Similar to svn_ra_do_update2(), but taking @c svn_ra_reporter2_t
+ instead of @c svn_ra_reporter3_t; if @a recurse is true, pass @c
+ svn_depth_infinity for @a depth, else pass @c svn_depth_files; and
+ with @a send_copyfrom_args always false.
+
+ @deprecated Provided for compatibility with the 1.4 API.
+
+
+
+ Ask the RA layer to update a working copy.
+
+ The client initially provides an @a update_editor/@a update_baton to the
+ RA layer; this editor contains knowledge of where the change will
+ begin in the working copy (when @c open_root() is called).
+
+ In return, the client receives a @a reporter/@a report_baton. The
+ client then describes its working copy by making calls into the
+ @a reporter.
+
+ When finished, the client calls @a reporter->finish_report(). The
+ RA layer then does a complete drive of @a update_editor, ending with
+ @a update_editor->close_edit(), to update the working copy.
+
+ @a update_target is an optional single path component to restrict
+ the scope of the update to just that entry (in the directory
+ represented by the @a session's URL). If @a update_target is the
+ empty string, the entire directory is updated.
+
+ Update the target only as deeply as @a depth indicates.
+
+ If @a send_copyfrom_args is TRUE, then ask the server to send
+ copyfrom arguments to add_file() and add_directory() when possible.
+ (Note: this means that any subsequent txdeltas coming from the
+ server are presumed to apply against the copied file!)
+
+ The working copy will be updated to @a revision_to_update_to, or the
+ "latest" revision if this arg is invalid.
+
+ The caller may not perform any RA operations using @a session before
+ finishing the report, and may not perform any RA operations using
+ @a session from within the editing operations of @a update_editor.
+
+ Use @a pool for memory allocation.
+
+ @note The reporter provided by this function does NOT supply copy-
+ from information to the diff editor callbacks.
+
+ @note In order to prevent pre-1.5 servers from doing more work than
+ needed, and sending too much data back, a pre-1.5 'recurse'
+ directive may be sent to the server, based on @a depth.
+
+ @since New in 1.5.
+
+
+
+ Set @a *catalog to a mergeinfo catalog for the paths in @a paths.
+ If no mergeinfo is available, set @a *catalog to @c NULL. The
+ requested mergeinfo hashes are for @a paths (which are relative to
+ @a session's URL) in @a revision. If one of the paths does not exist
+ in that revision, return SVN_ERR_FS_NOT_FOUND.
+
+ @a inherit indicates whether explicit, explicit or inherited, or
+ only inherited mergeinfo for @a paths is retrieved.
+
+ If @a include_descendants is TRUE, then additionally return the
+ mergeinfo for any descendant of any element of @a paths which has
+ the @c SVN_PROP_MERGEINFO property explicitly set on it. (Note
+ that inheritance is only taken into account for the elements in @a
+ paths; descendants of the elements in @a paths which get their
+ mergeinfo via inheritance are not included in @a *catalog.)
+
+ Allocate the returned values in @a pool.
+
+ If @a revision is @c SVN_INVALID_REVNUM, it defaults to youngest.
+
+ If the server doesn't support retrieval of mergeinfo (which can
+ happen even for file:// URLs, if the repository itself hasn't been
+ upgraded), return @c SVN_ERR_UNSUPPORTED_FEATURE in preference to
+ any other error that might otherwise be returned.
+
+ @since New in 1.5.
+
+
+
+ Similar to @c svn_ra_get_dir2, but with @c SVN_DIRENT_ALL for the
+ @a dirent_fields parameter.
+
+ @since New in 1.2.
+
+ @deprecated Provided for compatibility with the 1.3 API.
+
+
+
+ If @a dirents is non @c NULL, set @a *dirents to contain all the entries
+ of directory @a path at @a revision. The keys of @a dirents will be
+ entry names (const char *), and the values dirents
+ (@c svn_dirent_t *). Use @a pool for all allocations.
+
+ @a dirent_fields controls which portions of the @c svn_dirent_t
+ objects are filled in. To have them completely filled in just pass
+ @c SVN_DIRENT_ALL, otherwise pass the bitwise OR of all the @c SVN_DIRENT_
+ fields you would like to have returned to you.
+
+ @a path is interpreted relative to the URL in @a session.
+
+ If @a revision is @c SVN_INVALID_REVNUM (meaning 'head') and
+ @a *fetched_rev is not @c NULL, then this function will set
+ @a *fetched_rev to the actual revision that was retrieved. (Some
+ callers want to know, and some don't.)
+
+ If @a props is non @c NULL, set @a *props to contain the properties of
+ the directory. This means @em all properties: not just ones controlled by
+ the user and stored in the repository fs, but non-tweakable ones
+ generated by the SCM system itself (e.g. 'wcprops', 'entryprops',
+ etc.) The keys are const char *, values are
+ @c svn_string_t *.
+
+ @since New in 1.4.
+
+
+
+ Fetch the contents and properties of file @a path at @a revision.
+ @a revision may be SVN_INVALID_REVNUM, indicating that the HEAD
+ revision should be used. Interpret @a path relative to the URL in
+ @a session. Use @a pool for all allocations.
+
+ If @a revision is @c SVN_INVALID_REVNUM and @a fetched_rev is not
+ @c NULL, then set @a *fetched_rev to the actual revision that was
+ retrieved.
+
+ If @a stream is non @c NULL, push the contents of the file at @a
+ stream, do not call svn_stream_close() when finished.
+
+ If @a props is non @c NULL, set @a *props to contain the properties of
+ the file. This means @em all properties: not just ones controlled by
+ the user and stored in the repository fs, but non-tweakable ones
+ generated by the SCM system itself (e.g. 'wcprops', 'entryprops',
+ etc.) The keys are const char *, values are
+ @c svn_string_t *.
+
+ The stream handlers for @a stream may not perform any RA
+ operations using @a session.
+
+ @since New in 1.2.
+
+
+
+ Same as svn_ra_get_commit_editor2(), but uses @c svn_commit_callback_t.
+
+ @since New in 1.2.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Same as svn_ra_get_commit_editor3(), but with @c revprop_table set
+ to a hash containing the @c SVN_PROP_REVISION_LOG property set
+ to the value of @a log_msg.
+
+ @since New in 1.4.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Set @a *editor and @a *edit_baton to an editor for committing
+ changes to the repository of @a session, setting the revision
+ properties from @a revprop_table. The revisions being committed
+ against are passed to the editor functions, starting with the rev
+ argument to @c open_root. The path root of the commit is the @a
+ session's URL.
+
+ @a revprop_table is a hash mapping const char * property
+ names to @c svn_string_t property values. The commit log message
+ is expected to be in the @c SVN_PROP_REVISION_LOG element. @a
+ revprop_table can not contain either of @c SVN_PROP_REVISION_DATE
+ or @c SVN_PROP_REVISION_AUTHOR.
+
+ Before @c close_edit returns, but after the commit has succeeded,
+ it will invoke @a callback with the new revision number, the
+ commit date (as a const char *), commit author (as a
+ const char *), and @a callback_baton as arguments. If
+ @a callback returns an error, that error will be returned from @c
+ close_edit, otherwise @c close_edit will return successfully
+ (unless it encountered an error before invoking @a callback).
+
+ The callback will not be called if the commit was a no-op
+ (i.e. nothing was committed);
+
+ @a lock_tokens, if non-NULL, is a hash mapping const char
+ * paths (relative to the URL of @a session) to
+ const char * lock tokens. The server checks that the
+ correct token is provided for each committed, locked path. @a lock_tokens
+ must live during the whole commit operation.
+
+ If @a keep_locks is @c TRUE, then do not release locks on
+ committed objects. Else, automatically release such locks.
+
+ The caller may not perform any RA operations using @a session before
+ finishing the edit.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.5.
+
+
+
+ Set @a *value to the value of unversioned property @a name attached to
+ revision @a rev in the repository of @a session. If @a rev has no
+ property by that name, set @a *value to @c NULL.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.2.
+
+
+
+ Set @a *props to the list of unversioned properties attached to revision
+ @a rev in the repository of @a session. The hash maps
+ (const char *) names to (@c svn_string_t *) values.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.2.
+
+
+
+ Set the property @a name to @a value on revision @a rev in the repository
+ of @a session.
+
+ If @a value is @c NULL, delete the named revision property.
+
+ Please note that properties attached to revisions are @em unversioned.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.2.
+
+
+
+ Get the latest revision number at time @a tm in the repository of
+ @a session.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.2.
+
+
+
+ Get the latest revision number from the repository of @a session.
+
+ Use @a pool for memory allocation.
+
+ @since New in 1.2.
+
+
+
+Set @a *url to the repository URL to which @a ra_session was
+ * opened or most recently reparented.
+
+
+
+Change the root URL of an open @a ra_session to point to a new path in the
+ * same repository. @a url is the new root URL. Use @a pool for
+ * temporary allocations.
+ *
+ * If @a url has a different repository root than the current session
+ * URL, return @c SVN_ERR_RA_ILLEGAL_URL.
+ *
+ * @since New in 1.4.
+
+
+
+@see svn_ra_open2().
+@since New in 1.2.
+@deprecated Provided for backward compatibility with the 1.2 API.
+
+
+
+ Similiar to svn_ra_open3(), but with @a uuid set to @c NULL.
+
+ @since New in 1.3.
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Open a repository session to @a repos_URL. Return an opaque object
+ representing this session in @a *session_p, allocated in @a pool.
+
+ Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal
+ to the UUID of the repository at @c repos_URL.
+
+ @a callbacks/@a callback_baton is a table of callbacks provided by the
+ client; see @c svn_ra_callbacks2_t.
+
+ @a config is a hash mapping const char * keys to
+ @c svn_config_t * values. For example, the @c svn_config_t for the
+ "~/.subversion/config" file is under the key "config".
+
+ All RA requests require a session; they will continue to
+ use @a pool for memory allocation.
+
+ @see svn_client_open_ra_session().
+
+ @since New in 1.5.
+
+
+
+ A repository access session. This object is used to perform requests
+ to a repository, identified by an URL.
+
+ @since New in 1.2.
+
+
+
+Initialize a callback structure.
+* Set @a *callbacks to a ra callbacks object, allocated in @a pool.
+*
+* Clients must use this function to allocate and initialize @c
+* svn_ra_callbacks2_t structures.
+*
+* @since New in 1.3.
+
+
+
+ Initialize the RA library. This function must be called before using
+ any function in this header, except the deprecated APIs based on
+ @c svn_ra_plugin_t, or svn_ra_version(). This function must not be called
+ simultaneously in multiple threads. @a pool must live
+ longer than any open RA sessions.
+
+ @since New in 1.2.
+
+
+
+Similar to svn_ra_callbacks2_t, except that the progress
+ * notification function and baton is missing.
+ *
+ * @deprecated Provided for backward compatibility with the 1.2 API.
+
+
+
+Client string customization callback function
+ * @since New in 1.5
+
+
+
+Cancelation function
+ *
+ * As its baton, the general callback baton is used
+ *
+ * @since New in 1.5
+
+
+
+Notification callback baton, used with progress_func.
+
+
+Notification callback used for progress information.
+ * May be NULL if not used.
+
+
+
+Invalidate working copy properties.
+
+
+Schedule new values for working copy properties.
+
+
+Immediately set new values for working copy properties.
+
+
+Fetch working copy properties.
+ *
+ * ### we might have a problem if the RA layer ever wants a property
+ * ### that corresponds to a different revision of the file than
+ * ### what is in the WC. we'll cross that bridge one day...
+
+An authentication baton, created by the application, which is
+ * capable of retrieving all known types of credentials.
+
+
+
+Open a unique temporary file for writing in the working copy.
+ * This file will be automatically deleted when @a fp is closed.
+ *
+ * @deprecated This callback should no longer be used by RA layers.
+
+
+
+A collection of callbacks implemented by libsvn_client which allows
+ * an RA layer to "pull" information from the client application, or
+ * possibly store information. libsvn_client passes this vtable to
+ * svn_ra_open3().
+ *
+ * Each routine takes a @a callback_baton originally provided with the
+ * vtable.
+ *
+ * Clients must use svn_ra_create_callbacks() to allocate and
+ * initialize this structure.
+ *
+ * @since New in 1.3.
+
+
+
+Same as the corresponding field in @c svn_ra_reporter2_t.
+
+
+Same as the corresponding field in @c svn_ra_reporter2_t.
+
+
+Similar to the corresponding field in @c svn_ra_reporter2_t, but
+ * with @a lock_token always set to NULL.
+
+
+Same as the corresponding field in @c svn_ra_reporter2_t.
+
+
+Similar to the corresponding field in @c svn_ra_reporter2_t, but
+ * with @a lock_token always set to NULL.
+
+
+ Similar to @c svn_ra_reporter2_t, but without support for lock tokens.
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+Same as the corresponding field in @c svn_ra_reporter3_t.
+
+
+Same as the corresponding field in @c svn_ra_reporter3_t.
+
+
+Similar to the corresponding field in @c svn_ra_reporter3_t, but
+ * with @a depth always set to @c svn_depth_infinity.
+
+
+Same as the corresponding field in @c svn_ra_reporter3_t.
+
+
+Similar to the corresponding field in @c svn_ra_reporter3_t, but
+ * with @a depth always set to @c svn_depth_infinity.
+
+
+ Similar to @c svn_ra_reporter3_t, but without support for depths.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+WC calls this when the state report is finished; any directories
+ * or files not explicitly `set' are assumed to be at the
+ * baseline revision originally passed into do_update(). No other
+ * reporting functions, including abort_report, should be called after
+ * calling this function.
+
+
+
+Like set_path(), but differs in that @a path in the working copy
+ * (relative to the root of the report driver) isn't a reflection of
+ * @a path in the repository (relative to the URL specified when
+ * opening the RA layer), but is instead a reflection of a different
+ * repository @a url at @a revision, and has depth @a depth.
+ *
+ * @a path may not be underneath a path on which set_path() was
+ * previously called with @c svn_depth_exclude in this report.
+ *
+ * If @a start_empty is set and @a path is a directory,
+ * the implementor should assume the directory has no entries or props.
+ *
+ * If @a lock_token is non-NULL, it is the lock token for @a path in the WC.
+ *
+ * All temporary allocations are done in @a pool.
+
+
+
+Describing a working copy @a path as missing.
+ *
+ * @a path may not be underneath a path on which set_path() was
+ * previously called with @c svn_depth_exclude in this report.
+ *
+ * All temporary allocations are done in @a pool.
+
+
+
+Describe a working copy @a path as being at a particular
+ * @a revision and having depth @a depth.
+ *
+ * @a revision may be SVN_INVALID_REVNUM if (for example) @a path
+ * represents a locally-added path with no revision number, or @a
+ * depth is @c svn_depth_exclude.
+ *
+ * @a path may not be underneath a path on which set_path() was
+ * previously called with @c svn_depth_exclude in this report.
+ *
+ * If @a start_empty is set and @a path is a directory, the
+ * implementor should assume the directory has no entries or props.
+ *
+ * This will *override* any previous set_path() calls made on parent
+ * paths. @a path is relative to the URL specified in svn_ra_open3().
+ *
+ * If @a lock_token is non-NULL, it is the lock token for @a path in the WC.
+ *
+ * All temporary allocations are done in @a pool.
+
+
+
+ The update Reporter.
+
+ A vtable structure which allows a working copy to describe a subset
+ (or possibly all) of its working-copy to an RA layer, for the
+ purposes of an update, switch, status, or diff operation.
+
+ Paths for report calls are relative to the target (not the anchor)
+ of the operation. Report calls must be made in depth-first order:
+ parents before children, all children of a parent before any
+ siblings of the parent. The first report call must be a set_path
+ with a @a path argument of "" and a valid revision. (If the target
+ of the operation is locally deleted or missing, use the anchor's
+ revision.) If the target of the operation is deleted or switched
+ relative to the anchor, follow up the initial set_path call with a
+ link_path or delete_path call with a @a path argument of "" to
+ indicate that. In no other case may there be two report
+ descriptions for the same path. If the target of the operation is
+ a locally added file or directory (which previously did not exist),
+ it may be reported as having revision 0 or as having the parent
+ directory's revision.
+
+ @since New in 1.5.
+
+
+
+ Callback function type for replay_range actions.
+
+ This callback function should close the editor.
+
+ @a revision is the target revision number of the received replay report.
+
+ @a editor and @a edit_baton should provided by the callback implementation.
+
+ @a replay_baton is the baton as originally passed to replay_range.
+
+ @a revprops contains key/value pairs for each revision properties for this
+ revision.
+
+ @since New in 1.5.
+
+
+
+ Callback function type for replay_range actions.
+
+ This callback function should provide replay_range with an editor which
+ will be driven with the received replay reports from the master repository.
+
+ @a revision is the target revision number of the received replay report.
+
+ @a editor and @a edit_baton should provided by the callback implementation.
+
+ @a replay_baton is the baton as originally passed to replay_range.
+
+ @a revprops contains key/value pairs for each revision properties for this
+ revision.
+
+ @since New in 1.5.
+
+
+
+ Callback function type for progress notification.
+
+ @a progress is the number of bytes already transferred, @a total is
+ the total number of bytes to transfer or -1 if it's not known, @a
+ baton is the callback baton.
+
+ @since New in 1.3.
+
+
+
+ Callback function type for locking and unlocking actions.
+
+ @since New in 1.2.
+
+ @a do_lock is TRUE when locking @a path, and FALSE
+ otherwise.
+
+ @a lock is a lock for @a path or NULL if @a do_lock is FALSE or @a ra_err is
+ non-NULL.
+
+ @a ra_err is NULL unless the ra layer encounters a locking related
+ error which it passes back for notification purposes. The caller
+ is responsible for clearing @a ra_err after the callback is run.
+
+ @a baton is a closure object; it should be provided by the
+ implementation, and passed by the caller. @a pool may be used for
+ temporary allocation.
+
+
+
+ A callback function type for use in @c get_file_revs.
+ @a baton is provided by the caller, @a path is the pathname of the file
+ in revision @a rev and @a rev_props are the revision properties.
+ If @a delta_handler and @a delta_baton are non-NULL, they may be set to a
+ handler/baton which will be called with the delta between the previous
+ revision and this one after the return of this callback. They may be
+ left as NULL/NULL.
+ @a prop_diffs is an array of svn_prop_t elements indicating the property
+ delta for this and the previous revision.
+ @a pool may be used for temporary allocations, but you can't rely
+ on objects allocated to live outside of this particular call and the
+ immediately following calls to @a *delta_handler, if any.
+
+ @since New in 1.1.
+
+
+
+A function type which allows the RA layer to ask about any
+ * customizations to the client name string. This is primarily used
+ * by HTTP-based RA layers wishing to extend the string reported to
+ * Apache/mod_dav_svn via the User-agent HTTP header.
+
+
+
+A function type for retrieving the youngest revision from a repos.
+
+
+This is a function type which allows the RA layer to invalidate
+ * (i.e., remove) wcprops recursively. See the documentation for
+ * @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and @a name.
+ *
+ * Unlike @c svn_ra_push_wc_prop_func_t, this has immediate effect. If
+ * it returns success, the wcprops have been removed.
+
+
+
+This is a function type which allows the RA layer to store new
+ * working copy properties as part of a commit. See the comments for
+ * @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and @a name.
+ * The @a value is the value that will be stored for the property; a
+ * @c NULL @a value means the property will be deleted.
+ *
+ * Note that this might not actually store the new property before
+ * returning, but instead schedule it to be changed as part of
+ * post-commit processing (in which case a successful commit means the
+ * properties got written). Thus, during the commit, it is possible
+ * to invoke this function to set a new value for a wc prop, then read
+ * the wc prop back from the working copy and get the *old* value.
+ * Callers beware.
+
+
+
+This is a function type which allows the RA layer to store new
+ * working copy properties during update-like operations. See the
+ * comments for @c svn_ra_get_wc_prop_func_t for @a baton, @a path, and
+ * @a name. The @a value is the value that will be stored for the property;
+ * a NULL @a value means the property will be deleted.
+
+
+
+This is a function type which allows the RA layer to fetch working
+ * copy (WC) properties.
+ *
+ * The @a baton is provided along with the function pointer and should
+ * be passed back in. This will be the @a callback_baton or the
+ * @a close_baton as appropriate.
+ *
+ * @a path is relative to the "root" of the session, defined by the
+ * @a repos_URL passed to svn_ra_open3() vtable call.
+ *
+ * @a name is the name of the property to fetch. If the property is present,
+ * then it is returned in @a value. Otherwise, @a *value is set to @c NULL.
+
+
+
+ Get libsvn_ra version information.
+
+ @since New in 1.1.
+
+
+
+Return the appropriate @c svn_mergeinfo_inheritance_t for @a word.
+ * @a word is as returned from svn_inheritance_to_word(). Defaults to
+ * @c svn_mergeinfo_explicit.
+ *
+ * @since New in 1.5.
+
+
+
+Mergeinfo on target's nearest (path-wise, not history-wise)
+ ancestor, regardless of whether target has explict mergeinfo.
+
+
+Explicit mergeinfo, or if that doesn't exist, the inherited
+ mergeinfo from a target's nearest (path-wise, not history-wise)
+ ancestor.
+
+
+Explicit mergeinfo only.
+
+
+Return a deep copy of @a rangelist, allocated in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Return a deep copy of @a mergeinfo, allocated in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Return a deep copy of @a mergeinfo_catalog, allocated in @a pool.
+ *
+ * @since New in 1.6.
+
+
+
+Take a hash of mergeinfo in @a mergeinfo, and sort the rangelists
+ * associated with each key (in place).
+ *
+ * TODO(miapi): mergeinfos should *always* be sorted. This should be
+ * a private function.
+ *
+ * @since New in 1.5
+
+
+
+Take a mergeinfo in MERGEINPUT, and convert it back to unparsed
+ * mergeinfo in *OUTPUT. If INPUT contains no elements, return the
+ * empty string.
+ *
+ * @since New in 1.5.
+
+
+
+Return a deep copy of @a mergeinfo, excluding all non-inheritable
+ * @c svn_merge_range_t. If @a start and @a end are valid revisions
+ * and @a start is less than or equal to @a end, then exclude only the
+ * non-inheritable revisions that intersect inclusively with the range
+ * defined by @a start and @a end. If @a path is not NULL remove
+ * non-inheritable ranges only for @a path. If all ranges are removed
+ * for a given path then remove that path as well. If all paths are
+ * removed or @a rangelist is empty then set @a *inheritable_rangelist
+ * to an empty array. Allocate the copy in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Return a deep copy of @c svn_merge_range_t *'s in @a rangelist excluding
+ * all non-inheritable @c svn_merge_range_t. If @a start and @a end are valid
+ * revisions and @a start is less than or equal to @a end, then exclude only the
+ * non-inheritable revision ranges that intersect inclusively with the range
+ * defined by @a start and @a end. If @a rangelist contains no elements, return
+ * an empty array. Allocate the copy in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Take an array of svn_merge_range_t *'s in @a rangelist, and convert it
+ * back to a text format rangelist in @a output. If @a rangelist contains
+ * no elements, sets @a output to the empty string.
+ *
+ * @since New in 1.5.
+
+
+
+Reverse @a rangelist, and the @c start and @c end fields of each
+ * range in @a rangelist, in place.
+ *
+ * TODO(miapi): Is this really a valid function? Rangelists that
+ * aren't sorted, or rangelists containing reverse ranges, are
+ * generally not valid in mergeinfo code. Can we rewrite the two
+ * places where this is used?
+ *
+ * @since New in 1.5.
+
+
+
+Find the intersection of two rangelists consisting of @c
+ * svn_merge_range_t * elements, @a rangelist1 and @a rangelist2, and
+ * place the result in @a *rangelist (which is never @c NULL).
+ *
+ * @a consider_inheritance determines how to account for the inheritability
+ * of the two rangelist's ranges when calculating the intersection,
+ * @see svn_mergeinfo_diff().
+ *
+ * Note: @a rangelist1 and @a rangelist2 must be sorted as said by @c
+ * svn_sort_compare_ranges(). @a *rangelist is guaranteed to be in sorted
+ * order.
+ * @since New in 1.5.
+
+
+
+Find the intersection of two mergeinfos, @a mergeinfo1 and @a
+ * mergeinfo2, and place the result in @a *mergeinfo, which is (deeply)
+ * allocated in @a pool.
+ *
+ * @since New in 1.5.
+
+
+
+Removes @a eraser (the subtrahend) from @a whiteboard (the
+ * minuend), and places the resulting difference in @a output.
+ *
+ * Note: @a eraser and @a whiteboard must be sorted as said by @c
+ * svn_sort_compare_ranges(). @a output is guaranteed to be in sorted
+ * order.
+ *
+ * @a consider_inheritance determines how to account for the
+ * @c svn_merge_range_t inheritable field when comparing @a whiteboard's
+ * and @a *eraser's rangelists for equality. @see svn_mergeinfo_diff().
+ *
+ * @since New in 1.5.
+
+
+
+Merge two rangelists consisting of @c svn_merge_range_t *
+ * elements, @a *rangelist and @a changes, placing the results in
+ * @a *rangelist. Either rangelist may be empty.
+ *
+ * When intersecting rangelists are merged, the inheritability of
+ * the resulting svn_merge_range_t depends on the inheritability of the
+ * operands: see svn_mergeinfo_merge().
+ *
+ * Note: @a *rangelist and @a changes must be sorted as said by @c
+ * svn_sort_compare_ranges(). @a *rangelist is guaranteed to remain
+ * in sorted order and be compacted to the minimal number of ranges
+ * needed to represent the merged result.
+ *
+ * @since New in 1.5.
+
+
+
+Calculate the delta between two rangelists consisting of @c
+ * svn_merge_range_t * elements (sorted in ascending order), @a from
+ * and @a to, and place the result in @a *deleted and @a *added
+ * (neither output argument will ever be @c NULL).
+ *
+ * @a consider_inheritance determines how to account for the inheritability
+ * of the two rangelist's ranges when calculating the diff,
+ * as described for svn_mergeinfo_diff().
+ *
+ * @since New in 1.5.
+
+
+
+Removes @a eraser (the subtrahend) from @a whiteboard (the
+ * minuend), and places the resulting difference in @a *mergeinfo.
+ *
+ * @since New in 1.5.
+
+
+
+Merge one mergeinfo, @a changes, into another mergeinfo @a
+ * mergeinfo.
+ *
+ * When intersecting rangelists for a path are merged, the inheritability of
+ * the resulting svn_merge_range_t depends on the inheritability of the
+ * operands. If two non-inheritable ranges are merged the result is always
+ * non-inheritable, in all other cases the resulting range is inheritable.
+ *
+ * e.g. '/A: 1,3-4' merged with '/A: 1,3,4*,5' --> '/A: 1,3-5'
+ * '/A: 1,3-4*' merged with '/A: 1,3,4*,5' --> '/A: 1,3,4*,5'
+ *
+ * @since New in 1.5.
+
+
+
+Calculate the delta between two mergeinfos, @a mergefrom and @a mergeto
+ * (which may be @c NULL), and place the result in @a *deleted and @a
+ * *added (neither output argument may be @c NULL).
+ *
+ * @a consider_inheritance determines how the rangelists in the two
+ * hashes are compared for equality. If @a consider_inheritance is FALSE,
+ * then the start and end revisions of the @c svn_merge_range_t's being
+ * compared are the only factors considered when determining equality.
+ *
+ * e.g. '/trunk: 1,3-4*,5' == '/trunk: 1,3-5'
+ *
+ * If @a consider_inheritance is TRUE, then the inheritability of the
+ * @c svn_merge_range_t's is also considered and must be the same for two
+ * otherwise identical ranges to be judged equal.
+ *
+ * e.g. '/trunk: 1,3-4*,5' != '/trunk: 1,3-5'
+ * '/trunk: 1,3-4*,5' == '/trunk: 1,3-4*,5'
+ * '/trunk: 1,3-4,5' == '/trunk: 1,3-4,5'
+ *
+ * @since New in 1.5.
+
+
+
+Parse the mergeinfo from @a input into @a *mergeinfo. If no
+ * mergeinfo is available, return an empty mergeinfo (never @c NULL).
+ * Perform temporary allocations in @a pool.
+ *
+ * If @a input is not a grammatically correct @c SVN_PROP_MERGEINFO
+ * property, contains overlapping revision ranges of differing
+ * inheritability, or revision ranges with a start revision greater
+ * than or equal to its end revision, or contains paths mapped to empty
+ * revision ranges, then return @c SVN_ERR_MERGEINFO_PARSE_ERROR.
+ * Unordered revision ranges are allowed, but will be sorted when
+ * placed into @a *mergeinfo. Overlapping revision ranges of the same
+ * inheritability are also allowed, but will be combined into a single
+ * range when placed into @a *mergeinfo.
+ *
+ * @since New in 1.5.
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2006-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_mergeinfo.h
+ @brief mergeinfo handling and processing
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2006 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_string.h
+ @brief Counted-length strings for Subversion, plus some C string goodies.
+
+ There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t.
+ The former is a simple pointer/length pair useful for passing around
+ strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is
+ buffered to enable efficient appending of strings without an allocation
+ and copy for each append operation.
+
+ @c svn_string_t contains a const char * for its data, so it is
+ most appropriate for constant data and for functions which expect constant,
+ counted data. Functions should generally use const @c svn_string_t
+ * as their parameter to indicate they are expecting a constant,
+ counted string.
+
+ @c svn_stringbuf_t uses a plain char * for its data, so it is
+ most appropriate for modifiable data.
+
+ Invariants
+
+ 1. Null termination:
+
+ Both structures maintain a significant invariant:
+
+ s->data[s->len] == '\\0'
+
+ The functions defined within this header file will maintain
+ the invariant (which does imply that memory is
+ allocated/defined as @c len+1 bytes). If code outside of the
+ @c svn_string.h functions manually builds these structures,
+ then they must enforce this invariant.
+
+ Note that an @c svn_string(buf)_t may contain binary data,
+ which means that strlen(s->data) does not have to equal @c
+ s->len. The NULL terminator is provided to make it easier to
+ pass @c s->data to C string interfaces.
+
+
+ 2. Non-NULL input:
+
+ All the functions assume their input data is non-NULL,
+ unless otherwise documented, and may seg fault if passed
+ NULL. The input data may *contain* null bytes, of course, just
+ the data pointer itself must not be NULL.
+
+ Memory allocation
+
+ All the functions make a deep copy of all input data, and never store
+ a pointer to the original input data.
+
+Overview of the @c SVN_PROP_MERGEINFO property.
+ *
+ * Merge history is stored in the @c SVN_PROP_MERGEINFO property of files
+ * and directories. The @c SVN_PROP_MERGEINFO property on a path stores the
+ * complete list of changes merged to that path, either directly or via the
+ * path's parent, grand-parent, etc.. A path may have empty mergeinfo which
+ * means that nothing has been merged to that path or all previous merges
+ * to the path were reversed. Note that a path may have no mergeinfo, this
+ * is not the same as empty mergeinfo.
+ *
+ * Every path in a tree may have @c SVN_PROP_MERGEINFO set, but if the
+ * @c SVN_PROP_MERGEINFO for a path is equivalent to the
+ * @c SVN_PROP_MERGEINFO for its parent, then the @c SVN_PROP_MERGEINFO on
+ * the path will 'elide' (be removed) from the path as a post step to any
+ * merge. If a path's parent does not have any @c SVN_PROP_MERGEINFO set,
+ * the path's mergeinfo can elide to its nearest grand-parent,
+ * great-grand-parent, etc. that has equivalent @c SVN_PROP_MERGEINFO set
+ * on it.
+ *
+ * If a path has no @c SVN_PROP_MERGEINFO of its own, it inherits mergeinfo
+ * from its nearest parent that has @c SVN_PROP_MERGEINFO set. The
+ * exception to this is @c SVN_PROP_MERGEINFO with non-ineritable revision
+ * ranges. These non-inheritable ranges apply only to the path which they
+ * are set on.
+ *
+ * Due to Subversion's allowance for mixed revision working copies, both
+ * elision and inheritance within the working copy presume the path
+ * between a path and its nearest parent with mergeinfo is at the same
+ * working revision. If this is not the case then neither inheritance nor
+ * elision can occur.
+ *
+ * The value of the @c SVN_PROP_MERGEINFO property is either an empty string
+ * (representing empty mergeinfo) or a non-empty string consisting of
+ * a path, a colon, and comma separated revision list, containing one or more
+ * revision or revision ranges. Revision range start and end points are
+ * separated by "-". Revisions and revision ranges may have the optional
+ * @c SVN_MERGEINFO_NONINHERITABLE_STR suffix to signify a non-inheritable
+ * revision/revision range.
+ *
+ * @c SVN_PROP_MERGEINFO Value Grammar:
+ *
+ * Token Definition
+ * ----- ----------
+ * revisionrange REVISION1 "-" REVISION2
+ * revisioneelement (revisionrange | REVISION)"*"?
+ * rangelist revisioneelement (COMMA revisioneelement)*
+ * revisionline PATHNAME COLON rangelist
+ * top "" | (revisionline (NEWLINE revisionline))*
+ *
+ * The PATHNAME is the source of a merge and the rangelist the revision(s)
+ * merged to the path @c SVN_PROP_MERGEINFO is set on directly or indirectly
+ * via inheritance. PATHNAME must always exist at the specified rangelist
+ * and thus a single merge may result in multiple revisionlines if the source
+ * was renamed.
+ *
+ * Rangelists must be sorted from lowest to highest revision and cannot
+ * contain overlapping revisionlistelements. REVISION1 must be less than
+ * REVISION2. Consecutive single revisions that can be represented by a
+ * revisionrange are allowed however (e.g. '5,6,7,8,9-12' or '5-12' are
+ * both acceptable).
+
+Terminology for data structures that contain mergeinfo.
+ *
+ * Subversion commonly uses several data structures to represent
+ * mergeinfo in RAM:
+ *
+ * (a) Strings (@c svn_string_t *) containing "unparsed mergeinfo".
+ *
+ * (b) A "rangelist". An array (@c apr_array_header_t *) of non-overlapping
+ * merge ranges (@c svn_merge_range_t *), sorted as said by
+ * @c svn_sort_compare_ranges(). An empty range list is represented by
+ * an empty array. Unless specifically noted otherwise, all APIs require
+ * rangelists that describe only forward ranges, i.e. the range's start
+ * revision is less than its end revision.
+ *
+ * (c) @c svn_mergeinfo_t, called "mergeinfo". A hash mapping merge
+ * source paths (@c const char *, starting with slashes) to
+ * non-empty rangelist arrays. A @c NULL hash is used to represent
+ * no mergeinfo and an empty hash is used to represent empty
+ * mergeinfo.
+ *
+ * (d) @c svn_mergeinfo_catalog_t, called a "mergeinfo catalog". A hash
+ * mapping paths (@c const char *, starting with slashes) to
+ * @c svn_mergeinfo_t.
+ *
+ * Both @c svn_mergeinfo_t and @c svn_mergeinfo_catalog_t are just
+ * typedefs for @c apr_hash_t *; there is no static type-checking, and
+ * you still use standard @c apr_hash_t functions to interact with
+ * them.
+ *
+ * Note that while the keys of mergeinfos are always relative to the
+ * repository root, the keys of a catalog may be relative to something
+ * else, such as an RA session root.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool.
+ *
+ * @a *provider retrieves its credentials by using the @a prompt_func
+ * and @a prompt_baton. The returned credential is used when a loaded
+ * client certificate is protected by a passphrase. The prompt will
+ * be retried @a retry_limit times. For infinite retries, set
+ * @a retry_limit to value less than 0.
+ *
+ * @since New in 1.4.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
+ *
+ * @a *provider retrieves its credentials by using the @a prompt_func
+ * and @a prompt_baton. The returned credential is used to load the
+ * appropriate client certificate for authentication when requested by
+ * a server. The prompt will be retried @a retry_limit times. For
+ * infinite retries, set @a retry_limit to value less than 0.
+ *
+ * @since New in 1.4.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
+ *
+ * @a *provider retrieves its credentials by using the @a prompt_func
+ * and @a prompt_baton. The returned credential is used to override
+ * SSL security on an error.
+ *
+ * @since New in 1.4.
+
+
+
+Like svn_auth_get_ssl_client_cert_pw_file_provider2, but without
+ * the ability to call the svn_auth_plaintext_passphrase_prompt_func_t
+ * callback, and the provider always assumes that it is not allowed
+ * to store the passphrase in plaintext.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
+ * @since New in 1.4.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_ssl_client_cert_pw_t that gets/sets information from the user's
+ * ~/.subversion configuration directory.
+ *
+ * If the provider is going to save the passphrase unencrypted,
+ * it calls @a plaintext_passphrase_prompt_func, passing @a
+ * prompt_baton, before saving the passphrase.
+ *
+ * If @a plaintext_passphrase_prompt_func is NULL it is not called
+ * and the passphrase is not stored in plaintext.
+ * Client developers are highly encouraged to provide this callback
+ * to ensure their users are made aware of the fact that their passphrase
+ * is going to be stored unencrypted.
+ *
+ * Clients can however set the callback to NULL and set
+ * SVN_AUTH_PARAM_STORE_SSL_CLIENT_CERT_PP_PLAINTEXT to SVN_CONFIG_FALSE or
+ * SVN_CONFIG_TRUE to enforce a certain behaviour.
+ *
+ * Allocate @a *provider in @a pool.
+ *
+ * @since New in 1.6.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
+ *
+ * @a *provider retrieves its credentials from the configuration
+ * mechanism. The returned credential is used to load the appropriate
+ * client certificate for authentication when requested by a server.
+ *
+ * @since New in 1.4.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
+ *
+ * @a *provider retrieves its credentials from the configuration
+ * mechanism. The returned credential is used to override SSL
+ * security on an error.
+ *
+ * @since New in 1.4.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_username_t that gets/sets information from a user's
+ * ~/.subversion configuration directory. Allocate @a *provider in
+ * @a pool.
+ *
+ * If a default username is available, @a *provider will honor it,
+ * and return it when svn_auth_first_credentials() is called. (See
+ * @c SVN_AUTH_PARAM_DEFAULT_USERNAME.)
+ *
+ * @since New in 1.4.
+
+
+
+ Set @a *provider to an authentication provider of type @c
+ svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
+
+ This provider automatically validates ssl server certificates with
+ the CryptoApi, like Internet Explorer and the Windows network API do.
+ This allows the rollout of root certificates via Windows Domain
+ policies, instead of Subversion specific configuration.
+
+ @since New in 1.5.
+ @note This function is only available on Windows.
+
+
+
+ Set @a *provider to an authentication provider of type @c
+ svn_auth_cred_ssl_client_cert_pw_t that gets/sets information from the
+ user's ~/.subversion configuration directory. Allocate @a *provider in
+ @a pool.
+
+ This is like svn_auth_get_ssl_client_cert_pw_file_provider(), except that
+ when running on Window 2000 or newer, the provider encrypts the password
+ before storing it to disk. On earlier versions of Windows, the provider
+ does nothing.
+
+ @since New in 1.6
+ @note This function is only available on Windows.
+
+ @note An administrative password reset may invalidate the account's
+ secret key. This function will detect that situation and behave as
+ if the password were not cached at all.
+
+
+
+ Set @a *provider to an authentication provider of type @c
+ svn_auth_cred_simple_t that gets/sets information from the user's
+ ~/.subversion configuration directory. Allocate @a *provider in
+ @a pool.
+
+ This is like svn_auth_get_simple_provider(), except that, when
+ running on Window 2000 or newer (or any other Windows version that
+ includes the CryptoAPI), the provider encrypts the password before
+ storing it to disk. On earlier versions of Windows, the provider
+ does nothing.
+
+ @since New in 1.4.
+ @note This function is only available on Windows.
+
+ @note An administrative password reset may invalidate the account's
+ secret key. This function will detect that situation and behave as
+ if the password were not cached at all.
+
+
+
+Set @a *providers to an array of svn_auth_provider_object_t *
+ * objects.
+ * Only client authentication providers available for the current platform are
+ * returned. Order of the platform-specific authentication providers is
+ * determined by the 'password-stores' configuration option which is retrieved
+ * from @a config. @a config can be NULL.
+ *
+ * Create and allocate @a *providers in @a pool.
+ *
+ * Default order of the platform-specific authentication providers:
+ * 1. gnome-keyring
+ * 2. kwallet
+ * 3. keychain
+ * 4. windows-cryptoapi
+ *
+ * @since New in 1.6.
+
+
+
+Like svn_auth_get_simple_provider2, but without the ability to
+ * call the svn_auth_plaintext_prompt_func_t callback, and the provider
+ * always assumes that it is allowed to store the password in plaintext.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
+ * @since New in 1.4.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_simple_t that gets/sets information from the user's
+ * ~/.subversion configuration directory.
+ *
+ * If the provider is going to save the password unencrypted, it calls @a
+ * plaintext_prompt_func, passing @a prompt_baton, before saving the
+ * password.
+ *
+ * If @a plaintext_prompt_func is NULL it is not called and the answer is
+ * assumed to be TRUE. This matches the deprecated behaviour of storing
+ * unencrypted passwords by default, and is only done this way for backward
+ * compatibility reasons.
+ * Client developers are highly encouraged to provide this callback
+ * to ensure their users are made aware of the fact that their password
+ * is going to be stored unencrypted. In the future, providers may
+ * default to not storing the password unencrypted if this callback is NULL.
+ *
+ * Clients can however set the callback to NULL and set
+ * SVN_AUTH_PARAM_STORE_PLAINTEXT_PASSWORDS to SVN_CONFIG_FALSE or
+ * SVN_CONFIG_TRUE to enforce a certain behaviour.
+ *
+ * Allocate @a *provider in @a pool.
+ *
+ * If a default username or password is available, @a *provider will
+ * honor them as well, and return them when
+ * svn_auth_first_credentials() is called. (see @c
+ * SVN_AUTH_PARAM_DEFAULT_USERNAME and @c
+ * SVN_AUTH_PARAM_DEFAULT_PASSWORD).
+ *
+ * @since New in 1.6.
+
+
+
+Set @a *provider to an authentication provider of type @c
+ * svn_auth_cred_username_t that gets information by prompting the
+ * user with @a prompt_func and @a prompt_baton. Allocate @a *provider
+ * in @a pool.
+ *
+ * If @c SVN_AUTH_PARAM_DEFAULT_USERNAME is defined as a runtime
+ * parameter in the @c auth_baton, then @a *provider will return the
+ * default argument when svn_auth_first_credentials() is called. If
+ * svn_auth_first_credentials() fails, then @a *provider will
+ * re-prompt @a retry_limit times (via svn_auth_next_credentials()).
+ * For infinite retries, set @a retry_limit to value less than 0.
+ *
+ * @since New in 1.4.
+
+
+
+@}
+Set @a *provider to an authentication provider of type
+ * svn_auth_cred_simple_t that gets information by prompting the user
+ * with @a prompt_func and @a prompt_baton. Allocate @a *provider in
+ * @a pool.
+ *
+ * If both @c SVN_AUTH_PARAM_DEFAULT_USERNAME and
+ * @c SVN_AUTH_PARAM_DEFAULT_PASSWORD are defined as runtime
+ * parameters in the @c auth_baton, then @a *provider will return the
+ * default arguments when svn_auth_first_credentials() is called. If
+ * svn_auth_first_credentials() fails, then @a *provider will
+ * re-prompt @a retry_limit times (via svn_auth_next_credentials()).
+ * For infinite retries, set @a retry_limit to value less than 0.
+ *
+ * @since New in 1.4.
+
+
+
+Save a set of credentials.
+ *
+ * Ask @a state to store the most recently returned credentials,
+ * presumably because they successfully authenticated.
+ * All allocations should be done in @a pool.
+ *
+ * If no credentials were ever returned, do nothing.
+
+
+
+Get another set of credentials, assuming previous ones failed to
+ * authenticate.
+ *
+ * Use @a state to fetch a different set of @a *credentials, as a
+ * follow-up to svn_auth_first_credentials() or
+ * svn_auth_next_credentials(). If no more credentials are available,
+ * set @a *credentials to NULL.
+ *
+ * Note that @a *credentials will be allocated in @c auth_baton's pool.
+
+
+
+Universal run-time parameters, made available to all providers.
+
+ If you are writing a new provider, then to be a "good citizen",
+ you should notice these global parameters! Note that these
+ run-time params should be treated as read-only by providers; the
+ application is responsible for placing them into the auth_baton
+ hash.
+The auth-hash prefix indicating that the parameter is global.
+@name Default credentials defines
+Any 'default' credentials that came in through the application itself,
+(e.g. --username and --password options). Property values are
+const char *.
+@{
+@}
+@brief The application doesn't want any providers to prompt
+ * users. Property value is irrelevant; only property's existence
+ * matters.
+@brief The application doesn't want any providers to save passwords
+ * to disk. Property value is irrelevant; only property's existence
+ * matters.
+@brief Indicates whether providers may save passwords to disk in
+ * plaintext. Property value can be either SVN_CONFIG_TRUE,
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+@brief The application doesn't want any providers to save passphrase
+ * to disk. Property value is irrelevant; only property's existence
+ * matters.
+@brief Indicates whether providers may save passphrase to disk in
+ * plaintext. Property value can be either SVN_CONFIG_TRUE,
+ * SVN_CONFIG_FALSE, or SVN_CONFIG_ASK.
+@brief The application doesn't want any providers to save credentials
+ * to disk. Property value is irrelevant; only property's existence
+ * matters.
+@brief The following property is for SSL server cert providers. This
+ * provides a pointer to an @c apr_uint32_t containing the failures
+ * detected by the certificate validator.
+@brief The following property is for SSL server cert providers. This
+ * provides the cert info (svn_auth_ssl_server_cert_info_t).
+Some providers need access to the @c svn_config_t configuration.
+@deprecated Provided for backward compatibility with the 1.5 API.
+The current server group.
+@brief A configuration directory that overrides the default
+ * ~/.subversion.
+Get an initial set of credentials.
+ *
+ * Ask @a auth_baton to set @a *credentials to a set of credentials
+ * defined by @a cred_kind and valid within @a realmstring, or NULL if
+ * no credentials are available. Otherwise, return an iteration state
+ * in @a *state, so that the caller can call
+ * svn_auth_next_credentials(), in case the first set of credentials
+ * fails to authenticate.
+ *
+ * Use @a pool to allocate @a *state, and for temporary allocation.
+ * Note that @a *credentials will be allocated in @a auth_baton's pool.
+
+
+
+Get an authentication run-time parameter.
+ *
+ * Return a value for run-time parameter @a name from @a auth_baton.
+ * Return NULL if the parameter doesn't exist.
+
+
+
+Set an authentication run-time parameter.
+ *
+ * Store @a name / @a value pair as a run-time parameter in @a
+ * auth_baton, making the data accessible to all providers. @a name
+ * and @a value will NOT be duplicated into the auth_baton's pool.
+ * To delete a run-time parameter, pass NULL for @a value.
+
+
+
+Initialize an authentication system.
+ *
+ * Return an authentication object in @a *auth_baton (allocated in @a
+ * pool) that represents a particular instance of the svn
+ * authentication system. @a providers is an array of @c
+ * svn_auth_provider_object_t pointers, already allocated in @a pool
+ * and intentionally ordered. These pointers will be stored within @a
+ * *auth_baton, grouped by credential type, and searched in this exact
+ * order.
+
+
+
+A type of callback function for asking whether storing a passphrase to
+ * disk in plaintext is allowed.
+ *
+ * In this callback, the client should ask the user whether storing
+ * a passphrase for the realm identified by @a realmstring to disk
+ * in plaintext is allowed.
+ *
+ * The answer is returned in @a *may_save_plaintext.
+ * @a baton is an implementation-specific closure.
+ * All allocations should be done in @a pool.
+ *
+ * @since New in 1.6
+
+
+
+A type of callback function for asking whether storing a password to
+ * disk in plaintext is allowed.
+ *
+ * In this callback, the client should ask the user whether storing
+ * a password for the realm identified by @a realmstring to disk
+ * in plaintext is allowed.
+ *
+ * The answer is returned in @a *may_save_plaintext.
+ * @a baton is an implementation-specific closure.
+ * All allocations should be done in @a pool.
+ *
+ * @since New in 1.6
+
+
+
+Set @a *cred by prompting the user, allocating @a *cred in @a pool.
+ * @a baton is an implementation-specific closure. @a realm is a string
+ * identifying the certificate, and can be used in the prompt string.
+ *
+ * If @a may_save is FALSE, the auth system does not allow the credentials
+ * to be saved (to disk). A prompt function shall not ask the user if the
+ * credentials shall be saved if @a may_save is FALSE. For example, a GUI
+ * client with a remember password checkbox would grey out the checkbox if
+ * @a may_save is FALSE.
+
+
+
+Set @a *cred by prompting the user, allocating @a *cred in @a pool.
+ * @a baton is an implementation-specific closure. @a realm is a string
+ * that can be used in the prompt string.
+ *
+ * If @a may_save is FALSE, the auth system does not allow the credentials
+ * to be saved (to disk). A prompt function shall not ask the user if the
+ * credentials shall be saved if @a may_save is FALSE. For example, a GUI
+ * client with a remember certificate checkbox would grey out the checkbox
+ * if @a may_save is FALSE.
+
+
+
+@name SSL server certificate failure bits
+ *
+ * @note These values are stored in the on disk auth cache by the SSL
+ * server certificate auth provider, so the meaning of these bits must
+ * not be changed.
+ * @{
+
+Certificate is not yet valid.
+Certificate has expired.
+Certificate's CN (hostname) does not match the remote hostname.
+@brief Certificate authority is unknown (i.e. not trusted)
+@brief Other failure. This can happen if neon has introduced a new
+ * failure bit that we do not handle yet.
+@}
+Set @a *cred by prompting the user, allocating @a *cred in @a pool.
+ * @a baton is an implementation-specific closure.
+ *
+ * @a cert_info is a structure describing the server cert that was
+ * presented to the client, and @a failures is a bitmask that
+ * describes exactly why the cert could not be automatically validated,
+ * composed from the constants SVN_AUTH_SSL_* (@c SVN_AUTH_SSL_NOTYETVALID
+ * etc.). @a realm is a string that can be used in the prompt string.
+ *
+ * If @a may_save is FALSE, the auth system does not allow the credentials
+ * to be saved (to disk). A prompt function shall not ask the user if the
+ * credentials shall be saved if @a may_save is FALSE. For example, a GUI
+ * client with a trust permanently checkbox would grey out the checkbox if
+ * @a may_save is FALSE.
+
+
+
+Set @a *cred by prompting the user, allocating @a *cred in @a pool.
+ * @a baton is an implementation-specific closure.
+ *
+ * If @a realm is non-NULL, maybe use it in the prompt string.
+ *
+ * If @a may_save is FALSE, the auth system does not allow the credentials
+ * to be saved (to disk). A prompt function shall not ask the user if the
+ * credentials shall be saved if @a may_save is FALSE. For example, a GUI
+ * client with a remember username checkbox would grey out the checkbox if
+ * @a may_save is FALSE.
+
+
+
+Credential-constructing prompt functions. *
+These exist so that different client applications can use
+ * different prompt mechanisms to supply the same credentials. For
+ * example, if authentication requires a username and password, a
+ * command-line client's prompting function might prompt first for the
+ * username and then for the password, whereas a GUI client's would
+ * present a single dialog box asking for both, and a telepathic
+ * client's would read all the information directly from the user's
+ * mind. All these prompting functions return the same type of
+ * credential, but the information used to construct the credential is
+ * gathered in an interface-specific way in each case.
+
+Set @a *cred by prompting the user, allocating @a *cred in @a pool.
+ * @a baton is an implementation-specific closure.
+ *
+ * If @a realm is non-NULL, maybe use it in the prompt string.
+ *
+ * If @a username is non-NULL, then the user might be prompted only
+ * for a password, but @a *cred would still be filled with both
+ * username and password. For example, a typical usage would be to
+ * pass @a username on the first call, but then leave it NULL for
+ * subsequent calls, on the theory that if credentials failed, it's
+ * as likely to be due to incorrect username as incorrect password.
+ *
+ * If @a may_save is FALSE, the auth system does not allow the credentials
+ * to be saved (to disk). A prompt function shall not ask the user if the
+ * credentials shall be saved if @a may_save is FALSE. For example, a GUI
+ * client with a remember password checkbox would grey out the checkbox if
+ * @a may_save is FALSE.
+
+
+
+Bit mask of the accepted failures
+
+
+Indicates if the credentials may be saved (to disk). For example, a
+ * GUI prompt implementation with a checkbox to accept the certificate
+ * permanently shall set @a may_save to TRUE if the checkbox is checked.
+
+
+
+@c SVN_AUTH_CRED_SSL_SERVER_TRUST credentials.
+
+
+ Return a deep copy of @a info, allocated in @a pool.
+
+ @since New in 1.3.
+
+
+
+Base-64 encoded DER certificate representation
+
+
+DN of the certificate issuer
+
+
+ASCII date until which the certificate is valid
+
+
+ASCII date from which the certificate is valid
+
+
+ASCII fingerprint
+
+
+Primary CN
+
+
+SSL server verification credential type.
+ *
+ * The following auth parameters are available to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*)
+ * - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*)
+ * - @c SVN_AUTH_PARAM_SSL_SERVER_FAILURES (@c apr_uint32_t*)
+ * - @c SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO
+ * (@c svn_auth_ssl_server_cert_info_t*)
+ *
+ * The following optional auth parameters are relevant to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
+
+SSL server certificate information used by @c
+ * SVN_AUTH_CRED_SSL_SERVER_TRUST providers.
+
+
+
+Indicates if the credentials may be saved (to disk). For example, a
+ * GUI prompt implementation with a remember password checkbox shall set
+ * @a may_save to TRUE if the checkbox is checked.
+
+
+
+Certificate password
+
+
+SSL client certificate passphrase credential type.
+ *
+ * @note The realmstring used with this credential type must be a name that
+ * makes it possible for the user to identify the certificate.
+ *
+ * The following auth parameters are available to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG (@c svn_config_t*)
+ * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*)
+ * - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*)
+ *
+ * The following optional auth parameters are relevant to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
+
+@c SVN_AUTH_CRED_SSL_CLIENT_CERT_PW credentials.
+
+
+A function returning an SSL client certificate passphrase provider.
+
+
+Indicates if the credentials may be saved (to disk). For example, a
+ * GUI prompt implementation with a remember certificate checkbox shall
+ * set @a may_save to TRUE if the checkbox is checked.
+
+
+
+Absolute path to the certificate file
+
+
+SSL client certificate credential type.
+ *
+ * The following auth parameters are available to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*)
+ * - @c SVN_AUTH_PARAM_SERVER_GROUP (@c char*)
+ *
+ * The following optional auth parameters are relevant to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
+
+@c SVN_AUTH_CRED_SSL_CLIENT_CERT credentials.
+
+
+Indicates if the credentials may be saved (to disk). For example, a
+ * GUI prompt implementation with a remember username checkbox shall set
+ * @a may_save to TRUE if the checkbox is checked.
+
+
+
+Username
+
+
+Username credential kind.
+ *
+ * The following optional auth parameters are relevant to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
+ * - @c SVN_AUTH_PARAM_DEFAULT_USERNAME (@c char*)
+
+@c SVN_AUTH_CRED_USERNAME credentials.
+
+
+Indicates if the credentials may be saved (to disk). For example, a
+ * GUI prompt implementation with a remember password checkbox shall set
+ * @a may_save to TRUE if the checkbox is checked.
+
+
+
+Password
+
+
+Username
+
+
+Specific types of credentials *
+Simple username/password pair credential kind.
+ *
+ * The following auth parameters are available to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_CONFIG (@c svn_config_t*)
+ * - @c SVN_AUTH_PARAM_CONFIG_CATEGORY_SERVERS (@c svn_config_t*)
+ *
+ * The following auth parameters may be available to the providers:
+ *
+ * - @c SVN_AUTH_PARAM_NO_AUTH_CACHE (@c void*)
+ * - @c SVN_AUTH_PARAM_DEFAULT_USERNAME (@c char*)
+ * - @c SVN_AUTH_PARAM_DEFAULT_PASSWORD (@c char*)
+
+@c SVN_AUTH_CRED_SIMPLE credentials.
+
+
+The type of function returning authentication provider.
+
+
+A provider object, ready to be put into an array and given to
+ svn_auth_open().
+
+
+Save credentials.
+ *
+ * Store @a credentials for future use. @a provider_baton is
+ * general context for the vtable, and @a parameters contains any
+ * run-time data the provider may need. Set @a *saved to TRUE if
+ * the save happened, or FALSE if not. The provider is not required
+ * to save; if it refuses or is unable to save for non-fatal
+ * reasons, return FALSE. If the provider never saves data, then
+ * this function pointer should simply be NULL. @a realmstring comes
+ * from the svn_auth_first_credentials() call.
+
+
+
+Get a different set of credentials.
+ *
+ * Set @a *credentials to another set of valid credentials (using @a
+ * iter_baton as the context from previous call to first_credentials
+ * or next_credentials). If no more credentials are available, set
+ * @a *credentials to NULL. If the provider only has one set of
+ * credentials, this function pointer should simply be NULL. @a
+ * provider_baton is general context for the vtable, @a parameters
+ * contains any run-time data that the provider may need, and @a
+ * realmstring comes from the svn_auth_first_credentials() call.
+
+
+
+Get an initial set of credentials.
+ *
+ * Set @a *credentials to a set of valid credentials within @a
+ * realmstring, or NULL if no credentials are available. Set @a
+ * *iter_baton to context that allows a subsequent call to @c
+ * next_credentials, in case the first credentials fail to
+ * authenticate. @a provider_baton is general context for the
+ * vtable, @a parameters contains any run-time data that the
+ * provider may need, and @a realmstring comes from the
+ * svn_auth_first_credentials() call.
+
+
+
+The kind of credentials this provider knows how to retrieve.
+
+
+The main authentication "provider" vtable.
+
+
+The type of a Subversion authentication-iteration object
+
+
+Overview of the svn authentication system.
+ *
+ * We define an authentication "provider" as a module that is able to
+ * return a specific set of credentials. (e.g. username/password,
+ * certificate, etc.) Each provider implements a vtable that
+ *
+ * - can fetch initial credentials
+ * - can retry the fetch (or try to fetch something different)
+ * - can store the credentials for future use
+ *
+ * For any given type of credentials, there can exist any number of
+ * separate providers -- each provider has a different method of
+ * fetching. (i.e. from a disk store, by prompting the user, etc.)
+ *
+ * The application begins by creating an auth baton object, and
+ * "registers" some number of providers with the auth baton, in a
+ * specific order. (For example, it may first register a
+ * username/password provider that looks in disk store, then register
+ * a username/password provider that prompts the user.)
+ *
+ * Later on, when any svn library is challenged, it asks the auth
+ * baton for the specific credentials. If the initial credentials
+ * fail to authenticate, the caller keeps requesting new credentials.
+ * Under the hood, libsvn_auth effectively "walks" over each provider
+ * (in order of registry), one at a time, until all the providers have
+ * exhausted all their retry options.
+ *
+ * This system allows an application to flexibly define authentication
+ * behaviors (by changing registration order), and very easily write
+ * new authentication providers.
+ *
+ * An auth_baton also contains an internal hashtable of run-time
+ * parameters; any provider or library layer can set these run-time
+ * parameters at any time, so that the provider has access to the
+ * data. (For example, certain run-time data may not be available
+ * until an authentication challenge is made.) Each credential type
+ * must document the run-time parameters that are made available to
+ * its providers.
+ *
+ * @defgroup auth_fns Authentication functions
+ * @{
+
+The type of a Subversion authentication object
+
+
+Put the absolute path to the user's configuration directory,
+ * or to a file within that directory, into @a *path.
+ *
+ * If @a config_dir is not NULL, it must point to an alternative
+ * config directory location. If it is NULL, the default location
+ * is used. If @a fname is not NULL, it must specify the last
+ * component of the path to be returned. This can be used to create
+ * a path to any file in the configuration directory.
+ *
+ * Do all allocations in @a pool.
+ *
+ * Hint:
+ * To get the user configuration file, pass @c SVN_CONFIG_CATEGORY_CONFIG
+ * for @a fname. To get the servers configuration file, pass
+ * @c SVN_CONFIG_CATEGORY_SERVERS for @a fname.
+ *
+ * @since New in 1.6.
+
+
+
+Use @a cred_kind and @a realmstring to create or overwrite a file
+ * within the ~/.subversion/auth/ area. Write the contents of @a hash into
+ * the file. If @a config_dir is not NULL it specifies a directory to read
+ * the config overriding all other sources.
+ *
+ * Also, add @a realmstring to the file, with key @c
+ * SVN_CONFIG_REALMSTRING_KEY. This allows programs (or users) to
+ * verify exactly which set credentials live within the file.
+ *
+ * The hashtable must contain const char * keys and
+ * svn_string_t * values.
+
+
+
+Accessing cached authentication data in the user config area.
+ *
+ * @defgroup cached_authentication_data Cached authentication data
+ * @{
+
+A hash-key pointing to a realmstring. Every file containing
+ * authentication data should have this key.
+
+Use @a cred_kind and @a realmstring to locate a file within the
+ * ~/.subversion/auth/ area. If the file exists, initialize @a *hash
+ * and load the file contents into the hash, using @a pool. If the
+ * file doesn't exist, set @a *hash to NULL.
+ *
+ * If @a config_dir is not NULL it specifies a directory from which to
+ * read the config overriding all other sources.
+ *
+ * Besides containing the original credential fields, the hash will
+ * also contain @c SVN_CONFIG_REALMSTRING_KEY. The caller can examine
+ * this value as a sanity-check that the correct file was loaded.
+ *
+ * The hashtable will contain const char * keys and
+ * svn_string_t * values.
+
+
+
+Try to ensure that the user's ~/.subversion/ area exists, and create
+ * no-op template files for any absent config files. Use @a pool for any
+ * temporary allocation. If @a config_dir is not @c NULL it specifies a
+ * directory from which to read the config overriding all other sources.
+ *
+ * Don't error if something exists but is the wrong kind (for example,
+ * ~/.subversion exists but is a file, or ~/.subversion/servers exists
+ * but is a directory).
+ *
+ * Also don't error if trying to create something and failing -- it's
+ * okay for the config area or its contents not to be created.
+ * However, if creating a config template file succeeds, return an
+ * error if unable to initialize its contents.
+
+
+
+Set @a *valuep according to @a option_name for a given
+ * @a server_group in @a cfg, or set to @a default_value if no value is
+ * specified.
+ *
+ * Check first a default, then for an override in a server group. If
+ * a value is found but is not a valid boolean, return an
+ * SVN_ERR_BAD_CONFIG_VALUE error.
+ *
+ * @since New in 1.6.
+
+
+
+Retrieve value into @a result_value corresponding to @a option_name for a
+ * given @a server_group in @a cfg, or return @a default_value if none is
+ * found.
+ *
+ * The config will first be checked for a default, then will be checked for
+ * an override in a server group. If the value found is not a valid integer,
+ * a @c svn_error_t* will be returned.
+
+
+
+Retrieve value corresponding to @a option_name in @a cfg, or
+ * return @a default_value if none is found.
+ *
+ * The config will first be checked for a default.
+ * If @a server_group is not @c NULL, the config will also be checked
+ * for an override in a server group,
+ *
+
+
+
+Enumerate the group @a master_section in @a cfg. Each variable
+ * value is interpreted as a list of glob patterns (separated by comma
+ * and optional whitespace). Return the name of the first variable
+ * whose value matches @a key, or @c NULL if no variable matches.
+
+
+
+ Return @c TRUE if @a section exists in @a cfg, @c FALSE otherwise.
+
+ @since New in 1.4.
+
+
+
+Enumerate the options in @a section, passing @a baton and the current
+ * option's name and value to @a callback. Continue the enumeration if
+ * @a callback returns @c TRUE. Return the number of times @a callback
+ * was called.
+ *
+ * ### kff asks: A more usual interface is to continue enumerating
+ * while @a callback does not return error, and if @a callback does
+ * return error, to return the same error (or a wrapping of it)
+ * from svn_config_enumerate(). What's the use case for
+ * svn_config_enumerate()? Is it more likely to need to break out
+ * of an enumeration early, with no error, than an invocation of
+ * @a callback is likely to need to return an error? ###
+ *
+ * @a callback's @a name and @a value parameters are only valid for the
+ * duration of the call.
+ *
+ * @since New in 1.3.
+
+
+
+A callback function used in enumerating config options.
+ *
+ * See svn_config_enumerate2() for the details of this type.
+ *
+ * @since New in 1.3.
+
+
+
+Similar to svn_config_enumerate2(), but uses a memory pool of
+ * @a cfg instead of one that is explicitely provided.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.2 API.
+
+
+
+Similar to @c svn_config_enumerator2_t, but is not
+ * provided with a memory pool argument.
+ * See svn_config_enumerate() for the details of this type.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.2 API.
+
+
+
+Enumerate the sections, passing @a baton and the current section's name
+ * to @a callback. Continue the enumeration if @a callback returns @c TRUE.
+ * Return the number of times @a callback was called.
+ *
+ * ### See kff's comment to svn_config_enumerate2(). It applies to this
+ * function, too. ###
+ *
+ * @a callback's @a name parameter is only valid for the duration of the call.
+ *
+ * @since New in 1.3.
+
+
+
+A callback function used in enumerating config sections.
+ *
+ * See svn_config_enumerate_sections2() for the details of this type.
+ *
+ * @since New in 1.3.
+
+
+
+Similar to svn_config_enumerate_sections2(), but uses a memory pool of
+ * @a cfg instead of one that is explicitely provided.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.2 API.
+
+
+
+Similar to @c svn_config_section_enumerator2_t, but is not
+ * provided with a memory pool argument.
+ *
+ * See svn_config_enumerate_sections() for the details of this type.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.2 API.
+
+
+
+Like svn_config_get(), but only for yes/no/ask values.
+ *
+ * Parse @a option in @a section and set @a *valuep to one of
+ * SVN_CONFIG_TRUE, SVN_CONFIG_FALSE, or SVN_CONFIG_ASK. If there is
+ * no setting for @a option, then parse @a default_value and set
+ * @a *valuep accordingly. If @a default_value is NULL, the result is
+ * undefined, and may be an error; we recommend that you pass one of
+ * SVN_CONFIG_TRUE, SVN_CONFIG_FALSE, or SVN_CONFIG_ASK for @a default value.
+ *
+ * Valid representations are (at least) "true"/"false", "yes"/"no",
+ * "on"/"off", "1"/"0", and "ask"; they are case-insensitive. Return
+ * an SVN_ERR_BAD_CONFIG_VALUE error if either @a default_value or
+ * @a option's value is not a valid representation.
+ *
+ * @since New in 1.6.
+
+
+
+Like svn_config_set(), but for boolean values.
+ *
+ * Sets the option to 'TRUE'/'FALSE', depending on @a value.
+
+
+
+Like svn_config_get(), but for boolean values.
+ *
+ * Parses the option as a boolean value. The recognized representations
+ * are 'TRUE'/'FALSE', 'yes'/'no', 'on'/'off', '1'/'0'; case does not
+ * matter. Returns an error if the option doesn't contain a known string.
+
+
+
+Add or replace the value of a (@a section, @a option) pair in @a cfg with
+ * @a value.
+ *
+ * This function invalidates all value expansions in @a cfg.
+ *
+ * To remove an option, pass NULL for the @c value.
+
+
+
+Find the value of a (@a section, @a option) pair in @a cfg, set @a
+ * *valuep to the value.
+ *
+ * If @a cfg is @c NULL, just sets @a *valuep to @a default_value. If
+ * the value does not exist, expand and return @a default_value. @a
+ * default_value can be NULL.
+ *
+ * The returned value will be valid at least until the next call to
+ * svn_config_get(), or for the lifetime of @a default_value. It is
+ * safest to consume the returned value immediately.
+ *
+ * This function may change @a cfg by expanding option values.
+
+
+
+Like svn_config_read(), but merges the configuration data from @a file
+ * (a file or registry path) into @a *cfg, which was previously returned
+ * from svn_config_read(). This function invalidates all value
+ * expansions in @a cfg, so that the next svn_config_get() takes the
+ * modifications into account.
+
+
+
+Read configuration data from @a file (a file or registry path) into
+ * @a *cfgp, allocated in @a pool.
+ *
+ * If @a file does not exist, then if @a must_exist, return an error,
+ * otherwise return an empty @c svn_config_t.
+
+
+
+@name Client configuration files strings
+Strings for the names of files, sections, and options in the
+client configuration files.
+@{
+
+@}
+@name Repository conf directory configuration files strings
+ * Strings for the names of sections and options in the
+ * repository conf directory configuration files.
+ * @{
+
+@}
+Read configuration information from the standard sources and merge it
+ * into the hash @a *cfg_hash. If @a config_dir is not NULL it specifies a
+ * directory from which to read the configuration files, overriding all
+ * other sources. Otherwise, first read any system-wide configurations
+ * (from a file or from the registry), then merge in personal
+ * configurations (again from file or registry). The hash and all its data
+ * are allocated in @a pool.
+ *
+ * @a *cfg_hash is a hash whose keys are @c const char * configuration
+ * categories (@c SVN_CONFIG_CATEGORY_SERVERS,
+ * @c SVN_CONFIG_CATEGORY_CONFIG, etc.) and whose values are the @c
+ * svn_config_t * items representing the configuration values for that
+ * category.
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_ra.h
+ @brief Repository Access
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2006 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_string.h
+ @brief Counted-length strings for Subversion, plus some C string goodies.
+
+ There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t.
+ The former is a simple pointer/length pair useful for passing around
+ strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is
+ buffered to enable efficient appending of strings without an allocation
+ and copy for each append operation.
+
+ @c svn_string_t contains a const char * for its data, so it is
+ most appropriate for constant data and for functions which expect constant,
+ counted data. Functions should generally use const @c svn_string_t
+ * as their parameter to indicate they are expecting a constant,
+ counted string.
+
+ @c svn_stringbuf_t uses a plain char * for its data, so it is
+ most appropriate for modifiable data.
+
+ Invariants
+
+ 1. Null termination:
+
+ Both structures maintain a significant invariant:
+
+ s->data[s->len] == '\\0'
+
+ The functions defined within this header file will maintain
+ the invariant (which does imply that memory is
+ allocated/defined as @c len+1 bytes). If code outside of the
+ @c svn_string.h functions manually builds these structures,
+ then they must enforce this invariant.
+
+ Note that an @c svn_string(buf)_t may contain binary data,
+ which means that strlen(s->data) does not have to equal @c
+ s->len. The NULL terminator is provided to make it easier to
+ pass @c s->data to C string interfaces.
+
+
+ 2. Non-NULL input:
+
+ All the functions assume their input data is non-NULL,
+ unless otherwise documented, and may seg fault if passed
+ NULL. The input data may *contain* null bytes, of course, just
+ the data pointer itself must not be NULL.
+
+ Memory allocation
+
+ All the functions make a deep copy of all input data, and never store
+ a pointer to the original input data.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_delta.h
+ @brief Delta-parsing
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2002-2009 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_auth.h
+ @brief Subversion's authentication system
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_config.h
+ @brief Accessing SVN configuration files.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+Opaque structure describing a set of configuration options.
+
+
+ Same as svn_opt_print_help2(), but acts on #svn_opt_subcommand_desc_t.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Same as svn_opt_print_help3(), but with @a global_options always @c
+ NULL.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Central dispatcher function for various kinds of help message.
+ Prints one of:
+ * subcommand-specific help (svn_opt_subcommand_help)
+ * generic help (svn_opt_print_generic_help)
+ * version info
+ * simple usage complaint: "Type '@a pgm_name help' for usage."
+
+ If @a os is not @c NULL and it contains arguments, then try
+ printing help for them as though they are subcommands, using @a
+ cmd_table and @a option_table for option information. If not @c
+ NULL, @a global_options is a zero-terminated array of options taken
+ by all subcommands.
+
+ Else, if @a print_version is TRUE, then print version info, in
+ brief form if @a quiet is also TRUE; if @a quiet is FALSE, then if
+ @a version_footer is non-NULL, print it following the version
+ information.
+
+ Else, if @a os is not @c NULL and does not contain arguments, print
+ generic help, via svn_opt_print_generic_help2() with the @a header,
+ @a cmd_table, @a option_table, and @a footer arguments.
+
+ Else, when @a os is @c NULL, print the simple usage complaint.
+
+ Use @a pool for temporary allocations.
+
+ Notes: The reason this function handles both version printing and
+ general usage help is that a confused user might put both the
+ --version flag *and* subcommand arguments on a help command line.
+ The logic for handling such a situation should be in one place.
+
+ @since New in 1.5.
+
+
+
+ Parse a working-copy or URL in @a path, extracting any trailing
+ revision specifier of the form "@rev" from the last component of
+ the path.
+
+ Some examples would be:
+
+ "foo/bar" -> "foo/bar", (unspecified)
+ "foo/bar@13" -> "foo/bar", (number, 13)
+ "foo/bar@HEAD" -> "foo/bar", (head)
+ "foo/bar@{1999-12-31}" -> "foo/bar", (date, 1999-12-31)
+ "http://a/b@27" -> "http://a/b", (number, 27)
+ "http://a/b@COMMITTED" -> "http://a/b", (committed) [*]
+ "http://a/b@{1999-12-31} -> "http://a/b", (date, 1999-12-31)
+ "http://a/b@%7B1999-12-31%7D -> "http://a/b", (date, 1999-12-31)
+ "foo/bar@1:2" -> error
+ "foo/bar@baz" -> error
+ "foo/bar@" -> "foo/bar", (base)
+ "foo/bar/@13" -> "foo/bar/", (number, 13)
+ "foo/bar@@13" -> "foo/bar@", (number, 13)
+ "foo/@bar@HEAD" -> "foo/@bar", (head)
+ "foo@/bar" -> "foo@/bar", (unspecified)
+ "foo@HEAD/bar" -> "foo@HEAD/bar", (unspecified)
+
+ [*] Syntactically valid but probably not semantically useful.
+
+ If a trailing revision specifier is found, parse it into @a *rev and
+ put the rest of the path into @a *truepath, allocating from @a pool;
+ or return an @c SVN_ERR_CL_ARG_PARSING_ERROR (with the effect on
+ @a *truepath undefined) if the revision specifier is invalid.
+ If no trailing revision specifier is found, set @a *truepath to
+ @a path and @a rev->kind to @c svn_opt_revision_unspecified.
+
+ This function does not require that @a path be in canonical form.
+ No canonicalization is done and @a *truepath will only be in
+ canonical form if @a path is in canonical form.
+
+ @since New in 1.1.
+
+
+
+Parse all remaining arguments from @a os->argv, return them as
+const char * in @a *args_p, without doing any UTF-8 conversion.
+Allocate @a *args_p and its values in @a pool.
+
+
+
+Parse @a num_args non-target arguments from the list of arguments in
+@a os->argv, return them as const char * in @a *args_p, without
+doing any UTF-8 conversion. Allocate @a *args_p and its values in @a pool.
+
+
+
+ If no targets exist in @a *targets, add `.' as the lone target.
+
+ (Some commands take an implicit "." string argument when invoked
+ with no arguments. Those commands make use of this function to
+ add "." to the target array if the user passes no args.)
+
+
+
+ Parse revprop key/value pair from @a revprop_spec (name[=value]) into
+ @a revprops, making copies of both with @a pool. If @a revprops is
+ @c NULL, allocate a new apr_hash_t in it. @a revprops maps
+ const char * revprop names to svn_string_t * revprop values for use
+ with svn_repos_get_commit_editor5 and other get_commit_editor APIs.
+
+ @since New in 1.6.
+
+
+
+ The same as svn_opt_args_to_target_array2() except that, in
+ addition, if @a extract_revisions is set, then look for trailing
+ "@rev" syntax on the first two paths. If the first target in @a
+ *targets_p ends in "@rev", replace it with a canonicalized version of
+ the part before "@rev" and replace @a *start_revision with the value
+ of "rev". If the second target in @a *targets_p ends in "@rev",
+ replace it with a canonicalized version of the part before "@rev"
+ and replace @a *end_revision with the value of "rev". Ignore
+ revision specifiers on any further paths. "rev" can be any form of
+ single revision specifier, as accepted by svn_opt_parse_revision().
+
+ @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ This is the same as svn_opt_args_to_target_array3() except that it
+ silently ignores paths that have the same name as a working copy
+ administrative directory.
+
+ @since New in 1.2.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Pull remaining target arguments from @a os into @a *targets_p,
+ converting them to UTF-8, followed by targets from @a known_targets
+ (which might come from, for example, the "--targets" command line
+ option), which are already in UTF-8.
+
+ On each URL target, do some IRI-to-URI encoding and some
+ auto-escaping. On each local path, canonicalize case and path
+ separators.
+
+ Allocate @a *targets_p and its elements in @a pool.
+
+ If a path has the same name as a Subversion working copy
+ administrative directory, return SVN_ERR_RESERVED_FILENAME_SPECIFIED;
+ if multiple reserved paths are encountered, return a chain of
+ errors, all of which are SVN_ERR_RESERVED_FILENAME_SPECIFIED. Do
+ not return this type of error in a chain with any other type of
+ error, and if this is the only type of error encountered, complete
+ the operation before returning the error(s).
+
+ @deprecated Provided for backward compatibility with the 1.5 API.
+ @see svn_client_args_to_target_array()
+
+
+
+ Resolve peg revisions and operational revisions in the following way:
+
+ - If @a is_url is set and @a peg_rev->kind is
+ @c svn_opt_revision_unspecified, @a peg_rev->kind defaults to
+ @c svn_opt_revision_head.
+
+ - If @a is_url is not set, and @a peg_rev->kind is
+ @c svn_opt_revision_unspecified, @a peg_rev->kind defaults to
+ @c svn_opt_revision_base.
+
+ - If @a op_rev->kind is @c svn_opt_revision_unspecified, @a op_rev
+ defaults to @a peg_rev.
+
+ Both @a peg_rev and @a op_rev may be modified as a result of this
+ function. @a is_url should be set if the path the revisions refer to is
+ a url, and unset otherwise.
+
+ If @a notice_local_mods is set, @c svn_opt_revision_working is used,
+ instead of @c svn_opt_revision_base.
+
+ Use @a pool for allocations.
+
+ @since New in 1.5.
+
+
+
+ Parse @a arg, where @a arg is "N" or "N:M", into a
+ @c svn_opt_revision_range_t and push that onto @a opt_ranges.
+
+ - If @a arg is "N", set the @c start field of the
+ @c svn_opt_revision_range_t to represent N and the @c end field
+ to @c svn_opt_revision_unspecified.
+
+ - If @a arg is "N:M", set the @c start field of the
+ @c svn_opt_revision_range_t to represent N and the @c end field
+ to represent M.
+
+ If @a arg is invalid, return -1; else return 0. It is invalid to omit
+ a revision (as in, ":", "N:" or ":M").
+
+ Use @a pool to allocate @c svn_opt_revision_range_t pushed to the array.
+
+ @since New in 1.5.
+
+
+
+ Set @a *start_revision and/or @a *end_revision according to @a arg,
+ where @a arg is "N" or "N:M", like so:
+
+ - If @a arg is "N", set @a *start_revision to represent N, and
+ leave @a *end_revision untouched.
+
+ - If @a arg is "N:M", set @a *start_revision and @a *end_revision
+ to represent N and M respectively.
+
+ N and/or M may be one of the special revision descriptors
+ recognized by revision_from_word(), or a date in curly braces.
+
+ If @a arg is invalid, return -1; else return 0.
+ It is invalid to omit a revision (as in, ":", "N:" or ":M").
+
+ @note It is typical, though not required, for @a *start_revision and
+ @a *end_revision to be @c svn_opt_revision_unspecified kind on entry.
+
+ Use @a pool for temporary allocations.
+
+
+
+The last revision in the range
+
+
+The first revision in the range
+
+
+A revision range, specified in one of @c svn_opt_revision_kind ways.
+
+
+A revision, specified in one of @c svn_opt_revision_kind ways.
+
+
+the date of the revision
+
+
+The revision number
+
+
+ A revision value, which can be specified as a number or a date.
+
+ @note This union was formerly an anonymous inline type in
+ @c svn_opt_revision_t, and was converted to a named type just to
+ make things easier for SWIG.
+
+ @since New in 1.3.
+
+
+
+ Various ways of specifying revisions.
+
+ @note
+ In contexts where local mods are relevant, the `working' kind
+ refers to the uncommitted "working" revision, which may be modified
+ with respect to its base revision. In other contexts, `working'
+ should behave the same as `committed' or `current'.
+
+
+
+repository youngest
+
+
+current, plus local mods
+
+
+.svn/entries current revision
+
+
+(rev of most recent change) - 1
+
+
+rev of most recent change
+
+
+revision given as date
+
+
+revision given as number
+
+
+No revision information given.
+
+
+ Same as svn_opt_subcommand_help2(), but acts on
+ #svn_opt_subcommand_desc_t.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Same as svn_opt_subcommand_help3(), but with @a global_options
+ always NULL.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Get @a subcommand's usage from @a table, and print it to @c stdout.
+ Obtain option usage from @a options_table. If not @c NULL, @a
+ global_options is a zero-terminated list of global options. Use @a
+ pool for temporary allocation. @a subcommand may be a canonical
+ command name or an alias. ### @todo Why does this only print to
+ @c stdout, whereas svn_opt_print_generic_help() gives us a choice?
+
+ @since New in 1.5.
+
+
+
+Print an option @a opt nicely into a @a string allocated in @a pool.
+If @a doc is set, include the generic documentation string of @a opt,
+localized to the current locale if a translation is available.
+
+
+
+ Same as svn_opt_print_generic_help2(), but acts on
+ #svn_opt_subcommand_desc_t.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Print a generic (not command-specific) usage message to @a stream.
+
+ ### @todo Why is @a stream a stdio file instead of an svn stream?
+
+ If @a header is non-NULL, print @a header followed by a newline. Then
+ loop over @a cmd_table printing the usage for each command (getting
+ option usages from @a opt_table). Then if @a footer is non-NULL, print
+ @a footer followed by a newline.
+
+ Use @a pool for temporary allocation.
+
+ @since New in 1.4.
+
+
+
+ Return @c TRUE iff subcommand @a command supports option @a option_code,
+ else return @c FALSE.
+
+ Same as svn_opt_subcommand_takes_option2(), but acts on
+ #svn_opt_subcommand_desc_t.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Same as svn_opt_subcommand_takes_option3(), but with @c NULL for @a
+ global_options.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Return @c TRUE iff subcommand @a command supports option @a
+ option_code, else return @c FALSE. If @a global_options is
+ non-NULL, it is a zero-terminated array, and all subcommands take
+ the options listed in it.
+
+ @since New in 1.5.
+
+
+
+ Return the first entry from @a option_table whose option code is @a code,
+ or @c NULL if no match. @a option_table must end with an element whose
+ every field is zero.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Return pointer to an @c apr_getopt_option_t for the option whose
+ option code is @a code, or @c NULL if no match. @a option_table must end
+ with an element whose every field is zero. If @c command is non-NULL,
+ then return the subcommand-specific option description instead of the
+ generic one, if a specific description is defined.
+
+ The returned value may be statically allocated, or allocated in @a pool.
+
+ @since New in 1.4.
+
+
+
+ Return the entry in @a table whose name matches @a cmd_name, or @c NULL if
+ none. @a cmd_name may be an alias.
+
+ Same as svn_opt_get_canonical_subcommand2(), but acts on
+ #svn_opt_subcommand_desc_t.
+
+ @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+ Return the entry in @a table whose name matches @a cmd_name, or @c NULL if
+ none. @a cmd_name may be an alias.
+
+ @since New in 1.4.
+
+
+
+A list of options accepted by this command. Each value in the
+ * array is a unique enum (the 2nd field in apr_getopt_option_t)
+
+
+
+A brief string describing this command, for usage messages.
+
+
+A list of alias names for this command (e.g., 'up' for 'update').
+
+
+The function this command invokes.
+
+
+The full name of this command.
+
+
+One element of a subcommand dispatch table.
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+ *
+ * Like #svn_opt_subcommand_desc2_t but lacking the @c desc_overrides
+ * member.
+
+
+
+A list of options accepted by this command. Each value in the
+ * array is a unique enum (the 2nd field in apr_getopt_option_t)
+
+
+
+A brief string describing this command, for usage messages.
+
+
+A list of alias names for this command (e.g., 'up' for 'update').
+
+
+The function this command invokes.
+
+
+The full name of this command.
+
+
+The maximum number of aliases a subcommand can have.
+The maximum number of options that can be accepted by a subcommand.
+Options that have no short option char should use an identifying
+ * integer equal to or greater than this.
+
+One element of a subcommand dispatch table.
+ *
+ * @since New in 1.4.
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_opt.h
+ @brief Option and argument parsing for Subversion command lines
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ All subcommand procedures in Subversion conform to this prototype.
+
+ @a os is the apr option state after getopt processing has been run; in
+ other words, it still contains the non-option arguments following
+ the subcommand. See @a os->argv and @a os->ind.
+
+ @a baton is anything you need it to be.
+
+ @a pool is used for allocating errors, and for any other allocation
+ unless the instance is explicitly documented to allocate from a
+ pool in @a baton.
+
+
+
+Return, in @a *handler2 and @a *handler2_baton a function/baton that
+ * will call @a handler/@a handler_baton, allocating the @a *handler2_baton
+ * in @a pool.
+ *
+ * @note This is used by compatibility wrappers, which exist in more than
+ * Subversion core library.
+ *
+ * @note @c svn_file_rev_handler_old_t is a placeholder type for both
+ * @c svn_repos_file_rev_handler_t and @c svn_ra_file_rev_handler_t. It is
+ * reproduced here for dependency reasons.
+ *
+ * @since New in 1.5.
+
+
+
+ The old file rev handler interface.
+
+ @note @c svn_file_rev_handler_old_t is a placeholder type for both
+ @c svn_repos_file_rev_handler_t and @c svn_ra_file_rev_handler_t. It is
+ reproduced here for dependency reasons.
+
+ @deprecated This type is provided for the svn_compat_wrap_file_rev_handler()
+ compatibilty wrapper, and should not be used for new development.
+ @since New in 1.5.
+
+
+
+@}
+ The callback invoked by file rev loopers, such as
+ svn_ra_plugin_t.get_file_revs2() and svn_repos_get_file_revs2().
+
+ @a baton is provided by the caller, @a path is the pathname of the file
+ in revision @a rev and @a rev_props are the revision properties.
+
+ If @a delta_handler and @a delta_baton are non-NULL, they may be set to a
+ handler/baton which will be called with the delta between the previous
+ revision and this one after the return of this callback. They may be
+ left as NULL/NULL.
+
+ @a result_of_merge will be @c TRUE if the revision being returned was
+ included as the result of a merge.
+
+ @a prop_diffs is an array of svn_prop_t elements indicating the property
+ delta for this and the previous revision.
+
+ @a pool may be used for temporary allocations, but you can't rely
+ on objects allocated to live outside of this particular call and
+ the immediately following calls to @a *delta_handler if any. (Pass
+ in a pool via @a baton if need be.)
+
+ @since New in 1.5.
+
+
+
+Drive @a editor (with its @a edit_baton) in such a way that
+ * each path in @a paths is traversed in a depth-first fashion. As
+ * each path is hit as part of the editor drive, use @a
+ * callback_func and @a callback_baton to allow the caller to handle
+ * the portion of the editor drive related to that path.
+ *
+ * Use @a revision as the revision number passed to intermediate
+ * directory openings.
+ *
+ * Use @a pool for all necessary allocations.
+
+
+
+@}
+Path-based editor drives.
+ *
+ * @defgroup svn_delta_path_delta_drivers Path-based delta drivers
+ * @{
+
+Callback function type for svn_delta_path_driver().
+ *
+ * The handler of this callback is given the callback baton @a
+ * callback_baton, @a path, and the @a parent_baton which represents
+ * path's parent directory as created by the editor passed to
+ * svn_delta_path_driver().
+ *
+ * If @a path represents a directory, the handler must return a @a
+ * *dir_baton for @a path, generated from the same editor (so that the
+ * driver can later close that directory).
+ *
+ * If, however, @a path represents a file, the handler should NOT
+ * return any file batons. It can close any opened or added files
+ * immediately, or delay that close until the end of the edit when
+ * svn_delta_path_driver() returns.
+ *
+ * Finally, if @a parent_baton is @c NULL, then the root of the edit
+ * is also one of the paths passed to svn_delta_path_driver(). The
+ * handler of this callback must call the editor's open_root()
+ * function and return the top-level root dir baton in @a *dir_baton.
+
+
+
+Set @a *editor and @a *edit_baton to an depth-based filtering
+ * editor that wraps @a wrapped_editor and @a wrapped_baton.
+ *
+ * The @a editor will track the depth of this drive against the @a
+ * requested_depth, taking into account whether not the edit drive is
+ * making use of a target (via @a has_target), and forward editor
+ * calls which operate "within" the request depth range through to @a
+ * wrapped_editor.
+ *
+ * @a requested_depth must be one of the following depth values:
+ * @c svn_depth_infinity, @c svn_depth_empty, @c svn_depth_files,
+ * @c svn_depth_immediates, or @c svn_depth_unknown.
+ *
+ * If filtering is deemed unncessary (or if @a requested_depth is @c
+ * svn_depth_unknown), @a *editor and @a *edit_baton will be set to @a
+ * wrapped_editor and @a wrapped_baton, respectively; otherwise,
+ * they'll be set to new objects allocated from @a pool.
+ *
+ * @note Because the svn_delta_editor_t interface's @c delete_entry()
+ * function doesn't carry node kind information, a depth-based
+ * filtering editor being asked to filter for @c svn_depth_files but
+ * receiving a @c delete_entry() call on an immediate child of the
+ * editor's target is unable to know if that deletion should be
+ * allowed or filtered out -- a delete of a top-level file is okay in
+ * this case, a delete of a top-level subdirectory is not. As such,
+ * this filtering editor takes a conservative approach, and ignores
+ * top-level deletion requests when filtering for @c svn_depth_files.
+ * Fortunately, most non-depth-aware (pre-1.5) Subversion editor
+ * drivers can be told to drive non-recursively (where non-recursive
+ * means essentially @c svn_depth_files), which means they won't
+ * transmit out-of-scope editor commands anyway.
+ *
+ * @since New in 1.5.
+
+
+
+Set @a *editor and @a *edit_baton to a cancellation editor that
+ * wraps @a wrapped_editor and @a wrapped_baton.
+ *
+ * The @a editor will call @a cancel_func with @a cancel_baton when each of
+ * its functions is called, continuing on to call the corresponding wrapped
+ * function if @a cancel_func returns @c SVN_NO_ERROR.
+ *
+ * If @a cancel_func is @c NULL, set @a *editor to @a wrapped_editor and
+ * @a *edit_baton to @a wrapped_baton.
+
+
+
+A text-delta window handler which does nothing.
+ *
+ * Editors can return this handler from @c apply_textdelta if they don't
+ * care about text delta windows.
+
+
+
+Return a default delta editor template, allocated in @a pool.
+ *
+ * The editor functions in the template do only the most basic
+ * baton-swapping: each editor function that produces a baton does so
+ * by copying its incoming baton into the outgoing baton reference.
+ *
+ * This editor is not intended to be useful by itself, but is meant to
+ * be the basis for a useful editor. After getting a default editor,
+ * you substitute in your own implementations for the editor functions
+ * you care about. The ones you don't care about, you don't have to
+ * implement -- you can rely on the template's implementation to
+ * safely do nothing of consequence.
+
+
+
+The editor-driver has decided to bail out. Allow the editor to
+ * gracefully clean up things if it needs to.
+
+
+
+All delta processing is done. Call this, with the @a edit_baton for
+ * the entire edit.
+
+
+
+In the directory represented by @a parent_baton, indicate that
+ * @a path is present as a file in the edit source, but cannot be
+ * conveyed to the edit consumer (perhaps because of authorization
+ * restrictions).
+
+
+
+We are done processing a file, whose baton is @a file_baton (set by
+ * @c add_file or @c open_file). We won't be using the baton any
+ * more, so whatever resources it refers to may now be freed.
+ *
+ * @a text_checksum is the hex MD5 digest for the fulltext that
+ * resulted from a delta application, see @c apply_textdelta. The
+ * checksum is ignored if NULL. If not null, it is compared to the
+ * checksum of the new fulltext, and the error
+ * SVN_ERR_CHECKSUM_MISMATCH is returned if they do not match. If
+ * there is no new fulltext, @a text_checksum is ignored.
+
+
+
+Change the value of a file's property.
+ * - @a file_baton specifies the file whose property should change.
+ * - @a name is the name of the property to change.
+ * - @a value is the new (final) value of the property, or @c NULL if the
+ * property should be removed altogether.
+ *
+ * The callback is guaranteed to be called exactly once for each property
+ * whose value differs between the start and the end of the edit.
+ *
+ * All allocations should be performed in @a pool.
+
+
+
+Apply a text delta, yielding the new revision of a file.
+ *
+ * @a file_baton indicates the file we're creating or updating, and the
+ * ancestor file on which it is based; it is the baton set by some
+ * prior @c add_file or @c open_file callback.
+ *
+ * The callback should set @a *handler to a text delta window
+ * handler; we will then call @a *handler on successive text
+ * delta windows as we receive them. The callback should set
+ * @a *handler_baton to the value we should pass as the @a baton
+ * argument to @a *handler.
+ *
+ * @a base_checksum is the hex MD5 digest for the base text against
+ * which the delta is being applied; it is ignored if NULL, and may
+ * be ignored even if not NULL. If it is not ignored, it must match
+ * the checksum of the base text against which svndiff data is being
+ * applied; if it does not, @c apply_textdelta or the @a *handler call
+ * which detects the mismatch will return the error
+ * SVN_ERR_CHECKSUM_MISMATCH (if there is no base text, there may
+ * still be an error if @a base_checksum is neither NULL nor the hex
+ * MD5 checksum of the empty string).
+
+
+
+We are going to make change to a file named @a path, which resides
+ * in the directory identified by @a parent_baton.
+ *
+ * The callback can store a baton for this new file in @a **file_baton;
+ * whatever value it stores there should be passed through to
+ * @c apply_textdelta. If a valid revnum, @a base_revision is the
+ * current revision of the file.
+ *
+ * Allocations for the returned @a file_baton should be performed in
+ * @a file_pool. It is also typical to save this pool for later usage
+ * by @c apply_textdelta and possibly @c close_file.
+
+
+
+We are going to add a new file named @a path. The callback can
+ * store a baton for this new file in @a **file_baton; whatever value
+ * it stores there should be passed through to @c apply_textdelta.
+ *
+ * If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a
+ * copy), and the origin of the copy may be recorded as
+ * @a copyfrom_path under @a copyfrom_revision.
+ *
+ * Allocations for the returned @a file_baton should be performed in
+ * @a file_pool. It is also typical to save this pool for later usage
+ * by @c apply_textdelta and possibly @c close_file.
+
+
+
+In the directory represented by @a parent_baton, indicate that
+ * @a path is present as a subdirectory in the edit source, but
+ * cannot be conveyed to the edit consumer (perhaps because of
+ * authorization restrictions).
+
+
+
+We are done processing a subdirectory, whose baton is @a dir_baton
+ * (set by @c add_directory or @c open_directory). We won't be using
+ * the baton any more, so whatever resources it refers to may now be
+ * freed.
+
+
+
+Change the value of a directory's property.
+ * - @a dir_baton specifies the directory whose property should change.
+ * - @a name is the name of the property to change.
+ * - @a value is the new (final) value of the property, or @c NULL if the
+ * property should be removed altogether.
+ *
+ * The callback is guaranteed to be called exactly once for each property
+ * whose value differs between the start and the end of the edit.
+ *
+ * All allocations should be performed in @a pool.
+
+
+
+We are going to make changes in a subdirectory (of the directory
+ * identified by @a parent_baton). The subdirectory is specified by
+ * @a path. The callback must store a value in @a *child_baton that
+ * should be used as the @a parent_baton for subsequent changes in this
+ * subdirectory. If a valid revnum, @a base_revision is the current
+ * revision of the subdirectory.
+ *
+ * Allocations for the returned @a child_baton should be performed in
+ * @a dir_pool. It is also typical to (possibly) save this pool for later
+ * usage by @c close_directory.
+
+
+
+We are going to add a new subdirectory named @a path. We will use
+ * the value this callback stores in @a *child_baton as the
+ * @a parent_baton for further changes in the new subdirectory.
+ *
+ * If @a copyfrom_path is non-@c NULL, this add has history (i.e., is a
+ * copy), and the origin of the copy may be recorded as
+ * @a copyfrom_path under @a copyfrom_revision.
+ *
+ * Allocations for the returned @a child_baton should be performed in
+ * @a dir_pool. It is also typical to (possibly) save this pool for later
+ * usage by @c close_directory.
+
+
+
+Remove the directory entry named @a path, a child of the directory
+ * represented by @a parent_baton. If @a revision is a valid
+ * revision number, it is used as a sanity check to ensure that you
+ * are really removing the revision of @a path that you think you are.
+ *
+ * All allocations should be performed in @a pool.
+ *
+ * @note The @a revision parameter is typically used only for
+ * client->server commit-type operations, allowing the server to
+ * verify that it is deleting what the client thinks it should be
+ * deleting. It only really makes sense in the opposite direction
+ * (during server->client update-type operations) when the trees
+ * whose delta is being described are ancestrally related (that is,
+ * one tree is an ancestor of the other).
+
+
+
+Set @a *root_baton to a baton for the top directory of the change.
+ * (This is the top of the subtree being changed, not necessarily
+ * the root of the filesystem.) As with any other directory baton, the
+ * producer should call @c close_directory on @a root_baton when done.
+ * And as with other @c open_* calls, the @a base_revision here is the
+ * current revision of the directory (before getting bumped up to the
+ * new target revision set with @c set_target_revision).
+ *
+ * Allocations for the returned @a root_baton should be performed in
+ * @a dir_pool. It is also typical to (possibly) save this pool for later
+ * usage by @c close_directory.
+
+
+
+Set the target revision for this edit to @a target_revision. This
+ * call, if used, should precede all other editor calls.
+ *
+ * @note This is typically used only for server->client update-type
+ * operations. It doesn't really make much sense for commit-type
+ * operations, because the revision of a commit isn't known until
+ * the commit is finalized.
+
+
+
+@}
+Traversing tree deltas.
+ *
+ * In Subversion, we've got various producers and consumers of tree
+ * deltas.
+ *
+ * In processing a `commit' command:
+ * - The client examines its working copy data, and produces a tree
+ * delta describing the changes to be committed.
+ * - The client networking library consumes that delta, and sends them
+ * across the wire as an equivalent series of network requests (for
+ * example, to svnserve as an ra_svn protocol stream, or to an
+ * Apache httpd server as WebDAV commands)
+ * - The server receives those requests and produces a tree delta ---
+ * hopefully equivalent to the one the client produced above.
+ * - The Subversion server module consumes that delta and commits an
+ * appropriate transaction to the filesystem.
+ *
+ * In processing an `update' command, the process is reversed:
+ * - The Subversion server module talks to the filesystem and produces
+ * a tree delta describing the changes necessary to bring the
+ * client's working copy up to date.
+ * - The server consumes this delta, and assembles a reply
+ * representing the appropriate changes.
+ * - The client networking library receives that reply, and produces a
+ * tree delta --- hopefully equivalent to the one the Subversion
+ * server produced above.
+ * - The working copy library consumes that delta, and makes the
+ * appropriate changes to the working copy.
+ *
+ * The simplest approach would be to represent tree deltas using the
+ * obvious data structure. To do an update, the server would
+ * construct a delta structure, and the working copy library would
+ * apply that structure to the working copy; the network layer's job
+ * would simply be to get the structure across the net intact.
+ *
+ * However, we expect that these deltas will occasionally be too large
+ * to fit in a typical workstation's swap area. For example, in
+ * checking out a 200Mb source tree, the entire source tree is
+ * represented by a single tree delta. So it's important to handle
+ * deltas that are too large to fit in swap all at once.
+ *
+ * So instead of representing the tree delta explicitly, we define a
+ * standard way for a consumer to process each piece of a tree delta
+ * as soon as the producer creates it. The @c svn_delta_editor_t
+ * structure is a set of callback functions to be defined by a delta
+ * consumer, and invoked by a delta producer. Each invocation of a
+ * callback function describes a piece of the delta --- a file's
+ * contents changing, something being renamed, etc.
+ *
+ * @defgroup svn_delta_tree_deltas Tree deltas
+ * @{
+
+A structure full of callback functions the delta source will invoke
+ * as it produces the delta.
+ *
+ * Note: Don't try to allocate one of these yourself. Instead, always
+ * use svn_delta_default_editor() or some other constructor, to ensure
+ * that unused slots are filled in with no-op functions.
+ *
+ * Function Usage
+ *
+ * Here's how to use these functions to express a tree delta.
+ *
+ * The delta consumer implements the callback functions described in
+ * this structure, and the delta producer invokes them. So the
+ * caller (producer) is pushing tree delta data at the callee
+ * (consumer).
+ *
+ * At the start of traversal, the consumer provides @a edit_baton, a
+ * baton global to the entire delta edit. If there is a target
+ * revision that needs to be set for this operation, the producer
+ * should call the @c set_target_revision function at this point.
+ *
+ * Next, if there are any tree deltas to express, the producer should
+ * pass the @a edit_baton to the @c open_root function, to get a baton
+ * representing root of the tree being edited.
+ *
+ * Most of the callbacks work in the obvious way:
+ *
+ * @c delete_entry
+ * @c add_file
+ * @c add_directory
+ * @c open_file
+ * @c open_directory
+ *
+ * Each of these takes a directory baton, indicating the directory
+ * in which the change takes place, and a @a path argument, giving the
+ * path (relative to the root of the edit) of the file,
+ * subdirectory, or directory entry to change. Editors will usually
+ * want to join this relative path with some base stored in the edit
+ * baton (e.g. a URL, a location in the OS filesystem).
+ *
+ * Since every call requires a parent directory baton, including
+ * @c add_directory and @c open_directory, where do we ever get our
+ * initial directory baton, to get things started? The @c open_root
+ * function returns a baton for the top directory of the change. In
+ * general, the producer needs to invoke the editor's @c open_root
+ * function before it can get anything of interest done.
+ *
+ * While @c open_root provides a directory baton for the root of
+ * the tree being changed, the @c add_directory and @c open_directory
+ * callbacks provide batons for other directories. Like the
+ * callbacks above, they take a @a parent_baton and a relative path
+ * @a path, and then return a new baton for the subdirectory being
+ * created / modified --- @a child_baton. The producer can then use
+ * @a child_baton to make further changes in that subdirectory.
+ *
+ * So, if we already have subdirectories named `foo' and `foo/bar',
+ * then the producer can create a new file named `foo/bar/baz.c' by
+ * calling:
+ *
+ * - @c open_root () --- yielding a baton @a root for the top directory
+ *
+ * - @c open_directory (@a root, "foo") --- yielding a baton @a f for `foo'
+ *
+ * - @c open_directory (@a f, "foo/bar") --- yielding a baton @a b for
+ * `foo/bar'
+ *
+ * - @c add_file (@a b, "foo/bar/baz.c")
+ *
+ * When the producer is finished making changes to a directory, it
+ * should call @c close_directory. This lets the consumer do any
+ * necessary cleanup, and free the baton's storage.
+ *
+ * The @c add_file and @c open_file callbacks each return a baton
+ * for the file being created or changed. This baton can then be
+ * passed to @c apply_textdelta to change the file's contents, or
+ * @c change_file_prop to change the file's properties. When the
+ * producer is finished making changes to a file, it should call
+ * @c close_file, to let the consumer clean up and free the baton.
+ *
+ * The @c add_file and @c add_directory functions each take arguments
+ * @a copyfrom_path and @a copyfrom_revision. If @a copyfrom_path is
+ * non-@c NULL, then @a copyfrom_path and @a copyfrom_revision indicate where
+ * the file or directory should be copied from (to create the file
+ * or directory being added). In that case, @a copyfrom_path must be
+ * either a path relative to the root of the edit, or a URI from the
+ * repository being edited. If @a copyfrom_path is @c NULL, then @a
+ * copyfrom_revision must be @c SVN_INVALID_REVNUM; it is invalid to
+ * pass a mix of valid and invalid copyfrom arguments.
+ *
+ *
+ * Function Call Ordering
+ *
+ * There are six restrictions on the order in which the producer
+ * may use the batons:
+ *
+ * 1. The producer may call @c open_directory, @c add_directory,
+ * @c open_file, @c add_file at most once on any given directory
+ * entry. @c delete_entry may be called at most once on any given
+ * directory entry and may later be followed by @c add_directory or
+ * @c add_file on the same directory entry. @c delete_entry may
+ * not be called on any directory entry after @c open_directory,
+ * @c add_directory, @c open_file or @c add_file has been called on
+ * that directory entry.
+ *
+ * 2. The producer may not close a directory baton until it has
+ * closed all batons for its subdirectories.
+ *
+ * 3. When a producer calls @c open_directory or @c add_directory,
+ * it must specify the most recently opened of the currently open
+ * directory batons. Put another way, the producer cannot have
+ * two sibling directory batons open at the same time.
+ *
+ * 4. A producer must call @c change_dir_prop on a directory either
+ * before opening any of the directory's subdirs or after closing
+ * them, but not in the middle.
+ *
+ * 5. When the producer calls @c open_file or @c add_file, either:
+ *
+ * (a) The producer must follow with any changes to the file
+ * (@c change_file_prop and/or @c apply_textdelta, as applicable),
+ * followed by a @c close_file call, before issuing any other file
+ * or directory calls, or
+ *
+ * (b) The producer must follow with a @c change_file_prop call if
+ * it is applicable, before issuing any other file or directory
+ * calls; later, after all directory batons including the root
+ * have been closed, the producer must issue @c apply_textdelta
+ * and @c close_file calls.
+ *
+ * 6. When the producer calls @c apply_textdelta, it must make all of
+ * the window handler calls (including the @c NULL window at the
+ * end) before issuing any other @c svn_delta_editor_t calls.
+ *
+ * So, the producer needs to use directory and file batons as if it
+ * is doing a single depth-first traversal of the tree, with the
+ * exception that the producer may keep file batons open in order to
+ * make @c apply_textdelta calls at the end.
+ *
+ *
+ * Pool Usage
+ *
+ * Many editor functions are invoked multiple times, in a sequence
+ * determined by the editor "driver". The driver is responsible for
+ * creating a pool for use on each iteration of the editor function,
+ * and clearing that pool between each iteration. The driver passes
+ * the appropriate pool on each function invocation.
+ *
+ * Based on the requirement of calling the editor functions in a
+ * depth-first style, it is usually customary for the driver to similarly
+ * nest the pools. However, this is only a safety feature to ensure
+ * that pools associated with deeper items are always cleared when the
+ * top-level items are also cleared. The interface does not assume, nor
+ * require, any particular organization of the pools passed to these
+ * functions. In fact, if "postfix deltas" are used for files, the file
+ * pools definitely need to live outside the scope of their parent
+ * directories' pools.
+ *
+ * Note that close_directory can be called *before* a file in that
+ * directory has been closed. That is, the directory's baton is
+ * closed before the file's baton. The implication is that
+ * @c apply_textdelta and @c close_file should not refer to a parent
+ * directory baton UNLESS the editor has taken precautions to
+ * allocate it in a pool of the appropriate lifetime (the @a dir_pool
+ * passed to @c open_directory and @c add_directory definitely does not
+ * have the proper lifetime). In general, it is recommended to simply
+ * avoid keeping a parent directory baton in a file baton.
+ *
+ *
+ * Errors
+ *
+ * At least one implementation of the editor interface is
+ * asynchronous; an error from one operation may be detected some
+ * number of operations later. As a result, an editor driver must not
+ * assume that an error from an editing function resulted from the
+ * particular operation being detected. Moreover, once an editing
+ * function returns an error, the edit is dead; the only further
+ * operation which may be called on the editor is abort_edit.
+
+
+
+Return a writable generic stream which will parse svndiff-format
+ * data into a text delta, invoking @a handler with @a handler_baton
+ * whenever a new window is ready. If @a error_on_early_close is @c
+ * TRUE, attempting to close this stream before it has handled the entire
+ * svndiff data set will result in @c SVN_ERR_SVNDIFF_UNEXPECTED_END,
+ * else this error condition will be ignored.
+
+
+
+Similar to svn_txdelta_to_svndiff2, but always using svndiff
+ * version 0.
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+Prepare to produce an svndiff-format diff from text delta windows.
+ * @a output is a writable generic stream to write the svndiff data to.
+ * Allocation takes place in a sub-pool of @a pool. On return, @a *handler
+ * is set to a window handler function and @a *handler_baton is set to
+ * the value to pass as the @a baton argument to @a *handler. The svndiff
+ * version is @a svndiff_version.
+ *
+ * @since New in 1.4.
+
+
+
+Prepare to apply a text delta. @a source is a readable generic stream
+ * yielding the source data, @a target is a writable generic stream to
+ * write target data to, and allocation takes place in a sub-pool of
+ * @a pool. On return, @a *handler is set to a window handler function and
+ * @a *handler_baton is set to the value to pass as the @a baton argument to
+ * @a *handler.
+ *
+ * If @a result_digest is non-NULL, it points to APR_MD5_DIGESTSIZE bytes
+ * of storage, and the final call to @a handler populates it with the
+ * MD5 digest of the resulting fulltext.
+ *
+ * If @a error_info is non-NULL, it is inserted parenthetically into
+ * the error string for any error returned by svn_txdelta_apply() or
+ * @a *handler. (It is normally used to provide path information,
+ * since there's nothing else in the delta application's context to
+ * supply a path for error messages.)
+ *
+ * @note To avoid lifetime issues, @a error_info is copied into
+ * @a pool or a subpool thereof.
+
+
+
+Send the contents of @a txstream to window-handler @a handler/@a baton.
+ * Windows will be extracted from the stream and delivered to the handler.
+ *
+ * All temporary allocation is performed in @a pool.
+
+
+
+Send the contents of @a stream to window-handler @a handler/@a baton.
+ * This is effectively a 'copy' operation, resulting in delta windows that
+ * make the target equivalent to the stream.
+ *
+ * If @a digest is non-NULL, populate it with the md5 checksum for the
+ * fulltext that was deltified (@a digest must be at least
+ * @c APR_MD5_DIGESTSIZE bytes long).
+ *
+ * All temporary allocation is performed in @a pool.
+
+
+
+Send the contents of @a string to window-handler @a handler/@a baton.
+ * This is effectively a 'copy' operation, resulting in delta windows that
+ * make the target equivalent to the value of @a string.
+ *
+ * All temporary allocation is performed in @a pool.
+
+
+
+ Return a writable stream which, when fed target data, will send
+ delta windows to @a handler/@a handler_baton which transform the
+ data in @a source to the target data. As usual, the window handler
+ will receive a NULL window to signify the end of the window stream.
+ The stream handler functions will read data from @a source as
+ necessary.
+
+ @since New in 1.1.
+
+
+
+Set @a *stream to a pointer to a delta stream that will turn the byte
+ * string from @a source into the byte stream from @a target.
+ *
+ * @a source and @a target are both readable generic streams. When we call
+ * svn_txdelta_next_window() on @a *stream, it will read from @a source and
+ * @a target to gather as much data as it needs.
+ *
+ * Do any necessary allocation in a sub-pool of @a pool.
+
+
+
+Return the md5 digest for the complete fulltext deltified by
+ * @a stream, or @c NULL if @a stream has not yet returned its final
+ * @c NULL window. The digest is allocated in the same memory as @a
+ * STREAM.
+
+
+
+Set @a *window to a pointer to the next window from the delta stream
+ * @a stream. When we have completely reconstructed the target string,
+ * set @a *window to zero.
+ *
+ * The window will be allocated in @a pool.
+
+
+
+Create and return a generic text delta stream with @a baton, @a
+ * next_window and @a md5_digest. Allocate the new stream in @a
+ * pool.
+ *
+ * @since New in 1.4.
+
+
+
+A typedef for a function that will return the md5 checksum of the
+ * fulltext deltified by a @c svn_txdelta_stream_t object. Will
+ * return NULL if the final null window hasn't yet been returned by
+ * the stream. The returned value will be allocated in the same pool
+ * as the stream. @a baton is the baton specified when the stream was
+ * created.
+ *
+ * @since New in 1.4.
+
+
+
+A typedef for a function that will set @a *window to the next
+ * window from a @c svn_txdelta_stream_t object. If there are no more
+ * delta windows, NULL will be used. The returned window, if any,
+ * will be allocated in @a pool. @a baton is the baton specified
+ * when the stream was created.
+ *
+ * @since New in 1.4.
+
+
+
+A delta stream --- this is the hat from which we pull a series of
+ * svn_txdelta_window_t objects, which, taken in order, describe the
+ * entire target string. This type is defined within libsvn_delta, and
+ * opaque outside that library.
+
+
+
+This function will generate delta windows that turn @a source into
+ * @a target, and pushing these windows into the @a handler window handler
+ * callback (passing @a handler_baton to each invocation).
+ *
+ * If @a checksum is not NULL, then a checksum (of kind @a checksum_kind)
+ * will be computed for the target stream, and placed into *checksum.
+ *
+ * If @a cancel_func is not NULL, then it should refer to a cancellation
+ * function (along with @a cancel_baton).
+ *
+ * Results (the checksum) will be allocated from @a result_pool, and all
+ * temporary allocations will be performed in @a scratch_pool.
+ *
+ * Note: this function replaces the combination of svn_txdelta() and
+ * svn_txdelta_send_txstream().
+ *
+ * @since New in 1.6.
+
+
+
+A typedef for functions that consume a series of delta windows, for
+ * use in caller-pushes interfaces. Such functions will typically
+ * apply the delta windows to produce some file, or save the windows
+ * somewhere. At the end of the delta window stream, you must call
+ * this function passing zero for the @a window argument.
+
+
+
+ Apply the instructions from @a window to a source view @a sbuf to
+ produce a target view @a tbuf.
+
+ @a sbuf is assumed to have @a window->sview_len bytes of data and
+ @a tbuf is assumed to have room for @a tlen bytes of output. @a
+ tlen may be more than @a window->tview_len, so return the actual
+ number of bytes written. @a sbuf is not touched and may be NULL if
+ @a window contains no source-copy operations. This is purely a
+ memory operation; nothing can go wrong as long as we have a valid
+ window.
+
+ @since New in 1.4
+
+
+
+
+ Compose two delta windows, yielding a third, allocated in @a pool.
+
+ @since New in 1.4
+
+
+
+
+ Return a deep copy of @a window, allocated in @a pool.
+
+ @since New in 1.3.
+
+
+
+New data, for use by any `svn_txdelta_new' instructions.
+
+
+The instructions for this window.
+
+
+The number of svn_txdelta_source instructions in this window. If
+ * this number is 0, we don't need to read the source in order to
+ * reconstruct the target view.
+
+
+
+The number of instructions in this window.
+
+
+The length of the target view for this window, i.e. the number of
+ * bytes which will be reconstructed by the instruction stream.
+
+
+The length of the source view for this window.
+
+
+The offset of the source view for this window.
+
+
+An @c svn_txdelta_window_t object describes how to reconstruct a
+ * contiguous section of the target string (the "target view") using a
+ * specified contiguous region of the source string (the "source
+ * view"). It contains a series of instructions which assemble the
+ * new target string text by pulling together substrings from:
+ *
+ * - the source view,
+ *
+ * - the previously constructed portion of the target view,
+ *
+ * - a string of new data contained within the window structure
+ *
+ * The source view must always slide forward from one window to the
+ * next; that is, neither the beginning nor the end of the source view
+ * may move to the left as we read from a window stream. This
+ * property allows us to apply deltas to non-seekable source streams
+ * without making a full copy of the source stream.
+
+
+
+Number of bytes of delta, see #svn_delta_action for more details.
+
+
+Offset of delta, see #svn_delta_action for more details.
+
+
+A single text delta instruction.
+
+
+ @defgroup delta_support Delta generation and handling
+
+ @{
+
+Text deltas.
+*
+* A text delta represents the difference between two strings of
+* bytes, the `source' string and the `target' string. Given a source
+* string and a target string, we can compute a text delta; given a
+* source string and a delta, we can reconstruct the target string.
+* However, note that deltas are not reversible: you cannot always
+* reconstruct the source string given the target string and delta.
+*
+* Since text deltas can be very large, the interface here allows us
+* to produce and consume them in pieces. Each piece, represented by
+* an @c svn_txdelta_window_t structure, describes how to produce the
+* next section of the target string.
+*
+* To compute a new text delta:
+*
+* - We call svn_txdelta() on the streams we want to compare. That
+* returns us an @c svn_txdelta_stream_t object.
+*
+* - We then call svn_txdelta_next_window() on the stream object
+* repeatedly. Each call returns a new @c svn_txdelta_window_t
+* object, which describes the next portion of the target string.
+* When svn_txdelta_next_window() returns zero, we are done building
+* the target string.
+*
+* @defgroup svn_delta_txt_delta Text deltas
+* @{
+
+Action codes for text delta instructions.
+
+Action code of delta instruction
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_checksum.h
+ @brief Subversion checksum routines
+
+ Get libsvn_delta version information.
+
+ @since New in 1.1.
+
+
+
+ Get libsvn_subr version information.
+
+ @since New in 1.1.
+
+
+
+ Type of function returning library version.
+
+ @since New in 1.6.
+
+
+
+ Perform a series of version compatibility checks. Checks if @a
+ my_version is compatible with each entry in @a checklist. @a
+ checklist must end with an entry whose label is @c NULL.
+
+ @see svn_ver_compatible()
+
+ @since New in 1.1.
+
+
+
+Version query function for this entry
+
+
+ An entry in the compatibility checklist.
+ @see svn_ver_check_list()
+
+ @since New in 1.1.
+
+
+
+ Check if @a my_version and @a lib_version encode the same version number.
+
+ @since New in 1.2.
+
+
+
+ Define a static svn_version_t object.
+
+ @since New in 1.1.
+
+ Generate the implementation of a version query function.
+
+ @since New in 1.1.
+
+ Check library version compatibility. Return #TRUE if the client's
+ version, given in @a my_version, is compatible with the library
+ version, provided in @a lib_version.
+
+ This function checks for version compatibility as per our
+ guarantees, but requires an exact match when linking to an
+ unreleased library. A development client is always compatible with
+ a previous released library.
+
+ @since New in 1.1.
+
+
+
+The version tag (#SVN_VER_NUMTAG).\ Must always point to a
+statically allocated string.
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_delta.h
+ @brief Delta-parsing
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2006 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_string.h
+ @brief Counted-length strings for Subversion, plus some C string goodies.
+
+ There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t.
+ The former is a simple pointer/length pair useful for passing around
+ strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is
+ buffered to enable efficient appending of strings without an allocation
+ and copy for each append operation.
+
+ @c svn_string_t contains a const char * for its data, so it is
+ most appropriate for constant data and for functions which expect constant,
+ counted data. Functions should generally use const @c svn_string_t
+ * as their parameter to indicate they are expecting a constant,
+ counted string.
+
+ @c svn_stringbuf_t uses a plain char * for its data, so it is
+ most appropriate for modifiable data.
+
+ Invariants
+
+ 1. Null termination:
+
+ Both structures maintain a significant invariant:
+
+ s->data[s->len] == '\\0'
+
+ The functions defined within this header file will maintain
+ the invariant (which does imply that memory is
+ allocated/defined as @c len+1 bytes). If code outside of the
+ @c svn_string.h functions manually builds these structures,
+ then they must enforce this invariant.
+
+ Note that an @c svn_string(buf)_t may contain binary data,
+ which means that strlen(s->data) does not have to equal @c
+ s->len. The NULL terminator is provided to make it easier to
+ pass @c s->data to C string interfaces.
+
+
+ 2. Non-NULL input:
+
+ All the functions assume their input data is non-NULL,
+ unless otherwise documented, and may seg fault if passed
+ NULL. The input data may *contain* null bytes, of course, just
+ the data pointer itself must not be NULL.
+
+ Memory allocation
+
+ All the functions make a deep copy of all input data, and never store
+ a pointer to the original input data.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_io.h
+ @brief General file I/O for Subversion
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2001-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_version.h
+ @brief Version information.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+Major version number.
+ *
+ * Modify when incompatible changes are made to published interfaces.
+
+Minor version number.
+ *
+ * Modify when new functionality is added or new interfaces are
+ * defined, but all changes are backward compatible.
+
+ Patch number.
+
+ Modify for every released patch.
+
+ @since New in 1.1.
+
+@deprecated Provided for backward compatibility with the 1.0 API.
+@deprecated Provided for backward compatibility with the 1.0 API.
+Version tag: a string describing the version.
+ *
+ * This tag remains " (dev build)" in the repository so that we can
+ * always see from "svn --version" that the software has been built
+ * from the repository rather than a "blessed" distribution.
+ *
+ * When rolling a tarball, we automatically replace this text with " (r1234)"
+ * (where 1234 is the last revision on the branch prior to the release)
+ * for final releases; in prereleases, it becomes " (Alpha 1)",
+ * " (Beta 1)", etc., as appropriate.
+ *
+ * Always change this at the same time as SVN_VER_NUMTAG.
+
+Number tag: a string describing the version.
+ *
+ * This tag is used to generate a version number string to identify
+ * the client and server in HTTP requests, for example. It must not
+ * contain any spaces. This value remains "-dev" in the repository.
+ *
+ * When rolling a tarball, we automatically replace this text with ""
+ * for final releases; in prereleases, it becomes "-alpha1, "-beta1",
+ * etc., as appropriate.
+ *
+ * Always change this at the same time as SVN_VER_TAG.
+
+Revision number: The repository revision number of this release.
+ *
+ * This constant is used to generate the build number part of the Windows
+ * file version. Its value remains 0 in the repository.
+ *
+ * When rolling a tarball, we automatically replace it with what we
+ * guess to be the correct revision number.
+
+Version number
+Version number with tag (contains no whitespace)
+Complete version string
+ Version information. Each library contains a function called
+ svn_libname_version() that returns a pointer to a statically
+ allocated object of this type.
+
+ @since New in 1.1.
+
+
+
+Create (or overwrite) the file at @a path with new contents,
+ * formatted as a non-negative integer @a version followed by a single
+ * newline. On successful completion the file will be read-only. Use
+ * @a pool for all allocations.
+
+
+
+Version/format files.
+ *
+ * @defgroup svn_io_format_files Version/format files
+ * @{
+
+Set @a *version to the integer that starts the file at @a path. If the
+ * file does not begin with a series of digits followed by a newline,
+ * return the error @c SVN_ERR_BAD_VERSION_FILE_FORMAT. Use @a pool for
+ * all allocations.
+
+
+
+Wrapper for apr_dir_read(). Ensures that @a finfo->name is
+ * utf8-encoded, which means allocating @a finfo->name in @a pool,
+ * which may or may not be the same as @a finfo's pool. Use @a pool
+ * for error allocation as well.
+
+
+
+Wrapper for apr_dir_remove(). @a dirname is utf8-encoded.
+ * @note This function has this name to avoid confusion with
+ * svn_io_remove_dir2(), which is recursive.
+
+
+
+Wrapper for apr_dir_open(). @a dirname is utf8-encoded.
+
+
+ Same as svn_io_dir_make(), but attempts to set the sgid on the
+ directory on systems that support it. Does not return an error if
+ the attempt to set the sgid bit fails. On Unix filesystems,
+ setting the sgid bit on a directory ensures that files and
+ subdirectories created within inherit group ownership from the
+ parent instead of from the primary gid.
+
+ @since New in 1.1.
+
+
+
+Same as svn_io_dir_make(), but sets the hidden attribute on the
+ directory on systems that support it.
+
+
+Wrapper for apr_dir_make(). @a path is utf8-encoded.
+
+
+Move the file from @a from_path to @a to_path, even across device
+ * boundaries. Overwrite @a to_path if it exists.
+ *
+ * @note This function is different from svn_io_file_rename in that the
+ * latter fails in the 'across device boundaries' case.
+ *
+ * @since New in 1.3.
+
+
+
+Wrapper for apr_file_rename(). @a from_path and @a to_path are
+ * utf8-encoded.
+
+
+
+Wrapper for apr_stat(). @a fname is utf8-encoded.
+
+
+Wrapper for apr_file_trunc().
+ * @since New in 1.6.
+
+
+ Open a unique file in @a dirpath, and write @a nbytes from @a buf to
+ the file before closing it. Return the name of the newly created file
+ in @a *tmp_path, allocated in @a pool.
+
+ If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
+ (Note that when using the system-provided temp directory, it may not
+ be possibly to atomically rename the resulting file due to cross-device
+ issues.)
+
+ The file will be deleted according to @a delete_when.
+
+ @since New in 1.6.
+
+
+
+Wrapper for apr_file_write_full().
+
+
+Wrapper for apr_file_write().
+
+
+Wrapper for apr_file_seek().
+
+
+Wrapper for apr_file_read_full().
+
+
+Wrapper for apr_file_read().
+
+
+Wrapper for apr_file_info_get().
+
+
+Wrapper for apr_file_getc().
+
+
+Wrapper for apr_file_close().
+
+
+Wrapper for apr_file_open(). @a fname is utf8-encoded.
+
+
+Like svn_io_detect_mimetype2, but with @a mimetypes_map set to
+ * @c NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.4 API
+
+
+
+Examine utf8-encoded @a file to determine if it can be described by a
+ * known (as in, known by this function) Multipurpose Internet Mail
+ * Extension (MIME) type. If so, set @a *mimetype to a character string
+ * describing the MIME type, else set it to @c NULL.
+ *
+ * If not @c NULL, @a mimetype_map is a hash mapping const char *
+ * filename extensions to const char * MIME types, and is the
+ * first source consulted regarding @a file's MIME type.
+ *
+ * Use @a pool for any necessary allocations.
+ *
+ * @since New in 1.5.
+
+
+
+Parse utf8-encoded @a mimetypes_file as a MIME types file (such as
+ * is provided with Apache HTTP Server), and set @a *type_map to a
+ * hash mapping const char * filename extensions to
+ * const char * MIME types.
+ *
+ * @since New in 1.5.
+
+
+
+Similar to svn_io_run_diff3_2(), but with @a user_args set to @c NULL.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+
+
+Similar to svn_io_run_diff3_3(), but with @a diff3_cmd encoded in
+ * internal encoding used by APR.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
+ * @since New in 1.4.
+
+
+
+Invoke the configured @c diff3 program, in utf8-encoded @a dir
+ * like this:
+ *
+ * diff3 -E -m @a mine @a older @a yours > @a merged
+ *
+ * (See the diff3 documentation for details.)
+ *
+ * If @a user_args is non-NULL, replace "-E" with the const char*
+ * elements that @a user_args contains.
+ *
+ * @a mine, @a older and @a yours are utf8-encoded paths (relative to
+ * @a dir or absolute) to three files that already exist.
+ *
+ * @a merged is an open file handle, and is left open after the merge
+ * result is written to it. (@a merged should *not* be the same file
+ * as @a mine, or nondeterministic things may happen!)
+ *
+ * @a mine_label, @a older_label, @a yours_label are utf8-encoded label
+ * parameters for diff3's -L option. Any of them may be @c NULL, in
+ * which case the corresponding @a mine, @a older, or @a yours parameter is
+ * used instead.
+ *
+ * Set @a *exitcode to diff3's exit status. If @a *exitcode is anything
+ * other than 0 or 1, then return @c SVN_ERR_EXTERNAL_PROGRAM. (Note the
+ * following from the diff3 info pages: "An exit status of 0 means
+ * `diff3' was successful, 1 means some conflicts were found, and 2
+ * means trouble.")
+ *
+ * @a diff3_cmd must be non-NULL.
+ *
+ * Do all allocation in @a pool.
+ *
+ * @since New in 1.4.
+
+
+
+Similar to svn_io_run_diff2() but with @diff_cmd encoded in internal
+ * encoding used by APR.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.5 API.
+
+
+Invoke the configured @c diff program, with @a user_args (an array
+ * of utf8-encoded @a num_user_args arguments) if they are specified
+ * (that is, if @a user_args is non-NULL), or "-u" if they are not.
+ * If @a user_args is NULL, the value of @a num_user_args is ignored.
+ *
+ * Diff runs in utf8-encoded @a dir, and its exit status is stored in
+ * @a exitcode, if it is not @c NULL.
+ *
+ * If @a label1 and/or @a label2 are not NULL they will be passed to the diff
+ * process as the arguments of "-L" options. @a label1 and @a label2 are also
+ * in utf8, and will be converted to native charset along with the other args.
+ *
+ * @a from is the first file passed to diff, and @a to is the second. The
+ * stdout of diff will be sent to @a outfile, and the stderr to @a errfile.
+ *
+ * @a diff_cmd must be non-NULL.
+ *
+ * Do all allocation in @a pool.
+ * @since New in 1.6.0.
+
+
+
+Run a command to completion, by first calling svn_io_start_cmd() and
+ * then calling svn_io_wait_for_cmd(). The parameters correspond to
+ * the same-named parameters of those two functions.
+
+
+
+ Wait for the process @a *cmd_proc to complete and optionally retrieve
+ its exit code. @a cmd is used only in error messages.
+
+ If @a exitcode is not NULL, @a *exitcode will contain the exit code
+ of the process upon return, and if @a exitwhy is not NULL, @a
+ *exitwhy will indicate why the process terminated. If @a exitwhy is
+ NULL, and the exit reason is not @c APR_PROC_CHECK_EXIT(), or if
+ @a exitcode is NULL and the exit code is non-zero, then an
+ @c SVN_ERR_EXTERNAL_PROGRAM error will be returned.
+
+ @since New in 1.3.
+
+
+
+ Start @a cmd with @a args, using utf8-encoded @a path as working
+ directory. Connect @a cmd's stdin, stdout, and stderr to @a infile,
+ @a outfile, and @a errfile, except where they are NULL. Return the
+ process handle for the invoked program in @a *cmd_proc.
+
+ @a args is a list of utf8-encoded const char * arguments,
+ terminated by @c NULL. @a args[0] is the name of the program, though it
+ need not be the same as @a cmd.
+
+ If @a inherit is TRUE, the invoked program inherits its environment from
+ the caller and @a cmd, if not absolute, is searched for in PATH.
+ Otherwise, the invoked program runs with an empty environment and @a cmd
+ must be an absolute path.
+
+ @note On some platforms, failure to execute @a cmd in the child process
+ will result in error output being written to @a errfile, if non-NULL, and
+ a non-zero exit status being returned to the parent process.
+
+ @since New in 1.3.
+
+
+
+This function will recursively walk over the files and directories
+ * rooted at @a dirname, a utf8-encoded path. For each file or directory,
+ * @a walk_func is invoked, passing in the @a walk_baton, the utf8-encoded
+ * full path to the entry, an @c apr_finfo_t structure, and a temporary
+ * pool for allocations. For any directory, @a walk_func will be invoked
+ * on the directory itself before being invoked on any subdirectories or
+ * files within the directory.
+ *
+ * The set of information passed to @a walk_func is specified by @a wanted,
+ * and the items specified by @c APR_FINFO_TYPE and @c APR_FINFO_NAME.
+ *
+ * All allocations will be performed in @a pool.
+
+
+
+Callback function type for svn_io_dir_walk()
+
+
+Similar to svn_io_get_dirents2(), but @a *dirents is a hash table
+ * with @c svn_node_kind_t values.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.2 API.
+
+
+
+Read all of the disk entries in directory @a path, a utf8-encoded
+ * path. Set @a *dirents to a hash mapping dirent names (char *) to
+ * @c svn_io_dirent_t structures, allocated in @a pool.
+ *
+ * @note The `.' and `..' directories normally returned by
+ * apr_dir_read() are NOT returned in the hash.
+ *
+ * @note The kind field in the @a dirents is set according to the mapping
+ * as documented for svn_io_check_path()
+ *
+ * @since New in 1.3.
+
+
+
+Read all of the disk entries in directory @a path, a utf8-encoded
+ * path. Set @a *dirents to a hash mapping dirent names (char *) to
+ * undefined non-NULL values, allocated in @a pool.
+ *
+ * @note The `.' and `..' directories normally returned by
+ * apr_dir_read() are NOT returned in the hash.
+ *
+ * @since New in 1.4.
+
+
+
+Similar to svn_io_remove_dir2(), but with @a ignore_enoent set to
+ * @c FALSE and @a cancel_func and @a cancel_baton set to @c NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.4 API
+
+
+
+Recursively remove directory @a path. @a path is utf8-encoded.
+ * If @a ignore_enoent is @c TRUE, don't fail if the target directory
+ * doesn't exist. Use @a pool for temporary allocations.
+ *
+ * Because recursive delete of a directory tree can be a lengthy operation,
+ * provide @a cancel_func and @a cancel_baton for interruptability.
+ *
+ * @since New in 1.5.
+
+
+
+Remove file @a path, a utf8-encoded path. This wraps apr_file_remove(),
+ * converting any error to a Subversion error.
+
+
+
+Sets @a *result to a string containing the contents of the already opened
+ * @a file. Reads from the current position in file to the end. Does not
+ * close the file or reset the cursor position.
+ *
+ * @note due to memory pseudo-reallocation behavior (due to pools), this
+ * can be a memory-intensive operation for large files.
+
+
+
+Similar to svn_stringbuf_from_file2(), except that if @a filename
+ * is "-", return the error @c SVN_ERR_UNSUPPORTED_FEATURE and don't
+ * touch @a *result.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.4 API.
+
+
+
+@}
+Set @a *result to a string containing the contents of @a
+ * filename, which is either "-" (indicating that stdin should be
+ * read) or the utf8-encoded path of a real file.
+ *
+ * @warning Callers should be aware of possible unexpected results
+ * when using this function to read from stdin where additional
+ * stdin-reading processes abound. For example, if a program tries
+ * both to invoke an external editor and to read from stdin, stdin
+ * could be trashed and the editor might act funky or die outright.
+ *
+ * @note due to memory pseudo-reallocation behavior (due to pools), this
+ * can be a memory-intensive operation for large files.
+ *
+ * @since New in 1.5.
+
+
+
+Read the contents of @a stream into memory, returning the data in
+ * @a result. The stream will be closed when it has been successfully and
+ * completely read.
+ *
+ * The returned memory is allocated in @a result_pool, and any temporary
+ * allocations are performed in @a scratch_pool.
+ *
+ * @note due to memory pseudo-reallocation behavior (due to pools), this
+ * can be a memory-intensive operation for large files.
+ *
+ * @since New in 1.6
+
+
+
+Set @a *same to TRUE if @a stream1 and @a stream2 have the same
+ * contents, else set it to FALSE. Use @a pool for temporary allocations.
+ *
+ * @since New in 1.4.
+
+
+
+ Same as svn_stream_copy3(), but without the cancellation function
+ or stream closing.
+
+ @since New in 1.1.
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+ Same as svn_stream_copy3() but the streams are not closed.
+
+ @since New in 1.5.
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ Read the contents of the readable stream @a from and write them to the
+ writable stream @a to calling @a cancel_func before copying each chunk.
+
+ @a cancel_func may be @c NULL.
+
+ @note both @a from and @a to will be closed upon successful completion of
+ the copy (but an error may still be returned, based on trying to close
+ the two streams). If the closure is not desired, then you can use
+ svn_stream_disown() to protect either or both of the streams from
+ being closed.
+ ### TODO: should close the streams ALWAYS, even on error exit
+
+ @since New in 1.6.
+
+
+
+Allocate @a *stringbuf in @a pool, and read into it one line (terminated
+ * by @a eol) from @a stream. The line-terminator is read from the stream,
+ * but is not added to the end of the stringbuf. Instead, the stringbuf
+ * ends with a usual '\\0'.
+ *
+ * If @a stream runs out of bytes before encountering a line-terminator,
+ * then set @a *eof to @c TRUE, otherwise set @a *eof to FALSE.
+
+
+
+Write to @a stream using a printf-style @a fmt specifier, passed through
+ * apr_psprintf() using memory from @a pool. The resulting string
+ * will be translated to @a encoding before it is sent to @a stream.
+ *
+ * @note Use @c APR_LOCALE_CHARSET to translate to the encoding of the
+ * current locale.
+ *
+ * @since New in 1.3.
+
+
+
+Write to @a stream using a printf-style @a fmt specifier, passed through
+ * apr_psprintf() using memory from @a pool.
+
+
+
+Close a generic stream. @see svn_stream_t.
+
+
+Write to a generic stream. @see svn_stream_t.
+
+
+Read from a generic stream. @see svn_stream_t.
+
+
+ Similar to svn_stream_checksummed2(), but always returning the MD5
+ checksum in @a read_digest and @a write_digest.
+
+ @since New in 1.4.
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+Return a stream that calculates checksums for all data read
+ * and written. The stream @a stream is used to read and write all data.
+ * The stream and the resulting digests are allocated in @a pool.
+ *
+ * When the stream is closed, @a *read_checksum and @a *write_checksum
+ * are set to point to the resulting checksums, of type @a read_checksum_kind
+ * and @a write_checksum_kind, respectively.
+ *
+ * Both @a read_checksum and @a write_checksum can be @c NULL, in which case
+ * the respective checksum isn't calculated.
+ *
+ * If @a read_all is TRUE, make sure that all data available on @a
+ * stream is read (and checksummed) when the stream is closed.
+ *
+ * Read and write operations can be mixed without interfering.
+ *
+ * The @a stream passed into this function is closed when the created
+ * stream is closed.
+ *
+ * @since New in 1.6.
+
+
+
+Return a stream that decompresses all data read and compresses all
+ * data written. The stream @a stream is used to read and write all
+ * compressed data. All compression data structures are allocated on
+ * @a pool. If compression support is not compiled in then
+ * svn_stream_compressed() returns @a stream unmodified. Make sure you
+ * call svn_stream_close() on the stream returned by this function,
+ * so that all data are flushed and cleaned up.
+ *
+ * @note From 1.4, compression support is always compiled in.
+
+
+
+Return a generic read-only stream connected to string @a str.
+ * Allocate the stream in @a pool.
+
+
+
+Return a generic stream connected to stringbuf @a str. Allocate the
+ * stream in @a pool.
+
+
+
+Set @a *out to a generic stream connected to stdout, allocated in
+ * @a pool. The stream and its underlying APR handle will be closed
+ * when @a pool is cleared or destroyed.
+
+
+
+Similar to svn_stream_from_aprfile2(), except that the file will
+ * always be disowned.
+ *
+ * @note The stream returned is not considered to "own" the underlying
+ * file, meaning that svn_stream_close() on the stream will not
+ * close the file.
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+Create a stream from an APR file. For convenience, if @a file is
+ * @c NULL, an empty stream created by svn_stream_empty() is returned.
+ *
+ * This function should normally be called with @a disown set to FALSE,
+ * in which case closing the stream will also close the underlying file.
+ *
+ * If @a disown is TRUE, the stream will disown the underlying file,
+ * meaning that svn_stream_close() will not close the file.
+ *
+ * @since New in 1.4.
+
+
+
+Create a writable stream to a file in the directory @a dirpath.
+ * The file will have an arbitrary and unique name, and the full path
+ * will be returned in @a temp_path. The stream will be returned in
+ * @a stream. Both will be allocated from @a result_pool.
+ *
+ * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
+ * (Note that when using the system-provided temp directory, it may not
+ * be possibly to atomically rename the resulting file due to cross-device
+ * issues.)
+ *
+ * The file will be deleted according to @a delete_when.
+ *
+ * Temporary allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.6
+ * @see svn_io_open_unique_file3()
+
+
+
+Create a stream to write a file at @a path. The file will be *created*
+ * using the APR_BUFFERED and APR_BINARY flag, and APR_OS_DEFAULT for the
+ * perms. The file will be created "exclusively", so if it already exists,
+ * then an error will be thrown. If you'd like to use different values, or
+ * open an existing file, then open the file yourself, and use the
+ * svn_stream_from_aprfile2() interface.
+ *
+ * The stream will be returned in @a stream, and allocated from @a result_pool.
+ * Temporary allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.6
+
+
+
+Create a stream to read the file at @a path. It will be opened using
+ * the APR_BUFFERED and APR_BINARY flag, and APR_OS_DEFAULT for the perms.
+ * If you'd like to use different values, then open the file yourself, and
+ * use the svn_stream_from_aprfile2() interface.
+ *
+ * The stream will be returned in @a stream, and allocated from @a result_pool.
+ * Temporary allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.6
+
+
+
+Return a stream allocated in @a pool which forwards all requests
+ * to @a stream. Destruction is explicitly excluded from forwarding.
+ *
+ * @see notes/destruction-of-stacked-resources
+ *
+ * @since New in 1.4.
+
+
+
+Create a stream that is empty for reading and infinite for writing.
+
+
+Set @a stream's close function to @a close_fn
+
+
+Set @a stream's write function to @a write_fn
+
+
+Set @a stream's read function to @a read_fn
+
+
+Set @a stream's baton to @a baton
+
+
+Create a generic stream. @see svn_stream_t.
+
+
+Close handler function for a generic stream. @see svn_stream_t.
+
+
+Write handler function for a generic stream. @see svn_stream_t.
+
+
+Read handler function for a generic stream. @see svn_stream_t.
+
+
+Generic byte-streams
+ *
+ * @defgroup svn_io_byte_streams Generic byte streams
+ * @{
+
+An abstract stream of bytes--either incoming or outgoing or both.
+ *
+ * The creator of a stream sets functions to handle read and write.
+ * Both of these handlers accept a baton whose value is determined at
+ * stream creation time; this baton can point to a structure
+ * containing data associated with the stream. If a caller attempts
+ * to invoke a handler which has not been set, it will generate a
+ * runtime assertion failure. The creator can also set a handler for
+ * close requests so that it can flush buffered data or whatever;
+ * if a close handler is not specified, a close request on the stream
+ * will simply be ignored. Note that svn_stream_close() does not
+ * deallocate the memory used to allocate the stream structure; free
+ * the pool you created the stream in to free that memory.
+ *
+ * The read and write handlers accept length arguments via pointer.
+ * On entry to the handler, the pointed-to value should be the amount
+ * of data which can be read or the amount of data to write. When the
+ * handler returns, the value is reset to the amount of data actually
+ * read or written. Handlers are obliged to complete a read or write
+ * to the maximum extent possible; thus, a short read with no
+ * associated error implies the end of the input stream, and a short
+ * write should never occur without an associated error.
+
+
+
+Copy file @a file from location @a src_path to location @a dest_path.
+ * Use @a pool for memory allocations.
+
+
+
+ Flush any unwritten data from @a file to disk. Use @a pool for
+ memory allocations.
+
+ @since New in 1.1.
+
+
+
+ Lock file at @a lock_file. If @a exclusive is TRUE,
+ obtain exclusive lock, otherwise obtain shared lock.
+
+ If @a nonblocking is TRUE, do not wait for the lock if it
+ is not available: throw an error instead.
+
+ Lock will be automatically released when @a pool is cleared or destroyed.
+ Use @a pool for memory allocations.
+
+ @since New in 1.1.
+
+
+
+ Lock file at @a lock_file. If @a exclusive is TRUE,
+ obtain exclusive lock, otherwise obtain shared lock.
+ Lock will be automatically released when @a pool is cleared or destroyed.
+ Use @a pool for memory allocations.
+
+ @deprecated Provided for backward compatibility with the 1.0 API.
+
+
+
+Create file at utf8-encoded @a file with contents @a contents.
+ * @a file must not already exist.
+ * Use @a pool for memory allocations.
+
+
+
+Set @a *same to TRUE if @a file1 and @a file2 have the same
+ * contents, else set it to FALSE. Use @a pool for temporary allocations.
+
+
+
+Put the md5 checksum of @a file into @a digest.
+ * @a digest points to @c APR_MD5_DIGESTSIZE bytes of storage.
+ * Use @a pool only for temporary allocations.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+Return in @a *checksum the checksum of type @a kind of @a file
+ * Use @a pool for temporary allocations and to allocate @a *checksum.
+ *
+ * @since New in 1.6.
+
+
+
+Set @a *different_p to non-zero if @a file1 and @a file2 have different
+ * sizes, else set to zero. Both @a file1 and @a file2 are utf8-encoded.
+ *
+ * Setting @a *different_p to zero does not mean the files definitely
+ * have the same size, it merely means that the sizes are not
+ * definitely different. That is, if the size of one or both files
+ * cannot be determined, then the sizes are not known to be different,
+ * so @a *different_p is set to 0.
+
+
+
+Sleep to ensure that any files modified after we exit have a different
+ * timestamp than the one we recorded. If @a path is not NULL, check if we
+ * can determine how long we should wait for a new timestamp on the filesystem
+ * containing @a path, an existing file or directory. If @a path is NULL or we
+ * can't determine the timestamp resolution, sleep until the next second.
+ *
+ * Use @a pool for any necessary allocations. @a pool can be null if @a path
+ * is NULL.
+ *
+ * Errors while retrieving the timestamp resolution will result in sleeping
+ * to the next second, to keep the working copy stable in error conditions.
+ *
+ * @since New in 1.6.
+
+
+
+Set the timestamp of file @a path to @a apr_time. @a path is
+ * utf8-encoded.
+ *
+ * @note This is the APR mtime which corresponds to the traditional mtime
+ * on Unix, and the last write time on Windows.
+
+
+
+Set @a *apr_time to the time of last modification of the contents of the
+ * file @a path. @a path is utf8-encoded.
+ *
+ * @note This is the APR mtime which corresponds to the traditional mtime
+ * on Unix, and the last write time on Windows.
+
+
+
+Read a line from @a file into @a buf, but not exceeding @a *limit bytes.
+ * Does not include newline, instead '\\0' is put there.
+ * Length (as in strlen) is returned in @a *limit.
+ * @a buf should be pre-allocated.
+ * @a file should be already opened.
+ *
+ * When the file is out of lines, @c APR_EOF will be returned.
+
+
+
+Determine whether a file is executable by the current user.
+ * Set @a *executable to @c TRUE if the file @a path is executable by the
+ * current user, otherwise set it to @c FALSE.
+ *
+ * On Windows and on platforms without userids, always returns @c FALSE.
+
+
+
+Set @a path's "executability" (but do nothing if it is a symlink).
+ *
+ * @a path is the utf8-encoded path to the file. If @a executable
+ * is @c TRUE, then make the file executable. If @c FALSE, make it
+ * non-executable. If @a ignore_enoent is @c TRUE, don't fail if the target
+ * file doesn't exist.
+ *
+ * When making the file executable on operating systems with unix style
+ * permissions, never add an execute permission where there is not
+ * already a read permission: that is, only make the file executable
+ * for the user, group or world if the corresponding read permission
+ * is already set for user, group or world.
+ *
+ * When making the file non-executable on operating systems with unix style
+ * permissions, remove all execute permissions.
+ *
+ * On other operating systems, toggle the file's "executability" as much as
+ * the operating system allows.
+ *
+ * @note If @a path is a directory, act on it as though it were a
+ * file, as described above, but note that you probably don't want to
+ * call this function on directories. We have left it effective on
+ * directories for compatibility reasons, but as its name implies, it
+ * should be used only for files.
+
+
+
+Similar to svn_io_set_file_read_* functions.
+ * Change the read-write permissions of a file.
+ * @since New in 1.1.
+ *
+ * When making @a path read-write on operating systems with unix style
+ * permissions, set the permissions on @a path to the permissions that
+ * are set when a new file is created (effectively honoring the user's
+ * umask).
+ *
+ * When making the file read-only on operating systems with unix style
+ * permissions, remove all write permissions.
+ *
+ * On other operating systems, toggle the file's "writability" as much as
+ * the operating system allows.
+ *
+ * @a path is the utf8-encoded path to the file. If @a enable_write
+ * is @c TRUE, then make the file read-write. If @c FALSE, make it
+ * read-only. If @a ignore_enoent is @c TRUE, don't fail if the target
+ * file doesn't exist.
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+Make a file as writable as the operating system allows.
+ * @a path is the utf8-encoded path to the file. If @a ignore_enoent is
+ * @c TRUE, don't fail if the target file doesn't exist.
+ * @warning On Unix this function will do the equivalent of chmod a+w path.
+ * If this is not what you want you should not use this function, but rather
+ * use apr_file_perms_set().
+ *
+ * If @a path is a symlink, do nothing.
+ *
+ * @note If @a path is a directory, act on it as though it were a
+ * file, as described above, but note that you probably don't want to
+ * call this function on directories. We have left it effective on
+ * directories for compatibility reasons, but as its name implies, it
+ * should be used only for files.
+
+
+
+Make a file as read-only as the operating system allows.
+ * @a path is the utf8-encoded path to the file. If @a ignore_enoent is
+ * @c TRUE, don't fail if the target file doesn't exist.
+ *
+ * If @a path is a symlink, do nothing.
+ *
+ * @note If @a path is a directory, act on it as though it were a
+ * file, as described above, but note that you probably don't want to
+ * call this function on directories. We have left it effective on
+ * directories for compatibility reasons, but as its name implies, it
+ * should be used only for files.
+
+
+
+Append @a src to @a dst. @a dst will be appended to if it exists, else it
+ * will be created. Both @a src and @a dst are utf8-encoded.
+
+
+
+Set @a *is_empty_p to @c TRUE if directory @a path is empty, else to
+ * @c FALSE if it is not empty. @a path must be a directory, and is
+ * utf8-encoded. Use @a pool for temporary allocation.
+
+
+
+Create directory @a path on the file system, creating intermediate
+ * directories as required, like mkdir -p. Report no error if @a
+ * path already exists. @a path is utf8-encoded.
+ *
+ * This is essentially a wrapper for apr_dir_make_recursive(), passing
+ * @c APR_OS_DEFAULT as the permissions.
+
+
+
+Recursively copy directory @a src into @a dst_parent, as a new entry named
+ * @a dst_basename. If @a dst_basename already exists in @a dst_parent,
+ * return error. @a copy_perms will be passed through to svn_io_copy_file()
+ * when any files are copied. @a src, @a dst_parent, and @a dst_basename are
+ * all utf8-encoded.
+ *
+ * If @a cancel_func is non-NULL, invoke it with @a cancel_baton at
+ * various points during the operation. If it returns any error
+ * (typically @c SVN_ERR_CANCELLED), return that error immediately.
+
+
+
+ Copy symbolic link @a src to @a dst atomically. Overwrite @a dst
+ if it exists, else create it. Both @a src and @a dst are
+ utf8-encoded filenames. After copying, the @a dst link will point
+ to the same thing @a src does.
+
+ @since New in 1.1.
+
+
+
+Copy permission flags from @a src onto the file at @a dst. Both
+ * filenames are utf8-encoded filenames.
+
+
+
+Copy @a src to @a dst atomically, in a "byte-for-byte" manner.
+ * Overwrite @a dst if it exists, else create it. Both @a src and @a dst
+ * are utf8-encoded filenames. If @a copy_perms is TRUE, set @a dst's
+ * permissions to match those of @a src.
+
+
+
+Set @a *dir to a directory path (allocated in @a pool) deemed
+ * usable for the creation of temporary files and subdirectories.
+
+
+
+ Set @a *dest to the path that the symlink at @a path references.
+ Allocate the string from @a pool.
+
+ @since New in 1.1.
+
+
+
+ Like svn_io_open_unique_file(), except that instead of creating a
+ file, a symlink is generated that references the path @a dest.
+
+ @since New in 1.1.
+
+
+
+Like svn_io_open_unique_file2, but can't delete on pool cleanup.
+ *
+ * @deprecated Provided for backward compatibility with the 1.0 API
+ *
+ * @note In 1.4 the API was extended to require either @a f or
+ * @a unique_name_p (the other can be NULL). Before that, both were
+ * required.
+
+
+
+Like svn_io_open_uniquely_named(), but takes a joined dirpath and
+ * filename, and a single pool.
+ *
+ * @since New in 1.4
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API
+
+
+
+Create a writable file in the directory @a dirpath. The file will have
+ * an arbitrary and unique name, and the full path will be returned in
+ * @a temp_path. The file will be returned in @a file. Both will be
+ * allocated from @a result_pool.
+ *
+ * If @a dirpath is @c NULL, use the path returned from svn_io_temp_dir().
+ * (Note that when using the system-provided temp directory, it may not
+ * be possibly to atomically rename the resulting file due to cross-device
+ * issues.)
+ *
+ * The file will be deleted according to @a delete_when.
+ *
+ * Temporary allocations will be performed in @a scratch_pool.
+ *
+ * @since New in 1.6
+ * @see svn_stream_open_unique()
+
+
+
+Like svn_io_check_path(), but resolve symlinks. This returns the
+ same varieties of @a kind as svn_io_check_path().
+
+
+ Like svn_io_check_path(), but also set *is_special to @c TRUE if
+ the path is not a normal file.
+
+ @since New in 1.1.
+
+
+
+Determine the @a kind of @a path. @a path should be UTF-8 encoded.
+ *
+ * If @a path is a file, set @a *kind to @c svn_node_file.
+ *
+ * If @a path is a directory, set @a *kind to @c svn_node_dir.
+ *
+ * If @a path does not exist, set @a *kind to @c svn_node_none.
+ *
+ * If @a path exists but is none of the above, set @a *kind to @c
+ * svn_node_unknown.
+ *
+ * If unable to determine @a path's kind, return an error, with @a *kind's
+ * value undefined.
+ *
+ * Use @a pool for temporary allocations.
+ *
+ * @see svn_node_kind_t
+
+
+
+If @c kind is @c svn_node_file, whether this entry is a special file;
+ * else FALSE.
+ *
+ * @see svn_io_check_special_path().
+
+
+
+The kind of this entry.
+
+
+Represents the kind and special status of a directory entry.
+ *
+ * @since New in 1.3.
+
+
+
+Remove when the associated pool is cleared
+
+
+Remove when the file is closed
+
+
+No deletion ever
+
+
+ Internal function for creating a checksum from a binary digest.
+
+ @since New in 1.6
+
+
+
+ Return the digest size of @a checksum.
+
+ @since New in 1.6.
+
+
+
+ Finalize the checksum used when creating @a ctx, and put the resultant
+ checksum in @a *checksum, allocated in @a pool.
+
+ @since New in 1.6.
+
+
+
+ Update the checksum represented by @a ctx, with @a len bytes starting at
+ @a data.
+
+ @since New in 1.6.
+
+
+
+ Create a new @c svn_checksum_ctx_t structure, allocated from @a pool for
+ calculating checksums of type @a kind. @see svn_checksum_final()
+
+ @since New in 1.6.
+
+
+
+ Return in @a pool a newly allocated checksum populated with the checksum
+ of type @a kind for the empty string.
+
+ @since New in 1.6.
+
+
+
+ Return in @a *checksum the checksum of type @a kind for the bytes beginning
+ at @a data, and going for @a len. @a *checksum is allocated in @a pool.
+
+ @since New in 1.6.
+
+
+
+Parse the hex representation @a hex of a checksum of kind @a kind and
+ * set @a *checksum to the result, allocating in @a pool.
+ *
+ * If @a hex is @c NULL or is the all-zeros checksum, then set @a *checksum
+ * to @c NULL.
+ *
+ * @since New in 1.6.
+
+
+
+Return the hex representation of @a checksum, allocating the
+ * string in @a pool. If @a checksum->digest is all zeros (that is,
+ * 0, not '0'), then return NULL.
+ *
+ * @since New in 1.6.
+
+
+
+Return the hex representation of @a checksum, allocating the string
+ * in @a pool.
+ *
+ * @since New in 1.6.
+
+
+
+ Return a deep copy of @a checksum, allocated in @a pool.
+
+ @since New in 1.6.
+
+
+
+Compare checksums @a checksum1 and @a checksum2. If their kinds do not
+ * match or if neither is all zeros, and their content does not match, then
+ * return FALSE; else return TRUE.
+ *
+ * @since New in 1.6.
+
+
+
+Set @c checksum->digest to all zeros, which, by convention, matches
+ * all other checksums.
+ *
+ * @since New in 1.6.
+
+
+
+Return a new checksum structure of type @a kind, initialized to the all-
+ * zeros value, allocated in @a pool.
+ *
+ * @since New in 1.6.
+
+
+
+Opaque type for creating checksums of data.
+
+
+
+The type of the checksum. This should never be changed by consumers
+ of the APIs.
+
+
+The bytes of the checksum.
+
+
+ A generic checksum representation.
+
+ @since New in 1.6.
+
+
+
+The checksum is (or should be set to) a SHA1 checksum.
+
+
+The checksum is (or should be set to) an MD5 checksum.
+
+
+ Compare two strings @a atr1 and @a atr2, treating case-equivalent
+ unaccented Latin (ASCII subset) letters as equal.
+
+ Returns in integer greater than, equal to, or less than 0,
+ according to whether @a str1 is considered greater than, equal to,
+ or less than @a str2.
+
+ @since New in 1.5.
+
+
+
+ Return a cstring which is the concatenation of @a strings (an array
+ of char *) each followed by @a separator (that is, @a separator
+ will also end the resulting string). Allocate the result in @a pool.
+ If @a strings is empty, then return the empty string.
+
+ @since New in 1.2.
+
+
+
+ Return the number of line breaks in @a msg, allowing any kind of newline
+ termination (CR, LF, CRLF, or LFCR), even inconsistent.
+
+ @since New in 1.2.
+
+
+
+Return @c TRUE iff @a str matches any of the elements of @a list, a list
+ * of zero or more glob patterns.
+
+
+
+Like svn_cstring_split(), but append to existing @a array instead of
+ * creating a new one. Allocate the copied substrings in @a pool
+ * (i.e., caller decides whether or not to pass @a array->pool as @a pool).
+
+
+
+@}
+C strings.
+ *
+ * @defgroup svn_string_cstrings c string functions
+ * @{
+
+Divide @a input into substrings along @a sep_chars boundaries, return an
+ * array of copies of those substrings, allocating both the array and
+ * the copies in @a pool.
+ *
+ * None of the elements added to the array contain any of the
+ * characters in @a sep_chars, and none of the new elements are empty
+ * (thus, it is possible that the returned array will have length
+ * zero).
+ *
+ * If @a chop_whitespace is TRUE, then remove leading and trailing
+ * whitespace from the returned strings.
+
+
+
+Return @c TRUE iff @a str1 and @a str2 have identical length and data.
+
+
+Return position of last occurrence of @a ch in @a str, or return
+ * @a str->len if no occurrence.
+
+
+
+Strip whitespace from both sides of @a str (modified in place).
+
+
+Return offset of first non-whitespace character in @a str, or return
+ * @a str->len if none.
+
+
+
+Return @c TRUE iff @a str1 and @a str2 have identical length and data.
+
+
+Return a duplicate of @a original_string.
+
+
+Append a C string onto @a targetstr.
+ *
+ * reallocs if necessary. @a targetstr is affected, nothing else is.
+
+
+
+Append an @c svn_stringbuf_t onto @a targetstr.
+ *
+ * reallocs if necessary. @a targetstr is affected, nothing else is.
+
+
+
+Append an array of bytes onto @a targetstr.
+ *
+ * reallocs if necessary. @a targetstr is affected, nothing else is.
+
+
+
+Fill bytestring @a str with character @a c.
+
+
+Chop @a nbytes bytes off end of @a str, but not more than @a str->len.
+
+
+Return @c TRUE if a bytestring is empty (has length zero).
+
+
+Set a bytestring @a str to empty (0 length).
+
+
+Set a bytestring @a str to @a value
+
+
+Make sure that the string @a str has at least @a minimum_size bytes of
+ * space available in the memory block.
+ *
+ * (@a minimum_size should include space for the terminating NULL character.)
+
+
+
+Create a new bytestring by formatting @a cstring (NULL-terminated)
+ * from a @c va_list (see svn_stringbuf_createf()).
+
+
+
+Create a new bytestring by formatting @a cstring (NULL-terminated)
+ * from varargs, which are as appropriate for apr_psprintf().
+
+
+
+Create a new stringbuf with the contents of the given string
+
+
+Create a new empty bytestring with at least @a minimum_size bytes of
+ * space available in the memory block.
+ *
+ * The allocated string buffer will be one byte larger then @a size to account
+ * for a final '\0'.
+ *
+ * @since New in 1.6.
+
+
+
+Create a new bytestring containing a generic string of bytes
+ * (NON-NULL-terminated)
+
+
+
+@}
+svn_stringbuf_t functions.
+ *
+ * @defgroup svn_string_svn_stringbuf_t svn_stringbuf_t functions
+ * @{
+
+Create a new bytestring containing a C string (NULL-terminated).
+
+
+Return position of last occurrence of @a ch in @a str, or return
+ * @a str->len if no occurrence.
+
+
+
+Return offset of first non-whitespace character in @a str, or return
+ * @a str->len if none.
+
+
+
+Return @c TRUE iff @a str1 and @a str2 have identical length and data.
+
+
+Return a duplicate of @a original_string.
+
+
+Return TRUE if a bytestring is empty (has length zero).
+
+
+Create a new bytestring by formatting @a cstring (NULL-terminated)
+ * from a @c va_list (see svn_stringbuf_createf()).
+
+
+
+Create a new bytestring by formatting @a cstring (NULL-terminated)
+ * from varargs, which are as appropriate for apr_psprintf().
+
+
+
+Create a new string with the contents of the given stringbuf
+
+
+Create a new bytestring containing a generic string of bytes
+ * (NOT NULL-terminated)
+
+
+svn_string_t functions.
+ *
+ * @defgroup svn_string_svn_string_t svn_string_t functions
+ * @{
+
+Create a new bytestring containing a C string (NULL-terminated).
+
+
+total size of buffer allocated
+
+
+length of bytestring
+
+
+pointer to the bytestring
+
+
+a pool from which this string was originally allocated, and is not
+ * necessarily specific to this string. This is used only for allocating
+ * more memory from when the string needs to grow.
+
+
+
+A buffered string, capable of appending without an allocation and copy
+ * for each append.
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2006 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_string.h
+ @brief Counted-length strings for Subversion, plus some C string goodies.
+
+ There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t.
+ The former is a simple pointer/length pair useful for passing around
+ strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is
+ buffered to enable efficient appending of strings without an allocation
+ and copy for each append operation.
+
+ @c svn_string_t contains a const char * for its data, so it is
+ most appropriate for constant data and for functions which expect constant,
+ counted data. Functions should generally use const @c svn_string_t
+ * as their parameter to indicate they are expecting a constant,
+ counted string.
+
+ @c svn_stringbuf_t uses a plain char * for its data, so it is
+ most appropriate for modifiable data.
+
+ Invariants
+
+ 1. Null termination:
+
+ Both structures maintain a significant invariant:
+
+ s->data[s->len] == '\\0'
+
+ The functions defined within this header file will maintain
+ the invariant (which does imply that memory is
+ allocated/defined as @c len+1 bytes). If code outside of the
+ @c svn_string.h functions manually builds these structures,
+ then they must enforce this invariant.
+
+ Note that an @c svn_string(buf)_t may contain binary data,
+ which means that strlen(s->data) does not have to equal @c
+ s->len. The NULL terminator is provided to make it easier to
+ pass @c s->data to C string interfaces.
+
+
+ 2. Non-NULL input:
+
+ All the functions assume their input data is non-NULL,
+ unless otherwise documented, and may seg fault if passed
+ NULL. The input data may *contain* null bytes, of course, just
+ the data pointer itself must not be NULL.
+
+ Memory allocation
+
+ All the functions make a deep copy of all input data, and never store
+ a pointer to the original input data.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+@defgroup svn_string String handling
+@{
+
+A simple counted string.
+
+
+Handle a malfunction by printing a message to stderr and aborting.
+ *
+ * This function implements @c svn_error_malfunction_handler_t.
+ *
+ * @since New in 1.6.
+
+
+
+Handle a malfunction by returning an error object that describes it.
+ *
+ * When @a can_return is false, abort()
+ *
+ * This function implements @c svn_error_malfunction_handler_t.
+ *
+ * @since New in 1.6.
+
+
+
+Cause subsequent malfunctions to be handled by @a func.
+ * Return the handler that was previously in effect.
+ *
+ * @a func may not be null.
+ *
+ * @note The default handler is svn_error_abort_on_malfunction().
+ *
+ * @note This function must be called in a single-threaded context.
+ *
+ * @since New in 1.6.
+
+
+
+A type of function that handles an assertion failure or other internal
+ * malfunction detected within the Subversion libraries.
+ *
+ * The error occurred in the source file @a file at line @a line, and was an
+ * assertion failure of the expression @a expr, or, if @a expr is null, an
+ * unconditional error.
+ *
+ * If @a can_return is false a function of this type must never return.
+ *
+ * If @a can_return is true a function of this type must do one of:
+ * - Return an error object describing the error, using an error code in
+ * the category SVN_ERR_MALFUNC_CATEGORY_START.
+ * - Never return.
+ *
+ * The function may alter its behaviour according to compile-time
+ * and run-time and even interactive conditions.
+ *
+ * @since New in 1.6.
+
+
+
+A statement macro for checking error values.
+ *
+ * Evaluate @a expr. If it yields an error, return that error from the
+ * current function. Otherwise, continue.
+ *
+ * The do { ... } while (0) wrapper has no semantic effect,
+ * but it makes this macro syntactically equivalent to the expression
+ * statement it resembles. Without it, statements like
+ *
+ * @code
+ * if (a)
+ * SVN_ERR (some operation);
+ * else
+ * foo;
+ * @endcode
+ *
+ * would not mean what they appear to.
+
+A statement macro, very similar to @c SVN_ERR.
+ *
+ * This macro will wrap the error with the specified text before
+ * returning the error.
+
+A statement macro, similar to @c SVN_ERR, but returns an integer.
+ *
+ * Evaluate @a expr. If it yields an error, handle that error and
+ * return @c EXIT_FAILURE.
+
+@}
+ Return TRUE if @a err is an error specifically related to locking a
+ path in the repository, FALSE otherwise.
+
+ SVN_ERR_FS_OUT_OF_DATE is in here because it's a non-fatal error
+ that can be thrown when attempting to lock an item.
+
+ @since New in 1.2.
+
+ Return TRUE if @a err is an error specifically related to unlocking
+ a path in the repository, FALSE otherwise.
+
+ @since New in 1.2.
+
+Report that an internal malfunction has occurred, and possibly terminate
+ * the program.
+ *
+ * Act as determined by the current "malfunction handler" which may have
+ * been specified by a call to svn_error_set_malfunction_handler() or else
+ * is the default handler as specified in that function's documentation. If
+ * the malfunction handler returns, then cause the function using this macro
+ * to return the error object that it generated.
+ *
+ * @note The intended use of this macro is where execution reaches a point
+ * that cannot possibly be reached unless there is a bug in the program.
+ *
+ * @since New in 1.6.
+
+Similar to SVN_ERR_MALFUNCTION(), but without the option of returning
+ * an error to the calling function.
+ *
+ * If possible you should use SVN_ERR_MALFUNCTION() instead.
+ *
+ * @since New in 1.6.
+
+Check that a condition is true: if not, report an error and possibly
+ * terminate the program.
+ *
+ * If the Boolean expression @a expr is true, do nothing. Otherwise,
+ * act as determined by the current "malfunction handler" which may have
+ * been specified by a call to svn_error_set_malfunction_handler() or else
+ * is the default handler as specified in that function's documentation. If
+ * the malfunction handler returns, then cause the function using this macro
+ * to return the error object that it generated.
+ *
+ * @note The intended use of this macro is to check a condition that cannot
+ * possibly be false unless there is a bug in the program.
+ *
+ * @note The condition to be checked should not be computationally expensive
+ * if it is reached often, as, unlike traditional "assert" statements, the
+ * evaluation of this expression is not compiled out in release-mode builds.
+ *
+ * @since New in 1.6.
+
+Similar to SVN_ERR_ASSERT(), but without the option of returning
+ * an error to the calling function.
+ *
+ * If possible you should use SVN_ERR_ASSERT() instead.
+ *
+ * @since New in 1.6.
+
+A helper function for the macros that report malfunctions. Handle a
+ * malfunction by calling the current "malfunction handler" which may have
+ * been specified by a call to svn_error_set_malfunction_handler() or else
+ * is the default handler as specified in that function's documentation.
+ *
+ * Pass all of the parameters to the handler. The error occurred in the
+ * source file @a file at line @a line, and was an assertion failure of the
+ * expression @a expr, or, if @a expr is null, an unconditional error.
+ *
+ * If @a can_return is true, the handler can return an error object
+ * that is returned by the caller. If @a can_return is false the
+ * method should never return. (The caller will call abort())
+ *
+ * @since New in 1.6.
+
+
+
+Like svn_handle_warning2() but with @c prefix set to "svn: "
+ *
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Very basic default warning handler: print out the error @a error to the
+ stdio stream @a stream, prefixed by @a prefix. Allocations are
+ performed in the error's pool.
+
+ @since New in 1.2.
+
+
+
+Like svn_handle_error2() but with @c prefix set to "svn: "
+ *
+ * @deprecated Provided for backward compatibility with the 1.1 API.
+
+
+
+ Very basic default error handler: print out error stack @a error to the
+ stdio stream @a stream, with each error prefixed by @a prefix; quit and
+ clear @a error iff the @a fatal flag is set. Allocations are performed
+ in the @a error's pool.
+
+ If you're not sure what prefix to pass, just pass "svn: ". That's
+ what code that used to call svn_handle_error() and now calls
+ svn_handle_error2() does.
+
+ @since New in 1.2.
+
+
+
+Free the memory used by @a error, as well as all ancestors and
+ * descendants of @a error.
+ *
+ * Unlike other Subversion objects, errors are managed explicitly; you
+ * MUST clear an error if you are ignoring it, or you are leaking memory.
+ * For convenience, @a error may be @c NULL, in which case this function does
+ * nothing; thus, svn_error_clear(svn_foo(...)) works as an idiom to
+ * ignore errors.
+
+
+
+Create a new error that is a deep copy of @a err and return it.
+ *
+ * @since New in 1.2.
+
+
+
+Return the root cause of @a err by finding the last error in its
+ * chain (e.g. it or its children). @a err may be @c SVN_NO_ERROR, in
+ * which case @c SVN_NO_ERROR is returned.
+ *
+ * @since New in 1.5.
+
+
+
+Add @a new_err to the end of @a chain's chain of errors. The @a new_err
+ * chain will be copied into @a chain's pool and destroyed, so @a new_err
+ * itself becomes invalid after this function.
+
+
+
+Wrapper macro to collect file and line information
+Compose two errors, returning the composition as a brand new error
+ * and consuming the original errors. Either or both of @a err1 and
+ * @a err2 may be @c SVN_NO_ERROR. If both are not @c SVN_NO_ERROR,
+ * @a err2 will follow @a err1 in the chain of the returned error.
+ *
+ * @since New in 1.6.
+
+
+
+Wrapper macro to collect file and line information
+A quick n' easy way to create a wrapped exception with your own
+ * message, before throwing it up the stack. (It uses all of the
+ * @a child's fields.)
+
+
+
+Wrapper macro to collect file and line information
+Wrap a @a status from an APR function. If @a fmt is NULL, this is
+ * equivalent to svn_error_create(status,NULL,NULL). Otherwise,
+ * the error message is constructed by formatting @a fmt and the
+ * following arguments according to apr_psprintf(), and then
+ * appending ": " and the error message corresponding to @a status.
+ * (If UTF-8 translation of the APR error message fails, the ": " and
+ * APR error are not appended to the error message.)
+
+
+
+Wrapper macro to collect file and line information
+Create an error structure with the given @a apr_err and @a child,
+ * with a printf-style error message produced by passing @a fmt, using
+ * apr_psprintf().
+
+
+
+SVN error creation and destruction.
+ *
+ * @defgroup svn_error_error_creation_destroy Error creation and destruction
+ * @{
+
+Create a nested exception structure.
+ *
+ * Input: an APR or SVN custom error code,
+ * a "child" error to wrap,
+ * a specific message
+ *
+ * Returns: a new error structure (containing the old one).
+ *
+ * @note Errors are always allocated in a subpool of the global pool,
+ * since an error's lifetime is generally not related to the
+ * lifetime of any convenient pool. Errors must be freed
+ * with svn_error_clear(). The specific message should be @c NULL
+ * if there is nothing to add to the general message associated
+ * with the error code.
+ *
+ * If creating the "bottommost" error in a chain, pass @c NULL for
+ * the child argument.
+
+
+
+If @a err has a custom error message, return that, otherwise
+ * store the generic error string associated with @a err->apr_err into
+ * @a buf (terminating with NULL) and return @a buf.
+ *
+ * @since New in 1.4.
+ *
+ * @note @a buf and @a bufsize are provided in the interface so that
+ * this function is thread-safe and yet does no allocation.
+
+
+
+Put an English description of @a statcode into @a buf and return @a buf,
+ * NULL-terminated. @a statcode is either an svn error or apr error.
+
+
+
+Set the error location for debug mode.
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2004, 2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_error.h
+ @brief Common exception handling for Subversion.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+the best kind of (@c svn_error_t *) !
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2009 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_error_codes.h
+ @brief Subversion error codes.
+
+Collection of Subversion error code values, located within the
+ * APR user error space.
+
+
+ Return a deep copy of @a segment, allocated in @a pool.
+
+ @since New in 1.5.
+
+
+
+A callback invoked by generators of @c svn_location_segment_t
+objects, used to report information about a versioned object's
+history in terms of its location in the repository filesystem over
+time.
+
+
+
+The absolute (sans leading slash) path for this segment. May be
+ NULL to indicate gaps in an object's history.
+
+
+The beginning (oldest) and ending (youngest) revisions for this
+ segment.
+
+
+@defgroup node_location_seg_reporting Node location segment reporting.
+ * @{
+ A representation of a segment of a object's version history with an
+ emphasis on the object's location in the repository as of various
+ revisions.
+
+ @since New in 1.5.
+
+
+
+ Returns true if the changeset committed in revision @a rev is one
+ of the changesets in the range @a range.
+
+ @since New in 1.5.
+
+
+
+ Return a copy of @a range, allocated in @a pool.
+
+ @since New in 1.5.
+
+
+
+Whether this merge range should be inherited by treewise
+descendants of the path to which the range applies.
+
+
+If the 'start' field is less than the 'end' field then 'start' is
+exclusive and 'end' inclusive of the range described. This is termed
+a forward merge range. If 'start' is greater than 'end' then the
+opposite is true. This is termed a reverse merge range. If 'start'
+equals 'end' the meaning of the range is not defined.
+
+
+
+ Mergeinfo representing a merge of a range of revisions.
+
+ @since New in 1.5
+
+
+
+ Return a formatted Universal Unique IDentifier (UUID) string.
+
+ @since New in 1.4.
+
+
+
+ Return a deep copy of @a lock, allocated in @a pool.
+
+ @since New in 1.2.
+
+
+
+ Returns an @c svn_lock_t, allocated in @a pool with all fields initialized
+ to NULL values.
+
+ @note To allow for extending the @c svn_lock_t structure in the future
+ releases, this function should always be used to allocate the structure.
+
+ @since New in 1.2.
+
+
+
+A user defined callback that subversion will call with a user defined
+ * baton to see if the current operation should be continued. If the operation
+ * should continue, the function should return @c SVN_NO_ERROR, if not, it
+ * should return @c SVN_ERR_CANCELLED.
+
+
+
+Return FALSE iff @a mime_type is a textual type.
+ *
+ * All mime types that start with "text/" are textual, plus some special
+ * cases (for example, "image/x-xbitmap").
+
+
+
+A buffer size that may be used when processing a stream of data.
+ *
+ * @note We don't use this constant any longer, since it is considered to be
+ * unnecessarily large.
+ *
+ * @deprecated Provided for backwards compatibility with the 1.3 API.
+
+The maximum amount we can ever hold in memory.
+Validate @a mime_type.
+ *
+ * If @a mime_type does not contain a "/", or ends with non-alphanumeric
+ * data, return @c SVN_ERR_BAD_MIME_TYPE, else return success.
+ *
+ * Use @a pool only to find error allocation.
+ *
+ * Goal: to match both "foo/bar" and "foo/bar; charset=blah", without
+ * being too strict about it, but to disallow mime types that have
+ * quotes, newlines, or other garbage on the end, such as might be
+ * unsafe in an HTTP header.
+
+
+
+Same as @c svn_commit_callback2_t, but uses individual
+ * data elements instead of the @c svn_commit_info_t structure
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+Callback function type for commits.
+ *
+ * When a commit succeeds, an instance of this is invoked with the
+ * @a commit_info, along with the @a baton closure.
+ * @a pool can be used for temporary allocations.
+ *
+ * @since New in 1.4.
+
+
+
+ Similar to @c svn_log_entry_receiver_t, except this uses separate
+ parameters for each part of the log entry.
+
+ @deprecated Provided for backward compatibility with the 1.4 API.
+
+
+
+The callback invoked by log message loopers, such as
+ * @c svn_ra_plugin_t.get_log() and svn_repos_get_logs().
+ *
+ * This function is invoked once on each log message, in the order
+ * determined by the caller (see above-mentioned functions).
+ *
+ * @a baton is what you think it is, and @a log_entry contains relevent
+ * information for the log message. Any of @a log_entry->author,
+ * @a log_entry->date, or @a log_entry->message may be @c NULL.
+ *
+ * If @a log_entry->date is neither NULL nor the empty string, it was
+ * generated by svn_time_to_cstring() and can be converted to
+ * @c apr_time_t with svn_time_from_cstring().
+ *
+ * If @a log_entry->changed_paths is non-@c NULL, then it contains as keys
+ * every path committed in @a log_entry->revision; the values are
+ * (@c svn_log_changed_path_t *) structures.
+ *
+ * If @a log_entry->has_children is @c TRUE, the message will be followed
+ * immediately by any number of merged revisions (child messages), which are
+ * terminated by an invocation with SVN_INVALID_REVNUM. This usage may
+ * be recursive.
+ *
+ * Use @a pool for temporary allocation. If the caller is iterating
+ * over log messages, invoking this receiver on each, we recommend the
+ * standard pool loop recipe: create a subpool, pass it as @a pool to
+ * each call, clear it after each iteration, destroy it after the loop
+ * is done. (For allocation that must last beyond the lifetime of a
+ * given receiver call, use a pool in @a baton.)
+ *
+ * @since New in 1.5.
+
+
+
+Return a deep copy of @a log_entry, allocated in @a pool.
+ *
+ * The resulting svn_log_entry_t has @c changed_paths set to the same
+ * value as @c changed_path2. @c changed_paths will be @c NULL if
+ * @c changed_paths2 was @c NULL.
+ *
+ * @since New in 1.6.
+
+
+
+ Returns an @c svn_log_entry_t, allocated in @a pool with all fields
+ initialized to NULL values.
+
+ @note To allow for extending the @c svn_log_entry_t structure in future
+ releases, this function should always be used to allocate the structure.
+
+ @since New in 1.5.
+
+
+
+A hash containing as keys every path committed in @a revision; the
+ * values are (@c svn_log_changed_path2_t *) stuctures.
+ *
+ * If this value is not @c NULL, it MUST have the same value as
+ * changed_paths or svn_log_entry_dup() will not create an identical copy.
+ *
+ * The subversion core libraries will always set this field to the same
+ * value as changed_paths for compatibity with users assuming an older
+ * version.
+ *
+ * @since New in 1.6.
+
+
+
+ Whether or not this message has children.
+
+ When a log operation requests additional merge information, extra log
+ entries may be returned as a result of this entry. The new entries, are
+ considered children of the original entry, and will follow it. When
+ the HAS_CHILDREN flag is set, the receiver should increment its stack
+ depth, and wait until an entry is provided with SVN_INVALID_REVNUM which
+ indicates the end of the children.
+
+ For log operations which do not request additional merge information, the
+ HAS_CHILDREN flag is always FALSE.
+
+ For more information see:
+ http://subversion.tigris.org/merge-tracking/design.html#commutative-reporting
+
+
+
+The hash of requested revision properties, which may be NULL if it
+ * would contain no revprops.
+
+
+The revision of the commit.
+
+
+A hash containing as keys every path committed in @a revision; the
+ * values are (@c svn_log_changed_path_t *) stuctures.
+ *
+ * The subversion core libraries will always set this field to the same
+ * value as changed_paths2 for compatibity reasons.
+ *
+ * @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ A structure to represent all the information about a particular log entry.
+
+ @note To allow for extending the @c svn_log_entry_t structure in future
+ releases, always use svn_log_entry_create() to allocate the structure.
+
+ @since New in 1.5.
+
+
+
+ Return a deep copy of @a changed_path, allocated in @a pool.
+
+ @since New in 1.3.
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+Source revision of copy (if any).
+
+
+Source path of copy (if any).
+
+
+'A'dd, 'D'elete, 'R'eplace, 'M'odify
+
+
+ A structure to represent a path that changed for a log entry. Same as
+ @c svn_log_changed_path2_t, but without the node kind.
+
+ @deprecated Provided for backward compatibility with the 1.5 API.
+
+
+
+ Return a deep copy of @a changed_path, allocated in @a pool.
+
+ @since New in 1.6.
+
+
+
+ Returns an @c svn_log_changed_path2_t, allocated in @a pool with all fields
+ initialized to NULL, None or empty values.
+
+ @note To allow for extending the @c svn_log_changed_path2_t structure in
+ future releases, this function should always be used to allocate the
+ structure.
+
+ @since New in 1.6.
+
+
+
+The type of the node, may be svn_node_unknown.
+
+
+Source revision of copy (if any).
+
+
+Source path of copy (if any).
+
+
+'A'dd, 'D'elete, 'R'eplace, 'M'odify
+
+
+ A structure to represent a path that changed for a log entry.
+
+ @note To allow for extending the @c svn_log_changed_path2_t structure in
+ future releases, always use svn_log_changed_path2_create() to allocate
+ the structure.
+
+ @since New in 1.6.
+
+
+
+ Return a deep copy @a src_commit_info allocated in @a pool.
+
+ @since New in 1.4.
+
+
+
+ Allocate an object of type @c svn_commit_info_t in @a pool and
+ return it.
+
+ The @c revision field of the new struct is set to @c
+ SVN_INVALID_REVNUM. All other fields are initialized to @c NULL.
+
+ @note Any object of the type @c svn_commit_info_t should
+ be created using this function.
+ This is to provide for extending the svn_commit_info_t in
+ the future.
+
+ @since New in 1.3.
+
+
+
+error message from post-commit hook, or NULL.
+
+
+author of the commit.
+
+
+server-side date of the commit.
+
+
+just-committed revision.
+
+
+Return a deep copy of @a dirent, allocated in @a pool.
+ *
+ * @since New in 1.4.
+
+
+
+author of created_rev
+
+
+time of created_rev (mod-time)
+
+
+last rev in which this node changed
+
+
+does the node have props?
+
+
+length of file text, or 0 for directories
+
+
+node kind
+
+
+ It is sometimes convenient to indicate which parts of an @c svn_dirent_t
+ object you are actually interested in, so that calculating and sending
+ the data corresponding to the other fields can be avoided. These values
+ can be used for that purpose.
+
+ @defgroup svn_dirent_fields Dirent fields
+ @{
+
+An indication that you are interested in the @c kind field
+An indication that you are interested in the @c size field
+An indication that you are interested in the @c has_props field
+An indication that you are interested in the @c created_rev field
+An indication that you are interested in the @c time field
+An indication that you are interested in the @c last_author field
+A combination of all the dirent fields
+@}
+A general subversion directory entry.
+
+
+Return the appropriate depth for @a depth_str. @a word is as
+ * returned from svn_depth_to_word(). If @a depth_str does not
+ * represent a recognized depth, return @c svn_depth_unknown.
+ *
+ * @since New in 1.5.
+
+
+
+An enum to indicate whether recursion is needed.
+
+
+The 'official' invalid file size constant.
+In printf()-style functions, format file sizes using this.
+YABT: Yet Another Boolean Type
+
+
+Originally intended to be used in printf()-style functions to format
+ * revision numbers. Deprecated due to incompatibilities with language
+ * translation tools (e.g. gettext).
+ *
+ * New code should use a bare "%ld" format specifier for formatting revision
+ * numbers.
+ *
+ * @deprecated Provided for backward compatibility with the 1.0 API.
+
+The size of a file in the Subversion FS.
+
+
+Valid revision numbers begin at 0
+The 'official' invalid revision num
+Not really invalid...just unimportant -- one day, this can be its
+ * own unique value, for now, just make it the same as
+ * @c SVN_INVALID_REVNUM.
+
+Convert NULL-terminated C string @a str to a revision number.
+ Parse NULL-terminated C string @a str as a revision number and
+ store its value in @a rev. If @a endptr is non-NULL, then the
+ address of the first non-numeric character in @a str is stored in
+ it. If there are no digits in @a str, then @a endptr is set (if
+ non-NULL), and the error @c SVN_ERR_REVNUM_PARSE_FAILURE error is
+ returned. Negative numbers parsed from @a str are considered
+ invalid, and result in the same error.
+
+ @since New in 1.5.
+
+
+
+About Special Files in Subversion
+ *
+ * Subversion denotes files that cannot be portably created or
+ * modified as "special" files (svn_node_special). It stores these
+ * files in the repository as a plain text file with the svn:special
+ * property set. The file contents contain: a platform-specific type
+ * string, a space character, then any information necessary to create
+ * the file on a supported platform. For example, if a symbolic link
+ * were being represented, the repository file would have the
+ * following contents:
+ *
+ * "link /path/to/link/target"
+ *
+ * Where 'link' is the identifier string showing that this special
+ * file should be a symbolic link and '/path/to/link/target' is the
+ * destination of the symbolic link.
+ *
+ * Special files are stored in the text-base exactly as they are
+ * stored in the repository. The platform specific files are created
+ * in the working copy at EOL/keyword translation time using
+ * svn_subst_copy_and_translate2(). If the current platform does not
+ * support a specific special file type, the file is copied into the
+ * working copy as it is seen in the repository. Because of this,
+ * users of other platforms can still view and modify the special
+ * files, even if they do not have their unique properties.
+ *
+ * New types of special files can be added by:
+ * 1. Implementing a platform-dependent routine to create a uniquely
+ * named special file and one to read the special file in
+ * libsvn_subr/io.c.
+ * 2. Creating a new textual name similar to
+ * SVN_SUBST__SPECIAL_LINK_STR in libsvn_subr/subst.c.
+ * 3. Handling the translation/detranslation case for the new type in
+ * create_special_file and detranslate_special_file, using the
+ * routines from 1.
+
+A revision number.
+
+
+Return the appropriate node_kind for @a word. @a word is as
+ * returned from svn_node_kind_to_word(). If @a word does not
+ * represent a recognized kind or is @c NULL, return @c svn_node_unknown.
+ *
+ * @since New in 1.6.
+
+
+
+something's here, but we don't know what
+
+
+directory
+
+
+regular file
+
+
+absent
+
+
+Source line where the error originated. Only used iff @c SVN_DEBUG.
+
+
+Source file where the error originated. Only used iff @c SVN_DEBUG.
+
+
+The pool holding this error and any child errors it wraps
+
+
+ptr to the error we "wrap"
+
+
+details from producer of error
+
+
+APR error value, possibly SVN_ custom err
+
+
+The FilePath character encoding is unknown
+The FilePath character encoding is locale-dependent
+The FilePath character encoding is UTF-8
+Determine the encoding used internally by the FilePath functions
+@param style points to a variable which receives the encoding style flag
+@param p the pool to allocate any working storage
+@remark Use @c apr_os_locale_encoding and/or @c apr_os_default_encoding
+to get the name of the path encoding if it's not UTF-8.
+
+
+
+Set the default file path (for relative file names)
+@param path the default path returned
+@param p the pool to allocate any working storage
+
+
+
+Return the default file path (for relative file names)
+@param path the default path string returned
+@param flags optional flag APR_FILEPATH_NATIVE to retrieve the
+ default file path in os-native format.
+@param p the pool to allocate the default path string from
+
+
+
+Merge a list of search path components into a single search path
+@param liststr the returned search path; may be NULL if @a pathelts is empty
+@param pathelts the components of the search path
+@param p the pool to allocate the search path from
+@remark emtpy strings in the source array are ignored.
+@remark the path separator in @a liststr is system specific;
+e.g., ':' on Unix, ';' on Windows, etc.
+
+
+
+Split a search path into separate components
+@param pathelts the returned components of the search path
+@param liststr the search path (e.g., getenv("PATH"))
+@param p the pool to allocate the array and path components from
+@remark empty path componenta do not become part of @a pathelts.
+@remark the path separator in @a liststr is system specific;
+e.g., ':' on Unix, ';' on Windows, etc.
+
+
+
+Merge additional file path onto the previously processed rootpath
+@param newpath the merged paths returned
+@param rootpath the root file path (NULL uses the current working path)
+@param addpath the path to add to the root path
+@param flags the desired APR_FILEPATH_ rules to apply when merging
+@param p the pool to allocate the new path string from
+@remark if the flag APR_FILEPATH_TRUENAME is given, and the addpath
+contains wildcard characters ('*', '?') on platforms that don't support
+such characters within filenames, the paths will be merged, but the
+result code will be APR_EPATHWILD, and all further segments will not
+reflect the true filenames including the wildcard and following segments.
+
+
+
+@}
+@defgroup apr_filepath Filepath Manipulation Functions
+@{
+
+Cause apr_filepath_merge to fail if addpath is above rootpath
+ * @bug in APR 0.9 and 1.x, this flag's behavior is undefined
+ * if the rootpath is NULL or empty. In APR 2.0 this should be
+ * changed to imply NOTABSOLUTE if the rootpath is NULL or empty.
+
+internal: Only meaningful with APR_FILEPATH_NOTABOVEROOT
+Cause apr_filepath_merge to fail if addpath is above rootpath,
+ * even given a rootpath /foo/bar and an addpath ../bar/bash
+
+Fail apr_filepath_merge if the merged path is relative
+Fail apr_filepath_merge if the merged path is absolute
+Return the file system's native path format (e.g. path delimiters
+ * of ':' on MacOS9, '\' on Win32, etc.)
+Resolve the true case of existing directories and file elements
+ * of addpath, (resolving any aliases on Win32) and append a proper
+ * trailing slash if a directory
+
+Extract the rootpath from the given filepath
+@param rootpath the root file path returned with APR_SUCCESS or APR_EINCOMPLETE
+@param filepath the pathname to parse for its root component
+@param flags the desired rules to apply, from
+
+ APR_FILEPATH_NATIVE Use native path seperators (e.g. '\' on Win32)
+ APR_FILEPATH_TRUENAME Tests that the root exists, and makes it proper
+
+@param p the pool to allocate the new path string from
+@remark on return, filepath points to the first non-root character in the
+given filepath. In the simplest example, given a filepath of "/foo",
+returns the rootpath of "/" and filepath points at "foo". This is far
+more complex on other platforms, which will canonicalize the root form
+to a consistant format, given the APR_FILEPATH_TRUENAME flag, and also
+test for the validity of that root (e.g., that a drive d:/ or network
+share //machine/foovol/).
+The function returns APR_ERELATIVE if filepath isn't rooted (an
+error), APR_EINCOMPLETE if the root path is ambigious (but potentially
+legitimate, e.g. "/" on Windows is incomplete because it doesn't specify
+the drive letter), or APR_EBADPATH if the root is simply invalid.
+APR_SUCCESS is returned if filepath is an absolute path.
+
+
+
+Rewind the directory to the first entry.
+@param thedir the directory descriptor to rewind.
+
+
+
+ * Read the next entry from the specified directory.
+ * @param finfo the file info structure and filled in by apr_dir_read
+ * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_
+ values
+ * @param thedir the directory descriptor returned from apr_dir_open
+ * @remark No ordering is guaranteed for the entries read.
+ *
+ * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may
+ * not be filled in, and you need to check the @c finfo->valid bitmask
+ * to verify that what you're looking for is there.
+
+
+
+close the specified directory.
+@param thedir the directory descriptor to close.
+
+
+
+@}
+@defgroup apr_dir Directory Manipulation Functions
+@{
+
+Open the specified directory.
+@param new_dir The opened directory descriptor.
+@param dirname The full path to the directory (use / on all systems)
+@param pool The pool to use.
+
+
+
+ * get the specified file's stats. The file is specified by filename,
+ * instead of using a pre-opened file.
+ * @param finfo Where to store the information about the file, which is
+ * never touched if the call fails.
+ * @param fname The name of the file to stat.
+ * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_
+ values
+ * @param pool the pool to use to allocate the new file.
+ *
+ * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may
+ * not be filled in, and you need to check the @c finfo->valid bitmask
+ * to verify that what you're looking for is there.
+
+
+
+The file's handle, if accessed (can be submitted to apr_duphandle)
+
+
+The file's name (no path) in filesystem case
+
+
+The pathname of the file (possibly unrooted)
+
+
+The time the file was created, or the inode was last changed
+
+
+The time the file was last modified
+
+
+The time the file was last accessed
+
+
+The storage size consumed by the file
+
+
+The size of the file
+
+
+The number of hard links to the file.
+
+
+The id of the device the file is on.
+
+
+The inode of the file.
+
+
+The group id that owns the file
+
+
+The user id that owns the file
+
+
+The type of file. One of APR_REG, APR_DIR, APR_CHR, APR_BLK, APR_PIPE,
+ * APR_LNK or APR_SOCK. If the type is undetermined, the value is APR_NOFILE.
+ * If the type cannot be determined, the value is APR_UNKFILE.
+
+
+
+The access permissions of the file. Mimics Unix access rights.
+
+
+The bitmask describing valid fields of this apr_finfo_t structure
+ * including all available 'wanted' fields and potentially more
+
+
+Allocates memory and closes lingering handles in the specified pool
+
+
+@defgroup apr_file_stat Stat Functions
+@{
+
+file info structure
+
+The file information structure. This is analogous to the POSIX
+stat structure.
+
+
+
+Structure for determining the device the file is on.
+
+
+
+Structure for determining file permissions.
+
+
+
+@defgroup apr_file_permissions File Permissions flags
+@{
+
+@}
+Structure for referencing directories.
+
+
+
+ Eliminate redundant entries in a table by either overwriting
+ or merging duplicates
+
+ @param t Table.
+ @param flags APR_OVERLAP_TABLES_MERGE to merge, or
+ APR_OVERLAP_TABLES_SET to overwrite
+
+
+
+ Iterate over a table running the provided function once for every
+ element in the table. The @param vp varargs paramater must be a
+ list of zero or more (char *) keys followed by a NULL pointer. If
+ zero keys are given, the @param comp function will be invoked for
+ every element in the table. Otherwise, the function is invoked
+ only for those elements matching the keys specified.
+
+ If an invocation of the @param comp function returns zero,
+ iteration will continue using the next specified key, if any.
+
+ @param comp The function to run
+ @param rec The data to pass as the first argument to the function
+ @param t The table to iterate over
+ @param vp List of zero or more (char *) keys followed by NULL
+ @return FALSE if one of the comp() iterations returned zero; TRUE if all
+ iterations returned non-zero
+ @see apr_table_do_callback_fn_t
+
+
+
+ Iterate over a table running the provided function once for every
+ element in the table. The varargs array must be a list of zero or
+ more (char *) keys followed by a NULL pointer. If zero keys are
+ given, the @param comp function will be invoked for every element
+ in the table. Otherwise, the function is invoked only for those
+ elements matching the keys specified.
+
+ If an invocation of the @param comp function returns zero,
+ iteration will continue using the next specified key, if any.
+
+ @param comp The function to run
+ @param rec The data to pass as the first argument to the function
+ @param t The table to iterate over
+ @param ... A varargs array of zero or more (char *) keys followed by NULL
+ @return FALSE if one of the comp() iterations returned zero; TRUE if all
+ iterations returned non-zero
+ @see apr_table_do_callback_fn_t
+
+
+
+Declaration prototype for the iterator callback function of apr_table_do()
+and apr_table_vdo().
+@param rec The data passed as the first argument to apr_table_[v]do()
+@param key The key from this iteration of the table
+@param value The value from this iteration of the table
+@remark Iteration continues while this callback function returns non-zero.
+To export the callback function for apr_table_[v]do() it must be declared
+in the _NONSTD convention.
+
+
+
+Merge two tables into one new table
+@param p The pool to use for the new table
+@param overlay The first table to put in the new table
+@param base The table to add at the end of the new table
+@return A new table containing all of the data from the two passed in
+
+
+
+Add data to a table, regardless of whether there is another element with the
+same key.
+@param t The table to add to
+@param key The key to use
+@param val The value to add.
+@remark When adding data, this function does not make a copy of the key or the
+ value, so care should be taken to ensure that the values will not
+ change after they have been added..
+
+
+
+Add data to a table, regardless of whether there is another element with the
+same key.
+@param t The table to add to
+@param key The key to use
+@param val The value to add.
+@remark When adding data, this function makes a copy of both the key and the
+ value.
+
+
+
+Add data to a table by merging the value with data that has already been
+stored
+@param t The table to search for the data
+@param key The key to merge data for
+@param val The data to add
+@remark If the key is not found, then this function acts like apr_table_addn
+
+
+
+Add data to a table by merging the value with data that has already been
+stored
+@param t The table to search for the data
+@param key The key to merge data for
+@param val The data to add
+@remark If the key is not found, then this function acts like apr_table_add
+
+
+
+Remove data from the table
+@param t The table to remove data from
+@param key The key of the data being removed
+
+
+
+Add a key/value pair to a table, if another element already exists with the
+same key, this will over-write the old data.
+@param t The table to add the data to.
+@param key The key to use
+@param val The value to add
+@warning When adding data, this function does not make a copy of the key or
+ the value, so care should be taken to ensure that the values will
+ not change after they have been added..
+
+
+
+Add a key/value pair to a table, if another element already exists with the
+same key, this will over-write the old data.
+@param t The table to add the data to.
+@param key The key fo use
+@param val The value to add
+@remark When adding data, this function makes a copy of both the key and the
+ value.
+
+
+
+Get the value associated with a given key from the table. After this call,
+The data is still in the table
+@param t The table to search for the key
+@param key The key to search for
+@return The value associated with the key, or NULL if the key does not exist.
+
+
+
+Delete all of the elements from a table
+@param t The table to clear
+
+
+
+Create a new table whose contents are deep copied from the given
+table. A deep copy operation copies all fields, and makes copies
+of dynamically allocated memory pointed to by the fields.
+@param p The pool to allocate the new table out of
+@param t The table to clone
+@return A deep copy of the table passed in
+
+
+
+Create a new table and copy another table into it
+@param p The pool to allocate the new table out of
+@param t The table to copy
+@return A copy of the table passed in
+@warning The table keys and respective values are not copied
+
+
+
+Make a new table
+@param p The pool to allocate the pool out of
+@param nelts The number of elements in the initial table.
+@return The new table.
+@warning This table can only store text data
+
+
+
+Generates a new string from the apr_pool_t containing the concatenated
+sequence of substrings referenced as elements within the array. The string
+will be empty if all substrings are empty or null, or if there are no
+elements in the array. If sep is non-NUL, it will be inserted between
+elements as a separator.
+@param p The pool to allocate the string out of
+@param arr The array to generate the string from
+@param sep The separator to use
+@return A string containing all of the data in the array.
+
+
+
+Append one array to the end of another, creating a new array in the process.
+@param p The pool to allocate the new array out of
+@param first The array to put first in the new array.
+@param second The array to put second in the new array.
+@return A new array containing the data from the two arrays passed in.
+
+
+
+Copy the headers of the array, and arrange for the elements to be copied if
+and only if the code subsequently does a push or arraycat.
+@param p The pool to allocate the copy of the array out of
+@param arr The array to copy
+@return An exact copy of the array passed in
+@remark The alternate apr_array_copy copies the *entire* array.
+
+
+
+Copy the entire array
+@param p The pool to allocate the copy of the array out of
+@param arr The array to copy
+@return An exact copy of the array passed in
+@remark The alternate apr_array_copy_hdr copies only the header, and arranges
+ for the elements to be copied if (and only if) the code subsequently
+ does a push or arraycat.
+
+
+
+Concatenate two arrays together
+@param dst The destination array, and the one to go first in the combined
+ array
+@param src The source array to add to the destination array
+
+
+
+Remove all elements from an array.
+@param arr The array to remove all elements from.
+@remark As the underlying storage is allocated from a pool, no
+memory is freed by this operation, but is available for reuse.
+
+
+
+A helper macro for accessing a member of an APR array.
+ *
+ * @param ary the array
+ * @param i the index into the array to return
+ * @param type the type of the objects stored in the array
+ *
+ * @return the item at index i
+
+A helper macro for pushing elements into an APR array.
+ *
+ * @param ary the array
+ * @param type the type of the objects stored in the array
+ *
+ * @return the location where the new object should be placed
+
+Remove an element from an array (as a first-in, last-out stack)
+@param arr The array to remove an element from.
+@return Location of the element in the array.
+@remark If there are no elements in the array, NULL is returned.
+
+
+
+Add a new element to an array (as a first-in, last-out stack)
+@param arr The array to add an element to.
+@return Location for the new element in the array.
+@remark If there are no free spots in the array, then this function will
+ allocate new space for the new element.
+
+
+
+Create an array
+@param p The pool to allocate the memory out of
+@param nelts the number of elements in the initial array
+@param elt_size The size of each element in the array.
+@return The new array
+
+
+
+Determine if the array is empty (either NULL or having no elements)
+@param a The array to check
+@return True if empty, False otherwise
+
+
+
+Determine if the table is empty (either NULL or having no elements)
+@param t The table to check
+@return True if empty, False otherwise
+
+
+
+Get the elements from a table
+@param t The table
+@return An array containing the contents of the table
+
+
+
+A checksum for the key, for use by the apr_table internals
+
+
+The value for the current table entry
+
+
+The key for the current table entry
+
+
+The (opaque) structure for string-content tables.
+
+
+The type for each entry in a string-content table
+
+
+The elements in the array
+
+
+The number of elements allocated in the array
+
+
+The number of active elements in the array
+
+
+The amount of memory allocated for each element of the array
+
+
+The pool the array is allocated out of
+
+
+@see apr_array_header_t
+
+An opaque array type
+
+
+@file apr_tables.h
+@brief APR Table library
+
+@defgroup apr_tables Table and Array Functions
+@ingroup APR
+Tables are used to store entirely opaque structures
+for applications, while Arrays are usually used to
+deal with string lists.
+@{
+
+the table abstract data type
+
+
+Compare two group identifiers for equality.
+@param left One gid to test
+@param right Another gid to test
+@return APR_SUCCESS if the apr_gid_t strutures identify the same group,
+APR_EMISMATCH if not, APR_BADARG if an apr_gid_t is invalid.
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Get the groupid for a specified group name
+@param groupid Pointer to the group id (on output)
+@param groupname The group name to look up
+@param p The pool from which to allocate the string
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Get the group name for a specified groupid
+@param groupname Pointer to new string containing group name (on output)
+@param groupid The groupid
+@param p The pool from which to allocate the string
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Compare two user identifiers for equality.
+@param left One uid to test
+@param right Another uid to test
+@return APR_SUCCESS if the apr_uid_t strutures identify the same user,
+APR_EMISMATCH if not, APR_BADARG if an apr_uid_t is invalid.
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Get the home directory for the named user
+@param dirname Pointer to new string containing directory name (on output)
+@param username The named user
+@param p The pool from which to allocate the string
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Get the userid (and groupid) for the specified username
+@param userid Returns the user id
+@param groupid Returns the user's group id
+@param username The username to lookup
+@param p The pool from which to allocate working space
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Get the user name for a specified userid
+@param username Pointer to new string containing user name (on output)
+@param userid The userid
+@param p The pool from which to allocate the string
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Get the userid (and groupid) of the calling process
+@param userid Returns the user id
+@param groupid Returns the user's group id
+@param p The pool from which to allocate working space
+@remark This function is available only if APR_HAS_USER is defined.
+
+
+
+Structure for determining group ownership.
+
+
+
+@file apr_file_info.h
+@brief APR File Information
+
+@file apr_user.h
+@brief APR User ID Services
+
+@defgroup apr_user User and Group ID Services
+@ingroup APR
+@{
+
+Structure for determining user ownership.
+
+
+
+Improve the clock resolution for the lifetime of the given pool.
+Generally this is only desireable on benchmarking and other very
+time-sensitive applications, and has no impact on most platforms.
+@param p The pool to associate the finer clock resolution
+
+
+
+formats the exploded time according to the format specified
+@param s string to write to
+@param retsize The length of the returned string
+@param max The maximum length of the string
+@param format The format for the time string
+@param tm The time to convert
+
+
+
+length of a CTIME date
+apr_ctime formats dates in the ctime() format
+in an efficient manner. it is a fixed length format
+and requires the indicated amount of storage including
+the trailing NUL terminator.
+Unlike ANSI/ISO C ctime(), apr_ctime() does not include
+a \n at the end of the string.
+@param date_str String to write to.
+@param t the time to convert
+
+
+
+length of a RFC822 Date
+apr_rfc822_date formats dates in the RFC822
+format in an efficient manner. It is a fixed length
+format which requires the indicated amount of storage,
+including the trailing NUL terminator.
+@param date_str String to write to.
+@param t the time to convert
+
+
+
+Sleep for the specified number of micro-seconds.
+@param t desired amount of time to sleep.
+@warning May sleep for longer than the specified time.
+
+
+
+Convert time value from human readable format to a numeric apr_time_t that
+always represents GMT
+@param result the resulting imploded time
+@param input the input exploded time
+
+
+
+Convert time value from human readable format to a numeric apr_time_t
+e.g. elapsed usec since epoch
+@param result the resulting imploded time
+@param input the input exploded time
+
+
+
+convert a time to its human readable components in local timezone
+@param result the exploded time
+@param input the time to explode
+
+
+
+convert a time to its human readable components in GMT timezone
+@param result the exploded time
+@param input the time to explode
+
+
+
+convert a time to its human readable components using an offset
+from GMT
+@param result the exploded time
+@param input the time to explode
+@param offs the number of seconds offset to apply
+
+
+
+convert an ansi time_t to an apr_time_t
+@param result the resulting apr_time_t
+@param input the time_t to convert
+
+
+
+seconds east of UTC
+
+
+daylight saving time
+
+
+(0-365) days since jan 1
+
+
+(0-6) days since sunday
+
+
+year since 1900
+
+
+(0-11) month of the year
+
+
+(1-31) day of the month
+
+
+(0-23) hours past midnight
+
+
+(0-59) minutes past tm_hour
+
+
+(0-61) seconds past tm_min
+
+
+microseconds past tm_sec
+
+
+@see apr_time_exp_t
+
+a structure similar to ANSI struct tm with the following differences:
+ - tm_usec isn't an ANSI field
+ - tm_gmtoff isn't an ANSI field (it's a bsdism)
+
+
+
+number of microseconds per second
+@return apr_time_t as a second
+@return apr_time_t as a usec
+@return apr_time_t as a msec
+@return apr_time_t as a msec
+@return a second as an apr_time_t
+@return a second and usec combination as an apr_time_t
+@return the current time
+
+
+
+short interval for I/O timeouts, in microseconds
+
+
+mechanism to properly type apr_time_t literals
+mechanism to properly print apr_time_t values
+intervals for I/O timeouts, in microseconds
+
+
+number of microseconds since 00:00:00 january 1, 1970 UTC
+
+
+day names
+
+
+@file apr_time.h
+@brief APR Time Library
+
+@defgroup apr_time Time Routines
+@ingroup APR
+@{
+
+month names
+
+
+Run all registered child cleanups, in preparation for an exec()
+call in a forked child -- close files, etc., but *don't* flush I/O
+buffers, *don't* wait for subprocesses, and *don't* free any
+memory.
+
+
+
+ An empty cleanup function.
+
+ Passed to apr_pool_cleanup_register() when no cleanup is required.
+
+ @param data The data to cleanup, will not be used by this function.
+
+
+
+ Run the specified cleanup function immediately and unregister it.
+
+ The cleanup most recently registered with @a p having the same values of
+ @a data and @a cleanup will be removed and @a cleanup will be called
+ with @a data as the argument.
+
+ @param p The pool to remove the cleanup from
+ @param data The data to remove from cleanup
+ @param cleanup The function to remove from cleanup
+
+
+
+ Replace the child cleanup function of a previously registered cleanup.
+
+ The cleanup most recently registered with @a p having the same values of
+ @a data and @a plain_cleanup will have the registered child cleanup
+ function replaced with @a child_cleanup.
+
+ @param p The pool of the registered cleanup
+ @param data The data of the registered cleanup
+ @param plain_cleanup The plain cleanup function of the registered cleanup
+ @param child_cleanup The function to register as the child cleanup
+
+
+
+ Remove a previously registered cleanup function.
+
+ The cleanup most recently registered with @a p having the same values of
+ @a data and @a cleanup will be removed.
+
+ @param p The pool to remove the cleanup from
+ @param data The data of the registered cleanup
+ @param cleanup The function to remove from cleanup
+ @remarks For some strange reason only the plain_cleanup is handled by this
+ function
+
+
+
+ Register a function to be called when a pool is cleared or destroyed.
+
+ Unlike apr_pool_cleanup_register which register a cleanup
+ that is called AFTER all subpools are destroyed this function register
+ a function that will be called before any of the subpool is destoryed.
+
+ @param p The pool register the cleanup with
+ @param data The data to pass to the cleanup function.
+ @param plain_cleanup The function to call when the pool is cleared
+ or destroyed
+
+
+
+ @defgroup PoolCleanup Pool Cleanup Functions
+
+ Cleanups are performed in the reverse order they were registered. That is:
+ Last In, First Out. A cleanup function can safely allocate memory from
+ the pool that is being cleaned up. It can also safely register additional
+ cleanups which will be run LIFO, directly after the current cleanup
+ terminates. Cleanups have to take caution in calling functions that
+ create subpools. Subpools, created during cleanup will NOT automatically
+ be cleaned up. In other words, cleanups are to clean up after themselves.
+
+ @{
+
+Register a function to be called when a pool is cleared or destroyed
+@param p The pool register the cleanup with
+@param data The data to pass to the cleanup function.
+@param plain_cleanup The function to call when the pool is cleared
+ or destroyed
+@param child_cleanup The function to call when a child process is about
+ to exec - this function is called in the child, obviously!
+
+
+
+Return the data associated with the current pool.
+@param data The user data associated with the pool.
+@param key The key for the data to retrieve
+@param pool The current pool.
+
+
+
+ Set the data associated with the current pool
+ @param data The user data associated with the pool.
+ @param key The key to use for association
+ @param cleanup The cleanup program to use to cleanup the data (NULL if none)
+ @param pool The current pool
+ @note same as apr_pool_userdata_set(), except that this version doesn't
+ make a copy of the key (this function is useful, for example, when
+ the key is a string literal)
+ @warning This should NOT be used if the key could change addresses by
+ any means between the apr_pool_userdata_setn() call and a
+ subsequent apr_pool_userdata_get() on that key, such as if a
+ static string is used as a userdata key in a DSO and the DSO could
+ be unloaded and reloaded between the _setn() and the _get(). You
+ MUST use apr_pool_userdata_set() in such cases.
+ @warning More generally, the key and the data to be attached to the
+ pool should have a life span at least as long as the pool itself.
+
+
+
+
+ Set the data associated with the current pool
+ @param data The user data associated with the pool.
+ @param key The key to use for association
+ @param cleanup The cleanup program to use to cleanup the data (NULL if none)
+ @param pool The current pool
+ @warning The data to be attached to the pool should have a life span
+ at least as long as the pool it is being attached to.
+
+ Users of APR must take EXTREME care when choosing a key to
+ use for their data. It is possible to accidentally overwrite
+ data by choosing a key that another part of the program is using.
+ Therefore it is advised that steps are taken to ensure that unique
+ keys are used for all of the userdata objects in a particular pool
+ (the same key in two different pools or a pool and one of its
+ subpools is okay) at all times. Careful namespace prefixing of
+ key names is a typical way to help ensure this uniqueness.
+
+
+
+
+Tag a pool (give it a name)
+@param pool The pool to tag
+@param tag The tag
+
+
+
+Determine if pool a is an ancestor of pool b.
+@param a The pool to search
+@param b The pool to search for
+@return True if a is an ancestor of b, NULL is considered an ancestor
+ of all pools.
+@remark if compiled with APR_POOL_DEBUG, this function will also
+return true if A is a pool which has been guaranteed by the caller
+(using apr_pool_join) to have a lifetime at least as long as some
+ancestor of pool B.
+
+
+
+Get the parent pool of the specified pool.
+@param pool The pool for retrieving the parent pool.
+@return The parent of the given pool.
+
+
+
+Get the abort function associated with the specified pool.
+@param pool The pool for retrieving the abort function.
+@return The abort function for the given pool.
+
+
+
+Set the function to be called when an allocation failure occurs.
+@remark If the program wants APR to exit on a memory allocation error,
+ then this function can be called to set the callback to use (for
+ performing cleanup and then exiting). If this function is not called,
+ then APR will return an error and expect the calling program to
+ deal with the error accordingly.
+
+
+
+Allocate a block of memory from a pool and set all of the memory to 0
+@param p The pool to allocate from
+@param size The amount of memory to allocate
+@return The allocated memory
+
+Debug version of apr_pcalloc
+@param p See: apr_pcalloc
+@param size See: apr_pcalloc
+@param file_line Where the function is called from.
+ This is usually APR_POOL__FILE_LINE__.
+@return See: apr_pcalloc
+
+
+
+Debug version of apr_palloc
+@param p See: apr_palloc
+@param size See: apr_palloc
+@param file_line Where the function is called from.
+ This is usually APR_POOL__FILE_LINE__.
+@return See: apr_palloc
+
+
+
+Allocate a block of memory from a pool
+@param p The pool to allocate from
+@param size The amount of memory to allocate
+@return The allocated memory
+
+
+
+Debug version of apr_pool_destroy.
+@param p See: apr_pool_destroy.
+@param file_line Where the function is called from.
+ This is usually APR_POOL__FILE_LINE__.
+@remark Only available when APR_POOL_DEBUG is defined.
+ Call this directly if you have you apr_pool_destroy
+ calls in a wrapper function and wish to override
+ the file_line argument to reflect the caller of
+ your wrapper function. If you do not have
+ apr_pool_destroy in a wrapper, trust the macro
+ and don't call apr_pool_destroy_debug directly.
+
+
+
+Destroy the pool. This takes similar action as apr_pool_clear() and then
+frees all the memory.
+@param p The pool to destroy
+@remark This will actually free the memory
+
+
+
+Debug version of apr_pool_clear.
+@param p See: apr_pool_clear.
+@param file_line Where the function is called from.
+ This is usually APR_POOL__FILE_LINE__.
+@remark Only available when APR_POOL_DEBUG is defined.
+ Call this directly if you have you apr_pool_clear
+ calls in a wrapper function and wish to override
+ the file_line argument to reflect the caller of
+ your wrapper function. If you do not have
+ apr_pool_clear in a wrapper, trust the macro
+ and don't call apr_pool_destroy_clear directly.
+
+
+
+Clear all memory in the pool and run all the cleanups. This also destroys all
+subpools.
+@param p The pool to clear
+@remark This does not actually free the memory, it just allows the pool
+ to re-use this memory for the next allocation.
+@see apr_pool_destroy()
+
+
+
+Create a new pool.
+@param newpool The pool we have just created.
+@param parent The parent pool. If this is NULL, the new pool is a root
+ pool. If it is non-NULL, the new pool will inherit all
+ of its parent pool's attributes, except the apr_pool_t will
+ be a sub-pool.
+
+Create a new pool.
+@param newpool The pool we have just created.
+
+Find the pools allocator
+@param pool The pool to get the allocator from.
+
+
+
+Debug version of apr_pool_create_unmanaged_ex.
+@param newpool @see apr_pool_create_unmanaged.
+@param abort_fn @see apr_pool_create_unmanaged.
+@param allocator @see apr_pool_create_unmanaged.
+@param file_line Where the function is called from.
+ This is usually APR_POOL__FILE_LINE__.
+@remark Only available when APR_POOL_DEBUG is defined.
+ Call this directly if you have you apr_pool_create_unmanaged_ex
+ calls in a wrapper function and wish to override
+ the file_line argument to reflect the caller of
+ your wrapper function. If you do not have
+ apr_pool_create_core_ex in a wrapper, trust the macro
+ and don't call apr_pool_create_core_ex_debug directly.
+
+
+
+Debug version of apr_pool_create_core_ex.
+@deprecated @see apr_pool_create_unmanaged_ex_debug.
+
+
+
+Debug version of apr_pool_create_ex.
+@param newpool @see apr_pool_create.
+@param parent @see apr_pool_create.
+@param abort_fn @see apr_pool_create.
+@param allocator @see apr_pool_create.
+@param file_line Where the function is called from.
+ This is usually APR_POOL__FILE_LINE__.
+@remark Only available when APR_POOL_DEBUG is defined.
+ Call this directly if you have you apr_pool_create_ex
+ calls in a wrapper function and wish to override
+ the file_line argument to reflect the caller of
+ your wrapper function. If you do not have
+ apr_pool_create_ex in a wrapper, trust the macro
+ and don't call apr_pool_create_ex_debug directly.
+
+
+
+Create a new unmanaged pool.
+@param newpool The pool we have just created.
+@param abort_fn A function to use if the pool cannot allocate more memory.
+@param allocator The allocator to use with the new pool. If NULL a
+ new allocator will be crated with newpool as owner.
+@remark An unmanaged pool is a special pool without a parent; it will
+ NOT be destroyed upon apr_terminate. It must be explicitly
+ destroyed by calling apr_pool_destroy, to prevent memory leaks.
+ Use of this function is discouraged, think twice about whether
+ you really really need it.
+
+
+
+Create a new pool.
+@deprecated @see apr_pool_create_unmanaged_ex.
+
+
+
+Create a new pool.
+@param newpool The pool we have just created.
+@param parent The parent pool. If this is NULL, the new pool is a root
+ pool. If it is non-NULL, the new pool will inherit all
+ of its parent pool's attributes, except the apr_pool_t will
+ be a sub-pool.
+@param abort_fn A function to use if the pool cannot allocate more memory.
+@param allocator The allocator to use with the new pool. If NULL the
+ allocator of the parent pool will be used.
+
+
+
+Get the mutex currently set for the allocator
+@param allocator The allocator
+
+
+
+Set a mutex for the allocator to use
+@param allocator The allocator to set the mutex for
+@param mutex The mutex
+
+
+
+Get the pool used by this thread_mutex.
+@return apr_pool_t the pool
+
+
+
+Destroy the mutex and free the memory associated with the lock.
+@param mutex the mutex to destroy.
+
+
+
+Release the lock for the given mutex.
+@param mutex the mutex from which to release the lock.
+
+
+
+Attempt to acquire the lock for the given mutex. If the mutex has already
+been acquired, the call returns immediately with APR_EBUSY. Note: it
+is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
+if the return value was APR_EBUSY, for portability reasons.
+@param mutex the mutex on which to attempt the lock acquiring.
+
+
+
+Acquire the lock for the given mutex. If the mutex is already locked,
+the current thread will be put to sleep until the lock becomes available.
+@param mutex the mutex on which to acquire the lock.
+
+
+
+Create and initialize a mutex that can be used to synchronize threads.
+@param mutex the memory address where the newly created mutex will be
+ stored.
+@param flags Or'ed value of:
+
+ APR_THREAD_MUTEX_DEFAULT platform-optimal lock behavior.
+ APR_THREAD_MUTEX_NESTED enable nested (recursive) locks.
+ APR_THREAD_MUTEX_UNNESTED disable nested locks (non-recursive).
+
+@param pool the pool from which to allocate the mutex.
+@warning Be cautious in using APR_THREAD_MUTEX_DEFAULT. While this is the
+most optimial mutex based on a given platform's performance charateristics,
+it will behave as either a nested or an unnested lock.
+
+
+
+@file apr_thread_mutex.h
+@brief APR Thread Mutex Routines
+
+@defgroup apr_thread_mutex Thread Mutex Routines
+@ingroup APR
+@{
+
+Opaque thread-local mutex structure
+
+
+Set the current threshold at which the allocator should start
+giving blocks back to the system.
+@param allocator The allocator the set the threshold on
+@param size The threshold. 0 == unlimited.
+
+
+
+Get the current owner of the allocator
+@param allocator The allocator to get the owner from
+
+
+
+Set the owner of the allocator
+@param allocator The allocator to set the owner for
+@param pool The pool that is to own the allocator
+@remark Typically pool is the highest level pool using the allocator
+
+
+
+Free a list of blocks of mem, giving them back to the allocator.
+The list is typically terminated by a memnode with its next field
+set to NULL.
+@param allocator The allocator to give the mem back to
+@param memnode The memory node to return
+
+
+
+Allocate a block of mem from the allocator
+@param allocator The allocator to allocate from
+@param size The size of the mem to allocate (excluding the
+ memnode structure)
+
+
+
+Destroy an allocator
+@param allocator The allocator to be destroyed
+@remark Any memnodes not given back to the allocator prior to destroying
+ will _not_ be free()d.
+
+
+
+The base size of a memory node - aligned.
+Symbolic constants
+ Create a new allocator
+ @param allocator The allocator we have just created.
+
+
+
+
+the structure which holds information about the allocation
+
+basic memory node structure
+ * @note The next, ref and first_avail fields are available for use by the
+ * caller of apr_allocator_alloc(), the remaining fields are read-only.
+ * The next field has to be used with caution and sensibly set when the
+ * memnode is passed back to apr_allocator_free(). See apr_allocator_free()
+ * for details.
+ * The ref and first_avail fields will be properly restored by
+ * apr_allocator_free().
+
+
+
+Tear down all of the internal structures required to use pools
+@remark Programs do NOT need to call this directly. APR will call this
+ automatically from apr_terminate.
+@internal
+
+
+
+Setup all of the internal structures required to use pools
+@remark Programs do NOT need to call this directly. APR will call this
+ automatically from apr_initialize.
+@internal
+
+
+
+ Declaration helper macro to construct apr_foo_pool_get()s.
+
+ This standardized macro is used by opaque (APR) data types to return
+ the apr_pool_t that is associated with the data type.
+
+ APR_POOL_DECLARE_ACCESSOR() is used in a header file to declare the
+ accessor function. A typical usage and result would be:
+
+ APR_POOL_DECLARE_ACCESSOR(file);
+ becomes:
+ APR_DECLARE(apr_pool_t *) apr_file_pool_get(apr_file_t *ob);
+
+ @remark Doxygen unwraps this macro (via doxygen.conf) to provide
+ actual help for each specific occurance of apr_foo_pool_get.
+ @remark the linkage is specified for APR. It would be possible to expand
+ the macros to support other linkages.
+
+ Implementation helper macro to provide apr_foo_pool_get()s.
+
+ In the implementation, the APR_POOL_IMPLEMENT_ACCESSOR() is used to
+ actually define the function. It assumes the field is named "pool".
+
+ Pool debug levels
+
+
+ | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+ ---------------------------------
+ | | | | | | | | x | General debug code enabled (useful in
+ combination with --with-efence).
+
+ | | | | | | | x | | Verbose output on stderr (report
+ CREATE, CLEAR, DESTROY).
+
+ | | | | x | | | | | Verbose output on stderr (report
+ PALLOC, PCALLOC).
+
+ | | | | | | x | | | Lifetime checking. On each use of a
+ pool, check its lifetime. If the pool
+ is out of scope, abort().
+ In combination with the verbose flag
+ above, it will output LIFE in such an
+ event prior to aborting.
+
+ | | | | | x | | | | Pool owner checking. On each use of a
+ pool, check if the current thread is the
+ pools owner. If not, abort(). In
+ combination with the verbose flag above,
+ it will output OWNER in such an event
+ prior to aborting. Use the debug
+ function apr_pool_owner_set() to switch
+ a pools ownership.
+
+ When no debug level was specified, assume general debug mode.
+ If level 0 was specified, debugging is switched off
+
+
+the place in the code where the particular function was called
+A function that is called when allocation fails.
+
+
+@}
+@defgroup apr_random Random Functions
+@{
+
+Generate random bytes.
+@param buf Buffer to fill with random bytes
+@param length Length of buffer in bytes
+
+
+
+Tear down any APR internal data structures which aren't torn down
+automatically, same as apr_terminate
+@remark An APR program must call either the apr_terminate or apr_terminate2
+ function once it it has finished using APR services. The APR
+ developers suggest using atexit(apr_terminate) to ensure this is done.
+ apr_terminate2 exists to allow non-c language apps to tear down apr,
+ while apr_terminate is recommended from c language applications.
+
+
+
+Tear down any APR internal data structures which aren't torn down
+automatically.
+@remark An APR program must call this function at termination once it
+ has stopped using APR services. The APR developers suggest using
+ atexit to ensure this is called. When using APR from a language
+ other than C that has problems with the calling convention, use
+ apr_terminate2() instead.
+
+
+
+Set up an application with normalized argc, argv (and optionally env) in
+order to deal with platform-specific oddities, such as Win32 services,
+code pages and signals. This must be the first function called for any
+APR program.
+@param argc Pointer to the argc that may be corrected
+@param argv Pointer to the argv that may be corrected
+@param env Pointer to the env that may be corrected, may be NULL
+@remark See apr_initialize if this is a library consumer of apr.
+Otherwise, this call is identical to apr_initialize, and must be closed
+with a call to apr_terminate at the end of program execution.
+
+
+
+Finding offsets of elements within structures.
+Taken from the X code... they've sweated portability of this stuff
+so we don't have to. Sigh...
+@param p_type pointer type name
+@param field data field within the structure pointed to
+@return offset
+
+Finding offsets of elements within structures.
+@param s_type structure type name
+@param field data field within the structure
+@return offset
+
+Alignment macros
+
+Default alignment
+String and memory functions
+
+Properly quote a value as a string in the C preprocessor
+Helper macro for APR_STRINGIFY
+@}
+@defgroup apr_library Library initialization and termination
+@{
+
+Setup any APR internal data structures. This MUST be the first function
+called for any APR library.
+@remark See apr_app_initialize if this is an application, rather than
+a library consumer of apr.
+
+
+
+@defgroup apr_general Miscellaneous library routines
+@ingroup APR
+This is collection of oddballs that didn't fit anywhere else,
+and might move to more appropriate headers with the release
+of APR 1.0.
+@{
+
+FALSE
+TRUE
+a space
+a carrige return
+a line feed
+a tab
+signal numbers typedef
+
+
+ @file apr_pools.h
+ @brief APR memory allocation
+
+ Resource allocation routines...
+
+ designed so that we don't have to keep track of EVERYTHING so that
+ it can be explicitly freed later (a fundamentally unsound strategy ---
+ particularly in the presence of die()).
+
+ Instead, we maintain pools, and allocate items (both memory and I/O
+ handlers) from the pools --- currently there are two, one for per
+ transaction info, and one for config info. When a transaction is over,
+ we can delete everything in the per-transaction apr_pool_t without fear,
+ and without thinking too hard about it either.
+
+@file apr_general.h
+This is collection of oddballs that didn't fit anywhere else,
+and might move to more appropriate headers with the release
+of APR 1.0.
+@brief APR Miscellaneous library routines
+
+
+
+Return a human readable string describing the specified error.
+@param statcode The error code the get a string for.
+@param buf A buffer to hold the error string.
+@param bufsize Size of the buffer to hold the string.
+
+
+
+@defgroup apr_errno Error Codes
+@ingroup APR
+@{
+
+Type for specifying an error or status code.
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container for SvnClient.PropertyList
+
+
+
+ Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list
+
+
+ Gets or sets a boolean indicating whether the paths changed in the revision should be provided
+
+
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container of SvnClient.Info
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container of 's Diff command
+
+
+
+ Extended Parameter container of
+
+
+
+ If Force is not set then this operation will fail if any path contains locally modified
+and/or unversioned items. If Force is set such items will be deleted.
+
+
+ Extended Parameter container of and
+
+
+
+Set @a *dest to a natively-encoded C string from utf8 string @a src;
+ * allocate @a *dest in @a pool.
+
+
+
+Set @a *dest to a natively-encoded C string from utf8 stringbuf @a src;
+ * allocate @a *dest in @a pool.
+
+
+
+Return a fuzzily native-encoded C string from utf8 C string @a src,
+ * allocated in @a pool. A fuzzy recoding leaves all 7-bit ascii
+ * characters the same, and substitutes "?\\XXX" for others, where XXX
+ * is the unsigned decimal code for that character.
+ *
+ * This function cannot error; it is guaranteed to return something.
+ * First it will recode as described above and then attempt to convert
+ * the (new) 7-bit UTF-8 string to native encoding. If that fails, it
+ * will return the raw fuzzily recoded string, which may or may not be
+ * meaningful in the client's locale, but is (presumably) better than
+ * nothing.
+ *
+ * ### Notes:
+ *
+ * Improvement is possible, even imminent. The original problem was
+ * that if you converted a UTF-8 string (say, a log message) into a
+ * locale that couldn't represent all the characters, you'd just get a
+ * static placeholder saying "[unconvertible log message]". Then
+ * Justin Erenkrantz pointed out how on platforms that didn't support
+ * conversion at all, "svn log" would still fail completely when it
+ * encountered unconvertible data.
+ *
+ * Now for both cases, the caller can at least fall back on this
+ * function, which converts the message as best it can, substituting
+ * "?\\XXX" escape codes for the non-ascii characters.
+ *
+ * Ultimately, some callers may prefer the iconv "//TRANSLIT" option,
+ * so when we can detect that at configure time, things will change.
+ * Also, this should (?) be moved to apr/apu eventually.
+ *
+ * See http://subversion.tigris.org/issues/show_bug.cgi?id=807 for
+ * details.
+
+
+
+Like svn_utf_cstring_from_utf8_ex2() but with @a convset_key which is
+ * ignored.
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+Set @a *dest to a @a topage encoded C string from utf8 encoded C string
+ * @a src; allocate @a *dest in @a pool.
+ *
+ * @since New in 1.4.
+
+
+
+Set @a *dest to a natively-encoded C string from utf8 C string @a src;
+ * allocate @a *dest in @a pool.
+
+
+
+Set @a *dest to a natively-encoded string from utf8 string @a src;
+ * allocate @a *dest in @a pool.
+
+
+
+Set @a *dest to a natively-encoded stringbuf from utf8 stringbuf @a src;
+ * allocate @a *dest in @a pool.
+
+
+
+Like svn_utf_cstring_to_utf8_ex2() but with @a convset_key which is
+ * ignored.
+ *
+ * @deprecated Provided for backward compatibility with the 1.3 API.
+
+
+
+Set @a *dest to a utf8 encoded C string from @a frompage encoded C
+ * string @a src; allocate @a *dest in @a pool.
+ *
+ * @since New in 1.4.
+
+
+
+Set @a *dest to a utf8-encoded C string from native C string @a src;
+ * allocate @a *dest in @a pool.
+
+
+
+Set @a *dest to a utf8-encoded string from native string @a src; allocate
+ * @a *dest in @a pool.
+
+
+
+Set @a *dest to a utf8-encoded stringbuf from native stringbuf @a src;
+ * allocate @a *dest in @a pool.
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2004, 2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_utf.h
+ @brief UTF-8 conversion routines
+ Whenever a conversion routine cannot convert to or from UTF-8, the
+ error returned has code @c APR_EINVAL.
+
+@defgroup APR_Util APR Utility Functions
+@{
+
+ APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
+ so that all public symbols are exported.
+
+ APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
+ to provide static linkage when the dynamic library may be unavailable.
+
+ APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
+ including the APR-UTIL public headers, to import and link the symbols from
+ the dynamic APR-UTIL library and assure appropriate indirection and calling
+ conventions at compile time.
+
+@}
+
+
+ Attempt to load @a libname, returning it in @a dso.
+
+ If @a libname cannot be loaded set @a dso to NULL and return
+ @c SVN_NO_ERROR.
+
+ @note Due to pool lifetime issues DSOs are all loaded into a global
+ pool, so you must be certain that there is a bounded number of
+ them that will ever be loaded by the system, otherwise you will
+ leak memory.
+
+ @since New in 1.4.
+
+
+
+ Initialize the DSO loading routines.
+
+ @note This should be called prior to the creation of any pool that
+ is passed to a function that comes from a DSO, otherwise you
+ risk having the DSO unloaded before all pool cleanup callbacks
+ that live in the DSO have been executed. If it is not called
+ prior to @c svn_dso_load being used for the first time there
+ will be a best effort attempt made to initialize the subsystem,
+ but it will not be entirely thread safe and it risks running
+ into the previously mentioned problems with DSO unloading and
+ pool cleanup callbacks.
+
+ Calls svn_dso_initialize2(void) upon error aborts.
+
+ @deprecated Provided for backwards compatibility with the 1.5 API.
+
+ @since New in 1.4.
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2006, 2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_dso.h
+ @brief DSO loading routines
+
+
+
+ Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list
+
+
+ Gets or sets a boolean indicating whether the paths changed in the revision should be provided
+
+
+
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of
+
+
+
+ Tries to parse a single SvnExternalItem
+
+
+ Tries to parse a single SvnExternalItem
+
+
+ Writes the value to the specified
+
+
+ Creates a string containing the external in string format. Optionally preferring formats compatible with older clients
+
+
+ Creates a string containing the external in string format. Preferring formats compatible with older clients
+
+
+ Gets the absolute or relative url of the external (What to insert)
+
+
+ Gets the target path of the external (Where to place the external)
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of 's Changed method
+
+
+
+ Extended Parameter container of 's CreateRepository method
+
+
+
+ If @a allow_unver_obstructions is true then the update tolerates
+existing unversioned items that obstruct added paths from @a URL
+
+Only obstructions of the same type (file or dir) as the added item are
+tolerated. The text of obstructing files is left as-is, effectively
+treating it as a user modification after the update. Working
+properties of obstructing items are set equal to the base properties.
+If AllowUnversionedObstructions is false then the update will abort
+if there are any unversioned obstructing items.
+
+
+
+ The revision to update to; None by default
+
+Revision must be of kind Number, Head or Date. If Revision
+does not meet these requirements, Updated returns the error
+SVN_ERR_CLIENT_BAD_REVISION.
+
+
+
+ Gets or sets a value indicating whether to ignore externals
+definitions as part of this operation.
+
+
+
+Gets or sets whether in addition to updating paths also the
+sticky ambient depth value must be set to depth
+
+
+
+ Gets or sets the depth of the update
+
+ If Depth is Infinity, update fully recursively. Else if it
+is Immediates or Files, update each target and its file
+entries, but not its subdirectories. Else if Empty, update
+exactly each target, nonrecursively (essentially, update the
+target's properties).
+ If Depth is Unknown, take the working depth from the specified paths
+
+
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of
+
+
+
+ Gets or sets a boolean indicating whether the paths changed in the revision should be provided
+ Defaults to true
+
+
+ Extended Parameter container of 's ChangeInfo command
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of 's GetRevisionPropertyList
+
+
+
+ Extended parameter container for Cleanup
+
+
+
+ Extended Parameter container of 's GetRevisionProperty
+
+
+
+ Extended Parameter container of 's Property method
+
+
+
+ Gets or sets a value indicating how to translate line endings ( = no translation
+
+
+ Gets or sets a directory to receive all file versions
+ The directory to place the versions in or null to only delegate the files to the event handler
+
+
+ Gets or sets the blame range as
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of 's RecoverRepository method
+
+
+
+Adds the certificate @a cert to the list of trusted certificates in
+@a ssl_ctx that will be used for verification.
+See also @a serf_ssl_load_cert_file.
+
+
+
+Load a CA certificate file from a path @a file_path. If the file was loaded
+and parsed correctly, a certificate @a cert will be created and returned.
+This certificate object will be alloced in @a pool.
+
+
+
+Export a certificate to base64-encoded, zero-terminated string.
+The returned string is allocated in @a pool. Returns NULL on failure.
+
+
+
+Extract the fields of the certificate in a table with keys (sha1, notBefore,
+notAfter). The returned table will be allocated in @a pool.
+
+
+
+Extract the fields of the subject in a table with keys (E, CN, OU, O, L,
+ST and C). The returned table will be allocated in @a pool.
+
+
+
+Extract the fields of the issuer in a table with keys (E, CN, OU, O, L,
+ST and C). The returned table will be allocated in @a pool.
+
+
+
+Return the depth of the certificate.
+
+
+
+Use the default root CA certificates as included with the OpenSSL library.
+
+
+
+Set a callback to override the default SSL server certificate validation
+algorithm.
+
+
+
+ Iterates over all headers of the message and invokes the callback
+ function with header key and value. Stop iterating when no more
+ headers are available or when the callback function returned a
+ non-0 value.
+
+ @param headers_bucket headers to iterate over
+ @param func callback routine to invoke for every header in the bucket
+ @param baton baton to pass on each invocation to func
+
+
+
+@param baton opaque baton as passed to @see serf_bucket_headers_do
+@param key The header key from this iteration through the table
+@param value The header value from this iteration through the table
+
+
+
+ Set, extended: fine grained copy control of header and value.
+
+ Set the specified @a header, with length @a header_size with the
+ @a value, and length @a value_size, into the bucket. The header will
+ be copied if @a header_copy is set, and the value is copied if
+ @a value_copy is set. If the values are not copied, then they should
+ remain in scope at least as long as the bucket.
+
+ If @a headers_bucket already contains a header with the same name
+ as @a header, then append @a value to the existing value,
+ separating with a comma (as per RFC 2616, section 4.2). In this
+ case, the new value must be allocated and the header re-used, so
+ behave as if @a value_copy were true and @a header_copy false.
+
+
+
+ Set, no copies.
+
+ Set the specified @a header and @a value into the bucket, without
+ copying either attribute. Both attributes should remain in scope at
+ least as long as the bucket.
+
+ @note In the case where a header already exists this will result
+ in a reallocation and copy, @see serf_bucket_headers_setn.
+
+
+
+ Set, copies: header and value copied.
+
+ Copy the specified @a header and @a value into the bucket, using space
+ from this bucket's allocator.
+
+
+
+ Set, default: value copied.
+
+ Set the specified @a header within the bucket, copying the @a value
+ into space from this bucket's allocator. The header is NOT copied,
+ so it should remain in scope at least as long as the bucket.
+
+
+
+Equivalent to serf_bucket_simple_create, except that the bucket takes
+ownership of a private copy of the data.
+
+
+
+Transform @a bucket in-place into an aggregate bucket.
+
+
+Advise the response @a bucket that this was from a HEAD request and
+that it should not expect to see a response body.
+
+
+
+Get the headers bucket for @a response.
+
+
+
+ Wait for the HTTP headers to be processed for a @a response.
+
+ If the headers are available, APR_SUCCESS is returned.
+ If the headers aren't available, APR_EAGAIN is returned.
+
+
+
+Return the Status-Line information, if available. This function
+works like other bucket read functions: it may return APR_EAGAIN or
+APR_EOF to signal the state of the bucket for reading. A return
+value of APR_SUCCESS will always indicate that status line
+information was returned; for other return values the caller must
+check the version field in @a sline. A value of 0 means that the
+data is not (yet) present.
+
+
+
+Sets the root url of the remote host. If this request contains a relative
+url, it will be prefixed with the root url to form an absolute url.
+@a bucket is the request bucket. @a root_url is the absolute url of the
+root of the remote host, without the closing '/'.
+
+
+
+@file serf_bucket_types.h
+@brief serf-supported bucket types
+
+
+
+@defgroup APR_Util APR Utility Functions
+@{
+
+ APU_DECLARE_EXPORT is defined when building the APR-UTIL dynamic library,
+ so that all public symbols are exported.
+
+ APU_DECLARE_STATIC is defined when including the APR-UTIL public headers,
+ to provide static linkage when the dynamic library may be unavailable.
+
+ APU_DECLARE_STATIC and APU_DECLARE_EXPORT are left undefined when
+ including the APR-UTIL public headers, to import and link the symbols from
+ the dynamic APR-UTIL library and assure appropriate indirection and calling
+ conventions at compile time.
+
+@}
+
+
+ Gets or sets a boolean indication whether to retrieve all revision properties
+ Default value: false
+
+
+ Gets the list of properties to retrieve. Only SVN 1.5+ repositories allow adding custom properties to this list
+ This list defaults to the author, date, logmessage properties. Clear the list to retrieve no properties,
+or set RetrieveAllProperties to true to retrieve all properties.
+
+
+
+ Gets or sets the base uri to which relative Uri's are relative
+
+
+ Gets or sets a boolean indicating whether the merged revisions should be fetched instead of the node changes
+
+
+ Gets or sets a boolean indicating whether only the history of this exact node should be fetched (Aka stop on copying)
+ If @a StrictNodeHistory is set, copy history (if any exists) will
+not be traversed while harvesting revision logs for each target.
+
+
+ Gets or sets a boolean indicating whether the paths changed in the revision should be provided
+
+
+ Gets or sets the limit on the number of log items fetched
+
+
+ Gets or sets the range specified by - wrapped as a
+ New code should either use and or
+
+
+ Gets the revision in which the Url's are evaluated (Aka peg revision)
+
+
+ Initializes a new instance with the specified range
+
+
+ Initializes a new instance with default properties
+
+
+ Extended Parameter container of SvnClient.Log
+
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_types.h
+ @brief Subversion's data types
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_opt.h
+ @brief Option and argument parsing for Subversion command lines
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2006 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_string.h
+ @brief Counted-length strings for Subversion, plus some C string goodies.
+
+ There are two string datatypes: @c svn_string_t and @c svn_stringbuf_t.
+ The former is a simple pointer/length pair useful for passing around
+ strings (or arbitrary bytes) with a counted length. @c svn_stringbuf_t is
+ buffered to enable efficient appending of strings without an allocation
+ and copy for each append operation.
+
+ @c svn_string_t contains a const char * for its data, so it is
+ most appropriate for constant data and for functions which expect constant,
+ counted data. Functions should generally use const @c svn_string_t
+ * as their parameter to indicate they are expecting a constant,
+ counted string.
+
+ @c svn_stringbuf_t uses a plain char * for its data, so it is
+ most appropriate for modifiable data.
+
+ Invariants
+
+ 1. Null termination:
+
+ Both structures maintain a significant invariant:
+
+ s->data[s->len] == '\\0'
+
+ The functions defined within this header file will maintain
+ the invariant (which does imply that memory is
+ allocated/defined as @c len+1 bytes). If code outside of the
+ @c svn_string.h functions manually builds these structures,
+ then they must enforce this invariant.
+
+ Note that an @c svn_string(buf)_t may contain binary data,
+ which means that strlen(s->data) does not have to equal @c
+ s->len. The NULL terminator is provided to make it easier to
+ pass @c s->data to C string interfaces.
+
+
+ 2. Non-NULL input:
+
+ All the functions assume their input data is non-NULL,
+ unless otherwise documented, and may seg fault if passed
+ NULL. The input data may *contain* null bytes, of course, just
+ the data pointer itself must not be NULL.
+
+ Memory allocation
+
+ All the functions make a deep copy of all input data, and never store
+ a pointer to the original input data.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2004, 2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_error.h
+ @brief Common exception handling for Subversion.
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_ra.h
+ @brief Repository Access
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2008 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_client.h
+ @brief Subversion's client library
+
+ Requires: The working copy library and repository access library.
+ Provides: Broad wrappers around working copy library functionality.
+ Used By: Client programs.
+
+
+
+ Extended Parameter container for SvnClient.Blame
+
+
+
+ Extended Parameter container of 's CreateRepository method
+
+
+
+ Gets the of the command
+
+
+ Extended Parameter container of
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container for SvnClient.ListChangeList
+
+
+
+ Extended Parameter container of 's Write method
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container of
+
+
+
+ Extended Parameter container of
+
+
+
+ Factory function to create a new SvnDeltaNode instance for the specified file
+
+
+ Factory function to creates a new SvnDeltaNode instance for the specified directory
+
+
+ Called when a delta run is aborted
+
+
+ Called when a delta run is complete
+
+
+ Called to specify that information on a file won't be provided (e.g. Authorization)
+
+
+ Called to close a directory opened with or
+
+
+ Called to change a property on a file
+
+
+ Called when a file is about to receive content changes
+ The actual changes are not passed to this function, but are streamed to the target
+specified by the property of the
+
+
+ Raised when a file is about to receive content changes
+ The actual changes are not passed to this event, but are streamed to the target
+specified by the property of the
+
+
+ Called to open a file receiving changes
+
+
+ Called instead of when a new file is added to a directory
+
+
+ Called to specify that information on a directory won't be provided (e.g. Authorization)
+
+
+ Called to close a directory opened with or
+
+
+ Called to change a property on a directory
+
+
+ Called to open a directory receiving changes
+
+
+ Called instead of OnDirectoryOpen when a new directory is added
+
+
+ Called when an entry (directory or file) is removed from a directory
+
+
+ Called before the first directory operations
+
+
+ Called before open root to specify the target settings
+
+
+ The SvnDeltaEditor is a generic receiver of Subversion changes.
+Hook events on this class or override methods on descendants of this class to
+receive changes
+
+
+ Raised when is not null and completes its processing
+
+
+ Gets or sets the that receives the actual differences
+after this event returns
+
+
+ Called when a delta window is ready for processing
+
+
+ Creates a new instance to transform
+, into while optionally verifying
+ if is true and
+verification data is available.
+
+
+ Called after the last delta window was successfully received
+
+
+ Called when a new delta window is ready for processing
+
+
+ Called before the first invocation to allow initializing
+
+
+ Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use
+ After this method is called all properties are either stored managed, or are no longer readable
+
+
+ Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use
+ After this method is called all properties are either stored managed, or are no longer readable
+
+
+ Gets a instance for the current hook request
+
+
+ Extended Parameter container of
+
+
+
+ Gets or sets the AllowObsstructions value
+
+ If AllowObstructions is TRUE then the update tolerates
+existing unversioned items that obstruct added paths from @a URL. Only
+obstructions of the same type (file or dir) as the added item are
+tolerated. The text of obstructing files is left as-is, effectively
+treating it as a user modification after the update. Working
+properties of obstructing items are set equal to the base properties.
+ If AllowObstructions is FALSE then the update will abort
+if there are any unversioned obstructing items
+
+
+
+
+ Gets or sets the revision to load. Defaults to the peg revision or Head
+
+
+ Extended Parameter container of
+
+
+
+ Gets the list of changelist-names
+
+
+ Extended Parameter container for SvnClient.DiffSummary
+
+
+
+ Console based SslClientCertificatePassword implementation
+
+
+ Console based SslClientCertificate implementation
+
+
+ Console based SslServerTrust implementation
+
+
+ Console based UserNamePasswordHandler implementation
+
+
+ Console based UserNameHandler implementation
+
+
+ Subversion CryptoApi Ssl Trust handler
+
+
+ Subversion SslClientCertificatePassword file backend using Windows CryptoStore (managed representation)
+
+
+ Subversion SslClientCertificatePassword file backend (managed representation)
+
+
+ Subversion SslClientCertificate file backend (managed representation)
+
+
+ Subversion SslServerTrust file backend (managed representation)
+
+
+ Subversion UserNameHandler file backend using Windows CryptoStore (managed representation)
+ Should be added after
+
+
+ Subversion UserNamePasswordHandler file backend (managed representation)
+
+
+ Subversion UserNameHandler file backend (managed representation)
+
+
+ Simple credential handler to provide a static credential
+ When set implements a and
+instance over the specified credential instance
+
+
+ Gets a list of subversion cached credentials of the specified type
+ The type of credentials to retrieve
+ This list only contains credentials cached by Subversion; not by external authentication stores
+
+
+ Adds all default console handlers
+
+
+ Adds all default subversion-configuration-based handlers
+
+
+ Removes all currently registered providers and caching data
+
+
+ Clears the in-memory authentication cache of this client
+
+
+ Copies the in-memory cache from the specified client to this client; merging and overwriting existing credentials
+
+
+ Retrieves an authorization baton allocated in the specified pool; containing the current authorization settings
+ Retrieves an authorization baton allocated in the specified pool; containing the current authorization settings
+
+
+ Container for all subversion authentication settings on a client
+
+
+ The password to authorize with
+
+
+ Text version of the certificate
+
+
+ Issuer value of the certificate
+
+
+ Text valid-until value of the certificate
+
+
+ Text valid-from value of the certificate
+
+
+ Fingerprint name of the certificate
+
+
+ Common name of the certificate
+
+
+ The username to authorize with
+
+
+ The password to authorize with
+
+
+ The username to authorize with
+
+
+ Default username; can be NULL
+
+
+ If realm is non-null, maybe use it in the prompt string
+
+
+ If MaySave is false, the auth system does not allow the credentials
+to be saved (to disk). A prompt function shall not ask the user if the
+credentials shall be saved if may_save is FALSE. For example, a GUI client
+with a remember password checkbox would grey out the checkbox if may_save
+is false
+
+
+ Deletes the externally cached credentials
+ Does /not/ delete in memory credentials. You should call ClearAuthenticationCache() to clear the in memory cache
+
+
+ Gets a boolean indicating whether the credentials were deleted since creating this instance
+
+
+ Gets the Uri part of the Realm string
+
+
+ Gets the realm of the cached item
+
+
+ Gets the type of the cached item
+
+
+ SharpSvn configuration loader exception
+
+
+ SharpSvn SvnClient exception
+
+
+ Gets the root cause of the exception; commonly the most
+
+
+ Gets the raw subversion error code casted to a
+
+
+ Gets the operating system error code when there is one
+(Only valid if SvnErrorCategory returns )
+
+
+
+ Gets the raw subversion error code
+
+
+ Writes the content of the specified path to a stream directly from a repository
+
+
+ Writes the content of the specified path to a stream directly from a repository
+ Writes the content of the specified path to a stream directly from a repository
+
+
+ Gets the specified revision property directly from the repository
+
+
+ Gets the specified revision property directly from the repository
+
+
+ Gets the specified revision property directly from the repository
+
+
+ Gets a revision property directly from a repository
+ Gets the specified revision property directly from the repository
+
+
+ Equivalent to svnlook changed
+
+
+ Gets the changed paths directly from a repository
+ Equivalent to svnlook changed
+
+
+ Equivalent to svnlook changed
+
+
+ Gets the changed paths directly from a repository
+ Equivalent to svnlook changed
+
+
+ Gets the change information (author, date, log, paths, etc.) of a change in a repository
+
+
+ Gets the change information of a change directly from a repository
+ Gets the change information (author, date, log, paths, etc.) of the last change in a repository
+
+
+ Gets the change information (author, date, log, paths, etc.) of a change in a repository
+
+
+ Gets the change information of a change directly from a repository
+ Gets the change information (author, date, log, paths, etc.) of the last change in a repository
+
+
+ Initializes a new instance with default properties
+
+
+
+Managed wrapper of some of the most common svnlook functions
+
+
+At this time this class is a limited subset of svnlook functionality and
+is experimental
+
+
+
+ Initializes a new SvnLookOrigin instance for a transaction in repositoryPath
+
+
+ Initializes a new SvnLookOrigin instance for a specific revision of repositoryPath
+
+
+ Initializes a new SvnLookOrigin
+ Initializes a new SvnLookOrigin instance for the head revision of repositoryPath
+
+
+ Container for the location to use with the commands
+
+
+ Base Extended Parameter container of commands
+
+
+
+ Gets the working copy version (svnversion)
+
+
+ Gets the working copy version (svnversion)
+
+
+ Gets a list of entries contained in the specified working copy path
+ Helper method used by AnkhSVN to detect nested working copies
+ Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry
+structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this
+routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path.
+
+
+
+ Gets a list of entries contained in the specified working copy path
+ Helper method used by AnkhSVN to detect nested working copies
+ Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry
+structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this
+routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path.
+
+
+
+ Enumerates through the list of entries contained in the specified working copy path
+ Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry
+structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this
+routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path.
+
+
+
+ Enumerates through the list of entries contained in the specified working copy path
+ Only the entry structures representing files and SVN_WC_ENTRY_THIS_DIR contain complete information. The entry
+structures representing subdirs have only the `kind' and `state' fields filled in. If you want info on a subdir, you must use this
+routine to open its @a path and read the @c SVN_WC_ENTRY_THIS_DIR structure, or call svn_wc_entry() on its @a path.
+
+
+
+ Gets the text file status of a working copy path
+
+
+ Gets the text file status of a working copy path
+
+
+ In-Place Upgrades a repository to a later version
+
+ NOTE: This functionality is provided as a convenience for
+administrators wishing to make use of new Subversion functionality
+without a potentially costly full repository dump/load. As such,
+the operation performs only the minimum amount of work needed to
+accomplish this while maintaining the integrity of the repository.
+It does *not* guarantee the most optimized repository state as a
+dump and subsequent load would.
+
+
+
+ In-Place Upgrades a repository to a later version
+ In-Place Upgrades a repository to a later version
+
+ NOTE: This functionality is provided as a convenience for
+administrators wishing to make use of new Subversion functionality
+without a potentially costly full repository dump/load. As such,
+the operation performs only the minimum amount of work needed to
+accomplish this while maintaining the integrity of the repository.
+It does *not* guarantee the most optimized repository state as a
+dump and subsequent load would.
+
+
+
+ Dumps a repository to a file (svnadmin dump)
+
+
+ Dumps a repository to a file (svnadmin dump)
+ Dumps a repository to a file (svnadmin dump)
+
+
+ Loads a repository from a file (svnadmin load)
+
+
+ Loads a repository from a file (svnadmin load)
+ Loads a repository from a file (svnadmin load)
+
+
+ Recovers the repository at the specified local path
+
+
+ Recovers the repository at the specified local path
+
+
+ Deletes the repository at the specified local path
+
+
+ Deletes the repository at the specified local path
+
+
+ Creates a default repository at the specified local path
+
+
+ Creates a default repository at the specified local path
+
+
+ Helper which allows splitting file:/// uri's in the repository root and the file within
+
+
+ Initializes a new instance with default properties
+
+
+
+Managed wrapper of some of the most common repository management functions.
+
+
+At this time this class is just included to enable a standalone test framework
+over the SvnClient api; without depending on external tools)
+
+
+
+ Raises the event
+
+
+
+Raised on conflict. The event is first
+raised on the object and
+then on the
+
+
+ Base class of all arguments which allow handling conflicts
+
+
+
+ Gets a list of 'extra' revision properties to set on commit
+
+
+ Gets or sets the logmessage applied to the commit
+
+
+ Applies the and raises the event
+
+
+ Raised just before committing to allow modifying the log message
+
+
+ Base class of all arguments which allow committing
+
+
+
+ Adds error categories to the list of errors not to throw exceptions for
+
+
+ Adds an error category to the list of errors not to throw exceptions for
+
+
+ Adds error codes to the list of errors not to throw exceptions for
+
+
+ Adds an error code to the list of errors not to throw exceptions for
+
+
+ Gets a collection of warnings issued by the last command invocation
+
+
+
+Gets the last exception thrown by a Subversion api command to which this argument was provided
+
+
+
+
+Gets or sets a boolean indicating whether the call must throw an error if the operation is cancelled
+ is true and the returnvalue false if the operation was canceled.
+(The property is set to the cancel exception). Defaults to true
+
+
+
+
+Gets or sets a boolean indicating whether the call must throw an error if a non fatal error occurs.
+(E.g. locking or updating an external failed). Defaults to false
+
+
+
+
+Gets or sets a boolean indicating whether the call must throw an error if an error occurs.
+If an exception would occur, the method returns false and the property
+is set to the exception which would have been throw. Defaults to true.
+
+
+
+ Gets the of the command
+
+
+ Called when handling a
+
+
+ Raises the event
+
+
+ Raises the event
+
+
+ Raises the event
+
+
+ Raised to notify errors from an command
+
+
+ Raised to notify changes by an in-progress command
+
+
+ Raised to notify of progress by an in-progress command
+
+
+ Raised to allow canceling an in-progress command
+
+
+ Base class of all arguments
+
+
+
+ Gets all revision properties on a a specific revision (svn proplist --revision)
+
+
+ Gets all revision properties on a a specific revision (svn proplist --revision)
+ Gets all revision properties on a a specific revision (svn proplist --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision)
+
+
+ Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Gets the Uuid of a Path, or if path is not versioned
+ true if successfull, otherwise false
+
+
+ Gets the Uuid of a Uri, or if path is not versioned
+ true if successfull, otherwise false
+
+
+ Gets the repository root from the specified path
+ The repository root or null if the uri is not a working copy path
+ SharpSvn makes sure the uri ends in a '/'
+
+
+ Gets the repository root from the specified uri or path
+ Gets the repository root from the specified uri
+ The repository root or null if the uri is not a repository uri
+ SharpSvn makes sure the uri ends in a '/'
+
+
+ Gets the repository Uri of a path, or null if path is not versioned
+ See also
+
+
+ Replays the specified revisions on the specified target to the editory
+
+
+ Replays the specified revisions on the specified target to the editor
+ Replays the specified revisions on the specified target to the editor
+
+
+ Gets a list of versions of the specified file
+ This function allows access to the raw data used to create a Blame report
+
+
+ Gets a lists of versions of the specified file
+ Gets a list of versions of the specified file
+ This function allows access to the raw data used to create a Blame report
+
+
+ Lists the versions of the specified file
+ This function allows access to the raw data used to create a Blame report
+
+
+ Lists the versions of the specified file
+ Lists the versions of the specified file
+ This function allows access to the raw data used to create a Blame report
+
+
+ Checks whether the repository of the specified target has the specified capabilities
+
+
+ Checks whether the repository of the specified target has the specified capabilities
+ Checks whether the repository of the specified target has the specified capabilities
+
+
+ Retrieve the content of specified files or URLs with revision and author information per-line (svn blame)
+
+
+ Retrieve the content of specified files or URLs with revision and author information per-line (svn blame)
+
+
+ Streamingly retrieve the content of specified files or URLs with revision and author information per-line (svn blame)
+
+
+ Streamingly retrieve the content of specified files or URLs with revision and author information per-line (svn blame)
+ Streamingly retrieve the content of specified files or URLs with revision and author information per-line (svn blame)
+
+
+ Retrieves a list of previously merged revisions from the specified source
+
+
+ Retrieves a list of previously merged revisions from the specified source
+
+
+ Retrieves previously merged revisions from the specified source
+
+
+ Retrieves a list of previously merged revisions from the specified source
+ Retrieves previously merged revisions from the specified source
+
+
+ Retrieves a list of revisions of source that are available for merging
+
+
+ Retrieves a list of revisions of source that are available for merging
+
+
+ Retrieves revisions of source that are available for merging
+
+
+ Retrieves a list of revisions of source that are available for merging
+ Retrieves revisions of source that are available for merging
+
+
+ Gets the merges which are applied on the specified target
+
+
+ Gets the merges which are applied on the specified target (svn mergeinfo)
+ Gets the merges which are applied on the specified target
+
+
+ Gets a list of Uri's which might be valid merge sources
+ The list contains copy-from locations and previous merge locations
+
+
+ Gets a list of Uri's which might be valid merge sources (svn mergeinfo)
+ Gets a list of Uri's which might be valid merge sources
+ The list contains copy-from locations and previous merge locations
+
+
+ Gets the contents of the specified changelist below a specified directory (svn changelist)
+
+
+ Gets the contents of the specified changelist below a specified directory (svn changelist)
+ Gets the contents of the specified changelist below a specified directory (svn changelist)
+
+
+ Streamingly gets the contents of the specified changelist below a specified directory (svn changelist)
+
+
+ Streamingly gets the contents of the specified changelist below a specified directory (svn changelist)
+ Streamingly gets the contents of the specified changelist below a specified directory (svn changelist)
+
+
+ Deassociate the specified path(s) from the specified changelist (svn changelist)
+
+
+ Deassociate the specified path(s) from the specified changelist (svn changelist)
+
+
+ Deassociate the specified path(s) from the specified changelist (svn changelist)
+
+
+ Deassociate the specified path(s) from the specified changelist (svn changelist)
+ Deassociate the specified path(s) from the specified changelist (svn changelist)
+
+
+ Associate the specified path(s) with the specified changelist (svn changelist)
+
+
+ Associate the specified path(s) with the specified changelist (svn changelist)
+
+
+ Associate the specified path(s) with the specified changelist (svn changelist)
+
+
+ Associate the specified path(s) with the specified changelist (svn changelist)
+ Associate the specified path(s) with the specified changelist (svn changelist)
+
+
+ Streamingly retrieves the differences between two revisions or paths (svn diff --summarize)
+ Subversion limitation: Currently only works over Uri targets
+
+
+ Retrieves the differences between two revisions or paths (svn diff --summarize)
+ Streamingly retrieves the differences between two revisions or paths (svn diff --summarize)
+ Subversion limitation: Currently only works over Uri targets
+
+
+ Streamingly retrieves the differences between two revisions or paths (svn diff --summarize)
+ Subversion limitation: Currently only works over Uri targets
+
+
+ Streamingly retrieves the differences between two revisions or paths (svn diff --summarize)
+ Streamingly retrieves the differences between two revisions or paths (svn diff --summarize)
+ Subversion limitation: Currently only works over Uri targets
+
+
+ Retrieves the differences between two revisions or paths (svn diff)
+
+
+ Retrieves the differences between two revisions or paths (svn diff)
+
+
+ Retrieves the differences between two revisions or paths (svn diff)
+
+
+ Retrieves the differences between two revisions or paths (svn diff)
+ Retrieves the differences between two revisions or paths (svn diff)
+
+
+ Perform a reintegration merge of source into targetPath
+
+
+ Perform a reintegration merge of source into targetPath
+ Perform a reintegration merge of source into targetPath
+
+
+ Merges the changes in the specified revisions from source to targetPath (svn merge)
+
+
+ Merges the changes in the specified revisions from source to targetPath (svn merge)
+
+
+ Merges the changes in the specified revisions from source to targetPath (svn merge)
+
+
+ Merges the changes in the specified revisions from source to targetPath (svn merge)
+ Merges the changes in the specified revisions from source to targetPath (svn merge)
+
+
+
+Merges the changes from to into
+
+
+ Merges the differences between two sources to a working copy path (svn merge)
+
+Merges the changes from to into
+
+
+ Gets all revision properties on a a specific revision (svn proplist --revision)
+
+
+ Gets all revision properties on a a specific revision (svn proplist --revision)
+ Gets all revision properties on a a specific revision (svn proplist --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+ Gets the value of a revision property on files or dirs in a specific revision (svn propget --revision)
+
+
+ Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision)
+
+
+ Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision)
+ Deletes the value of a revision property on files, dirs in a specific revision(svn propdel --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+ Sets the value of a revision property on files, dirs in a specific revision (svn propset --revision)
+
+
+ Gets all properties on files or dirs (svn proplist)
+
+
+ Gets all properties on files or dirs (svn proplist)
+ Gets all properties on files or dirs (svn proplist)
+
+
+ Streamingly lists all properties on files or dirs (svn proplist)
+
+
+ Streamingly lists all properties on files or dirs (svn proplist)
+ Streamingly lists all properties on files or dirs (svn proplist)
+
+
+ Tries to get a property from the specified path (svn propget)
+ Eats all (non-argument) exceptions
+ True if the property is fetched, otherwise false
+ Equivalent to GetProperty with 's ThrowOnError set to false
+
+
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Gets the specified property from the specfied path
+ true if property is set, otherwise false
+ path is not a valid workingcopy path
+
+
+ Retrieves the value of a property on files, dirs, or revisions (svn propget)
+ Gets the specified property from the specfied path
+ true if property is set, otherwise false
+ path is not a valid workingcopy path
+
+
+ Removes the specified property from the specfied path
+
+
+ Removes the specified property from the specfied path
+
+
+ Removes the specified property from the specfied path
+
+
+ Deletes a property from files, dirs (svn propdel)
+ Removes the specified property from the specfied path
+
+
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Set the value of a property on files, dirs (svn propset)
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ Set the value of a property on files, dirs (svn propset)
+ Sets the specified property on the specfied path to value
+ Use to remove an existing property
+
+
+ UnlockURLs (svn unlock)
+
+
+ UnlockURLs (svn unlock)
+
+
+ UnlockURLs (svn unlock)
+
+
+ UnlockURLs (svn unlock)
+ UnlockURLs (svn unlock)
+
+
+ Unlock working copy paths (svn unlock)
+
+
+ Unlock working copy paths (svn unlock)
+
+
+ Unlock working copy paths (svn unlock)
+
+
+ Unlock working copy paths (svn unlock)
+ Unlock working copy paths (svn unlock)
+
+
+ LockURLs in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ LockURLs in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ LockURLs in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ LockURLs in the repository, so that no other user can commit changes to them (svn lock)
+ LockURLs in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock)
+ Lock working copy paths in the repository, so that no other user can commit changes to them (svn lock)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in repository, remembering history (svn move)
+ Move and/or rename something in repository, remembering history (svn move)
+
+
+ Move and/or rename something in working copy, remembering history (svn move)
+
+
+ Move and/or rename something in working copy, remembering history (svn move)
+
+
+ Move and/or rename something in working copy, remembering history (svn move)
+
+
+ Move and/or rename something in working copy, remembering history (svn move)
+ Move and/or rename something in working copy, remembering history (svn move)
+
+
+ Duplicate something in repository, remembering history (svn copy)
+ Can be called with either a list of , or .
+All members must be of the same type.
+
+
+ Duplicate something in repository, remembering history (svn copy)
+
+
+ Duplicate something in repository, remembering history (svn copy)
+ Can be called with either a list of , or .
+All members must be of the same type.
+
+
+ Duplicate something in repository, remembering history (svn copy)
+
+
+ Duplicate something in repository, remembering history (svn copy)
+ Can be called with either a list of , or .
+All members must be of the same type.
+
+
+ Duplicate something in repository, remembering history (svn copy)
+
+
+ Duplicate something in repository, remembering history (svn copy)
+ Can be called with either a list of , or .
+All members must be of the same type.
+
+
+ Duplicate something in repository, remembering history (svn copy)
+
+
+ Duplicate something in working copy, remembering history (svn copy)
+ Can be called with either a list of , or .
+All members must be of the same type.
+
+
+ Duplicate something in working copy, remembering history (svn copy)
+ Can be called with either a list of , or .
+All members must be of the same type.
+
+
+ Duplicate something in working copy, remembering history (svn copy)
+ Can be called with either a list of , or .
+All members must be of the same type.
+
+
+ Duplicate something in working copy, remembering history (svn copy)
+ Duplicate something in working copy, remembering history (svn copy)
+
+
+ Cleans up the specified path, removing all workingcopy locks left behind by crashed clients
+ true if the operation succeeded; false if it did not
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+
+
+ Recursively clean up the working copy, removing locks, resuming unfinished operations, etc.(svn cleanup)
+ Cleans up the specified path, removing all workingcopy locks left behind by crashed clients
+ Operation failed
+ Parameters invalid
+
+
+ Remove 'conflicted' state on a working copy file or directory using the specified choice
+
+
+ Remove 'conflicted' state on a working copy file or directory using the specified choice
+
+
+ Remove 'conflicted' state on a working copy file or directory using the specified choice
+ Remove 'conflicted' state on a working copy file or directory using the specified choice
+ Calls with SvnAccept.Merged
+
+
+ Restore pristine working copy file (undo most local edits) (svn revert)
+
+
+ Restore pristine working copy file (undo most local edits) (svn revert)
+
+
+ Restore pristine working copy file (undo most local edits) (svn revert)
+
+
+ Restore pristine working copy file (undo most local edits) (svn revert)
+ Restore pristine working copy file (undo most local edits) (svn revert)
+
+
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Send changes from your working copy to the repository (svn commit)
+ Send changes from your working copy to the repository (svn commit)
+
+
+ Importing as the subversion api does; without creating a working directory
+
+
+ Importing as the subversion api does; without creating a working directory
+
+
+ Importing as the subversion api does; without creating a working directory
+
+
+ Commit an unversioned file or tree into the repository (svn import)
+ Importing as the subversion api does; without creating a working directory
+
+
+ Performs a working copy import to the specified Uri,
+by importing the root remotely, checking that out and then adding the files locally
+ Implemented as an Add follwed by an obstructed checkout
+
+
+ Performs a working copy import to the specified Uri,
+by importing the root remotely, checking that out and then adding the files locally
+ Implemented as an Add follwed by an obstructed checkout
+
+
+ Performs a working copy import to the specified Uri,
+by importing the root remotely, checking that out and then adding the files locally
+ Implemented as an Add follwed by an obstructed checkout
+
+
+ Commit an unversioned file or tree into the repository (svn import followed by svn checkout)
+ Performs a working copy import to the specified Uri,
+by importing the root remotely, checking that out and then adding the files locally
+ Implemented as an Add follwed by an obstructed checkout
+
+
+ Remove files and directories from version control at the repository (svn delete|remove)
+
+
+ Remove files and directories from version control at the repository (svn delete|remove)
+
+
+ Remove files and directories from version control at the repository (svn delete|remove)
+
+
+ Remove files and directories from version control at the repository (svn delete|remove)
+
+
+ Remove files and directories from version control at the repository (svn delete|remove)
+
+
+ Remove files and directories from version control at the repository (svn delete|remove)
+ Remove files and directories from version control at the repository (svn delete|remove)
+
+
+ Remove files and directories from version control, scheduling (svn delete|remove)
+
+
+ Remove files and directories from version control, scheduling (svn delete|remove)
+
+
+ Remove files and directories from version control, scheduling (svn delete|remove)
+
+
+ Remove files and directories from version control, scheduling (svn delete|remove)
+ Remove files and directories from version control, scheduling (svn delete|remove)
+
+
+ Create a new directory under version control at the repository (svn mkdir)
+
+
+ Create a new directory under version control at the repository (svn mkdir)
+
+
+ Create a new directory under version control at the repository (svn mkdir)
+
+
+ Create a new directory under version control at the repository (svn mkdir)
+
+
+ Create a new directory under version control at the repository (svn mkdir)
+ Create a new directory under version control at the repository (svn mkdir)
+
+
+ Create a new directory under version control, scheduling (svn mkdir)
+
+
+ Create a new directory under version control, scheduling (svn mkdir)
+
+
+ Create a new directory under version control, scheduling (svn mkdir)
+
+
+ Create a new directory under version control, scheduling (svn mkdir)
+ Create a new directory under version control, scheduling (svn mkdir)
+
+
+ Gets information about the specified target
+
+
+ Gets information about the specified target
+
+
+ Gets information about the specified target
+
+
+ Streamingly retrieves information about a local or remote item (svn info)
+ Gets information about the specified target
+
+
+ Streamingly lists directory entries in the repository. (svn list)
+
+
+ Gets a list of directory entries in the repository. (svn list)
+ Streamingly lists directory entries in the repository. (svn list)
+
+
+ Streamingly lists directory entries in the repository. (svn list)
+
+
+ Streamingly lists directory entries in the repository. (svn list)
+ Streamingly lists directory entries in the repository. (svn list)
+
+
+ Writes the content of specified files or URLs to a stream. (svn cat)
+
+
+ Writes the content of specified files or URLs to a stream. (svn cat)
+ Writes the content of specified files or URLs to a stream. (svn cat)
+
+
+ Gets log messages of the specified target
+
+
+ Gets log messages of the specified target
+
+
+ Gets log messages of the specified target
+
+
+ Gets log messages of the specified target
+
+
+ Gets log messages of the specified target
+
+
+ Retrieve the log messages for a set of revision(s) and/or file(s). (svn log)
+ Gets log messages of the specified target
+
+
+ Gets log messages of the specified target path
+
+
+ Gets log messages of the specified target path
+
+
+ Gets log messages of the specified target
+ A pegrevision applied on the target overrides one set on the args object
+
+
+ Gets log messages of the specified target
+
+
+ Gets log messages of the specified target
+
+
+ Streamingly retrieve the log messages for a set of revision(s) and/or file(s). (svn log)
+ Gets log messages of the specified target
+
+
+ Gets a list of status data for the specified path
+
+
+ Recursively gets a list of 'interesting' status data for the specified path
+
+
+ Gets status data for the specified path
+
+
+ Retrieve the status of working copy files and directories (svn status)
+ Recursively gets 'interesting' status data for the specified path
+
+
+ Adds the specified path
+ true if the operation succeeded; false if it did not
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+
+
+ Adds the specified path
+ Operation failed
+ Parameters invalid
+
+
+ Put files and directories under version control, scheduling them for addition to repository.
+They will be added in next commit(svn add)
+ Recursively adds the specified path
+ Operation failed
+ Parameters invalid
+
+
+ Update the working copy to a different repository (svn switch --relocate)
+
+
+ Update the working copy to a different repository (svn switch --relocate)
+ Update the working copy to a different repository (svn switch --relocate)
+
+
+ Switches a path recursively to the specified target
+ Operation failed
+ Parameters invalid
+
+
+ Switches a path recursively to the specified target
+ Operation failed
+ Parameters invalid
+
+
+ Switches a path recursively to the specified target
+ Operation failed
+ Parameters invalid
+
+
+ Update the working copy to a different URL (svn switch)
+ Switches a path recursively to the specified target
+ Operation failed
+ Parameters invalid
+
+
+ Exports the specified target to the specified path
+ Subversion optimizes this call if you specify a workingcopy file instead of an url
+
+
+ Exports the specified target to the specified path
+ Subversion optimizes this call if you specify a workingcopy file instead of an url
+
+
+ Recursively exports the specified target to the specified path
+ Subversion optimizes this call if you specify a workingcopy file instead of an url
+
+
+ Create an unversioned copy of a tree (svn export)
+ Recursively exports the specified target to the specified path
+ Subversion optimizes this call if you specify a workingcopy file instead of an url
+
+
+ Updates the specified paths to the specified revision
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+ true if the operation succeeded; false if it did not
+
+
+ Updates the specified paths to the specified revision
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+ true if the operation succeeded; false if it did not
+
+
+ Recursively updates the specified paths to the latest (HEAD) revision
+ Operation failed
+ Parameters invalid
+
+
+ Recursively updates the specified paths to the latest (HEAD) revision
+ Operation failed
+ Parameters invalid
+
+
+ Recursively updates the specified path to the latest (HEAD) revision
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+
+
+ Recursively updates the specified path
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+
+
+ Recursively updates the specified path to the latest (HEAD) revision
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+
+
+ Bring changes from the repository into the working copy (svn update)
+ Recursively updates the specified path to the latest (HEAD) revision
+ Operation failed
+ Parameters invalid
+
+
+ Performs a checkout of to to the specified param
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+ true if the operation succeeded; false if it did not
+
+
+ Performs a checkout of to to the specified param
+ Operation failed and args.ThrowOnError = true
+ Parameters invalid
+ true if the operation succeeded; false if it did not
+
+
+ Performs a recursive checkout of to
+ Operation failed
+ Parameters invalid
+
+
+ Check out a working copy from a repository. (svn checkout)
+ Performs a recursive checkout of to
+ Operation failed
+ Parameters invalid
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+ Raises the event.
+
+
+
+Raised just before a command is executed. This allows a listener
+to cleanup before a new command is started
+
+
+
+
+Raised when a subversion exception occurs.
+Set to true to cancel
+throwing the exception
+
+
+
+
+Raised on conflict. The event is first
+raised on the object and
+then on the
+
+
+
+Raised on progress. The event is first
+raised on the object and
+then on the
+
+
+
+Raised on notifications. The event is first
+raised on the object and
+then on the
+
+
+
+Raised on progress. The event is first
+raised on the object and
+then on the
+
+
+
+Raised to allow canceling operations. The event is first
+raised on the object and
+then on the
+
+
+ Gets the instance of this
+
+
+
+Gets the name of the subversion administrative directories. Most commonly ".svn"
+
+
+An internal implementation of a setter is available on this property. Users should read
+the subversion implementation of svn_wc_set_adm_dir before invoking the setter of this property
+via reflection
+
+
+
+ Enables the subversion localization engine. (Costs +- 400 KByte ram/language used and slows error handling within the subversion engine)
+ By default the subversion layer uses english messages for everything. After this method is called all messages are routed via
+the managed resource handler
+
+
+ Adds the specified client name to web requests' UserAgent string
+ The name is filtered to be unique and conformant for the webrequest. Clients should use only alphanumerical ascii characters
+
+
+ Gets the version of the SharpSvn library
+
+
+ Gets the version number of SharpSvn's encapsulated subversion library
+
+
+ Initializes a new instance with default properties
+
+
+ Subversion client instance; main entrance to the Subversion Client api
+
+
+
+ Gets the the applies to;
+null if it applies to a revision property
+
+
+ Gets or sets a boolean indicating whether to always use the subversion integrated diff library
+instead of the user configured diff tools
+ The default value of this property is true; to allow parsing the output of the diff library
+ true if subversions internal diff must be used, otherwise false
+
+
+ Gets or sets a boolean indicating whether to enable the SharpPlink handler when no other valid
+handler for svn+ssh:// is registered
+ The default value of this property is true; this matches the behaviour of TortoiseSvn
+ true if enabling SharpPlink on the first repository request, otherwise false
+
+
+ Gets or sets a boolean indicating whether to load the svn mimetypes file when calling Add or Import the first time
+ The default value of this property is true; this matches the behaviour of the svn commandline client
+ true if loading the mimetypes file on the initial import, otherwise false
+
+
+ Gets or sets a boolean indicating whether commits will fail if no log message is provided
+ The default value of this property is true
+
+
+ Gets the file contents of the current version as readable stream (Only valid in EventHandler)
+ Not in the EventHandler
+ The stream will be closed when the eventhandler returns. It is not seekabel but you can reset the stream to position 0
+
+
+ Gets the file contents of the current version as readable stream (Only valid in EventHandler)
+ Not in the EventHandler
+ The stream will be closed when the eventhandler returns. It is not seekabel but you can reset the stream to position 0
+
+
+ Write the file contents to the specified file/stream (Only valid in EventHandler)
+ Not in the EventHandler
+
+
+ Write the file contents to the specified file/stream (Only valid in EventHandler)
+ Not in the EventHandler
+
+
+ Write the file contents to the specified file/stream (Only valid in EventHandler)
+ Not in the EventHandler
+
+
+ Write the file contents to the specified file/stream (Only valid in EventHandler)
+ Write the file contents to the specified file/stream (Only valid in EventHandler)
+ Not in the EventHandler
+
+
+ Gets the revision the change is based on
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the raw property status of the node when available
+
+
+ Gets the raw content status of the node when available
+
+
+ Gets a boolean indicating whether the node is a file external
+
+
+ Gets the tree conflict data of this node or null if this node doesn't have a tree conflict
+
+
+ Gets the recorded node type of this node
+
+
+ Gets an object containing detailed workingcopy information of this node
+
+
+ Out of Date: Gets the node kind of the OutOfDate commit
+
+
+ Out of Date: Gets the author of the OutOfDate commit
+
+
+ Out of Date: Last commit date of the item
+
+
+ Out of Date: Last commit version of the item
+
+
+ Gets the out of date status of the item; if true the RemoteUpdate* properties are set
+
+
+ Gets a boolean indicating whether the file is switched in the working copy
+
+
+ Gets a boolean indicating whether the file is copied in the working copy
+ A file or directory can be 'copied' if it's scheduled for addition-with-history
+(or part of a subtree that is scheduled as such.).
+
+
+ Gets a boolean indicating whether the workingcopy is locked
+
+
+ Gets a boolean indicating whether the workingcopy is locked
+
+
+ Property status in working copy
+
+
+ Content status in working copy
+
+
+ The path the notification is about, translated via
+ The property contains the path in normalized format; while returns the exact path from the subversion api
+
+
+ Serves as a hashcode for the specified type
+
+
+ The entry is a intra-repository file external and this is the
+repository root relative path to the file specified in the
+externals definition, otherwise NULL if the entry is not a file
+external.
+
+
+ Gets a boolean indicating whether the node is in a copied state
+(possibly because the entry is a child of a path that is
+scheduled for addition or replacement when the entry itself is
+normal
+
+
+ Gets the node scheduling (add, delete, replace)
+
+
+ Gets the node kind
+
+
+ Gets the repository id as String
+
+
+ Gets the repository id as Guid
+
+
+ The repository Uri including a final '/'
+
+
+ Url in repository, including final '/' if the entry specifies a directory
+
+
+ Base revision
+
+
+ The entries name
+
+
+ Serves as a hashcode for the specified type
+
+
+ Serves as a hashcode for the specified type
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the merge source passed to the SvnClient call
+
+
+ Gets the specified SourceUri or null if the source was a local path
+
+
+ Gets the merge source passed to the SvnClient call
+
+
+ Gets the specified SourceUri or null if the source was a local path
+
+
+ Gets a list of applied merges
+
+
+ ConsiderInheritance is ignored at this time
+
+
+ ConsiderInheritance is ignored at this time
+
+
+ Initializes a new instance of the class with the values from the specified collection
+
+
+ Initializes a new instance of the class with default properties
+
+
+ Serves as a hashcode for the specified type
+
+
+ Creates a SvnRevision from {revision-1:revision}
+
+
+ Gets the nesting level of the logs via merges
+
+
+ Set to true when the following items are merged-child items of this item.
+
+
+ Gets the log origin SharpSvn used for retrieving the logfile
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the list of custom properties retrieved with the log
+ Properties must be listed in SvnLogArgs.RetrieveProperties to be available here
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the node kind of the changed path (Only available when committed to a 1.6+ repository)
+
+
+ Gets the relative uri of the path inside the repository
+ Does not include an initial '/'. Ends with a '/' if is .
+
+
+ Gets the path inside rooted at the repository root (including initial '/')
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the information specified in RetrieveEntries on the args object
+
+
+ Gets lock information if RetrieveLocks is set on the args object
+
+
+ When retrieving a listing using an Uri target: contains the uri from which Path is relative
+ The Base Uri or null when the repository root is not available
+
+
+ When retrieving a listing using an Uri target: contains the repository root
+ The Repository root or null when the repository root is not available
+
+
+ Gets the filename of the item
+
+
+ Gets the origin path of the item
+
+
+ Gets the path of the item
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the author of the last revision of this file
+
+
+ Gets the time of the last change
+
+
+ Gets the last revision in which this node changed
+
+
+ Gets a boolean indicating whether this node has svn properties
+
+
+ Gets the length of the file text or 0 for directories
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets a boolean indicating whether working copy information is available in this instance
+
+
+ Gets information about the current lock on node
+
+
+ Gets the author of the last revision in which node (or one of its descendants) changed
+
+
+ Gets the timestamp of the last revision in which node (or one of its descendants) changed
+
+
+ Gets the last revision in which node (or one of its descendants) changed
+
+
+ Gets the repository uuid or null if not available
+
+
+ Gets the uuid of the repository (if available). Otherwise Guid.Empty
+
+
+ Gets the repository root Uri; ending in a '/'
+ The unmanaged api does not add the '/' at the end, but this makes using hard
+
+
+ Gets the node kind of the specified node
+
+
+ Gets the queried revision
+
+
+ Gets the full Uri of the node
+
+
+ The path the notification is about, translated via
+ The property contains the path in normalized format; while returns the exact path from the subversion api
+
+
+ Gets the path of the file. The local path if requisting WORKING version, otherwise the name of the file
+at the specified version
+
+
+ Serves as a hashcode for the specified type
+
+
+ Serves as a hashcode for the specified type
+
+
+ Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use
+ After this method is called all properties are either stored managed, or are no longer readable
+
+
+ Serves as a hashcode for the specified type
+
+
+ If action is svn_wc_notify_blame_revision, contains a list of revision properties for the specified revision
+
+
+ If action relates to properties, specifies the name of the property.
+
+
+ When @c action is @c svn_wc_notify_merge_begin, and both the left and right sides
+of the merge are from the same URL. In all other cases, it is NULL
+
+
+ When action is svn_wc_notify_changelist_add or name. In all other
+cases, it is NULL
+
+
+ Points to the lock structure received from the repository when
+action is @c svn_wc_notify_locked. For other actions, it is
+NULL.
+
+
+ [[[ The base revision before updating (Not guaranteed compatible with future Subversion versions!)]]]
+
+
+ When action is svn_wc_notify_update_completed, target revision
+of the update, or @c SVN_INVALID_REVNUM if not available; when action is
+c svn_wc_notify_blame_revision, processed revision. In all other cases,
+it is @c SVN_INVALID_REVNUM.
+
+
+ Reflects the addition or removal of a lock token in the working copy.
+
+
+ The type of notification that is occurring about node properties.
+
+
+ The type of notification that is occurring about node content.
+
+
+ Points to an error describing the reason for the failure when
+action is one of the following: @c svn_wc_notify_failed_lock, svn_wc_notify_failed_unlock,
+svn_wc_notify_failed_external. Is @c NULL otherwise.
+
+
+ If MimeType is not null, a boolean indicating whether this mime type is interpreted as binary
+
+
+ If non-NULL, indicates the mime-type of @c path. It is always @c NULL for directories.
+
+
+ Node kind of path/url
+
+
+ Action that describes what happened to path/url
+
+
+ Gets the commandtype of the command responsible for calling the notify
+
+
+ Gets a boolean indicating whether the path is a Uri
+
+
+ The path the notification is about, translated via
+ The property contains the path in normalized format; while returns the exact path from the subversion api
+
+
+ Gets the (relative or absolute uri) Uri the notification is about
+
+
+ The path the notification is about
+ The property contains the path in normalized format; while returns the exact path from the subversion api
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets a boolean indicating whether the Comment was generated by a Generic WebDav client
+
+
+ The path the notification is about, translated via
+ The property contains the path in normalized format; while returns the exact path from the subversion api
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gets the operation creating the tree conflict
+
+
+ Gets the of
+
+
+ Gets the revision of
+
+
+ Gets the relative uri of the path inside the repository
+ Does not include an initial '/'. Ends with a '/' if is .
+
+
+ Serves as a hashcode for the specified type
+
+
+ Serves as a hashcode for the specified type
+
+
+ error message from post-commit hook, or NULL
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the SvnTarget as string
+
+
+ Gets the target name in normalized format
+
+
+ Gets the operational revision
+
+
+ (Optional) The node kind of
+
+
+ (Required) The repository root of
+
+
+ The target specified
+
+
+ (Required) The Uri of . Only differs from target if
+specifies a
+
+
+ Generic encapsulation of a specific revision of a node in subversion
+
+
+ Gets a boolean whether the revision specifies an explicit repository revision
+ Explicit: Is set, doesn't require a workingcopy and is repository wide applyable
+
+
+ Gets a boolean indicating whether the revisionnumber requires a workingcopy to make any sense
+
+
+ Serves as a hashcode for the specified type
+
+
+ Gets the instance managing authentication on behalf of this client
+
+
+ Gets the path to SharpSvn's plink. The path is encoded to be safe for subversion configuration settings
+
+
+ Merges configuration from the specified path into the existing configuration
+
+
+ Loads the standard subversion configuration and ensures the subversion config dir by creating default files
+
+
+ Loads the subversion configuration from the specified path and optionally ensures the path is a subversion config dir by creating default files
+
+
+ Loads the subversion configuration from the specified path
+
+
+ Subversion Client Context wrapper; base class of objects using client context
+
+
+
+ Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use
+ After this method is called all properties are either stored managed, or are no longer readable
+
+
+ Detaches the SvnEventArgs from the unmanaged storage; optionally keeping the property values for later use
+ After this method is called all properties values are stored in managed code
+
+
+ Long path capable version of
+
+
+ Gets the normalized directory name of path (Long path enabled version of , always returning full paths)
+
+
+ Gets the filename of the specified target
+
+
+
+Converts a local relative path to a valid relative Uri
+
+
+
+
+Converts a string from a Uri path to a local path name; unescaping when necessary
+
+
+
+
+Appends the specified path suffix to the given Uri
+
+
+
+
+Checks whether the specified path is an absolute path
+
+
+
+
+Normalizes the Uri to a full absolute Uri
+
+
+
+
+Checks whether normalization is required
+
+ This method does not verify the casing of invariant parts
+
+
+
+Normalizes the path to a full path
+
+ This normalizes drive letters to upper case and hostnames to lowercase to match Subversion 1.6 behavior
+
+
+ Gets a boolean indicating whether at least one of the
+parent paths or the path (file/directory) itself is a working copy.
+
+
+
+ Gets a boolean indicating whether the path could contain a Subversion Working Copy
+ Assumes path is a directory
+
+
+ Gets the pathname exactly like it is on disk
+
+
+ Gets the pathname exactly like it is on disk
+
+
+ Gets the repository Uri of a path, or null if path is not versioned
+
+
+ Gets the error category of the SvnException
+
+
+ @copyright
+ ====================================================================
+ Copyright (c) 2000-2009 CollabNet. All rights reserved.
+
+ This software is licensed as described in the file COPYING, which
+ you should have received as part of this distribution. The terms
+ are also available at http://subversion.tigris.org/license-1.html.
+ If newer versions of this license are posted there, you may use a
+ newer version instead, at your option.
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision
+ history and logs, available at http://subversion.tigris.org/.
+ ====================================================================
+ @endcopyright
+
+ @file svn_error_codes.h
+ @brief Subversion error codes.
+
+Collection of Subversion error code values, located within the
+ * APR user error space.
+
+
+@since New in 1.6.
+
+
+@since New in 1.6.
+
+
+@since New in 1.6.
+
+
+@since New in 1.6.
+
+
+@since New in 1.6.
+
+
+@since New in 1.6.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.1.
+
+
+@since New in 1.6.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.2.
+
+
+@since New in 1.1.
+
+
+@since New in 1.3
+
+
+@since New in 1.1.
+
+
+@since New in 1.1.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.6
+
+
+@since New in 1.5
+
+
+@since New in 1.3
+
+
+@since New in 1.2.
+
+
+@deprecated To improve consistency between ra layers, this error code
+ is replaced in ra_{neon|serf} by SVN_ERR_FS_NOT_FOUND.
+ Slated for removal in the next major release.
+
+
+@deprecated To improve consistency between ra layers, this error code
+ is replaced by SVN_ERR_BAD_CONFIG_VALUE.
+ Slated for removal in the next major release.
+
+
+@since New in 1.6.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.2.
+
+
+@since New in 1.5.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.6.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.2.
+ *
+ * This is analogous to SVN_ERR_REPOS_UNSUPPORTED_VERSION. To avoid
+ * confusion with "versions" (i.e., releases) of Subversion, we've
+ * started calling this the "format" number instead. The old
+ * SVN_ERR_REPOS_UNSUPPORTED_VERSION error predates this and so
+ * retains its name.
+
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.2.
+
+
+@since New in 1.1.
+
+
+@since New in 1.6.
+
+
+@since New in 1.6.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.5.
+
+
+@since New in 1.3.
+
+
+@since New in 1.3.
+
+
+@since New in 1.2.
+
+
+@deprecated Unused, slated for removal in the next major release.
+
+
+@deprecated Unused, slated for removal in the next major release.
+
+
+@deprecated Unused, slated for removal in the next major release.
+
+
+@deprecated Unused, slated for removal in the next major release.
+
+
+@deprecated Unused, slated for removal in the next major release.
+
+
+@deprecated Unused, slated for removal in the next major release.
+
+
+@deprecated Unused, slated for removal in the next major release.
+
+
+@since New in 1.6.
+
+
+@since New in 1.5.
+ *
+ * Note that there was an unused slot sitting here at
+ * SVN_ERR_BAD_CATEGORY_START + 5, so error codes after this aren't
+ * necessarily "New in 1.5" just because they come later.
+
+
+
+ Ignore all whitespace characters
+
+
+ Ignore changes in sequences of whitespace characters, treating each
+sequence of whitespace characters as a single space
+
+
+ Ignore no whitespace
+
+
+ Attempting to delete object
+
+
+ Attempting to add object
+
+
+ Attempting to change text or props
+
+
+ object is unversioned
+
+
+ object is unknown or missing
+
+
+ object is already added or schedule-add
+
+
+ object is already schedule-delete
+
+
+ another object is in the way
+
+
+ local edits are already present
+
+
+ tree conflict (on a dir)
+
+
+ property conflict (on a file or dir)
+
+
+ textual conflict (on a file)
+
+
+ Choose the 'merged file'. The result file of the automatic merging; possibly with local edits
+
+
+ Choose local version on all conflicts; further use auto-merged
+
+
+ Choose their on all conflicts; further use auto-merged
+
+
+ Choose the local file
+
+
+ Choose the incoming file
+
+
+ Choose the base file
+
+
+ Don't resolve the conflict now. Let subversion mark the path
+'conflicted', so user can run 'svn resolved' later
+
+
+ A deleted item
+
+
+ An item with text modifications
+
+
+ An added item
+
+
+ An item with no text modifications
+
+
+ Create a repository in Subversion 1.6 compatible format
+
+
+ Create a repository in Subversion 1.5 compatible format
+
+
+ Create a repository in Subversion 1.4 compatible format
+
+
+ Create a repository in a Subversion 1.0-1.3 compatible format
+
+
+ Create a repository with the latest available format
+
+
+ The fields loaded if no other value is specified
+
+
+ A combination of all the dirent fields at Subversion 1.5
+
+
+ An indication that you are interested in the @c last_author field
+
+
+ An indication that you are interested in the @c time field
+
+
+ An indication that you are interested in the @c created_rev field
+
+
+ An indication that you are interested in the @c has_props field
+
+
+ An indication that you are interested in the @c size field
+
+
+ An indication that you are interested in the Kind field
+
+
+ Slated for replacement (delete + add)
+
+
+ Slated for deletion
+
+
+ Slated for addition
+
+
+ Nothing special here
+
+
+ a directory doesn't contain a complete entries list
+
+
+ an unversioned path populated by an svn:externals property
+
+
+ an unversioned resource is in the way of the versioned resource
+
+
+ is unversioned but configured to be ignored
+
+
+ local mods received conflicting repos mods
+
+
+ local mods received repos mods
+
+
+ text or props have been modified
+
+
+ was deleted and then re-added
+
+
+ scheduled for deletion
+
+
+ under v.c., but is missing
+
+
+ is scheduled for addition
+
+
+ exists, but uninteresting
+
+
+ is not a versioned thing in this wc
+
+
+ does not exist
+
+
+ Zero value. Never used by Subversion
+
+
+
+D + all descendants (full recursion from D). Updates will pull in any
+files or subdirectories not already present; those subdirectories'
+this_dir entries will have depth-infinity. Equivalent to the pre-1.5
+default update behavior.
+
+
+
+
+D + immediate children (D and its entries). Updates will pull in any
+files or subdirectories not already present; those subdirectories'
+this_dir entries will have depth-empty.
+
+
+
+
+D + its file children, but not subdirs. Updates will pull in any files
+not already present, but not subdirectories.
+
+
+
+
+Just the named directory D, no entries. Updates will not pull in any
+files or subdirectories not already present
+
+
+
+ Exclude (remove, whatever) directory D (Currently unused on the client layer)
+
+
+ Depth undetermined or ignored
+
+
+ Attaches to the specified pool
+
+
+ Creates a new root pool
+
+
+ Creates a childpool within the specified parent pool
+
+
+ Gets a boolean indicating whether the path is a file path (and not a Uri)
+
+
+ Gets a small thread-local pool usable for small one shot actions
+ The memory allocated by the pool is only freed after the thread is closed; so use with care
+
+
+ Main class of Subversion api. This class is responsible for loading the unmanaged api
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+