svn_client.h

Go to the documentation of this file.
00001 /**
00002  * @copyright
00003  * ====================================================================
00004  *    Licensed to the Apache Software Foundation (ASF) under one
00005  *    or more contributor license agreements.  See the NOTICE file
00006  *    distributed with this work for additional information
00007  *    regarding copyright ownership.  The ASF licenses this file
00008  *    to you under the Apache License, Version 2.0 (the
00009  *    "License"); you may not use this file except in compliance
00010  *    with the License.  You may obtain a copy of the License at
00011  *
00012  *      http://www.apache.org/licenses/LICENSE-2.0
00013  *
00014  *    Unless required by applicable law or agreed to in writing,
00015  *    software distributed under the License is distributed on an
00016  *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
00017  *    KIND, either express or implied.  See the License for the
00018  *    specific language governing permissions and limitations
00019  *    under the License.
00020  * ====================================================================
00021  * @endcopyright
00022  *
00023  * @file svn_client.h
00024  * @brief Subversion's client library
00025  *
00026  * Requires:  The working copy library and repository access library.
00027  * Provides:  Broad wrappers around working copy library functionality.
00028  * Used By:   Client programs.
00029  */
00030 
00031 #ifndef SVN_CLIENT_H
00032 #define SVN_CLIENT_H
00033 
00034 #include <apr.h>
00035 #include <apr_pools.h>
00036 #include <apr_hash.h>
00037 #include <apr_tables.h>
00038 #include <apr_getopt.h>
00039 #include <apr_file_io.h>
00040 #include <apr_time.h>
00041 
00042 #include "svn_types.h"
00043 #include "svn_string.h"
00044 #include "svn_wc.h"
00045 #include "svn_opt.h"
00046 #include "svn_ra.h"
00047 #include "svn_diff.h"
00048 #include "svn_auth.h"
00049 
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif /* __cplusplus */
00053 
00054 
00055 
00056 /**
00057  * Get libsvn_client version information.
00058  *
00059  * @since New in 1.1.
00060  */
00061 const svn_version_t *
00062 svn_client_version(void);
00063 
00064 /** Client supporting functions
00065  *
00066  * @defgroup clnt_support Client supporting subsystem
00067  *
00068  * @{
00069  */
00070 
00071 
00072 /*** Authentication stuff ***/
00073 
00074 /**  The new authentication system allows the RA layer to "pull"
00075  *   information as needed from libsvn_client.
00076  *
00077  *   @deprecated Replaced by the svn_auth_* functions.
00078  *   @see auth_fns
00079  *
00080  *   @defgroup auth_fns_depr (deprecated) AuthZ client subsystem
00081  *
00082  *   @{
00083  */
00084 
00085 /** Create and return @a *provider, an authentication provider of type
00086  * svn_auth_cred_simple_t that gets information by prompting the user
00087  * with @a prompt_func and @a prompt_baton.  Allocate @a *provider in
00088  * @a pool.
00089  *
00090  * If both #SVN_AUTH_PARAM_DEFAULT_USERNAME and
00091  * #SVN_AUTH_PARAM_DEFAULT_PASSWORD are defined as runtime
00092  * parameters in the @c auth_baton, then @a *provider will return the
00093  * default arguments when svn_auth_first_credentials() is called.  If
00094  * svn_auth_first_credentials() fails, then @a *provider will
00095  * re-prompt @a retry_limit times (via svn_auth_next_credentials()).
00096  * For infinite retries, set @a retry_limit to value less than 0.
00097  *
00098  * @deprecated Provided for backward compatibility with the 1.3 API.
00099  * Use svn_auth_get_simple_prompt_provider() instead.
00100  */
00101 SVN_DEPRECATED
00102 void
00103 svn_client_get_simple_prompt_provider(
00104   svn_auth_provider_object_t **provider,
00105   svn_auth_simple_prompt_func_t prompt_func,
00106   void *prompt_baton,
00107   int retry_limit,
00108   apr_pool_t *pool);
00109 
00110 
00111 /** Create and return @a *provider, an authentication provider of type
00112  * #svn_auth_cred_username_t that gets information by prompting the
00113  * user with @a prompt_func and @a prompt_baton.  Allocate @a *provider
00114  * in @a pool.
00115  *
00116  * If #SVN_AUTH_PARAM_DEFAULT_USERNAME is defined as a runtime
00117  * parameter in the @c auth_baton, then @a *provider will return the
00118  * default argument when svn_auth_first_credentials() is called.  If
00119  * svn_auth_first_credentials() fails, then @a *provider will
00120  * re-prompt @a retry_limit times (via svn_auth_next_credentials()).
00121  * For infinite retries, set @a retry_limit to value less than 0.
00122  *
00123  * @deprecated Provided for backward compatibility with the 1.3 API.
00124  * Use svn_auth_get_username_prompt_provider() instead.
00125  */
00126 SVN_DEPRECATED
00127 void
00128 svn_client_get_username_prompt_provider(
00129   svn_auth_provider_object_t **provider,
00130   svn_auth_username_prompt_func_t prompt_func,
00131   void *prompt_baton,
00132   int retry_limit,
00133   apr_pool_t *pool);
00134 
00135 
00136 /** Create and return @a *provider, an authentication provider of type
00137  * #svn_auth_cred_simple_t that gets/sets information from the user's
00138  * ~/.subversion configuration directory.  Allocate @a *provider in
00139  * @a pool.
00140  *
00141  * If a default username or password is available, @a *provider will
00142  * honor them as well, and return them when
00143  * svn_auth_first_credentials() is called.  (see
00144  * #SVN_AUTH_PARAM_DEFAULT_USERNAME and #SVN_AUTH_PARAM_DEFAULT_PASSWORD).
00145  *
00146  * @deprecated Provided for backward compatibility with the 1.3 API.
00147  * Use svn_auth_get_simple_provider2() instead.
00148  */
00149 SVN_DEPRECATED
00150 void
00151 svn_client_get_simple_provider(svn_auth_provider_object_t **provider,
00152                                apr_pool_t *pool);
00153 
00154 
00155 #if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN) || defined(CTYPESGEN) || defined(SWIG)
00156 /**
00157  * Create and return @a *provider, an authentication provider of type
00158  * #svn_auth_cred_simple_t that gets/sets information from the user's
00159  * ~/.subversion configuration directory.  Allocate @a *provider in
00160  * @a pool.
00161  *
00162  * This is like svn_client_get_simple_provider(), except that, when
00163  * running on Window 2000 or newer (or any other Windows version that
00164  * includes the CryptoAPI), the provider encrypts the password before
00165  * storing it to disk. On earlier versions of Windows, the provider
00166  * does nothing.
00167  *
00168  * @since New in 1.2.
00169  * @note This function is only available on Windows.
00170  *
00171  * @note An administrative password reset may invalidate the account's
00172  * secret key. This function will detect that situation and behave as
00173  * if the password were not cached at all.
00174  *
00175  * @deprecated Provided for backward compatibility with the 1.3 API.
00176  * Use svn_auth_get_windows_simple_provider() instead.
00177  */
00178 SVN_DEPRECATED
00179 void
00180 svn_client_get_windows_simple_provider(svn_auth_provider_object_t **provider,
00181                                        apr_pool_t *pool);
00182 #endif /* WIN32 && !__MINGW32__ || DOXYGEN || CTYPESGEN || SWIG */
00183 
00184 /** Create and return @a *provider, an authentication provider of type
00185  * #svn_auth_cred_username_t that gets/sets information from a user's
00186  * ~/.subversion configuration directory.  Allocate @a *provider in
00187  * @a pool.
00188  *
00189  * If a default username is available, @a *provider will honor it,
00190  * and return it when svn_auth_first_credentials() is called.  (see
00191  * #SVN_AUTH_PARAM_DEFAULT_USERNAME).
00192  *
00193  * @deprecated Provided for backward compatibility with the 1.3 API.
00194  * Use svn_auth_get_username_provider() instead.
00195  */
00196 SVN_DEPRECATED
00197 void
00198 svn_client_get_username_provider(svn_auth_provider_object_t **provider,
00199                                  apr_pool_t *pool);
00200 
00201 
00202 /** Create and return @a *provider, an authentication provider of type
00203  * #svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
00204  *
00205  * @a *provider retrieves its credentials from the configuration
00206  * mechanism.  The returned credential is used to override SSL
00207  * security on an error.
00208  *
00209  * @deprecated Provided for backward compatibility with the 1.3 API.
00210  * Use svn_auth_get_ssl_server_trust_file_provider() instead.
00211  */
00212 SVN_DEPRECATED
00213 void
00214 svn_client_get_ssl_server_trust_file_provider(
00215   svn_auth_provider_object_t **provider,
00216   apr_pool_t *pool);
00217 
00218 
00219 /** Create and return @a *provider, an authentication provider of type
00220  * #svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
00221  *
00222  * @a *provider retrieves its credentials from the configuration
00223  * mechanism.  The returned credential is used to load the appropriate
00224  * client certificate for authentication when requested by a server.
00225  *
00226  * @deprecated Provided for backward compatibility with the 1.3 API.
00227  * Use svn_auth_get_ssl_client_cert_file_provider() instead.
00228  */
00229 SVN_DEPRECATED
00230 void
00231 svn_client_get_ssl_client_cert_file_provider(
00232   svn_auth_provider_object_t **provider,
00233   apr_pool_t *pool);
00234 
00235 
00236 /** Create and return @a *provider, an authentication provider of type
00237  * #svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool.
00238  *
00239  * @a *provider retrieves its credentials from the configuration
00240  * mechanism.  The returned credential is used when a loaded client
00241  * certificate is protected by a passphrase.
00242  *
00243  * @deprecated Provided for backward compatibility with the 1.3 API.
00244  * Use svn_auth_get_ssl_client_cert_pw_file_provider2() instead.
00245  */
00246 SVN_DEPRECATED
00247 void
00248 svn_client_get_ssl_client_cert_pw_file_provider(
00249   svn_auth_provider_object_t **provider,
00250   apr_pool_t *pool);
00251 
00252 
00253 /** Create and return @a *provider, an authentication provider of type
00254  * #svn_auth_cred_ssl_server_trust_t, allocated in @a pool.
00255  *
00256  * @a *provider retrieves its credentials by using the @a prompt_func
00257  * and @a prompt_baton.  The returned credential is used to override
00258  * SSL security on an error.
00259  *
00260  * @deprecated Provided for backward compatibility with the 1.3 API.
00261  * Use svn_auth_get_ssl_server_trust_prompt_provider() instead.
00262  */
00263 SVN_DEPRECATED
00264 void
00265 svn_client_get_ssl_server_trust_prompt_provider(
00266   svn_auth_provider_object_t **provider,
00267   svn_auth_ssl_server_trust_prompt_func_t prompt_func,
00268   void *prompt_baton,
00269   apr_pool_t *pool);
00270 
00271 
00272 /** Create and return @a *provider, an authentication provider of type
00273  * #svn_auth_cred_ssl_client_cert_t, allocated in @a pool.
00274  *
00275  * @a *provider retrieves its credentials by using the @a prompt_func
00276  * and @a prompt_baton.  The returned credential is used to load the
00277  * appropriate client certificate for authentication when requested by
00278  * a server.  The prompt will be retried @a retry_limit times.
00279  * For infinite retries, set @a retry_limit to value less than 0.
00280  *
00281  * @deprecated Provided for backward compatibility with the 1.3 API.
00282  * Use svn_auth_get_ssl_client_cert_prompt_provider() instead.
00283  */
00284 SVN_DEPRECATED
00285 void
00286 svn_client_get_ssl_client_cert_prompt_provider(
00287   svn_auth_provider_object_t **provider,
00288   svn_auth_ssl_client_cert_prompt_func_t prompt_func,
00289   void *prompt_baton,
00290   int retry_limit,
00291   apr_pool_t *pool);
00292 
00293 
00294 /** Create and return @a *provider, an authentication provider of type
00295  * #svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool.
00296  *
00297  * @a *provider retrieves its credentials by using the @a prompt_func
00298  * and @a prompt_baton.  The returned credential is used when a loaded
00299  * client certificate is protected by a passphrase.  The prompt will
00300  * be retried @a retry_limit times. For infinite retries, set @a retry_limit
00301  * to value less than 0.
00302  *
00303  * @deprecated Provided for backward compatibility with the 1.3 API.
00304  * Use svn_auth_get_ssl_client_cert_pw_prompt_provider() instead.
00305  */
00306 SVN_DEPRECATED
00307 void
00308 svn_client_get_ssl_client_cert_pw_prompt_provider(
00309   svn_auth_provider_object_t **provider,
00310   svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func,
00311   void *prompt_baton,
00312   int retry_limit,
00313   apr_pool_t *pool);
00314 
00315 /** @} */
00316 
00317 /**
00318  * Revisions and Peg Revisions
00319  *
00320  * @defgroup clnt_revisions Revisions and Peg Revisions
00321  *
00322  * A brief word on operative and peg revisions.
00323  *
00324  * If the kind of the peg revision is #svn_opt_revision_unspecified, then it
00325  * defaults to #svn_opt_revision_head for URLs and #svn_opt_revision_working
00326  * for local paths.
00327  *
00328  * For deeper insight, please see the
00329  * <a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.pegrevs.html">
00330  * Peg and Operative Revisions</a> section of the Subversion Book.
00331  */
00332 
00333 /**
00334  * Commit operations
00335  *
00336  * @defgroup clnt_commit Client commit subsystem
00337  *
00338  * @{
00339  */
00340 
00341 /** This is a structure which stores a filename and a hash of property
00342  * names and values.
00343  *
00344  * @deprecated Provided for backward compatibility with the 1.4 API.
00345  */
00346 typedef struct svn_client_proplist_item_t
00347 {
00348   /** The name of the node on which these properties are set. */
00349   svn_stringbuf_t *node_name;
00350 
00351   /** A hash of (const char *) property names, and (svn_string_t *) property
00352    * values. */
00353   apr_hash_t *prop_hash;
00354 
00355 } svn_client_proplist_item_t;
00356 
00357 /**
00358  * The callback invoked by svn_client_proplist4().  Each invocation
00359  * provides the regular and/or inherited properties of @a path, which is
00360  * either a working copy path or a URL.  If @a prop_hash is not @c NULL, then
00361  * it maps explicit <tt>const char *</tt> property names to
00362  * <tt>svn_string_t *</tt> explicit property values.  If @a inherited_props
00363  * is not @c NULL, then it is a depth-first ordered array of
00364  * #svn_prop_inherited_item_t * structures representing the
00365  * properties inherited by @a path.  Use @a scratch_pool for all temporary
00366  * allocations.
00367  *
00368  * The #svn_prop_inherited_item_t->path_or_url members of the
00369  * #svn_prop_inherited_item_t * structures in @a inherited_props are
00370  * URLs if @a path is a URL or if @a path is a working copy path but the
00371  * property represented by the structure is above the working copy root (i.e.
00372  * the inherited property is from the cache).  In all other cases the
00373  * #svn_prop_inherited_item_t->path_or_url members are absolute working copy
00374  * paths.
00375  *
00376  * @since New in 1.8.
00377  */
00378 typedef svn_error_t *(*svn_proplist_receiver2_t)(
00379   void *baton,
00380   const char *path,
00381   apr_hash_t *prop_hash,
00382   apr_array_header_t *inherited_props,
00383   apr_pool_t *scratch_pool);
00384 
00385 /**
00386  * Similar to #svn_proplist_receiver2_t, but doesn't return inherited
00387  * properties.
00388  *
00389  * @deprecated Provided for backward compatibility with the 1.7 API.
00390  *
00391  * @since New in 1.5.
00392  */
00393 typedef svn_error_t *(*svn_proplist_receiver_t)(
00394   void *baton,
00395   const char *path,
00396   apr_hash_t *prop_hash,
00397   apr_pool_t *pool);
00398 
00399 /**
00400  * Return a duplicate of @a item, allocated in @a pool. No part of the new
00401  * structure will be shared with @a item.
00402  *
00403  * @since New in 1.3.
00404  *
00405  * @deprecated Provided for backward compatibility with the 1.4 API.
00406  */
00407 SVN_DEPRECATED
00408 svn_client_proplist_item_t *
00409 svn_client_proplist_item_dup(const svn_client_proplist_item_t *item,
00410                              apr_pool_t *pool);
00411 
00412 /** Information about commits passed back to client from this module.
00413  *
00414  * @deprecated Provided for backward compatibility with the 1.2 API.
00415  */
00416 typedef struct svn_client_commit_info_t
00417 {
00418   /** just-committed revision. */
00419   svn_revnum_t revision;
00420 
00421   /** server-side date of the commit. */
00422   const char *date;
00423 
00424   /** author of the commit. */
00425   const char *author;
00426 
00427 } svn_client_commit_info_t;
00428 
00429 
00430 /**
00431  * @name Commit state flags
00432  * @brief State flags for use with the #svn_client_commit_item3_t structure
00433  * (see the note about the namespace for that structure, which also
00434  * applies to these flags).
00435  * @{
00436  */
00437 #define SVN_CLIENT_COMMIT_ITEM_ADD         0x01
00438 #define SVN_CLIENT_COMMIT_ITEM_DELETE      0x02
00439 #define SVN_CLIENT_COMMIT_ITEM_TEXT_MODS   0x04
00440 #define SVN_CLIENT_COMMIT_ITEM_PROP_MODS   0x08
00441 #define SVN_CLIENT_COMMIT_ITEM_IS_COPY     0x10
00442 /** One of the flags for a commit item.  The node has a lock token that
00443  * should be released after a successful commit and, if the node is also
00444  * modified, transferred to the server as part of the commit process.
00445  *
00446  * @since New in 1.2. */
00447 #define SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN  0x20
00448 /** One of the flags for a commit item.  The node is the 'moved here'
00449  * side of a local move.  This is used to check and enforce that the
00450  * other side of the move is also included in the commit.
00451  *
00452  * @since New in 1.8. */
00453 #define SVN_CLIENT_COMMIT_ITEM_MOVED_HERE  0x40
00454 /** @} */
00455 
00456 /** The commit candidate structure.
00457  *
00458  * In order to avoid backwards compatibility problems clients should use
00459  * svn_client_commit_item3_create() to allocate and initialize this
00460  * structure instead of doing so themselves.
00461  *
00462  * @since New in 1.5.
00463  */
00464 typedef struct svn_client_commit_item3_t
00465 {
00466   /* IMPORTANT: If you extend this structure, add new fields to the end. */
00467 
00468   /** absolute working-copy path of item */
00469   const char *path;
00470 
00471   /** node kind (dir, file) */
00472   svn_node_kind_t kind;
00473 
00474   /** commit URL for this item */
00475   const char *url;
00476 
00477   /** revision of textbase */
00478   svn_revnum_t revision;
00479 
00480   /** copyfrom-url or NULL if not a copied item */
00481   const char *copyfrom_url;
00482 
00483   /** copyfrom-rev, valid when copyfrom_url != NULL */
00484   svn_revnum_t copyfrom_rev;
00485 
00486   /** state flags */
00487   apr_byte_t state_flags;
00488 
00489   /** An array of #svn_prop_t *'s, which are incoming changes from
00490    * the repository to WC properties.  These changes are applied
00491    * post-commit.
00492    *
00493    * When adding to this array, allocate the #svn_prop_t and its
00494    * contents in @c incoming_prop_changes->pool, so that it has the
00495    * same lifetime as this data structure.
00496    *
00497    * See http://subversion.tigris.org/issues/show_bug.cgi?id=806 for a
00498    * description of what would happen if the post-commit process
00499    * didn't group these changes together with all other changes to the
00500    * item.
00501    */
00502   apr_array_header_t *incoming_prop_changes;
00503 
00504   /** An array of #svn_prop_t *'s, which are outgoing changes to
00505    * make to properties in the repository.  These extra property
00506    * changes are declared pre-commit, and applied to the repository as
00507    * part of a commit.
00508    *
00509    * When adding to this array, allocate the #svn_prop_t and its
00510    * contents in @c outgoing_prop_changes->pool, so that it has the
00511    * same lifetime as this data structure.
00512    */
00513   apr_array_header_t *outgoing_prop_changes;
00514 
00515   /**
00516    * When processing the commit this contains the relative path for
00517    * the commit session. #NULL until the commit item is preprocessed.
00518    * @since New in 1.7.
00519    */
00520   const char *session_relpath;
00521 
00522   /**
00523    * When committing a move, this contains the absolute path where
00524    * the node was directly moved from. (If an ancestor at the original
00525    * location was moved then it points to where the node itself was
00526    * moved from; not the original location.)
00527    * @since New in 1.8.
00528    */
00529   const char *moved_from_abspath;
00530 
00531 } svn_client_commit_item3_t;
00532 
00533 /** The commit candidate structure.
00534  *
00535  * @deprecated Provided for backward compatibility with the 1.4 API.
00536  */
00537 typedef struct svn_client_commit_item2_t
00538 {
00539   /** absolute working-copy path of item */
00540   const char *path;
00541 
00542   /** node kind (dir, file) */
00543   svn_node_kind_t kind;
00544 
00545   /** commit URL for this item */
00546   const char *url;
00547 
00548   /** revision of textbase */
00549   svn_revnum_t revision;
00550 
00551   /** copyfrom-url or NULL if not a copied item */
00552   const char *copyfrom_url;
00553 
00554   /** copyfrom-rev, valid when copyfrom_url != NULL */
00555   svn_revnum_t copyfrom_rev;
00556 
00557   /** state flags */
00558   apr_byte_t state_flags;
00559 
00560   /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes
00561    * field.
00562    */
00563   apr_array_header_t *wcprop_changes;
00564 } svn_client_commit_item2_t;
00565 
00566 /** The commit candidate structure.
00567  *
00568  * @deprecated Provided for backward compatibility with the 1.2 API.
00569  */
00570 typedef struct svn_client_commit_item_t
00571 {
00572   /** absolute working-copy path of item */
00573   const char *path;
00574 
00575   /** node kind (dir, file) */
00576   svn_node_kind_t kind;
00577 
00578   /** commit URL for this item */
00579   const char *url;
00580 
00581   /** revision (copyfrom-rev if _IS_COPY) */
00582   svn_revnum_t revision;
00583 
00584   /** copyfrom-url */
00585   const char *copyfrom_url;
00586 
00587   /** state flags */
00588   apr_byte_t state_flags;
00589 
00590   /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes
00591    * field.
00592    */
00593   apr_array_header_t *wcprop_changes;
00594 
00595 } svn_client_commit_item_t;
00596 
00597 /** Return a new commit item object, allocated in @a pool.
00598  *
00599  * In order to avoid backwards compatibility problems, this function
00600  * is used to initialize and allocate the #svn_client_commit_item3_t
00601  * structure rather than doing so explicitly, as the size of this
00602  * structure may change in the future.
00603  *
00604  * @since New in 1.6.
00605  */
00606 svn_client_commit_item3_t *
00607 svn_client_commit_item3_create(apr_pool_t *pool);
00608 
00609 /** Like svn_client_commit_item3_create() but with a stupid "const"
00610  * qualifier on the returned structure, and it returns an error that
00611  * will never happen.
00612  *
00613  * @deprecated Provided for backward compatibility with the 1.5 API.
00614  */
00615 SVN_DEPRECATED
00616 svn_error_t *
00617 svn_client_commit_item_create(const svn_client_commit_item3_t **item,
00618                               apr_pool_t *pool);
00619 
00620 /**
00621  * Return a duplicate of @a item, allocated in @a pool. No part of the
00622  * new structure will be shared with @a item, except for the adm_access
00623  * member.
00624  *
00625  * @since New in 1.5.
00626  */
00627 svn_client_commit_item3_t *
00628 svn_client_commit_item3_dup(const svn_client_commit_item3_t *item,
00629                             apr_pool_t *pool);
00630 
00631 /**
00632  * Return a duplicate of @a item, allocated in @a pool. No part of the new
00633  * structure will be shared with @a item.
00634  *
00635  * @deprecated Provided for backward compatibility with the 1.4 API.
00636  */
00637 SVN_DEPRECATED
00638 svn_client_commit_item2_t *
00639 svn_client_commit_item2_dup(const svn_client_commit_item2_t *item,
00640                             apr_pool_t *pool);
00641 
00642 /** Callback type used by commit-y operations to get a commit log message
00643  * from the caller.
00644  *
00645  * Set @a *log_msg to the log message for the commit, allocated in @a
00646  * pool, or @c NULL if wish to abort the commit process.  Set @a *tmp_file
00647  * to the path of any temporary file which might be holding that log
00648  * message, or @c NULL if no such file exists (though, if @a *log_msg is
00649  * @c NULL, this value is undefined).  The log message MUST be a UTF8
00650  * string with LF line separators.
00651  *
00652  * @a commit_items is a read-only array of #svn_client_commit_item3_t
00653  * structures, which may be fully or only partially filled-in,
00654  * depending on the type of commit operation.
00655  *
00656  * @a baton is provided along with the callback for use by the handler.
00657  *
00658  * All allocations should be performed in @a pool.
00659  *
00660  * @since New in 1.5.
00661  */
00662 typedef svn_error_t *(*svn_client_get_commit_log3_t)(
00663   const char **log_msg,
00664   const char **tmp_file,
00665   const apr_array_header_t *commit_items,
00666   void *baton,
00667   apr_pool_t *pool);
00668 
00669 /** Callback type used by commit-y operations to get a commit log message
00670  * from the caller.
00671  *
00672  * Set @a *log_msg to the log message for the commit, allocated in @a
00673  * pool, or @c NULL if wish to abort the commit process.  Set @a *tmp_file
00674  * to the path of any temporary file which might be holding that log
00675  * message, or @c NULL if no such file exists (though, if @a *log_msg is
00676  * @c NULL, this value is undefined).  The log message MUST be a UTF8
00677  * string with LF line separators.
00678  *
00679  * @a commit_items is a read-only array of #svn_client_commit_item2_t
00680  * structures, which may be fully or only partially filled-in,
00681  * depending on the type of commit operation.
00682  *
00683  * @a baton is provided along with the callback for use by the handler.
00684  *
00685  * All allocations should be performed in @a pool.
00686  *
00687  * @deprecated Provided for backward compatibility with the 1.3 API.
00688  */
00689 typedef svn_error_t *(*svn_client_get_commit_log2_t)(
00690   const char **log_msg,
00691   const char **tmp_file,
00692   const apr_array_header_t *commit_items,
00693   void *baton,
00694   apr_pool_t *pool);
00695 
00696 /** Callback type used by commit-y operations to get a commit log message
00697  * from the caller.
00698  *
00699  * Set @a *log_msg to the log message for the commit, allocated in @a
00700  * pool, or @c NULL if wish to abort the commit process.  Set @a *tmp_file
00701  * to the path of any temporary file which might be holding that log
00702  * message, or @c NULL if no such file exists (though, if @a *log_msg is
00703  * @c NULL, this value is undefined).  The log message MUST be a UTF8
00704  * string with LF line separators.
00705  *
00706  * @a commit_items is a read-only array of #svn_client_commit_item_t
00707  * structures, which may be fully or only partially filled-in,
00708  * depending on the type of commit operation.
00709  *
00710  * @a baton is provided along with the callback for use by the handler.
00711  *
00712  * All allocations should be performed in @a pool.
00713  *
00714  * @deprecated Provided for backward compatibility with the 1.2 API.
00715  */
00716 typedef svn_error_t *(*svn_client_get_commit_log_t)(
00717   const char **log_msg,
00718   const char **tmp_file,
00719   apr_array_header_t *commit_items,
00720   void *baton,
00721   apr_pool_t *pool);
00722 
00723 /** @} */
00724 
00725 /**
00726  * Client blame
00727  *
00728  * @defgroup clnt_blame Client blame functionality
00729  *
00730  * @{
00731  */
00732 
00733 /** Callback type used by svn_client_blame5() to notify the caller
00734  * that line @a line_no of the blamed file was last changed in @a revision
00735  * which has the revision properties @a rev_props, and that the contents were
00736  * @a line.
00737  *
00738  * @a start_revnum and @a end_revnum contain the start and end revision
00739  * number of the entire blame operation, as determined from the repository
00740  * inside svn_client_blame5(). This can be useful for the blame receiver
00741  * to format the blame output.
00742  *
00743  * If svn_client_blame5() was called with @a include_merged_revisions set to
00744  * TRUE, @a merged_revision, @a merged_rev_props and @a merged_path will be
00745  * set, otherwise they will be NULL. @a merged_path will be set to the
00746  * absolute repository path.
00747  *
00748  * All allocations should be performed in @a pool.
00749  *
00750  * @note If there is no blame information for this line, @a revision will be
00751  * invalid and @a rev_props will be NULL. In this case @a local_change
00752  * will be true if the reason there is no blame information is that the line
00753  * was modified locally. In all other cases @a local_change will be false.
00754  *
00755  * @since New in 1.7.
00756  */
00757 typedef svn_error_t *(*svn_client_blame_receiver3_t)(
00758   void *baton,
00759   svn_revnum_t start_revnum,
00760   svn_revnum_t end_revnum,
00761   apr_int64_t line_no,
00762   svn_revnum_t revision,
00763   apr_hash_t *rev_props,
00764   svn_revnum_t merged_revision,
00765   apr_hash_t *merged_rev_props,
00766   const char *merged_path,
00767   const char *line,
00768   svn_boolean_t local_change,
00769   apr_pool_t *pool);
00770 
00771 /**
00772  * Similar to #svn_client_blame_receiver3_t, but with separate author and
00773  * date revision properties instead of all revision properties, and without
00774  * information about local changes.
00775  *
00776  * @deprecated Provided for backward compatibility with the 1.6 API.
00777  *
00778  * @since New in 1.5.
00779  */
00780 typedef svn_error_t *(*svn_client_blame_receiver2_t)(
00781   void *baton,
00782   apr_int64_t line_no,
00783   svn_revnum_t revision,
00784   const char *author,
00785   const char *date,
00786   svn_revnum_t merged_revision,
00787   const char *merged_author,
00788   const char *merged_date,
00789   const char *merged_path,
00790   const char *line,
00791   apr_pool_t *pool);
00792 
00793 /**
00794  * Similar to #svn_client_blame_receiver2_t, but without @a merged_revision,
00795  * @a merged_author, @a merged_date, or @a merged_path members.
00796  *
00797  * @note New in 1.4 is that the line is defined to contain only the line
00798  * content (and no [partial] EOLs; which was undefined in older versions).
00799  * Using this callback with svn_client_blame() or svn_client_blame2()
00800  * will still give you the old behaviour.
00801  *
00802  * @deprecated Provided for backward compatibility with the 1.4 API.
00803  */
00804 typedef svn_error_t *(*svn_client_blame_receiver_t)(
00805   void *baton,
00806   apr_int64_t line_no,
00807   svn_revnum_t revision,
00808   const char *author,
00809   const char *date,
00810   const char *line,
00811   apr_pool_t *pool);
00812 
00813 
00814 /** @} */
00815 
00816 /**
00817  * Client diff
00818  *
00819  * @defgroup clnt_diff Client diff functionality
00820  *
00821  * @{
00822  */
00823 /** The difference type in an svn_diff_summarize_t structure.
00824  *
00825  * @since New in 1.4.
00826  */
00827 typedef enum svn_client_diff_summarize_kind_t
00828 {
00829   /** An item with no text modifications */
00830   svn_client_diff_summarize_kind_normal,
00831 
00832   /** An added item */
00833   svn_client_diff_summarize_kind_added,
00834 
00835   /** An item with text modifications */
00836   svn_client_diff_summarize_kind_modified,
00837 
00838   /** A deleted item */
00839   svn_client_diff_summarize_kind_deleted
00840 } svn_client_diff_summarize_kind_t;
00841 
00842 
00843 /** A struct that describes the diff of an item. Passed to
00844  * #svn_client_diff_summarize_func_t.
00845  *
00846  * @note Fields may be added to the end of this structure in future
00847  * versions.  Therefore, users shouldn't allocate structures of this
00848  * type, to preserve binary compatibility.
00849  *
00850  * @since New in 1.4.
00851  */
00852 typedef struct svn_client_diff_summarize_t
00853 {
00854   /** Path relative to the target.  If the target is a file, path is
00855    * the empty string. */
00856   const char *path;
00857 
00858   /** Change kind */
00859   svn_client_diff_summarize_kind_t summarize_kind;
00860 
00861   /** Properties changed?  For consistency with 'svn status' output,
00862    * this should be false if summarize_kind is _added or _deleted. */
00863   svn_boolean_t prop_changed;
00864 
00865   /** File or dir */
00866   svn_node_kind_t node_kind;
00867 } svn_client_diff_summarize_t;
00868 
00869 /**
00870  * Return a duplicate of @a diff, allocated in @a pool. No part of the new
00871  * structure will be shared with @a diff.
00872  *
00873  * @since New in 1.4.
00874  */
00875 svn_client_diff_summarize_t *
00876 svn_client_diff_summarize_dup(const svn_client_diff_summarize_t *diff,
00877                               apr_pool_t *pool);
00878 
00879 
00880 /** A callback used in svn_client_diff_summarize2() and
00881  * svn_client_diff_summarize_peg2() for reporting a @a diff summary.
00882  *
00883  * All allocations should be performed in @a pool.
00884  *
00885  * @a baton is a closure object; it should be provided by the implementation,
00886  * and passed by the caller.
00887  *
00888  * @since New in 1.4.
00889  */
00890 typedef svn_error_t *(*svn_client_diff_summarize_func_t)(
00891   const svn_client_diff_summarize_t *diff,
00892   void *baton,
00893   apr_pool_t *pool);
00894 
00895 
00896 
00897 /** @} */
00898 
00899 
00900 /**
00901  * Client context
00902  *
00903  * @defgroup clnt_ctx Client context management
00904  *
00905  * @{
00906  */
00907 
00908 /** A client context structure, which holds client specific callbacks,
00909  * batons, serves as a cache for configuration options, and other various
00910  * and sundry things.  In order to avoid backwards compatibility problems
00911  * clients should use svn_client_create_context() to allocate and
00912  * initialize this structure instead of doing so themselves.
00913  */
00914 typedef struct svn_client_ctx_t
00915 {
00916   /** main authentication baton. */
00917   svn_auth_baton_t *auth_baton;
00918 
00919   /** notification callback function.
00920    * This will be called by notify_func2() by default.
00921    * @deprecated Provided for backward compatibility with the 1.1 API.
00922    * Use @c notify_func2 instead. */
00923   svn_wc_notify_func_t notify_func;
00924 
00925   /** notification callback baton for notify_func()
00926    * @deprecated Provided for backward compatibility with the 1.1 API.
00927    * Use @c notify_baton2 instead */
00928   void *notify_baton;
00929 
00930   /** Log message callback function.  NULL means that Subversion
00931     * should try not attempt to fetch a log message.
00932     * @deprecated Provided for backward compatibility with the 1.2 API.
00933     * Use @c log_msg_func2 instead. */
00934   svn_client_get_commit_log_t log_msg_func;
00935 
00936   /** log message callback baton
00937     * @deprecated Provided for backward compatibility with the 1.2 API.
00938     * Use @c log_msg_baton2 instead. */
00939   void *log_msg_baton;
00940 
00941   /** a hash mapping of <tt>const char *</tt> configuration file names to
00942    * #svn_config_t *'s. For example, the '~/.subversion/config' file's
00943    * contents should have the key "config".  May be left unset (or set to
00944    * NULL) to use the built-in default settings and not use any configuration.
00945    */
00946   apr_hash_t *config;
00947 
00948   /** a callback to be used to see if the client wishes to cancel the running
00949    * operation. */
00950   svn_cancel_func_t cancel_func;
00951 
00952   /** a baton to pass to the cancellation callback. */
00953   void *cancel_baton;
00954 
00955   /** notification function, defaulting to a function that forwards
00956    * to notify_func().  If @c NULL, it will not be invoked.
00957    * @since New in 1.2. */
00958   svn_wc_notify_func2_t notify_func2;
00959 
00960   /** notification baton for notify_func2().
00961    * @since New in 1.2. */
00962   void *notify_baton2;
00963 
00964   /** Log message callback function. NULL means that Subversion
00965    *   should try log_msg_func.
00966    * @since New in 1.3. */
00967   svn_client_get_commit_log2_t log_msg_func2;
00968 
00969   /** callback baton for log_msg_func2
00970    * @since New in 1.3. */
00971   void *log_msg_baton2;
00972 
00973   /** Notification callback for network progress information.
00974    * May be NULL if not used.
00975    * @since New in 1.3. */
00976   svn_ra_progress_notify_func_t progress_func;
00977 
00978   /** Callback baton for progress_func.
00979    * @since New in 1.3. */
00980   void *progress_baton;
00981 
00982   /** Log message callback function. NULL means that Subversion
00983    *   should try @c log_msg_func2, then @c log_msg_func.
00984    * @since New in 1.5. */
00985   svn_client_get_commit_log3_t log_msg_func3;
00986 
00987   /** The callback baton for @c log_msg_func3.
00988    * @since New in 1.5. */
00989   void *log_msg_baton3;
00990 
00991   /** MIME types map.
00992    * @since New in 1.5. */
00993   apr_hash_t *mimetypes_map;
00994 
00995   /** Conflict resolution callback and baton, if available.
00996    * @since New in 1.5. */
00997   svn_wc_conflict_resolver_func_t conflict_func;
00998   void *conflict_baton;
00999 
01000   /** Custom client name string, or @c NULL.
01001    * @since New in 1.5. */
01002   const char *client_name;
01003 
01004   /** Conflict resolution callback and baton, if available. NULL means that
01005    * subversion should try @c conflict_func.
01006    * @since New in 1.7. */
01007   svn_wc_conflict_resolver_func2_t conflict_func2;
01008   void *conflict_baton2;
01009 
01010   /** A working copy context for the client operation to use.
01011    * This is initialized by svn_client_create_context() and should never
01012    * be @c NULL.
01013    *
01014    * @since New in 1.7.  */
01015   svn_wc_context_t *wc_ctx;
01016 
01017   /** Total number of bytes transferred over network.
01018    *
01019    * @Since New in 1.9. */
01020   apr_off_t progress;
01021 
01022   /** Check-tunnel callback
01023    *
01024    * If not @c NULL, and open_tunnel_func is also not @c NULL, this
01025    * callback will be invoked to check if open_tunnel_func should be
01026    * used to create a specific tunnel, or if the default tunnel
01027    * implementation (either built-in or configured in the client
01028    * configuration file) should be used instead.
01029    * @since New in 1.9.
01030    */
01031   svn_ra_check_tunnel_func_t check_tunnel_func;
01032 
01033   /** Open-tunnel callback
01034    *
01035    * If not @c NULL, this callback will be invoked to create a tunnel
01036    * for a ra_svn connection that needs one, overriding any tunnel
01037    * definitions in the client config file. This callback is used only
01038    * for ra_svn and ignored by the other RA modules.
01039    * @since New in 1.9.
01040    */
01041   svn_ra_open_tunnel_func_t open_tunnel_func;
01042 
01043   /** The baton used with check_tunnel_func and open_tunnel_func.
01044    * @since New in 1.9.
01045    */
01046   void *tunnel_baton;
01047 } svn_client_ctx_t;
01048 
01049 /** Initialize a client context.
01050  * Set @a *ctx to a client context object, allocated in @a pool, that
01051  * represents a particular instance of an svn client. @a cfg_hash is used
01052  * to initialise the config member of the returned context object and should
01053  * remain valid for the lifetime of the object. @a cfg_hash may be @c NULL,
01054  * in which case it is ignored.
01055  *
01056  * In order to avoid backwards compatibility problems, clients must
01057  * use this function to initialize and allocate the
01058  * #svn_client_ctx_t structure rather than doing so themselves, as
01059  * the size of this structure may change in the future.
01060  *
01061  * The current implementation never returns error, but callers should
01062  * still check for error, for compatibility with future versions.
01063  *
01064  * @since New in 1.8.
01065  */
01066 svn_error_t *
01067 svn_client_create_context2(svn_client_ctx_t **ctx,
01068                            apr_hash_t *cfg_hash,
01069                            apr_pool_t *pool);
01070 
01071 
01072 /** Similar to svn_client_create_context2 but passes a NULL @a cfg_hash.
01073  *
01074  * @deprecated Provided for backward compatibility with the 1.7 API.
01075  */
01076 SVN_DEPRECATED
01077 svn_error_t *
01078 svn_client_create_context(svn_client_ctx_t **ctx,
01079                           apr_pool_t *pool);
01080 
01081 /** @} end group: Client context management */
01082 
01083 /**
01084  * @name Authentication information file names
01085  *
01086  * Names of files that contain authentication information.
01087  *
01088  * These filenames are decided by libsvn_client, since this library
01089  * implements all the auth-protocols;  libsvn_wc does nothing but
01090  * blindly store and retrieve these files from protected areas.
01091  *
01092  * @defgroup clnt_auth_filenames Client authentication file names
01093  * @{
01094  */
01095 #define SVN_CLIENT_AUTH_USERNAME            "username"
01096 #define SVN_CLIENT_AUTH_PASSWORD            "password"
01097 /** @} group end: Authentication information file names */
01098 
01099 /** Client argument processing
01100  *
01101  * @defgroup clnt_cmdline Client command-line processing
01102  *
01103  * @{
01104  */
01105 
01106 /**
01107  * Pull remaining target arguments from @a os into @a *targets_p,
01108  * converting them to UTF-8, followed by targets from @a known_targets
01109  * (which might come from, for example, the "--targets" command line option).
01110  *
01111  * Process each target in one of the following ways.  For a repository-
01112  * relative URL: resolve to a full URL, contacting the repository if
01113  * necessary to do so, and then treat as a full URL.  For a URL: do some
01114  * IRI-to-URI encoding and some auto-escaping, and canonicalize.  For a
01115  * local path: canonicalize case and path separators.
01116  *
01117  * If @a keep_last_origpath_on_truepath_collision is TRUE, and there are
01118  * exactly two targets which both case-canonicalize to the same path, the last
01119  * target will be returned in the original non-case-canonicalized form.
01120  *
01121  * Allocate @a *targets_p and its elements in @a pool.
01122  *
01123  * @a ctx is required for possible repository authentication.
01124  *
01125  * If a path has the same name as a Subversion working copy
01126  * administrative directory, return #SVN_ERR_RESERVED_FILENAME_SPECIFIED;
01127  * if multiple reserved paths are encountered, return a chain of
01128  * errors, all of which are #SVN_ERR_RESERVED_FILENAME_SPECIFIED.  Do
01129  * not return this type of error in a chain with any other type of
01130  * error, and if this is the only type of error encountered, complete
01131  * the operation before returning the error(s).
01132  *
01133  * @since New in 1.7
01134  */
01135 svn_error_t *
01136 svn_client_args_to_target_array2(apr_array_header_t **targets_p,
01137                                  apr_getopt_t *os,
01138                                  const apr_array_header_t *known_targets,
01139                                  svn_client_ctx_t *ctx,
01140                                  svn_boolean_t keep_last_origpath_on_truepath_collision,
01141                                  apr_pool_t *pool);
01142 
01143 /**
01144  * Similar to svn_client_args_to_target_array2() but with
01145  * @a keep_last_origpath_on_truepath_collision always set to FALSE.
01146  *
01147  * @deprecated Provided for backward compatibility with the 1.6 API.
01148  */
01149 SVN_DEPRECATED
01150 svn_error_t *
01151 svn_client_args_to_target_array(apr_array_header_t **targets_p,
01152                                 apr_getopt_t *os,
01153                                 const apr_array_header_t *known_targets,
01154                                 svn_client_ctx_t *ctx,
01155                                 apr_pool_t *pool);
01156 
01157 /** @} group end: Client command-line processing */
01158 
01159 /** @} */
01160 
01161 /**
01162  * Client working copy management functions
01163  *
01164  * @defgroup clnt_wc Client working copy management
01165  *
01166  * @{
01167  */
01168 
01169 /**
01170  * @defgroup clnt_wc_checkout Checkout
01171  *
01172  * @{
01173  */
01174 
01175 
01176 /**
01177  * Checkout a working copy from a repository.
01178  *
01179  * @param[out] result_rev   If non-NULL, the value of the revision checked
01180  *              out from the repository.
01181  * @param[in] URL       The repository URL of the checkout source.
01182  * @param[in] path      The root of the new working copy.
01183  * @param[in] peg_revision  The peg revision.
01184  * @param[in] revision  The operative revision.
01185  * @param[in] depth     The depth of the operation.  If #svn_depth_unknown,
01186  *              then behave as if for #svn_depth_infinity, except in the case
01187  *              of resuming a previous checkout of @a path (i.e., updating),
01188  *              in which case use the depth of the existing working copy.
01189  * @param[in] ignore_externals  If @c TRUE, don't process externals
01190  *              definitions as part of this operation.
01191  * @param[in] allow_unver_obstructions  If @c TRUE, then tolerate existing
01192  *              unversioned items that obstruct incoming paths.  Only
01193  *              obstructions of the same type (file or dir) as the added
01194  *              item are tolerated.  The text of obstructing files is left
01195  *              as-is, effectively treating it as a user modification after
01196  *              the checkout.  Working properties of obstructing items are
01197  *              set equal to the base properties. <br>
01198  *              If @c FALSE, then abort if there are any unversioned
01199  *              obstructing items.
01200  * @param[in] ctx   The standard client context, used for authentication and
01201  *              notification.
01202  * @param[in] pool  Used for any temporary allocation.
01203  *
01204  * @return A pointer to an #svn_error_t of the type (this list is not
01205  *         exhaustive): <br>
01206  *         #SVN_ERR_UNSUPPORTED_FEATURE if @a URL refers to a file rather
01207  *         than a directory; <br>
01208  *         #SVN_ERR_RA_ILLEGAL_URL if @a URL does not exist; <br>
01209  *         #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of
01210  *         #svn_opt_revision_number, #svn_opt_revision_head, or
01211  *         #svn_opt_revision_date. <br>
01212  *         If no error occurred, return #SVN_NO_ERROR.
01213  *
01214  * @since New in 1.5.
01215  *
01216  * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for
01217  *      a discussion of operative and peg revisions.
01218  */
01219 svn_error_t *
01220 svn_client_checkout3(svn_revnum_t *result_rev,
01221                      const char *URL,
01222                      const char *path,
01223                      const svn_opt_revision_t *peg_revision,
01224                      const svn_opt_revision_t *revision,
01225                      svn_depth_t depth,
01226                      svn_boolean_t ignore_externals,
01227                      svn_boolean_t allow_unver_obstructions,
01228                      svn_client_ctx_t *ctx,
01229                      apr_pool_t *pool);
01230 
01231 
01232 /**
01233  * Similar to svn_client_checkout3() but with @a allow_unver_obstructions
01234  * always set to FALSE, and @a depth set according to @a recurse: if
01235  * @a recurse is TRUE, @a depth is #svn_depth_infinity, if @a recurse
01236  * is FALSE, @a depth is #svn_depth_files.
01237  *
01238  * @deprecated Provided for backward compatibility with the 1.4 API.
01239  */
01240 SVN_DEPRECATED
01241 svn_error_t *
01242 svn_client_checkout2(svn_revnum_t *result_rev,
01243                      const char *URL,
01244                      const char *path,
01245                      const svn_opt_revision_t *peg_revision,
01246                      const svn_opt_revision_t *revision,
01247                      svn_boolean_t recurse,
01248                      svn_boolean_t ignore_externals,
01249                      svn_client_ctx_t *ctx,
01250                      apr_pool_t *pool);
01251 
01252 
01253 /**
01254  * Similar to svn_client_checkout2(), but with @a peg_revision
01255  * always set to #svn_opt_revision_unspecified and
01256  * @a ignore_externals always set to FALSE.
01257  *
01258  * @deprecated Provided for backward compatibility with the 1.1 API.
01259  */
01260 SVN_DEPRECATED
01261 svn_error_t *
01262 svn_client_checkout(svn_revnum_t *result_rev,
01263                     const char *URL,
01264                     const char *path,
01265                     const svn_opt_revision_t *revision,
01266                     svn_boolean_t recurse,
01267                     svn_client_ctx_t *ctx,
01268                     apr_pool_t *pool);
01269 /** @} */
01270 
01271 /**
01272  * @defgroup Update Bring a working copy up-to-date with a repository
01273  *
01274  * @{
01275  *
01276  */
01277 
01278 /**
01279  * Update working trees @a paths to @a revision, authenticating with the
01280  * authentication baton cached in @a ctx.  @a paths is an array of const
01281  * char * paths to be updated.  Unversioned paths that are direct children
01282  * of a versioned path will cause an update that attempts to add that path;
01283  * other unversioned paths are skipped.  If @a result_revs is not NULL,
01284  * @a *result_revs will be set to an array of svn_revnum_t with each
01285  * element set to the revision to which @a revision was resolved for the
01286  * corresponding element of @a paths.
01287  *
01288  * @a revision must be of kind #svn_opt_revision_number,
01289  * #svn_opt_revision_head, or #svn_opt_revision_date.  If @a
01290  * revision does not meet these requirements, return the error
01291  * #SVN_ERR_CLIENT_BAD_REVISION.
01292  *
01293  * The paths in @a paths can be from multiple working copies from multiple
01294  * repositories, but even if they all come from the same repository there
01295  * is no guarantee that revision represented by #svn_opt_revision_head
01296  * will remain the same as each path is updated.
01297  *
01298  * If @a ignore_externals is set, don't process externals definitions
01299  * as part of this operation.
01300  *
01301  * If @a depth is #svn_depth_infinity, update fully recursively.
01302  * Else if it is #svn_depth_immediates or #svn_depth_files, update
01303  * each target and its file entries, but not its subdirectories.  Else
01304  * if #svn_depth_empty, update exactly each target, nonrecursively
01305  * (essentially, update the target's properties).
01306  *
01307  * If @a depth is #svn_depth_unknown, take the working depth from
01308  * @a paths and then behave as described above.
01309  *
01310  * If @a depth_is_sticky is set and @a depth is not
01311  * #svn_depth_unknown, then in addition to updating PATHS, also set
01312  * their sticky ambient depth value to @a depth.
01313  *
01314  * If @a allow_unver_obstructions is TRUE then the update tolerates
01315  * existing unversioned items that obstruct added paths.  Only
01316  * obstructions of the same type (file or dir) as the added item are
01317  * tolerated.  The text of obstructing files is left as-is, effectively
01318  * treating it as a user modification after the update.  Working
01319  * properties of obstructing items are set equal to the base properties.
01320  * If @a allow_unver_obstructions is FALSE then the update will abort
01321  * if there are any unversioned obstructing items.
01322  *
01323  * If @a adds_as_modification is TRUE, a local addition at the same path
01324  * as an incoming addition of the same node kind results in a normal node
01325  * with a possible local modification, instead of a tree conflict.
01326  *
01327  * If @a make_parents is TRUE, create any non-existent parent
01328  * directories also by checking them out at depth=empty.
01329  *
01330  * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
01331  * @a ctx->notify_baton2 for each item handled by the update, and also for
01332  * files restored from text-base.  If @a ctx->cancel_func is non-NULL, invoke
01333  * it passing @a ctx->cancel_baton at various places during the update.
01334  *
01335  * Use @a pool for any temporary allocation.
01336  *
01337  *  @todo  Multiple Targets
01338  *  - Up for debate:  an update on multiple targets is *not* atomic.
01339  *  Right now, svn_client_update only takes one path.  What's
01340  *  debatable is whether this should ever change.  On the one hand,
01341  *  it's kind of losing to have the client application loop over
01342  *  targets and call svn_client_update() on each one;  each call to
01343  *  update initializes a whole new repository session (network
01344  *  overhead, etc.)  On the other hand, it's a very simple
01345  *  implementation, and allows for the possibility that different
01346  *  targets may come from different repositories.
01347  *
01348  * @since New in 1.7.
01349  */
01350 svn_error_t *
01351 svn_client_update4(apr_array_header_t **result_revs,
01352                    const apr_array_header_t *paths,
01353                    const svn_opt_revision_t *revision,
01354                    svn_depth_t depth,
01355                    svn_boolean_t depth_is_sticky,
01356                    svn_boolean_t ignore_externals,
01357                    svn_boolean_t allow_unver_obstructions,
01358                    svn_boolean_t adds_as_modification,
01359                    svn_boolean_t make_parents,
01360                    svn_client_ctx_t *ctx,
01361                    apr_pool_t *pool);
01362 
01363 /**
01364  * Similar to svn_client_update4() but with @a make_parents always set
01365  * to FALSE and @a adds_as_modification set to TRUE.
01366  *
01367  * @deprecated Provided for backward compatibility with the 1.6 API.
01368  * @since New in 1.5.
01369  */
01370 SVN_DEPRECATED
01371 svn_error_t *
01372 svn_client_update3(apr_array_header_t **result_revs,
01373                    const apr_array_header_t *paths,
01374                    const svn_opt_revision_t *revision,
01375                    svn_depth_t depth,
01376                    svn_boolean_t depth_is_sticky,
01377                    svn_boolean_t ignore_externals,
01378                    svn_boolean_t allow_unver_obstructions,
01379                    svn_client_ctx_t *ctx,
01380                    apr_pool_t *pool);
01381 
01382 /**
01383  * Similar to svn_client_update3() but with @a allow_unver_obstructions
01384  * always set to FALSE, @a depth_is_sticky to FALSE, and @a depth set
01385  * according to @a recurse: if @a recurse is TRUE, set @a depth to
01386  * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to
01387  * #svn_depth_files.
01388  *
01389  * @deprecated Provided for backward compatibility with the 1.4 API.
01390  */
01391 SVN_DEPRECATED
01392 svn_error_t *
01393 svn_client_update2(apr_array_header_t **result_revs,
01394                    const apr_array_header_t *paths,
01395                    const svn_opt_revision_t *revision,
01396                    svn_boolean_t recurse,
01397                    svn_boolean_t ignore_externals,
01398                    svn_client_ctx_t *ctx,
01399                    apr_pool_t *pool);
01400 
01401 /**
01402  * Similar to svn_client_update2() except that it accepts only a single
01403  * target in @a path, returns a single revision if @a result_rev is
01404  * not NULL, and @a ignore_externals is always set to FALSE.
01405  *
01406  * @deprecated Provided for backward compatibility with the 1.1 API.
01407  */
01408 SVN_DEPRECATED
01409 svn_error_t *
01410 svn_client_update(svn_revnum_t *result_rev,
01411                   const char *path,
01412                   const svn_opt_revision_t *revision,
01413                   svn_boolean_t recurse,
01414                   svn_client_ctx_t *ctx,
01415                   apr_pool_t *pool);
01416 /** @} */
01417 
01418 /**
01419  * @defgroup Switch Switch a working copy to another location.
01420  *
01421  * @{
01422  */
01423 
01424 /**
01425  * Switch an existing working copy directory to a different repository
01426  * location.
01427  *
01428  * This is normally used to switch a working copy directory over to another
01429  * line of development, such as a branch or a tag.  Switching an existing
01430  * working copy directory is more efficient than checking out @a url from
01431  * scratch.
01432  *
01433  * @param[out] result_rev   If non-NULL, the value of the revision to which
01434  *                          the working copy was actually switched.
01435  * @param[in] path      The directory to be switched.  This need not be the
01436  *              root of a working copy.
01437  * @param[in] url       The repository URL to switch to.
01438  * @param[in] peg_revision  The peg revision.
01439  * @param[in] revision  The operative revision.
01440  * @param[in] depth     The depth of the operation.  If #svn_depth_infinity,
01441  *                      switch fully recursively.  Else if #svn_depth_immediates,
01442  *                      switch @a path and its file children (if any), and
01443  *                      switch subdirectories but do not update them.  Else if
01444  *                      #svn_depth_files, switch just file children, ignoring
01445  *                      subdirectories completely.  Else if #svn_depth_empty,
01446  *                      switch just @a path and touch nothing underneath it.
01447  * @param[in] depth_is_sticky   If @c TRUE, and @a depth is not
01448  *              #svn_depth_unknown, then in addition to switching @a path, also
01449  *              set its sticky ambient depth value to @a depth.
01450  * @param[in] ignore_externals  If @c TRUE, don't process externals
01451  *              definitions as part of this operation.
01452  * @param[in] allow_unver_obstructions  If @c TRUE, then tolerate existing
01453  *              unversioned items that obstruct incoming paths.  Only
01454  *              obstructions of the same type (file or dir) as the added
01455  *              item are tolerated.  The text of obstructing files is left
01456  *              as-is, effectively treating it as a user modification after
01457  *              the checkout.  Working properties of obstructing items are
01458  *              set equal to the base properties. <br>
01459  *              If @c FALSE, then abort if there are any unversioned
01460  *              obstructing items.
01461  * @param[in] ignore_ancestry  If @c FALSE, then verify that the file
01462  *              or directory at @a path shares some common version control
01463  *              ancestry with the switch URL location (represented by the
01464  *              combination of @a url, @a peg_revision, and @a revision),
01465  *              and returning #SVN_ERR_CLIENT_UNRELATED_RESOURCES if they
01466  *              do not. If @c TRUE, no such sanity checks are performed.
01467  *
01468  * @param[in] ctx   The standard client context, used for authentication and
01469  *              notification.  The notifier is invoked for paths affected by
01470  *              the switch, and also for files which may be restored from the
01471  *              pristine store after being previously removed from the working
01472  *              copy.
01473  * @param[in] pool  Used for any temporary allocation.
01474  *
01475  * @return A pointer to an #svn_error_t of the type (this list is not
01476  *         exhaustive): <br>
01477  *         #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of
01478  *         #svn_opt_revision_number, #svn_opt_revision_head, or
01479  *         #svn_opt_revision_date. <br>
01480  *         If no error occurred, return #SVN_NO_ERROR.
01481  *
01482  * @since New in 1.7.
01483  *
01484  * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for
01485  *      a discussion of operative and peg revisions.
01486  */
01487 svn_error_t *
01488 svn_client_switch3(svn_revnum_t *result_rev,
01489                    const char *path,
01490                    const char *url,
01491                    const svn_opt_revision_t *peg_revision,
01492                    const svn_opt_revision_t *revision,
01493                    svn_depth_t depth,
01494                    svn_boolean_t depth_is_sticky,
01495                    svn_boolean_t ignore_externals,
01496                    svn_boolean_t allow_unver_obstructions,
01497                    svn_boolean_t ignore_ancestry,
01498                    svn_client_ctx_t *ctx,
01499                    apr_pool_t *pool);
01500 
01501 
01502 /**
01503  * Similar to svn_client_switch3() but with @a ignore_ancestry always
01504  * set to TRUE.
01505  *
01506  * @since New in 1.5.
01507  * @deprecated Provided for backward compatibility with the 1.4 API.
01508  */
01509 SVN_DEPRECATED
01510 svn_error_t *
01511 svn_client_switch2(svn_revnum_t *result_rev,
01512                    const char *path,
01513                    const char *url,
01514                    const svn_opt_revision_t *peg_revision,
01515                    const svn_opt_revision_t *revision,
01516                    svn_depth_t depth,
01517                    svn_boolean_t depth_is_sticky,
01518                    svn_boolean_t ignore_externals,
01519                    svn_boolean_t allow_unver_obstructions,
01520                    svn_client_ctx_t *ctx,
01521                    apr_pool_t *pool);
01522 
01523 
01524 /**
01525  * Similar to svn_client_switch2() but with @a allow_unver_obstructions,
01526  * @a ignore_externals, and @a depth_is_sticky always set to FALSE,
01527  * and @a depth set according to @a recurse: if @a recurse is TRUE,
01528  * set @a depth to #svn_depth_infinity, if @a recurse is FALSE, set
01529  * @a depth to #svn_depth_files.
01530  *
01531  * @deprecated Provided for backward compatibility with the 1.4 API.
01532  */
01533 SVN_DEPRECATED
01534 svn_error_t *
01535 svn_client_switch(svn_revnum_t *result_rev,
01536                   const char *path,
01537                   const char *url,
01538                   const svn_opt_revision_t *revision,
01539                   svn_boolean_t recurse,
01540                   svn_client_ctx_t *ctx,
01541                   apr_pool_t *pool);
01542 
01543 /** @} */
01544 
01545 /**
01546  * @defgroup Add Begin versioning files/directories in a working copy.
01547  *
01548  * @{
01549  */
01550 
01551 /**
01552  * Schedule a working copy @a path for addition to the repository.
01553  *
01554  * If @a depth is #svn_depth_empty, add just @a path and nothing
01555  * below it.  If #svn_depth_files, add @a path and any file
01556  * children of @a path.  If #svn_depth_immediates, add @a path, any
01557  * file children, and any immediate subdirectories (but nothing
01558  * underneath those subdirectories).  If #svn_depth_infinity, add
01559  * @a path and everything under it fully recursively.
01560  *
01561  * @a path's parent must be under revision control already (unless
01562  * @a add_parents is TRUE), but @a path is not.
01563  *
01564  * If @a force is not set and @a path is already under version
01565  * control, return the error #SVN_ERR_ENTRY_EXISTS.  If @a force is
01566  * set, do not error on already-versioned items.  When used on a
01567  * directory in conjunction with a @a depth value greater than
01568  * #svn_depth_empty, this has the effect of scheduling for addition
01569  * any unversioned files and directories scattered within even a
01570  * versioned tree (up to @a depth).
01571  *
01572  * If @a ctx->notify_func2 is non-NULL, then for each added item, call
01573  * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the
01574  * added item.
01575  *
01576  * If @a no_ignore is FALSE, don't add any file or directory (or recurse
01577  * into any directory) that is unversioned and found by recursion (as
01578  * opposed to being the explicit target @a path) and whose name matches the
01579  * svn:ignore property on its parent directory or the global-ignores list in
01580  * @a ctx->config. If @a no_ignore is TRUE, do include such files and
01581  * directories. (Note that an svn:ignore property can influence this
01582  * behaviour only when recursing into an already versioned directory with @a
01583  * force.)
01584  *
01585  * If @a no_autoprops is TRUE, don't set any autoprops on added files. If
01586  * @a no_autoprops is FALSE then all added files have autprops set as per
01587  * the auto-props list in @a ctx->config and the value of any
01588  * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by the nearest
01589  * parents of @a path which are already under version control.
01590  *
01591  * If @a add_parents is TRUE, recurse up @a path's directory and look for
01592  * a versioned directory.  If found, add all intermediate paths between it
01593  * and @a path.  If not found, return #SVN_ERR_CLIENT_NO_VERSIONED_PARENT.
01594  *
01595  * @a scratch_pool is used for temporary allocations only.
01596  *
01597  * @par Important:
01598  * This is a *scheduling* operation.  No changes will
01599  * happen to the repository until a commit occurs.  This scheduling
01600  * can be removed with svn_client_revert2().
01601  *
01602  * @since New in 1.8.
01603  */
01604 svn_error_t *
01605 svn_client_add5(const char *path,
01606                 svn_depth_t depth,
01607                 svn_boolean_t force,
01608                 svn_boolean_t no_ignore,
01609                 svn_boolean_t no_autoprops,
01610                 svn_boolean_t add_parents,
01611                 svn_client_ctx_t *ctx,
01612                 apr_pool_t *scratch_pool);
01613 
01614 /**
01615  * Similar to svn_client_add5(), but with @a no_autoprops always set to
01616  * FALSE.
01617  *
01618  * @deprecated Provided for backward compatibility with the 1.7 API.
01619  */
01620 SVN_DEPRECATED
01621 svn_error_t *
01622 svn_client_add4(const char *path,
01623                 svn_depth_t depth,
01624                 svn_boolean_t force,
01625                 svn_boolean_t no_ignore,
01626                 svn_boolean_t add_parents,
01627                 svn_client_ctx_t *ctx,
01628                 apr_pool_t *pool);
01629 
01630 /**
01631  * Similar to svn_client_add4(), but with @a add_parents always set to
01632  * FALSE and @a depth set according to @a recursive: if TRUE, then
01633  * @a depth is #svn_depth_infinity, if FALSE, then #svn_depth_empty.
01634  *
01635  * @deprecated Provided for backward compatibility with the 1.4 API.
01636  */
01637 SVN_DEPRECATED
01638 svn_error_t *
01639 svn_client_add3(const char *path,
01640                 svn_boolean_t recursive,
01641                 svn_boolean_t force,
01642                 svn_boolean_t no_ignore,
01643                 svn_client_ctx_t *ctx,
01644                 apr_pool_t *pool);
01645 
01646 /**
01647  * Similar to svn_client_add3(), but with @a no_ignore always set to
01648  * FALSE.
01649  *
01650  * @deprecated Provided for backward compatibility with the 1.2 API.
01651  */
01652 SVN_DEPRECATED
01653 svn_error_t *
01654 svn_client_add2(const char *path,
01655                 svn_boolean_t recursive,
01656                 svn_boolean_t force,
01657                 svn_client_ctx_t *ctx,
01658                 apr_pool_t *pool);
01659 
01660 /**
01661  * Similar to svn_client_add2(), but with @a force always set to FALSE.
01662  *
01663  * @deprecated Provided for backward compatibility with the 1.0 API.
01664  */
01665 SVN_DEPRECATED
01666 svn_error_t *
01667 svn_client_add(const char *path,
01668                svn_boolean_t recursive,
01669                svn_client_ctx_t *ctx,
01670                apr_pool_t *pool);
01671 
01672 /** @} */
01673 
01674 /**
01675  * @defgroup Mkdir Create directories in a working copy or repository.
01676  *
01677  * @{
01678  */
01679 
01680 /** Create a directory, either in a repository or a working copy.
01681  *
01682  * @a paths is an array of (const char *) paths, either all local WC paths
01683  * or all URLs.
01684  *
01685  * If @a paths contains URLs, use the authentication baton in @a ctx
01686  * and @a message to immediately attempt to commit the creation of the
01687  * directories in @a paths in the repository.
01688  *
01689  * Else, create the directories on disk, and attempt to schedule them
01690  * for addition (using svn_client_add(), whose docstring you should
01691  * read).
01692  *
01693  * If @a make_parents is TRUE, create any non-existent parent directories
01694  * also.
01695  *
01696  * If non-NULL, @a revprop_table is a hash table holding additional,
01697  * custom revision properties (<tt>const char *</tt> names mapped to
01698  * <tt>svn_string_t *</tt> values) to be set on the new revision in
01699  * the event that this is a committing operation.  This table cannot
01700  * contain any standard Subversion properties.
01701  *
01702  * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton
01703  * combo that this function can use to query for a commit log message
01704  * when one is needed.
01705  *
01706  * If @a ctx->notify_func2 is non-NULL, when the directory has been created
01707  * (successfully) in the working copy, call @a ctx->notify_func2 with
01708  * @a ctx->notify_baton2 and the path of the new directory.  Note that this is
01709  * only called for items added to the working copy.
01710  *
01711  * If @a commit_callback is non-NULL, then for each successful commit, call
01712  * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
01713  * the commit.
01714  *
01715  * @since New in 1.7.
01716  */
01717 svn_error_t *
01718 svn_client_mkdir4(const apr_array_header_t *paths,
01719                   svn_boolean_t make_parents,
01720                   const apr_hash_t *revprop_table,
01721                   svn_commit_callback2_t commit_callback,
01722                   void *commit_baton,
01723                   svn_client_ctx_t *ctx,
01724                   apr_pool_t *pool);
01725 
01726 /**
01727  * Similar to svn_client_mkdir4(), but returns the commit info in
01728  * @a *commit_info_p rather than through a callback function.
01729  *
01730  * @since New in 1.5.
01731  * @deprecated Provided for backward compatibility with the 1.6 API.
01732  */
01733 SVN_DEPRECATED
01734 svn_error_t *
01735 svn_client_mkdir3(svn_commit_info_t **commit_info_p,
01736                   const apr_array_header_t *paths,
01737                   svn_boolean_t make_parents,
01738                   const apr_hash_t *revprop_table,
01739                   svn_client_ctx_t *ctx,
01740                   apr_pool_t *pool);
01741 
01742 
01743 /**
01744  * Same as svn_client_mkdir3(), but with @a make_parents always FALSE,
01745  * and @a revprop_table always NULL.
01746  *
01747  * @since New in 1.3.
01748  * @deprecated Provided for backward compatibility with the 1.4 API.
01749  */
01750 SVN_DEPRECATED
01751 svn_error_t *
01752 svn_client_mkdir2(svn_commit_info_t **commit_info_p,
01753                   const apr_array_header_t *paths,
01754                   svn_client_ctx_t *ctx,
01755                   apr_pool_t *pool);
01756 
01757 /**
01758  * Same as svn_client_mkdir2(), but takes the #svn_client_commit_info_t
01759  * type for @a commit_info_p.
01760  *
01761  * @deprecated Provided for backward compatibility with the 1.2 API.
01762  */
01763 SVN_DEPRECATED
01764 svn_error_t *
01765 svn_client_mkdir(svn_client_commit_info_t **commit_info_p,
01766                  const apr_array_header_t *paths,
01767                  svn_client_ctx_t *ctx,
01768                  apr_pool_t *pool);
01769 
01770 /** @} */
01771 
01772 /**
01773  * @defgroup Delete Remove files/directories from a working copy or repository.
01774  *
01775  * @{
01776  */
01777 
01778 /** Delete items from a repository or working copy.
01779  *
01780  * @a paths is an array of (const char *) paths, either all local WC paths
01781  * or all URLs.
01782  *
01783  * If the paths in @a paths are URLs, use the authentication baton in
01784  * @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to
01785  * immediately attempt to commit a deletion of the URLs from the
01786  * repository.  Every path must belong to the same repository.
01787  *
01788  * Else, schedule the working copy paths in @a paths for removal from
01789  * the repository.  Each path's parent must be under revision control.
01790  * This is just a *scheduling* operation.  No changes will happen to
01791  * the repository until a commit occurs.  This scheduling can be
01792  * removed with svn_client_revert2(). If a path is a file it is
01793  * immediately removed from the working copy. If the path is a
01794  * directory it will remain in the working copy but all the files, and
01795  * all unversioned items, it contains will be removed. If @a force is
01796  * not set then this operation will fail if any path contains locally
01797  * modified and/or unversioned items. If @a force is set such items
01798  * will be deleted.
01799  *
01800  * If the paths are working copy paths and @a keep_local is TRUE then
01801  * the paths will not be removed from the working copy, only scheduled
01802  * for removal from the repository.  Once the scheduled deletion is
01803  * committed, they will appear as unversioned paths in the working copy.
01804  *
01805  * If non-NULL, @a revprop_table is a hash table holding additional,
01806  * custom revision properties (<tt>const char *</tt> names mapped to
01807  * <tt>svn_string_t *</tt> values) to be set on the new revision in
01808  * the event that this is a committing operation.  This table cannot
01809  * contain any standard Subversion properties.
01810  *
01811  * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton
01812  * combo that this function can use to query for a commit log message
01813  * when one is needed.
01814  *
01815  * If @a ctx->notify_func2 is non-NULL, then for each item deleted, call
01816  * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the deleted
01817  * item.
01818  *
01819  * If @a commit_callback is non-NULL, then for each successful commit, call
01820  * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
01821  * the commit.
01822  *
01823  * @since New in 1.7.
01824  */
01825 svn_error_t *
01826 svn_client_delete4(const apr_array_header_t *paths,
01827                    svn_boolean_t force,
01828                    svn_boolean_t keep_local,
01829                    const apr_hash_t *revprop_table,
01830                    svn_commit_callback2_t commit_callback,
01831                    void *commit_baton,
01832                    svn_client_ctx_t *ctx,
01833                    apr_pool_t *pool);
01834 
01835 /**
01836  * Similar to svn_client_delete4(), but returns the commit info in
01837  * @a *commit_info_p rather than through a callback function.
01838  *
01839  * @since New in 1.5.
01840  * @deprecated Provided for backward compatibility with the 1.6 API.
01841  */
01842 SVN_DEPRECATED
01843 svn_error_t *
01844 svn_client_delete3(svn_commit_info_t **commit_info_p,
01845                    const apr_array_header_t *paths,
01846                    svn_boolean_t force,
01847                    svn_boolean_t keep_local,
01848                    const apr_hash_t *revprop_table,
01849                    svn_client_ctx_t *ctx,
01850                    apr_pool_t *pool);
01851 
01852 /**
01853  * Similar to svn_client_delete3(), but with @a keep_local always set
01854  * to FALSE, and @a revprop_table passed as NULL.
01855  *
01856  * @deprecated Provided for backward compatibility with the 1.4 API.
01857  */
01858 SVN_DEPRECATED
01859 svn_error_t *
01860 svn_client_delete2(svn_commit_info_t **commit_info_p,
01861                    const apr_array_header_t *paths,
01862                    svn_boolean_t force,
01863                    svn_client_ctx_t *ctx,
01864                    apr_pool_t *pool);
01865 
01866 /**
01867  * Similar to svn_client_delete2(), but takes the #svn_client_commit_info_t
01868  * type for @a commit_info_p.
01869  *
01870  * @deprecated Provided for backward compatibility with the 1.2 API.
01871  */
01872 SVN_DEPRECATED
01873 svn_error_t *
01874 svn_client_delete(svn_client_commit_info_t **commit_info_p,
01875                   const apr_array_header_t *paths,
01876                   svn_boolean_t force,
01877                   svn_client_ctx_t *ctx,
01878                   apr_pool_t *pool);
01879 
01880 
01881 /** @} */
01882 
01883 /**
01884  * @defgroup Import Import files into the repository.
01885  *
01886  * @{
01887  */
01888 
01889 /**
01890  * The callback invoked by svn_client_import5() before adding a node to the
01891  * list of nodes to be imported.
01892  *
01893  * @a baton is the value passed to @a svn_client_import5 as filter_baton.
01894  *
01895  * The callback receives the @a local_abspath for each node and the @a dirent
01896  * for it when walking the directory tree. Only the kind of node, including
01897  * special status is available in @a dirent.
01898  *
01899  * Implementations can set @a *filtered to TRUE, to make the import
01900  * process omit the node and (if the node is a directory) all its
01901  * descendants.
01902  *
01903  * @a scratch_pool can be used for temporary allocations.
01904  *
01905  * @since New in 1.8.
01906  */
01907 typedef svn_error_t *(*svn_client_import_filter_func_t)(
01908   void *baton,
01909   svn_boolean_t *filtered,
01910   const char *local_abspath,
01911   const svn_io_dirent2_t *dirent,
01912   apr_pool_t *scratch_pool);
01913 
01914 /** Import file or directory @a path into repository directory @a url at
01915  * head, authenticating with the authentication baton cached in @a ctx,
01916  * and using @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to get a log message
01917  * for the (implied) commit.  If some components of @a url do not exist
01918  * then create parent directories as necessary.
01919  *
01920  * This function reads an unversioned tree from disk and skips any ".svn"
01921  * directories. Even if a file or directory being imported is part of an
01922  * existing WC, this function sees it as unversioned and does not notice any
01923  * existing Subversion properties in it.
01924  *
01925  * If @a path is a directory, the contents of that directory are
01926  * imported directly into the directory identified by @a url.  Note that the
01927  * directory @a path itself is not imported -- that is, the basename of
01928  * @a path is not part of the import.
01929  *
01930  * If @a path is a file, then the dirname of @a url is the directory
01931  * receiving the import.  The basename of @a url is the filename in the
01932  * repository.  In this case if @a url already exists, return error.
01933  *
01934  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with
01935  * @a ctx->notify_baton2 as the import progresses, with any of the following
01936  * actions: #svn_wc_notify_commit_added,
01937  * #svn_wc_notify_commit_postfix_txdelta.
01938  *
01939  * Use @a scratch_pool for any temporary allocation.
01940  *
01941  * If non-NULL, @a revprop_table is a hash table holding additional,
01942  * custom revision properties (<tt>const char *</tt> names mapped to
01943  * <tt>svn_string_t *</tt> values) to be set on the new revision.
01944  * This table cannot contain any standard Subversion properties.
01945  *
01946  * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton
01947  * combo that this function can use to query for a commit log message
01948  * when one is needed.
01949  *
01950  * If @a depth is #svn_depth_empty, import just @a path and nothing
01951  * below it.  If #svn_depth_files, import @a path and any file
01952  * children of @a path.  If #svn_depth_immediates, import @a path, any
01953  * file children, and any immediate subdirectories (but nothing
01954  * underneath those subdirectories).  If #svn_depth_infinity, import
01955  * @a path and everything under it fully recursively.
01956  *
01957  * If @a no_ignore is @c FALSE, don't import any file or directory (or
01958  * recurse into any directory) that is found by recursion (as opposed to
01959  * being the explicit target @a path) and whose name matches the
01960  * global-ignores list in @a ctx->config. If @a no_ignore is @c TRUE, do
01961  * include such files and directories. (Note that svn:ignore properties are
01962  * not involved, as auto-props cannot set properties on directories and even
01963  * if the target is part of a WC the import ignores any existing
01964  * properties.)
01965  *
01966  * If @a no_autoprops is TRUE, don't set any autoprops on imported files. If
01967  * @a no_autoprops is FALSE then all imported files have autprops set as per
01968  * the auto-props list in @a ctx->config and the value of any
01969  * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by and explicitly set
01970  * on @a url if @a url is already under versioned control, or the nearest parents
01971  * of @a path which are already under version control if not.
01972  *
01973  * If @a ignore_unknown_node_types is @c FALSE, ignore files of which the
01974  * node type is unknown, such as device files and pipes.
01975  *
01976  * If @a filter_callback is non-NULL, call it for each node that isn't ignored
01977  * for other reasons with @a filter_baton, to allow third party to ignore
01978  * specific nodes during importing.
01979  *
01980  * If @a commit_callback is non-NULL, then for each successful commit, call
01981  * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
01982  * the commit.
01983  *
01984  * @since New in 1.8.
01985  */
01986 svn_error_t *
01987 svn_client_import5(const char *path,
01988                    const char *url,
01989                    svn_depth_t depth,
01990                    svn_boolean_t no_ignore,
01991                    svn_boolean_t no_autoprops,
01992                    svn_boolean_t ignore_unknown_node_types,
01993                    const apr_hash_t *revprop_table,
01994                    svn_client_import_filter_func_t filter_callback,
01995                    void *filter_baton,
01996                    svn_commit_callback2_t commit_callback,
01997                    void *commit_baton,
01998                    svn_client_ctx_t *ctx,
01999                    apr_pool_t *scratch_pool);
02000 
02001 /**
02002  * Similar to svn_client_import5(), but without support for an optional
02003  * @a filter_callback and @a no_autoprops always set to FALSE.
02004  *
02005  * @since New in 1.7.
02006  * @deprecated Provided for backward compatibility with the 1.7 API.
02007  */
02008 SVN_DEPRECATED
02009 svn_error_t *
02010 svn_client_import4(const char *path,
02011                    const char *url,
02012                    svn_depth_t depth,
02013                    svn_boolean_t no_ignore,
02014                    svn_boolean_t ignore_unknown_node_types,
02015                    const apr_hash_t *revprop_table,
02016                    svn_commit_callback2_t commit_callback,
02017                    void *commit_baton,
02018                    svn_client_ctx_t *ctx,
02019                    apr_pool_t *pool);
02020 
02021 /**
02022  * Similar to svn_client_import4(), but returns the commit info in
02023  * @a *commit_info_p rather than through a callback function.
02024  *
02025  * @since New in 1.5.
02026  * @deprecated Provided for backward compatibility with the 1.6 API.
02027  */
02028 SVN_DEPRECATED
02029 svn_error_t *
02030 svn_client_import3(svn_commit_info_t **commit_info_p,
02031                    const char *path,
02032                    const char *url,
02033                    svn_depth_t depth,
02034                    svn_boolean_t no_ignore,
02035                    svn_boolean_t ignore_unknown_node_types,
02036                    const apr_hash_t *revprop_table,
02037                    svn_client_ctx_t *ctx,
02038                    apr_pool_t *pool);
02039 
02040 /**
02041  * Similar to svn_client_import3(), but with @a ignore_unknown_node_types
02042  * always set to @c FALSE, @a revprop_table passed as NULL, and @a
02043  * depth set according to @a nonrecursive: if TRUE, then @a depth is
02044  * #svn_depth_files, else #svn_depth_infinity.
02045  *
02046  * @since New in 1.3.
02047  *
02048  * @deprecated Provided for backward compatibility with the 1.4 API
02049  */
02050 SVN_DEPRECATED
02051 svn_error_t *
02052 svn_client_import2(svn_commit_info_t **commit_info_p,
02053                    const char *path,
02054                    const char *url,
02055                    svn_boolean_t nonrecursive,
02056                    svn_boolean_t no_ignore,
02057                    svn_client_ctx_t *ctx,
02058                    apr_pool_t *pool);
02059 
02060 /**
02061  * Similar to svn_client_import2(), but with @a no_ignore always set
02062  * to FALSE and using the #svn_client_commit_info_t type for
02063  * @a commit_info_p.
02064  *
02065  * @deprecated Provided for backward compatibility with the 1.2 API.
02066  */
02067 SVN_DEPRECATED
02068 svn_error_t *
02069 svn_client_import(svn_client_commit_info_t **commit_info_p,
02070                   const char *path,
02071                   const char *url,
02072                   svn_boolean_t nonrecursive,
02073                   svn_client_ctx_t *ctx,
02074                   apr_pool_t *pool);
02075 
02076 /** @} */
02077 
02078 /**
02079  * @defgroup Commit Commit local modifications to the repository.
02080  *
02081  * @{
02082  */
02083 
02084 /**
02085  * Commit files or directories into repository, authenticating with
02086  * the authentication baton cached in @a ctx, and using
02087  * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to obtain the log message.
02088  * Set @a *commit_info_p to the results of the commit, allocated in @a pool.
02089  *
02090  * @a targets is an array of <tt>const char *</tt> paths to commit.  They
02091  * need not be canonicalized nor condensed; this function will take care of
02092  * that.  If @a targets has zero elements, then do nothing and return
02093  * immediately without error.
02094  *
02095  * If non-NULL, @a revprop_table is a hash table holding additional,
02096  * custom revision properties (<tt>const char *</tt> names mapped to
02097  * <tt>svn_string_t *</tt> values) to be set on the new revision.
02098  * This table cannot contain any standard Subversion properties.
02099  *
02100  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with
02101  * @a ctx->notify_baton2 as the commit progresses, with any of the following
02102  * actions: #svn_wc_notify_commit_modified, #svn_wc_notify_commit_added,
02103  * #svn_wc_notify_commit_deleted, #svn_wc_notify_commit_replaced,
02104  * #svn_wc_notify_commit_copied, #svn_wc_notify_commit_copied_replaced,
02105  * #svn_wc_notify_commit_postfix_txdelta.
02106  *
02107  * If @a depth is #svn_depth_infinity, commit all changes to and
02108  * below named targets.  If @a depth is #svn_depth_empty, commit
02109  * only named targets (that is, only property changes on named
02110  * directory targets, and property and content changes for named file
02111  * targets).  If @a depth is #svn_depth_files, behave as above for
02112  * named file targets, and for named directory targets, commit
02113  * property changes on a named directory and all changes to files
02114  * directly inside that directory.  If #svn_depth_immediates, behave
02115  * as for #svn_depth_files, and for subdirectories of any named
02116  * directory target commit as though for #svn_depth_empty.
02117  *
02118  * Unlock paths in the repository, unless @a keep_locks is TRUE.
02119  *
02120  * @a changelists is an array of <tt>const char *</tt> changelist
02121  * names, used as a restrictive filter on items that are committed;
02122  * that is, don't commit anything unless it's a member of one of those
02123  * changelists.  After the commit completes successfully, remove
02124  * changelist associations from the targets, unless @a
02125  * keep_changelists is set.  If @a changelists is
02126  * empty (or altogether @c NULL), no changelist filtering occurs.
02127  *
02128  * If @a commit_as_operations is set to FALSE, when a copy is committed
02129  * all changes below the copy are always committed at the same time
02130  * (independent of the value of @a depth). If @a commit_as_operations is
02131  * #TRUE, changes to descendants are only committed if they are itself
02132  * included via @a depth and targets.
02133  *
02134  * If @a include_file_externals and/or @a include_dir_externals are #TRUE,
02135  * also commit all file and/or dir externals (respectively) that are reached
02136  * by recursion, except for those externals which:
02137  *     - have a fixed revision, or
02138  *     - come from a different repository root URL (dir externals).
02139  * These flags affect only recursion; externals that directly appear in @a
02140  * targets are always included in the commit.
02141  *
02142  * ### TODO: currently, file externals hidden inside an unversioned dir are
02143  *     skipped deliberately, because we can't commit those yet.
02144  *     See STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW.
02145  *
02146  * ### TODO: With @c depth_immediates, this function acts as if
02147  *     @a include_dir_externals was passed #FALSE, but caller expects
02148  *     immediate child dir externals to be included @c depth_empty.
02149  *
02150  * When @a commit_as_operations is #TRUE it is possible to delete a node and
02151  * all its descendants by selecting just the root of the deletion. If it is
02152  * set to #FALSE this will raise an error.
02153  *
02154  * If @a commit_callback is non-NULL, then for each successful commit, call
02155  * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
02156  * the commit.
02157  *
02158  * @note #svn_depth_unknown and #svn_depth_exclude must not be passed
02159  * for @a depth.
02160  *
02161  * Use @a pool for any temporary allocations.
02162  *
02163  * @since New in 1.8.
02164  */
02165 svn_error_t *
02166 svn_client_commit6(const apr_array_header_t *targets,
02167                    svn_depth_t depth,
02168                    svn_boolean_t keep_locks,
02169                    svn_boolean_t keep_changelists,
02170                    svn_boolean_t commit_as_operations,
02171                    svn_boolean_t include_file_externals,
02172                    svn_boolean_t include_dir_externals,
02173                    const apr_array_header_t *changelists,
02174                    const apr_hash_t *revprop_table,
02175                    svn_commit_callback2_t commit_callback,
02176                    void *commit_baton,
02177                    svn_client_ctx_t *ctx,
02178                    apr_pool_t *pool);
02179 
02180 /**
02181  * Similar to svn_client_commit6(), but passes @a include_file_externals as
02182  * FALSE and @a include_dir_externals as FALSE.
02183  *
02184  * @since New in 1.7.
02185  * @deprecated Provided for backward compatibility with the 1.7 API.
02186  */
02187 SVN_DEPRECATED
02188 svn_error_t *
02189 svn_client_commit5(const apr_array_header_t *targets,
02190                    svn_depth_t depth,
02191                    svn_boolean_t keep_locks,
02192                    svn_boolean_t keep_changelists,
02193                    svn_boolean_t commit_as_operations,
02194                    const apr_array_header_t *changelists,
02195                    const apr_hash_t *revprop_table,
02196                    svn_commit_callback2_t commit_callback,
02197                    void *commit_baton,
02198                    svn_client_ctx_t *ctx,
02199                    apr_pool_t *pool);
02200 
02201 /**
02202  * Similar to svn_client_commit5(), but returns the commit info in
02203  * @a *commit_info_p rather than through a callback function.  Does not use
02204  * #svn_wc_notify_commit_copied or #svn_wc_notify_commit_copied_replaced
02205  * (preferring #svn_wc_notify_commit_added and
02206  * #svn_wc_notify_commit_replaced, respectively, instead).
02207  *
02208  * Also, if no error is returned and @a (*commit_info_p)->revision is set to
02209  * #SVN_INVALID_REVNUM, then the commit was a no-op; nothing needed to
02210  * be committed.
02211  *
02212  * Sets @a commit_as_operations to FALSE to match Subversion 1.6's behavior.
02213  *
02214  * @since New in 1.5.
02215  * @deprecated Provided for backward compatibility with the 1.6 API.
02216  */
02217 SVN_DEPRECATED
02218 svn_error_t *
02219 svn_client_commit4(svn_commit_info_t **commit_info_p,
02220                    const apr_array_header_t *targets,
02221                    svn_depth_t depth,
02222                    svn_boolean_t keep_locks,
02223                    svn_boolean_t keep_changelists,
02224                    const apr_array_header_t *changelists,
02225                    const apr_hash_t *revprop_table,
02226                    svn_client_ctx_t *ctx,
02227                    apr_pool_t *pool);
02228 
02229 /**
02230  * Similar to svn_client_commit4(), but always with NULL for
02231  * @a changelist_name, FALSE for @a keep_changelist, NULL for @a
02232  * revprop_table, and @a depth set according to @a recurse: if @a
02233  * recurse is TRUE, use #svn_depth_infinity, else #svn_depth_empty.
02234  *
02235  * @deprecated Provided for backward compatibility with the 1.4 API.
02236  *
02237  * @since New in 1.3.
02238  */
02239 SVN_DEPRECATED
02240 svn_error_t *
02241 svn_client_commit3(svn_commit_info_t **commit_info_p,
02242                    const apr_array_header_t *targets,
02243                    svn_boolean_t recurse,
02244                    svn_boolean_t keep_locks,
02245                    svn_client_ctx_t *ctx,
02246                    apr_pool_t *pool);
02247 
02248 /**
02249  * Similar to svn_client_commit3(), but uses #svn_client_commit_info_t
02250  * for @a commit_info_p.
02251  *
02252  * @deprecated Provided for backward compatibility with the 1.2 API.
02253  *
02254  * @since New in 1.2.
02255  */
02256 SVN_DEPRECATED
02257 svn_error_t *
02258 svn_client_commit2(svn_client_commit_info_t **commit_info_p,
02259                    const apr_array_header_t *targets,
02260                    svn_boolean_t recurse,
02261                    svn_boolean_t keep_locks,
02262                    svn_client_ctx_t *ctx,
02263                    apr_pool_t *pool);
02264 
02265 /**
02266  * Similar to svn_client_commit2(), but with @a keep_locks set to
02267  * TRUE and @a nonrecursive instead of @a recurse.
02268  *
02269  * @deprecated Provided for backward compatibility with the 1.1 API.
02270  */
02271 SVN_DEPRECATED
02272 svn_error_t *
02273 svn_client_commit(svn_client_commit_info_t **commit_info_p,
02274                   const apr_array_header_t *targets,
02275                   svn_boolean_t nonrecursive,
02276                   svn_client_ctx_t *ctx,
02277                   apr_pool_t *pool);
02278 
02279 /** @} */
02280 
02281 /**
02282  * @defgroup Status Report interesting information about paths in the \
02283  *                  working copy.
02284  *
02285  * @{
02286  */
02287 
02288 /**
02289  * Structure for holding the "status" of a working copy item.
02290  *
02291  * @note Fields may be added to the end of this structure in future
02292  * versions.  Therefore, to preserve binary compatibility, users
02293  * should not directly allocate structures of this type.
02294  *
02295  * @since New in 1.7.
02296  */
02297 typedef struct svn_client_status_t
02298 {
02299   /** The kind of node as recorded in the working copy */
02300   svn_node_kind_t kind;
02301 
02302   /** The absolute path to the node */
02303   const char *local_abspath;
02304 
02305   /** The actual size of the working file on disk, or SVN_INVALID_FILESIZE
02306    * if unknown (or if the item isn't a file at all). */
02307   svn_filesize_t filesize;
02308 
02309   /** If the path is under version control, versioned is TRUE, otherwise
02310    * FALSE. */
02311   svn_boolean_t versioned;
02312 
02313   /** Set to TRUE if the node is the victim of some kind of conflict. */
02314   svn_boolean_t conflicted;
02315 
02316   /** The status of the node, based on the restructuring changes and if the
02317    * node has no restructuring changes the text and prop status. */
02318   enum svn_wc_status_kind node_status;
02319 
02320   /** The status of the text of the node, not including restructuring changes.
02321    * Valid values are: svn_wc_status_none, svn_wc_status_normal,
02322    * svn_wc_status_modified and svn_wc_status_conflicted. */
02323   enum svn_wc_status_kind text_status;
02324 
02325   /** The status of the node's properties.
02326    * Valid values are: svn_wc_status_none, svn_wc_status_normal,
02327    * svn_wc_status_modified and svn_wc_status_conflicted. */
02328   enum svn_wc_status_kind prop_status;
02329 
02330   /** A node can be 'locked' if a working copy update is in progress or
02331    * was interrupted. */
02332   svn_boolean_t wc_is_locked;
02333 
02334   /** A file or directory can be 'copied' if it's scheduled for
02335    * addition-with-history (or part of a subtree that is scheduled as such.).
02336    */
02337   svn_boolean_t copied;
02338 
02339   /** The URL of the repository root. */
02340   const char *repos_root_url;
02341 
02342   /** The UUID of the repository */
02343   const char *repos_uuid;
02344 
02345   /** The in-repository path relative to the repository root. */
02346   const char *repos_relpath;
02347 
02348   /** Base revision. */
02349   svn_revnum_t revision;
02350 
02351   /** Last revision this was changed */
02352   svn_revnum_t changed_rev;
02353 
02354   /** Date of last commit. */
02355   apr_time_t changed_date;
02356 
02357   /** Last commit author of this item */
02358   const char *changed_author;
02359 
02360   /** A file or directory can be 'switched' if the switch command has been
02361    * used.  If this is TRUE, then file_external will be FALSE.
02362    */
02363   svn_boolean_t switched;
02364 
02365   /** If the item is a file that was added to the working copy with an
02366    * svn:externals; if file_external is TRUE, then switched is always
02367    * FALSE.
02368    */
02369   svn_boolean_t file_external;
02370 
02371   /** The locally present lock. (Values of path, token, owner, comment and
02372    * are available if a lock is present) */
02373   const svn_lock_t *lock;
02374 
02375   /** Which changelist this item is part of, or NULL if not part of any. */
02376   const char *changelist;
02377 
02378   /** The depth of the node as recorded in the working copy
02379    * (#svn_depth_unknown for files or when no depth is recorded) */
02380   svn_depth_t depth;
02381 
02382   /**
02383    * @defgroup svn_wc_status_ood WC out-of-date info from the repository
02384    * @{
02385    *
02386    * When the working copy item is out-of-date compared to the
02387    * repository, the following fields represent the state of the
02388    * youngest revision of the item in the repository.  If the working
02389    * copy is not out of date, the fields are initialized as described
02390    * below.
02391    */
02392 
02393   /** Set to the node kind of the youngest commit, or #svn_node_none
02394    * if not out of date. */
02395   svn_node_kind_t ood_kind;
02396 
02397   /** The status of the node, based on the text status if the node has no
02398    * restructuring changes */
02399   enum svn_wc_status_kind repos_node_status;
02400 
02401   /** The node's text status in the repository. */
02402   enum svn_wc_status_kind repos_text_status;
02403 
02404   /** The node's property status in the repository. */
02405   enum svn_wc_status_kind repos_prop_status;
02406 
02407   /** The node's lock in the repository, if any. */
02408   const svn_lock_t *repos_lock;
02409 
02410   /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM
02411    * if not out of date. */
02412   svn_revnum_t ood_changed_rev;
02413 
02414   /** Set to the most recent commit date, or @c 0 if not out of date. */
02415   apr_time_t ood_changed_date;
02416 
02417   /** Set to the user name of the youngest commit, or @c NULL if not
02418    * out of date or non-existent.  Because a non-existent @c
02419    * svn:author property has the same behavior as an out-of-date
02420    * working copy, examine @c ood_changed_rev to determine whether
02421    * the working copy is out of date. */
02422   const char *ood_changed_author;
02423 
02424   /** @} */
02425 
02426   /** Reserved for libsvn_client's internal use; this value is only to be used
02427    * for libsvn_client backwards compatibility wrappers. This value may be NULL
02428    * or to other data in future versions. */
02429   const void *backwards_compatibility_baton;
02430 
02431   /** Set to the local absolute path that this node was moved from, if this
02432    * file or directory has been moved here locally and is the root of that
02433    * move. Otherwise set to NULL.
02434    *
02435    * This will be NULL for moved-here nodes that are just part of a subtree
02436    * that was moved along (and are not themselves a root of a different move
02437    * operation).
02438    *
02439    * @since New in 1.8. */
02440   const char *moved_from_abspath;
02441 
02442   /** Set to the local absolute path that this node was moved to, if this file
02443    * or directory has been moved away locally and corresponds to the root
02444    * of the destination side of the move. Otherwise set to NULL.
02445    *
02446    * Note: Saying just "root" here could be misleading. For example:
02447    *   svn mv A AA;
02448    *   svn mv AA/B BB;
02449    * creates a situation where A/B is moved-to BB, but one could argue that
02450    * the move source's root actually was AA/B. Note that, as far as the
02451    * working copy is concerned, above case is exactly identical to:
02452    *   svn mv A/B BB;
02453    *   svn mv A AA;
02454    * In both situations, @a moved_to_abspath would be set for nodes A (moved
02455    * to AA) and A/B (moved to BB), only.
02456    *
02457    * This will be NULL for moved-away nodes that were just part of a subtree
02458    * that was moved along (and are not themselves a root of a different move
02459    * operation).
02460    *
02461    * @since New in 1.8. */
02462   const char *moved_to_abspath;
02463 
02464   /* NOTE! Please update svn_client_status_dup() when adding new fields here. */
02465 } svn_client_status_t;
02466 
02467 /**
02468  * Return a duplicate of @a status, allocated in @a result_pool. No part of the new
02469  * structure will be shared with @a status.
02470  *
02471  * @since New in 1.7.
02472  */
02473 svn_client_status_t *
02474 svn_client_status_dup(const svn_client_status_t *status,
02475                       apr_pool_t *result_pool);
02476 
02477 /**
02478  * A callback for reporting a @a status about @a path (which may be an
02479  * absolute or relative path).
02480  *
02481  * @a baton is a closure object; it should be provided by the
02482  * implementation, and passed by the caller.
02483  *
02484  * @a scratch_pool will be cleared between invocations to the callback.
02485  *
02486  * @since New in 1.7.
02487  */
02488 typedef svn_error_t *(*svn_client_status_func_t)(
02489                                             void *baton,
02490                                             const char *path,
02491                                             const svn_client_status_t *status,
02492                                             apr_pool_t *scratch_pool);
02493 
02494 /**
02495  * Given @a path to a working copy directory (or single file), call
02496  * @a status_func/status_baton with a set of #svn_wc_status_t *
02497  * structures which describe the status of @a path, and its children
02498  * (recursing according to @a depth).
02499  *
02500  *    - If @a get_all is set, retrieve all entries; otherwise,
02501  *      retrieve only "interesting" entries (local mods and/or
02502  *      out of date).
02503  *
02504  *    - If @a update is set, contact the repository and augment the
02505  *      status structures with information about out-of-dateness (with
02506  *      respect to @a revision).  Also, if @a result_rev is not @c NULL,
02507  *      set @a *result_rev to the actual revision against which the
02508  *      working copy was compared (@a *result_rev is not meaningful unless
02509  *      @a update is set).
02510  *
02511  * If @a no_ignore is @c FALSE, don't report any file or directory (or
02512  * recurse into any directory) that is found by recursion (as opposed to
02513  * being the explicit target @a path) and whose name matches the
02514  * svn:ignore property on its parent directory or the global-ignores
02515  * list in @a ctx->config. If @a no_ignore is @c TRUE, report each such
02516  * file or directory with the status code #svn_wc_status_ignored.
02517  *
02518  * If @a ignore_externals is not set, then recurse into externals
02519  * definitions (if any exist) after handling the main target.  This
02520  * calls the client notification function (in @a ctx) with the
02521  * #svn_wc_notify_status_external action before handling each externals
02522  * definition, and with #svn_wc_notify_status_completed
02523  * after each.
02524  *
02525  * If @a depth_as_sticky is set and @a depth is not
02526  * #svn_depth_unknown, then the status is calculated as if depth_is_sticky
02527  * was passed to an equivalent update command.
02528  *
02529  * @a changelists is an array of <tt>const char *</tt> changelist
02530  * names, used as a restrictive filter on items whose statuses are
02531  * reported; that is, don't report status about any item unless
02532  * it's a member of one of those changelists.  If @a changelists is
02533  * empty (or altogether @c NULL), no changelist filtering occurs.
02534  *
02535  * If @a path is an absolute path then the @c path parameter passed in each
02536  * call to @a status_func will be an absolute path.
02537  *
02538  * All temporary allocations are performed in @a scratch_pool.
02539  *
02540  * @since New in 1.7.
02541  */
02542 svn_error_t *
02543 svn_client_status5(svn_revnum_t *result_rev,
02544                    svn_client_ctx_t *ctx,
02545                    const char *path,
02546                    const svn_opt_revision_t *revision,
02547                    svn_depth_t depth,
02548                    svn_boolean_t get_all,
02549                    svn_boolean_t update,
02550                    svn_boolean_t no_ignore,
02551                    svn_boolean_t ignore_externals,
02552                    svn_boolean_t depth_as_sticky,
02553                    const apr_array_header_t *changelists,
02554                    svn_client_status_func_t status_func,
02555                    void *status_baton,
02556                    apr_pool_t *scratch_pool);
02557 
02558 /**
02559  * Same as svn_client_status5(), but using #svn_wc_status_func3_t
02560  * instead of #svn_client_status_func_t and depth_as_sticky set to TRUE.
02561  *
02562  * @since New in 1.6.
02563  * @deprecated Provided for backward compatibility with the 1.6 API.
02564  */
02565 SVN_DEPRECATED
02566 svn_error_t *
02567 svn_client_status4(svn_revnum_t *result_rev,
02568                    const char *path,
02569                    const svn_opt_revision_t *revision,
02570                    svn_wc_status_func3_t status_func,
02571                    void *status_baton,
02572                    svn_depth_t depth,
02573                    svn_boolean_t get_all,
02574                    svn_boolean_t update,
02575                    svn_boolean_t no_ignore,
02576                    svn_boolean_t ignore_externals,
02577                    const apr_array_header_t *changelists,
02578                    svn_client_ctx_t *ctx,
02579                    apr_pool_t *pool);
02580 
02581 /**
02582  * Same as svn_client_status4(), but using an #svn_wc_status_func2_t
02583  * instead of an #svn_wc_status_func3_t.
02584  *
02585  * @since New in 1.5.
02586  * @deprecated Provided for backward compatibility with the 1.5 API.
02587  */
02588 SVN_DEPRECATED
02589 svn_error_t *
02590 svn_client_status3(svn_revnum_t *result_rev,
02591                    const char *path,
02592                    const svn_opt_revision_t *revision,
02593                    svn_wc_status_func2_t status_func,
02594                    void *status_baton,
02595                    svn_depth_t depth,
02596                    svn_boolean_t get_all,
02597                    svn_boolean_t update,
02598                    svn_boolean_t no_ignore,
02599                    svn_boolean_t ignore_externals,
02600                    const apr_array_header_t *changelists,
02601                    svn_client_ctx_t *ctx,
02602                    apr_pool_t *pool);
02603 
02604 /**
02605  * Like svn_client_status3(), except with @a changelists passed as @c
02606  * NULL, and with @a recurse instead of @a depth.  If @a recurse is
02607  * TRUE, behave as if for #svn_depth_infinity; else if @a recurse is
02608  * FALSE, behave as if for #svn_depth_immediates.
02609  *
02610  * @since New in 1.2.
02611  * @deprecated Provided for backward compatibility with the 1.4 API.
02612  */
02613 SVN_DEPRECATED
02614 svn_error_t *
02615 svn_client_status2(svn_revnum_t *result_rev,
02616                    const char *path,
02617                    const svn_opt_revision_t *revision,
02618                    svn_wc_status_func2_t status_func,
02619                    void *status_baton,
02620                    svn_boolean_t recurse,
02621                    svn_boolean_t get_all,
02622                    svn_boolean_t update,
02623                    svn_boolean_t no_ignore,
02624                    svn_boolean_t ignore_externals,
02625                    svn_client_ctx_t *ctx,
02626                    apr_pool_t *pool);
02627 
02628 
02629 /**
02630  * Similar to svn_client_status2(), but with @a ignore_externals
02631  * always set to FALSE, taking the #svn_wc_status_func_t type
02632  * instead of the #svn_wc_status_func2_t type for @a status_func,
02633  * and requiring @a *revision to be non-const even though it is
02634  * treated as constant.
02635  *
02636  * @deprecated Provided for backward compatibility with the 1.1 API.
02637  */
02638 SVN_DEPRECATED
02639 svn_error_t *
02640 svn_client_status(svn_revnum_t *result_rev,
02641                   const char *path,
02642                   svn_opt_revision_t *revision,
02643                   svn_wc_status_func_t status_func,
02644                   void *status_baton,
02645                   svn_boolean_t recurse,
02646                   svn_boolean_t get_all,
02647                   svn_boolean_t update,
02648                   svn_boolean_t no_ignore,
02649                   svn_client_ctx_t *ctx,
02650                   apr_pool_t *pool);
02651 
02652 /** @} */
02653 
02654 /**
02655  * @defgroup Log View information about previous revisions of an object.
02656  *
02657  * @{
02658  */
02659 
02660 /**
02661  * Invoke @a receiver with @a receiver_baton on each log message from
02662  * each (#svn_opt_revision_range_t *) range in @a revision_ranges in turn,
02663  * inclusive (but never invoke @a receiver on a given log message more
02664  * than once).
02665  *
02666  * @a targets contains either a URL followed by zero or more relative
02667  * paths, or 1 working copy path, as <tt>const char *</tt>, for which log
02668  * messages are desired.  @a receiver is invoked only on messages whose
02669  * revisions involved a change to some path in @a targets.  @a peg_revision
02670  * indicates in which revision @a targets are valid.  If @a peg_revision is
02671  * #svn_opt_revision_unspecified, it defaults to #svn_opt_revision_head
02672  * for URLs or #svn_opt_revision_working for WC paths.
02673  *
02674  * If @a limit is greater than zero only invoke @a receiver on the first
02675  * @a limit logs.
02676  *
02677  * If @a discover_changed_paths is set, then the @c changed_paths and @c
02678  * changed_paths2 fields in the @c log_entry argument to @a receiver will be
02679  * populated on each invocation.  @note The @c text_modified and @c
02680  * props_modified fields of the changed paths structure may have the value
02681  * #svn_tristate_unknown if the repository does not report that information.
02682  *
02683  * If @a strict_node_history is set, copy history (if any exists) will
02684  * not be traversed while harvesting revision logs for each target.
02685  *
02686  * If @a include_merged_revisions is set, log information for revisions
02687  * which have been merged to @a targets will also be returned.
02688  * 
02689  * @a move_behavior will control which changes will be reported as moves
02690  * instead of additions and vice versa.
02691  *
02692  * If @a revprops is NULL, retrieve all revision properties; else, retrieve
02693  * only the revision properties named by the (const char *) array elements
02694  * (i.e. retrieve none if the array is empty).
02695  *
02696  * Use @a pool for any temporary allocation.
02697  *
02698  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2/baton2
02699  * with a 'skip' signal on any unversioned targets.
02700  *
02701  * @since New in 1.9.
02702  */
02703 svn_error_t *
02704 svn_client_log6(const apr_array_header_t *targets,
02705                 const svn_opt_revision_t *peg_revision,
02706                 const apr_array_header_t *revision_ranges,
02707                 int limit,
02708                 svn_boolean_t discover_changed_paths,
02709                 svn_boolean_t strict_node_history,
02710                 svn_boolean_t include_merged_revisions,
02711                 svn_move_behavior_t move_behavior,
02712                 const apr_array_header_t *revprops,
02713                 svn_log_entry_receiver_t receiver,
02714                 void *receiver_baton,
02715                 svn_client_ctx_t *ctx,
02716                 apr_pool_t *pool);
02717 
02718 /**
02719  * Similar to svn_client_log6(), but with @a move_behavior set to
02720  * #svn_move_behavior_no_moves.
02721  *
02722  * @deprecated Provided for compatibility with the 1.8 API.
02723  * @since New in 1.6.
02724  */
02725 SVN_DEPRECATED
02726 svn_error_t *
02727 svn_client_log5(const apr_array_header_t *targets,
02728                 const svn_opt_revision_t *peg_revision,
02729                 const apr_array_header_t *revision_ranges,
02730                 int limit,
02731                 svn_boolean_t discover_changed_paths,
02732                 svn_boolean_t strict_node_history,
02733                 svn_boolean_t include_merged_revisions,
02734                 const apr_array_header_t *revprops,
02735                 svn_log_entry_receiver_t receiver,
02736                 void *receiver_baton,
02737                 svn_client_ctx_t *ctx,
02738                 apr_pool_t *pool);
02739 
02740 /**
02741  * Similar to svn_client_log5(), but takes explicit start and end parameters
02742  * instead of an array of revision ranges.
02743  *
02744  * @deprecated Provided for compatibility with the 1.5 API.
02745  * @since New in 1.5.
02746  */
02747 SVN_DEPRECATED
02748 svn_error_t *
02749 svn_client_log4(const apr_array_header_t *targets,
02750                 const svn_opt_revision_t *peg_revision,
02751                 const svn_opt_revision_t *start,
02752                 const svn_opt_revision_t *end,
02753                 int limit,
02754                 svn_boolean_t discover_changed_paths,
02755                 svn_boolean_t strict_node_history,
02756                 svn_boolean_t include_merged_revisions,
02757                 const apr_array_header_t *revprops,
02758                 svn_log_entry_receiver_t receiver,
02759                 void *receiver_baton,
02760                 svn_client_ctx_t *ctx,
02761                 apr_pool_t *pool);
02762 
02763 /**
02764  * Similar to svn_client_log4(), but using #svn_log_message_receiver_t
02765  * instead of #svn_log_entry_receiver_t.  Also, @a
02766  * include_merged_revisions is set to @c FALSE and @a revprops is
02767  * svn:author, svn:date, and svn:log.
02768  *
02769  * @deprecated Provided for compatibility with the 1.4 API.
02770  * @since New in 1.4.
02771  */
02772 SVN_DEPRECATED
02773 svn_error_t *
02774 svn_client_log3(const apr_array_header_t *targets,
02775                 const svn_opt_revision_t *peg_revision,
02776                 const svn_opt_revision_t *start,
02777                 const svn_opt_revision_t *end,
02778                 int limit,
02779                 svn_boolean_t discover_changed_paths,
02780                 svn_boolean_t strict_node_history,
02781                 svn_log_message_receiver_t receiver,
02782                 void *receiver_baton,
02783                 svn_client_ctx_t *ctx,
02784                 apr_pool_t *pool);
02785 
02786 
02787 /**
02788  * Similar to svn_client_log3(), but with the @c kind field of
02789  * @a peg_revision set to #svn_opt_revision_unspecified.
02790  *
02791  * @par Important:
02792  * A special case for the revision range HEAD:1, which was present
02793  * in svn_client_log(), has been removed from svn_client_log2().  Instead, it
02794  * is expected that callers will specify the range HEAD:0, to avoid a
02795  * #SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository
02796  * (i.e. one not containing a revision 1).
02797  *
02798  * @deprecated Provided for compatibility with the 1.3 API.
02799  * @since New in 1.2.
02800  */
02801 SVN_DEPRECATED
02802 svn_error_t *
02803 svn_client_log2(const apr_array_header_t *targets,
02804                 const svn_opt_revision_t *start,
02805                 const svn_opt_revision_t *end,
02806                 int limit,
02807                 svn_boolean_t discover_changed_paths,
02808                 svn_boolean_t strict_node_history,
02809                 svn_log_message_receiver_t receiver,
02810                 void *receiver_baton,
02811                 svn_client_ctx_t *ctx,
02812                 apr_pool_t *pool);
02813 
02814 
02815 /**
02816  * Similar to svn_client_log2(), but with @a limit set to 0, and the
02817  * following special case:
02818  *
02819  * Special case for repositories at revision 0:
02820  *
02821  * If @a start->kind is #svn_opt_revision_head, and @a end->kind is
02822  * #svn_opt_revision_number && @a end->number is @c 1, then handle an
02823  * empty (no revisions) repository specially: instead of erroring
02824  * because requested revision 1 when the highest revision is 0, just
02825  * invoke @a receiver on revision 0, passing @c NULL for changed paths and
02826  * empty strings for the author and date.  This is because that
02827  * particular combination of @a start and @a end usually indicates the
02828  * common case of log invocation -- the user wants to see all log
02829  * messages from youngest to oldest, where the oldest commit is
02830  * revision 1.  That works fine, except when there are no commits in
02831  * the repository, hence this special case.
02832  *
02833  * @deprecated Provided for backward compatibility with the 1.1 API.
02834  */
02835 SVN_DEPRECATED
02836 svn_error_t *
02837 svn_client_log(const apr_array_header_t *targets,
02838                const svn_opt_revision_t *start,
02839                const svn_opt_revision_t *end,
02840                svn_boolean_t discover_changed_paths,
02841                svn_boolean_t strict_node_history,
02842                svn_log_message_receiver_t receiver,
02843                void *receiver_baton,
02844                svn_client_ctx_t *ctx,
02845                apr_pool_t *pool);
02846 
02847 /** @} */
02848 
02849 /**
02850  * @defgroup Blame Show modification information about lines in a file.
02851  *
02852  * @{
02853  */
02854 
02855 /**
02856  * Invoke @a receiver with @a receiver_baton on each line-blame item
02857  * associated with revision @a end of @a path_or_url, using @a start
02858  * as the default source of all blame.  @a peg_revision indicates in
02859  * which revision @a path_or_url is valid.  If @a peg_revision->kind
02860  * is #svn_opt_revision_unspecified, then it defaults to
02861  * #svn_opt_revision_head for URLs or #svn_opt_revision_working for
02862  * WC targets.
02863  *
02864  * If @a start->kind or @a end->kind is #svn_opt_revision_unspecified,
02865  * return the error #SVN_ERR_CLIENT_BAD_REVISION.  If either are
02866  * #svn_opt_revision_working, return the error
02867  * #SVN_ERR_UNSUPPORTED_FEATURE.  If any of the revisions of @a
02868  * path_or_url have a binary mime-type, return the error
02869  * #SVN_ERR_CLIENT_IS_BINARY_FILE, unless @a ignore_mime_type is TRUE,
02870  * in which case blame information will be generated regardless of the
02871  * MIME types of the revisions.
02872  *
02873  * @a start may resolve to a revision number greater (younger) than @a end
02874  * only if the server is 1.8.0 or greater (supports
02875  * #SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE) and the client is 1.9.0 or
02876  * newer.
02877  *
02878  * Use @a diff_options to determine how to compare different revisions of the
02879  * target.
02880  *
02881  * If @a include_merged_revisions is TRUE, also return data based upon
02882  * revisions which have been merged to @a path_or_url.
02883  *
02884  * Use @a pool for any temporary allocation.
02885  *
02886  * @since New in 1.7.
02887  */
02888 svn_error_t *
02889 svn_client_blame5(const char *path_or_url,
02890                   const svn_opt_revision_t *peg_revision,
02891                   const svn_opt_revision_t *start,
02892                   const svn_opt_revision_t *end,
02893                   const svn_diff_file_options_t *diff_options,
02894                   svn_boolean_t ignore_mime_type,
02895                   svn_boolean_t include_merged_revisions,
02896                   svn_client_blame_receiver3_t receiver,
02897                   void *receiver_baton,
02898                   svn_client_ctx_t *ctx,
02899                   apr_pool_t *pool);
02900 
02901 
02902 /**
02903  * Similar to svn_client_blame5(), but with #svn_client_blame_receiver3_t
02904  * as the receiver.
02905  *
02906  * @deprecated Provided for backwards compatibility with the 1.6 API.
02907  *
02908  * @since New in 1.5.
02909  */
02910 SVN_DEPRECATED
02911 svn_error_t *
02912 svn_client_blame4(const char *path_or_url,
02913                   const svn_opt_revision_t *peg_revision,
02914                   const svn_opt_revision_t *start,
02915                   const svn_opt_revision_t *end,
02916                   const svn_diff_file_options_t *diff_options,
02917                   svn_boolean_t ignore_mime_type,
02918                   svn_boolean_t include_merged_revisions,
02919                   svn_client_blame_receiver2_t receiver,
02920                   void *receiver_baton,
02921                   svn_client_ctx_t *ctx,
02922                   apr_pool_t *pool);
02923 
02924 /**
02925  * Similar to svn_client_blame4(), but with @a include_merged_revisions set
02926  * to FALSE, and using a #svn_client_blame_receiver2_t as the receiver.
02927  *
02928  * @deprecated Provided for backwards compatibility with the 1.4 API.
02929  *
02930  * @since New in 1.4.
02931  */
02932 SVN_DEPRECATED
02933 svn_error_t *
02934 svn_client_blame3(const char *path_or_url,
02935                   const svn_opt_revision_t *peg_revision,
02936                   const svn_opt_revision_t *start,
02937                   const svn_opt_revision_t *end,
02938                   const svn_diff_file_options_t *diff_options,
02939                   svn_boolean_t ignore_mime_type,
02940                   svn_client_blame_receiver_t receiver,
02941                   void *receiver_baton,
02942                   svn_client_ctx_t *ctx,
02943                   apr_pool_t *pool);
02944 
02945 /**
02946  * Similar to svn_client_blame3(), but with @a diff_options set to
02947  * default options as returned by svn_diff_file_options_parse() and
02948  * @a ignore_mime_type set to FALSE.
02949  *
02950  * @deprecated Provided for backwards compatibility with the 1.3 API.
02951  *
02952  * @since New in 1.2.
02953  */
02954 SVN_DEPRECATED
02955 svn_error_t *
02956 svn_client_blame2(const char *path_or_url,
02957                   const svn_opt_revision_t *peg_revision,
02958                   const svn_opt_revision_t *start,
02959                   const svn_opt_revision_t *end,
02960                   svn_client_blame_receiver_t receiver,
02961                   void *receiver_baton,
02962                   svn_client_ctx_t *ctx,
02963                   apr_pool_t *pool);
02964 
02965 /**
02966  * Similar to svn_client_blame2() except that @a peg_revision is always
02967  * the same as @a end.
02968  *
02969  * @deprecated Provided for backward compatibility with the 1.1 API.
02970  */
02971 SVN_DEPRECATED
02972 svn_error_t *
02973 svn_client_blame(const char *path_or_url,
02974                  const svn_opt_revision_t *start,
02975                  const svn_opt_revision_t *end,
02976                  svn_client_blame_receiver_t receiver,
02977                  void *receiver_baton,
02978                  svn_client_ctx_t *ctx,
02979                  apr_pool_t *pool);
02980 
02981 /** @} */
02982 
02983 /**
02984  * @defgroup Diff Generate differences between paths.
02985  *
02986  * @{
02987  */
02988 
02989 /**
02990  * Produce diff output which describes the delta between
02991  * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2.  Print
02992  * the output of the diff to @a outstream, and any errors to @a
02993  * errstream.  @a path_or_url1 and @a path_or_url2 can be either
02994  * working-copy paths or URLs.
02995  *
02996  * If @a relative_to_dir is not @c NULL, the original path and
02997  * modified path will have the @a relative_to_dir stripped from the
02998  * front of the respective paths.  If @a relative_to_dir is @c NULL,
02999  * paths will not be modified.  If @a relative_to_dir is not
03000  * @c NULL but @a relative_to_dir is not a parent path of the target,
03001  * an error is returned. Finally, if @a relative_to_dir is a URL, an
03002  * error will be returned.
03003  *
03004  * If either @a revision1 or @a revision2 has an `unspecified' or
03005  * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
03006  *
03007  * @a path_or_url1 and @a path_or_url2 must both represent the same node
03008  * kind -- that is, if @a path_or_url1 is a directory, @a path_or_url2
03009  * must also be, and if @a path_or_url1 is a file, @a path_or_url2 must
03010  * also be.
03011  *
03012  * If @a depth is #svn_depth_infinity, diff fully recursively.
03013  * Else if it is #svn_depth_immediates, diff the named paths and
03014  * their file children (if any), and diff properties of
03015  * subdirectories, but do not descend further into the subdirectories.
03016  * Else if #svn_depth_files, behave as if for #svn_depth_immediates
03017  * except don't diff properties of subdirectories.  If
03018  * #svn_depth_empty, diff exactly the named paths but nothing
03019  * underneath them.
03020  *
03021  * Use @a ignore_ancestry to control whether or not items being
03022  * diffed will be checked for relatedness first.  Unrelated items
03023  * are typically transmitted to the editor as a deletion of one thing
03024  * and the addition of another, but if this flag is TRUE, unrelated
03025  * items will be diffed as if they were related.
03026  *
03027  * If @a no_diff_added is TRUE, then no diff output will be generated
03028  * on added files.
03029  *
03030  * If @a no_diff_deleted is TRUE, then no diff output will be
03031  * generated on deleted files.
03032  *
03033  * If @a show_copies_as_adds is TRUE, then copied files will not be diffed
03034  * against their copyfrom source, and will appear in the diff output
03035  * in their entirety, as if they were newly added.
03036  * ### BUGS: For a repos-repos diff, this is ignored. Instead, a file is
03037  *     diffed against its copyfrom source iff the file is the diff target
03038  *     and not if some parent directory is the diff target. For a repos-WC
03039  *     diff, this is ignored if the file is the diff target.
03040  *
03041  * If @a use_git_diff_format is TRUE, then the git's extended diff format
03042  * will be used.
03043  * ### Do we need to say more about the format? A reference perhaps?
03044  *
03045  * If @a ignore_properties is TRUE, do not show property differences.
03046  * If @a properties_only is TRUE, show only property changes.
03047  * The above two options are mutually exclusive. It is an error to set
03048  * both to TRUE.
03049  *
03050  * Generated headers are encoded using @a header_encoding.
03051  *
03052  * Diff output will not be generated for binary files, unless @a
03053  * ignore_content_type is TRUE, in which case diffs will be shown
03054  * regardless of the content types.
03055  *
03056  * @a diff_options (an array of <tt>const char *</tt>) is used to pass
03057  * additional command line options to the diff processes invoked to compare
03058  * files. @a diff_options is allowed to be @c NULL, in which case a value
03059  * for this option might still be obtained from the Subversion configuration
03060  * file via client context @a ctx.
03061  *
03062  * The authentication baton cached in @a ctx is used to communicate with
03063  * the repository.
03064  *
03065  * @a changelists is an array of <tt>const char *</tt> changelist
03066  * names, used as a restrictive filter on items whose differences are
03067  * reported; that is, don't generate diffs about any item unless
03068  * it's a member of one of those changelists.  If @a changelists is
03069  * empty (or altogether @c NULL), no changelist filtering occurs.
03070  *
03071  * @note Changelist filtering only applies to diffs in which at least
03072  * one side of the diff represents working copy data.
03073  *
03074  * @note @a header_encoding doesn't affect headers generated by external
03075  * diff programs.
03076  *
03077  * @note @a relative_to_dir doesn't affect the path index generated by
03078  * external diff programs.
03079  *
03080  * @since New in 1.8.
03081  */
03082 svn_error_t *
03083 svn_client_diff6(const apr_array_header_t *diff_options,
03084                  const char *path_or_url1,
03085                  const svn_opt_revision_t *revision1,
03086                  const char *path_or_url2,
03087                  const svn_opt_revision_t *revision2,
03088                  const char *relative_to_dir,
03089                  svn_depth_t depth,
03090                  svn_boolean_t ignore_ancestry,
03091                  svn_boolean_t no_diff_added,
03092                  svn_boolean_t no_diff_deleted,
03093                  svn_boolean_t show_copies_as_adds,
03094                  svn_boolean_t ignore_content_type,
03095                  svn_boolean_t ignore_properties,
03096                  svn_boolean_t properties_only,
03097                  svn_boolean_t use_git_diff_format,
03098                  const char *header_encoding,
03099                  svn_stream_t *outstream,
03100                  svn_stream_t *errstream,
03101                  const apr_array_header_t *changelists,
03102                  svn_client_ctx_t *ctx,
03103                  apr_pool_t *pool);
03104 
03105 /** Similar to svn_client_diff6(), but with @a outfile and @a errfile,
03106  * instead of @a outstream and @a errstream, and with @a
03107  * no_diff_added, @a ignore_properties, and @a properties_only always
03108  * passed as @c FALSE (which means that additions and property changes
03109  * are always transmitted).
03110  *
03111  * @deprecated Provided for backward compatibility with the 1.7 API.
03112  * @since New in 1.7.
03113  */
03114 SVN_DEPRECATED
03115 svn_error_t *
03116 svn_client_diff5(const apr_array_header_t *diff_options,
03117                  const char *path1,
03118                  const svn_opt_revision_t *revision1,
03119                  const char *path2,
03120                  const svn_opt_revision_t *revision2,
03121                  const char *relative_to_dir,
03122                  svn_depth_t depth,
03123                  svn_boolean_t ignore_ancestry,
03124                  svn_boolean_t no_diff_deleted,
03125                  svn_boolean_t show_copies_as_adds,
03126                  svn_boolean_t ignore_content_type,
03127                  svn_boolean_t use_git_diff_format,
03128                  const char *header_encoding,
03129                  apr_file_t *outfile,
03130                  apr_file_t *errfile,
03131                  const apr_array_header_t *changelists,
03132                  svn_client_ctx_t *ctx,
03133                  apr_pool_t *pool);
03134 
03135 /**
03136  * Similar to svn_client_diff5(), but with @a show_copies_as_adds set to
03137  * @c FALSE and @a use_git_diff_format set to @c FALSE.
03138  *
03139  * @deprecated Provided for backward compatibility with the 1.6 API.
03140  * @since New in 1.5.
03141  */
03142 SVN_DEPRECATED
03143 svn_error_t *
03144 svn_client_diff4(const apr_array_header_t *diff_options,
03145                  const char *path1,
03146                  const svn_opt_revision_t *revision1,
03147                  const char *path2,
03148                  const svn_opt_revision_t *revision2,
03149                  const char *relative_to_dir,
03150                  svn_depth_t depth,
03151                  svn_boolean_t ignore_ancestry,
03152                  svn_boolean_t no_diff_deleted,
03153                  svn_boolean_t ignore_content_type,
03154                  const char *header_encoding,
03155                  apr_file_t *outfile,
03156                  apr_file_t *errfile,
03157                  const apr_array_header_t *changelists,
03158                  svn_client_ctx_t *ctx,
03159                  apr_pool_t *pool);
03160 
03161 /**
03162  * Similar to svn_client_diff4(), but with @a changelists passed as @c
03163  * NULL, and @a depth set according to @a recurse: if @a recurse is
03164  * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
03165  * FALSE, set @a depth to #svn_depth_empty.
03166  *
03167  * @deprecated Provided for backward compatibility with the 1.4 API.
03168  * @since New in 1.3.
03169  */
03170 SVN_DEPRECATED
03171 svn_error_t *
03172 svn_client_diff3(const apr_array_header_t *diff_options,
03173                  const char *path1,
03174                  const svn_opt_revision_t *revision1,
03175                  const char *path2,
03176                  const svn_opt_revision_t *revision2,
03177                  svn_boolean_t recurse,
03178                  svn_boolean_t ignore_ancestry,
03179                  svn_boolean_t no_diff_deleted,
03180                  svn_boolean_t ignore_content_type,
03181                  const char *header_encoding,
03182                  apr_file_t *outfile,
03183                  apr_file_t *errfile,
03184                  svn_client_ctx_t *ctx,
03185                  apr_pool_t *pool);
03186 
03187 
03188 /**
03189  * Similar to svn_client_diff3(), but with @a header_encoding set to
03190  * @c APR_LOCALE_CHARSET.
03191  *
03192  * @deprecated Provided for backward compatibility with the 1.2 API.
03193  * @since New in 1.2.
03194  */
03195 SVN_DEPRECATED
03196 svn_error_t *
03197 svn_client_diff2(const apr_array_header_t *diff_options,
03198                  const char *path1,
03199                  const svn_opt_revision_t *revision1,
03200                  const char *path2,
03201                  const svn_opt_revision_t *revision2,
03202                  svn_boolean_t recurse,
03203                  svn_boolean_t ignore_ancestry,
03204                  svn_boolean_t no_diff_deleted,
03205                  svn_boolean_t ignore_content_type,
03206                  apr_file_t *outfile,
03207                  apr_file_t *errfile,
03208                  svn_client_ctx_t *ctx,
03209                  apr_pool_t *pool);
03210 
03211 /**
03212  * Similar to svn_client_diff2(), but with @a ignore_content_type
03213  * always set to FALSE.
03214  *
03215  * @deprecated Provided for backward compatibility with the 1.1 API.
03216  */
03217 SVN_DEPRECATED
03218 svn_error_t *
03219 svn_client_diff(const apr_array_header_t *diff_options,
03220                 const char *path1,
03221                 const svn_opt_revision_t *revision1,
03222                 const char *path2,
03223                 const svn_opt_revision_t *revision2,
03224                 svn_boolean_t recurse,
03225                 svn_boolean_t ignore_ancestry,
03226                 svn_boolean_t no_diff_deleted,
03227                 apr_file_t *outfile,
03228                 apr_file_t *errfile,
03229                 svn_client_ctx_t *ctx,
03230                 apr_pool_t *pool);
03231 
03232 /**
03233  * Produce diff output which describes the delta between the filesystem
03234  * object @a path_or_url in peg revision @a peg_revision, as it changed
03235  * between @a start_revision and @a end_revision.  @a path_or_url can
03236  * be either a working-copy path or URL.
03237  *
03238  * If @a peg_revision is #svn_opt_revision_unspecified, behave
03239  * identically to svn_client_diff6(), using @a path_or_url for both of that
03240  * function's @a path_or_url1 and @a path_or_url2 arguments.
03241  *
03242  * All other options are handled identically to svn_client_diff6().
03243  *
03244  * @since New in 1.8.
03245  */
03246 svn_error_t *
03247 svn_client_diff_peg6(const apr_array_header_t *diff_options,
03248                      const char *path_or_url,
03249                      const svn_opt_revision_t *peg_revision,
03250                      const svn_opt_revision_t *start_revision,
03251                      const svn_opt_revision_t *end_revision,
03252                      const char *relative_to_dir,
03253                      svn_depth_t depth,
03254                      svn_boolean_t ignore_ancestry,
03255                      svn_boolean_t no_diff_added,
03256                      svn_boolean_t no_diff_deleted,
03257                      svn_boolean_t show_copies_as_adds,
03258                      svn_boolean_t ignore_content_type,
03259                      svn_boolean_t ignore_properties,
03260                      svn_boolean_t properties_only,
03261                      svn_boolean_t use_git_diff_format,
03262                      const char *header_encoding,
03263                      svn_stream_t *outstream,
03264                      svn_stream_t *errstream,
03265                      const apr_array_header_t *changelists,
03266                      svn_client_ctx_t *ctx,
03267                      apr_pool_t *pool);
03268 
03269 /** Similar to svn_client_diff6_peg6(), but with @a outfile and @a errfile,
03270  * instead of @a outstream and @a errstream, and with @a
03271  * no_diff_added, @a ignore_properties, and @a properties_only always
03272  * passed as @c FALSE (which means that additions and property changes
03273  * are always transmitted).
03274  *
03275  * @deprecated Provided for backward compatibility with the 1.7 API.
03276  * @since New in 1.7.
03277  */
03278 SVN_DEPRECATED
03279 svn_error_t *
03280 svn_client_diff_peg5(const apr_array_header_t *diff_options,
03281                      const char *path,
03282                      const svn_opt_revision_t *peg_revision,
03283                      const svn_opt_revision_t *start_revision,
03284                      const svn_opt_revision_t *end_revision,
03285                      const char *relative_to_dir,
03286                      svn_depth_t depth,
03287                      svn_boolean_t ignore_ancestry,
03288                      svn_boolean_t no_diff_deleted,
03289                      svn_boolean_t show_copies_as_adds,
03290                      svn_boolean_t ignore_content_type,
03291                      svn_boolean_t use_git_diff_format,
03292                      const char *header_encoding,
03293                      apr_file_t *outfile,
03294                      apr_file_t *errfile,
03295                      const apr_array_header_t *changelists,
03296                      svn_client_ctx_t *ctx,
03297                      apr_pool_t *pool);
03298 
03299 /**
03300  * Similar to svn_client_diff_peg5(), but with @a show_copies_as_adds set to
03301  * @c FALSE and @a use_git_diff_format set to @c FALSE.
03302  *
03303  * @since New in 1.5.
03304  * @deprecated Provided for backward compatibility with the 1.6 API.
03305  */
03306 SVN_DEPRECATED
03307 svn_error_t *
03308 svn_client_diff_peg4(const apr_array_header_t *diff_options,
03309                      const char *path,
03310                      const svn_opt_revision_t *peg_revision,
03311                      const svn_opt_revision_t *start_revision,
03312                      const svn_opt_revision_t *end_revision,
03313                      const char *relative_to_dir,
03314                      svn_depth_t depth,
03315                      svn_boolean_t ignore_ancestry,
03316                      svn_boolean_t no_diff_deleted,
03317                      svn_boolean_t ignore_content_type,
03318                      const char *header_encoding,
03319                      apr_file_t *outfile,
03320                      apr_file_t *errfile,
03321                      const apr_array_header_t *changelists,
03322                      svn_client_ctx_t *ctx,
03323                      apr_pool_t *pool);
03324 
03325 /**
03326  * Similar to svn_client_diff_peg4(), but with @a changelists passed
03327  * as @c NULL, and @a depth set according to @a recurse: if @a recurse
03328  * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
03329  * FALSE, set @a depth to #svn_depth_files.
03330  *
03331  * @deprecated Provided for backward compatibility with the 1.4 API.
03332  * @since New in 1.3.
03333  */
03334 SVN_DEPRECATED
03335 svn_error_t *
03336 svn_client_diff_peg3(const apr_array_header_t *diff_options,
03337                      const char *path,
03338                      const svn_opt_revision_t *peg_revision,
03339                      const svn_opt_revision_t *start_revision,
03340                      const svn_opt_revision_t *end_revision,
03341                      svn_boolean_t recurse,
03342                      svn_boolean_t ignore_ancestry,
03343                      svn_boolean_t no_diff_deleted,
03344                      svn_boolean_t ignore_content_type,
03345                      const char *header_encoding,
03346                      apr_file_t *outfile,
03347                      apr_file_t *errfile,
03348                      svn_client_ctx_t *ctx,
03349                      apr_pool_t *pool);
03350 
03351 /**
03352  * Similar to svn_client_diff_peg3(), but with @a header_encoding set to
03353  * @c APR_LOCALE_CHARSET.
03354  *
03355  * @deprecated Provided for backward compatibility with the 1.2 API.
03356  * @since New in 1.2.
03357  */
03358 SVN_DEPRECATED
03359 svn_error_t *
03360 svn_client_diff_peg2(const apr_array_header_t *diff_options,
03361                      const char *path,
03362                      const svn_opt_revision_t *peg_revision,
03363                      const svn_opt_revision_t *start_revision,
03364                      const svn_opt_revision_t *end_revision,
03365                      svn_boolean_t recurse,
03366                      svn_boolean_t ignore_ancestry,
03367                      svn_boolean_t no_diff_deleted,
03368                      svn_boolean_t ignore_content_type,
03369                      apr_file_t *outfile,
03370                      apr_file_t *errfile,
03371                      svn_client_ctx_t *ctx,
03372                      apr_pool_t *pool);
03373 
03374 /**
03375  * Similar to svn_client_diff_peg2(), but with @a ignore_content_type
03376  * always set to FALSE.
03377  *
03378  * @since New in 1.1.
03379  * @deprecated Provided for backward compatibility with the 1.1 API.
03380  */
03381 SVN_DEPRECATED
03382 svn_error_t *
03383 svn_client_diff_peg(const apr_array_header_t *diff_options,
03384                     const char *path,
03385                     const svn_opt_revision_t *peg_revision,
03386                     const svn_opt_revision_t *start_revision,
03387                     const svn_opt_revision_t *end_revision,
03388                     svn_boolean_t recurse,
03389                     svn_boolean_t ignore_ancestry,
03390                     svn_boolean_t no_diff_deleted,
03391                     apr_file_t *outfile,
03392                     apr_file_t *errfile,
03393                     svn_client_ctx_t *ctx,
03394                     apr_pool_t *pool);
03395 
03396 /**
03397  * Produce a diff summary which lists the changed items between
03398  * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2 without
03399  * creating text deltas. @a path_or_url1 and @a path_or_url2 can be
03400  * either working-copy paths or URLs.
03401  *
03402  * The function may report false positives if @a ignore_ancestry is false,
03403  * since a file might have been modified between two revisions, but still
03404  * have the same contents.
03405  *
03406  * Calls @a summarize_func with @a summarize_baton for each difference
03407  * with a #svn_client_diff_summarize_t structure describing the difference.
03408  *
03409  * See svn_client_diff6() for a description of the other parameters.
03410  *
03411  * @since New in 1.5.
03412  */
03413 svn_error_t *
03414 svn_client_diff_summarize2(const char *path_or_url1,
03415                            const svn_opt_revision_t *revision1,
03416                            const char *path_or_url2,
03417                            const svn_opt_revision_t *revision2,
03418                            svn_depth_t depth,
03419                            svn_boolean_t ignore_ancestry,
03420                            const apr_array_header_t *changelists,
03421                            svn_client_diff_summarize_func_t summarize_func,
03422                            void *summarize_baton,
03423                            svn_client_ctx_t *ctx,
03424                            apr_pool_t *pool);
03425 
03426 /**
03427  * Similar to svn_client_diff_summarize2(), but with @a changelists
03428  * passed as @c NULL, and @a depth set according to @a recurse: if @a
03429  * recurse is TRUE, set @a depth to #svn_depth_infinity, if @a
03430  * recurse is FALSE, set @a depth to #svn_depth_files.
03431  *
03432  * @deprecated Provided for backward compatibility with the 1.4 API.
03433  *
03434  * @since New in 1.4.
03435  */
03436 SVN_DEPRECATED
03437 svn_error_t *
03438 svn_client_diff_summarize(const char *path1,
03439                           const svn_opt_revision_t *revision1,
03440                           const char *path2,
03441                           const svn_opt_revision_t *revision2,
03442                           svn_boolean_t recurse,
03443                           svn_boolean_t ignore_ancestry,
03444                           svn_client_diff_summarize_func_t summarize_func,
03445                           void *summarize_baton,
03446                           svn_client_ctx_t *ctx,
03447                           apr_pool_t *pool);
03448 
03449 /**
03450  * Produce a diff summary which lists the changed items between the
03451  * filesystem object @a path_or_url in peg revision @a peg_revision, as it
03452  * changed between @a start_revision and @a end_revision. @a path_or_url can
03453  * be either a working-copy path or URL.
03454  *
03455  * If @a peg_revision is #svn_opt_revision_unspecified, behave
03456  * identically to svn_client_diff_summarize2(), using @a path_or_url for
03457  * both of that function's @a path_or_url1 and @a path_or_url2 arguments.
03458  *
03459  * The function may report false positives if @a ignore_ancestry is false,
03460  * as described in the documentation for svn_client_diff_summarize2().
03461  *
03462  * Call @a summarize_func with @a summarize_baton for each difference
03463  * with a #svn_client_diff_summarize_t structure describing the difference.
03464  *
03465  * See svn_client_diff_peg5() for a description of the other parameters.
03466  *
03467  * @since New in 1.5.
03468  */
03469 svn_error_t *
03470 svn_client_diff_summarize_peg2(const char *path_or_url,
03471                                const svn_opt_revision_t *peg_revision,
03472                                const svn_opt_revision_t *start_revision,
03473                                const svn_opt_revision_t *end_revision,
03474                                svn_depth_t depth,
03475                                svn_boolean_t ignore_ancestry,
03476                                const apr_array_header_t *changelists,
03477                                svn_client_diff_summarize_func_t summarize_func,
03478                                void *summarize_baton,
03479                                svn_client_ctx_t *ctx,
03480                                apr_pool_t *pool);
03481 
03482 /**
03483  * Similar to svn_client_diff_summarize_peg2(), but with @a
03484  * changelists passed as @c NULL, and @a depth set according to @a
03485  * recurse: if @a recurse is TRUE, set @a depth to
03486  * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to
03487  * #svn_depth_files.
03488  *
03489  * @deprecated Provided for backward compatibility with the 1.4 API.
03490  *
03491  * @since New in 1.4.
03492  */
03493 SVN_DEPRECATED
03494 svn_error_t *
03495 svn_client_diff_summarize_peg(const char *path,
03496                               const svn_opt_revision_t *peg_revision,
03497                               const svn_opt_revision_t *start_revision,
03498                               const svn_opt_revision_t *end_revision,
03499                               svn_boolean_t recurse,
03500                               svn_boolean_t ignore_ancestry,
03501                               svn_client_diff_summarize_func_t summarize_func,
03502                               void *summarize_baton,
03503                               svn_client_ctx_t *ctx,
03504                               apr_pool_t *pool);
03505 
03506 /** @} */
03507 
03508 /**
03509  * @defgroup Merge Merge changes between branches.
03510  *
03511  * @{
03512  */
03513 
03514 /** Get information about the state of merging between two branches.
03515  *
03516  * The source is specified by @a source_path_or_url at @a source_revision.
03517  * The target is specified by @a target_path_or_url at @a target_revision,
03518  * which refers to either a WC or a repository location.
03519  *
03520  * Set @a *needs_reintegration to true if an automatic merge from source
03521  * to target would be a reintegration merge: that is, if the last automatic
03522  * merge was in the opposite direction; or to false otherwise.
03523  *
03524  * Set @a *yca_url, @a *yca_rev, @a *base_url, @a *base_rev, @a *right_url,
03525  * @a *right_rev, @a *target_url, @a *target_rev to the repository locations
03526  * of, respectively: the youngest common ancestor of the branches, the base
03527  * chosen for 3-way merge, the right-hand side of the source diff, and the
03528  * target.
03529  *
03530  * Set @a repos_root_url to the URL of the repository root.  This is a
03531  * common prefix of all four URL outputs.
03532  *
03533  * Allocate the results in @a result_pool.  Any of the output pointers may
03534  * be NULL if not wanted.
03535  *
03536  * @since New in 1.8.
03537  */
03538 svn_error_t *
03539 svn_client_get_merging_summary(svn_boolean_t *needs_reintegration,
03540                                const char **yca_url, svn_revnum_t *yca_rev,
03541                                const char **base_url, svn_revnum_t *base_rev,
03542                                const char **right_url, svn_revnum_t *right_rev,
03543                                const char **target_url, svn_revnum_t *target_rev,
03544                                const char **repos_root_url,
03545                                const char *source_path_or_url,
03546                                const svn_opt_revision_t *source_revision,
03547                                const char *target_path_or_url,
03548                                const svn_opt_revision_t *target_revision,
03549                                svn_client_ctx_t *ctx,
03550                                apr_pool_t *result_pool,
03551                                apr_pool_t *scratch_pool);
03552 
03553 
03554 /** Merge changes from @a source1/@a revision1 to @a source2/@a revision2 into
03555  * the working-copy path @a target_wcpath.
03556  *
03557  * @a source1 and @a source2 are either URLs that refer to entries in the
03558  * repository, or paths to entries in the working copy.
03559  *
03560  * By "merging", we mean:  apply file differences using
03561  * svn_wc_merge(), and schedule additions & deletions when appropriate.
03562  *
03563  * @a source1 and @a source2 must both represent the same node kind -- that
03564  * is, if @a source1 is a directory, @a source2 must also be, and if @a source1
03565  * is a file, @a source2 must also be.
03566  *
03567  * If either @a revision1 or @a revision2 has an `unspecified' or
03568  * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
03569  *
03570  * If @a depth is #svn_depth_infinity, merge fully recursively.
03571  * Else if #svn_depth_immediates, merge changes at most to files
03572  * that are immediate children of @a target_wcpath and to directory
03573  * properties of @a target_wcpath and its immediate subdirectory children.
03574  * Else if #svn_depth_files, merge at most to immediate file
03575  * children of @a target_wcpath and to @a target_wcpath itself.
03576  * Else if #svn_depth_empty, apply changes only to @a target_wcpath
03577  * (i.e., directory property changes only)
03578  *
03579  * If @a depth is #svn_depth_unknown, use the depth of @a target_wcpath.
03580  *
03581  * If @a ignore_mergeinfo is true, disable merge tracking, by treating the
03582  * two sources as unrelated even if they actually have a common ancestor.
03583  *
03584  * If @a diff_ignore_ancestry is true, diff unrelated nodes as if related:
03585  * that is, diff the 'left' and 'right' versions of a node as if they were
03586  * related (if they are the same kind) even if they are not related.
03587  * Otherwise, diff unrelated items as a deletion of one thing and the
03588  * addition of another.
03589  *
03590  * If @a force_delete is false and the merge involves deleting a file whose
03591  * content differs from the source-left version, or a locally modified
03592  * directory, or an unversioned item, then the operation will fail.  If
03593  * @a force_delete is true then all such items will be deleted.
03594  *
03595  * @a merge_options (an array of <tt>const char *</tt>), if non-NULL,
03596  * is used to pass additional command line arguments to the merge
03597  * processes (internal or external).  @see
03598  * svn_diff_file_options_parse().
03599  *
03600  * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with @a
03601  * ctx->notify_baton2 once for each merged target, passing the target's local
03602  * path.
03603  *
03604  * If @a record_only is TRUE, the merge is performed, but is limited only to
03605  * mergeinfo property changes on existing paths in @a target_wcpath.
03606  *
03607  * If @a dry_run is TRUE, the merge is carried out, and full notification
03608  * feedback is provided, but the working copy is not modified.
03609  *
03610  * If allow_mixed_rev is @c FALSE, and @a merge_target is a mixed-revision
03611  * working copy, raise @c SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED.
03612  * Because users rarely intend to merge into mixed-revision working copies,
03613  * it is recommended to set this parameter to FALSE by default unless the
03614  * user has explicitly requested a merge into a mixed-revision working copy.
03615  *
03616  * The authentication baton cached in @a ctx is used to communicate with the
03617  * repository.
03618  *
03619  * @since New in 1.8.
03620  */
03621 svn_error_t *
03622 svn_client_merge5(const char *source1,
03623                   const svn_opt_revision_t *revision1,
03624                   const char *source2,
03625                   const svn_opt_revision_t *revision2,
03626                   const char *target_wcpath,
03627                   svn_depth_t depth,
03628                   svn_boolean_t ignore_mergeinfo,
03629                   svn_boolean_t diff_ignore_ancestry,
03630                   svn_boolean_t force_delete,
03631                   svn_boolean_t record_only,
03632                   svn_boolean_t dry_run,
03633                   svn_boolean_t allow_mixed_rev,
03634                   const apr_array_header_t *merge_options,
03635                   svn_client_ctx_t *ctx,
03636                   apr_pool_t *pool);
03637 
03638 /**
03639  * Similar to svn_client_merge5(), but the single @a ignore_ancestry
03640  * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
03641  *
03642  * @deprecated Provided for backward compatibility with the 1.7 API.
03643  * @since New in 1.7.
03644  */
03645 SVN_DEPRECATED
03646 svn_error_t *
03647 svn_client_merge4(const char *source1,
03648                   const svn_opt_revision_t *revision1,
03649                   const char *source2,
03650                   const svn_opt_revision_t *revision2,
03651                   const char *target_wcpath,
03652                   svn_depth_t depth,
03653                   svn_boolean_t ignore_ancestry,
03654                   svn_boolean_t force_delete,
03655                   svn_boolean_t record_only,
03656                   svn_boolean_t dry_run,
03657                   svn_boolean_t allow_mixed_rev,
03658                   const apr_array_header_t *merge_options,
03659                   svn_client_ctx_t *ctx,
03660                   apr_pool_t *pool);
03661 
03662 /**
03663  * Similar to svn_client_merge4(), but with @a allow_mixed_rev set to
03664  * @c TRUE.  The @a force parameter maps to the @c force_delete parameter
03665  * of svn_client_merge4().
03666  *
03667  * @deprecated Provided for backward compatibility with the 1.6 API.
03668  *
03669  * @since New in 1.5.
03670  */
03671 SVN_DEPRECATED
03672 svn_error_t *
03673 svn_client_merge3(const char *source1,
03674                   const svn_opt_revision_t *revision1,
03675                   const char *source2,
03676                   const svn_opt_revision_t *revision2,
03677                   const char *target_wcpath,
03678                   svn_depth_t depth,
03679                   svn_boolean_t ignore_ancestry,
03680                   svn_boolean_t force,
03681                   svn_boolean_t record_only,
03682                   svn_boolean_t dry_run,
03683                   const apr_array_header_t *merge_options,
03684                   svn_client_ctx_t *ctx,
03685                   apr_pool_t *pool);
03686 
03687 /**
03688  * Similar to svn_client_merge3(), but with @a record_only set to @c
03689  * FALSE, and @a depth set according to @a recurse: if @a recurse is
03690  * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
03691  * FALSE, set @a depth to #svn_depth_files.
03692  *
03693  * @deprecated Provided for backward compatibility with the 1.4 API.
03694  *
03695  * @since New in 1.4.
03696  */
03697 SVN_DEPRECATED
03698 svn_error_t *
03699 svn_client_merge2(const char *source1,
03700                   const svn_opt_revision_t *revision1,
03701                   const char *source2,
03702                   const svn_opt_revision_t *revision2,
03703                   const char *target_wcpath,
03704                   svn_boolean_t recurse,
03705                   svn_boolean_t ignore_ancestry,
03706                   svn_boolean_t force,
03707                   svn_boolean_t dry_run,
03708                   const apr_array_header_t *merge_options,
03709                   svn_client_ctx_t *ctx,
03710                   apr_pool_t *pool);
03711 
03712 
03713 /**
03714  * Similar to svn_client_merge2(), but with @a merge_options set to NULL.
03715  *
03716  * @deprecated Provided for backwards compatibility with the 1.3 API.
03717  */
03718 SVN_DEPRECATED
03719 svn_error_t *
03720 svn_client_merge(const char *source1,
03721                  const svn_opt_revision_t *revision1,
03722                  const char *source2,
03723                  const svn_opt_revision_t *revision2,
03724                  const char *target_wcpath,
03725                  svn_boolean_t recurse,
03726                  svn_boolean_t ignore_ancestry,
03727                  svn_boolean_t force,
03728                  svn_boolean_t dry_run,
03729                  svn_client_ctx_t *ctx,
03730                  apr_pool_t *pool);
03731 
03732 
03733 /**
03734  * Perform a reintegration merge of @a source_path_or_url at @a source_peg_revision
03735  * into @a target_wcpath.
03736  * @a target_wcpath must be a single-revision, #svn_depth_infinity,
03737  * pristine, unswitched working copy -- in other words, it must
03738  * reflect a single revision tree, the "target".  The mergeinfo on @a
03739  * source_path_or_url must reflect that all of the target has been merged into it.
03740  * Then this behaves like a merge with svn_client_merge5() from the
03741  * target's URL to the source.
03742  *
03743  * All other options are handled identically to svn_client_merge5().
03744  * The depth of the merge is always #svn_depth_infinity.
03745  *
03746  * @since New in 1.5.
03747  * @deprecated Provided for backwards compatibility with the 1.7 API.
03748  */
03749 SVN_DEPRECATED
03750 svn_error_t *
03751 svn_client_merge_reintegrate(const char *source_path_or_url,
03752                              const svn_opt_revision_t *source_peg_revision,
03753                              const char *target_wcpath,
03754                              svn_boolean_t dry_run,
03755                              const apr_array_header_t *merge_options,
03756                              svn_client_ctx_t *ctx,
03757                              apr_pool_t *pool);
03758 
03759 /**
03760  * Merge changes from the source branch identified by
03761  * @a source_path_or_url in peg revision @a source_peg_revision,
03762  * into the target branch working copy at @a target_wcpath.
03763  *
03764  * If @a ranges_to_merge is NULL then perform an automatic merge of
03765  * all the eligible changes up to @a source_peg_revision.  If the merge
03766  * required is a reintegrate merge, then return an error if the WC has
03767  * mixed revisions, local modifications and/or switched subtrees; if
03768  * the merge is determined to be of the non-reintegrate kind, then
03769  * return an error if @a allow_mixed_rev is false and the WC contains
03770  * mixed revisions.
03771  *
03772  * If @a ranges_to_merge is not NULL then merge the changes specified
03773  * by the revision ranges in @a ranges_to_merge, or, when honouring
03774  * mergeinfo, only the eligible parts of those revision ranges.
03775  * @a ranges_to_merge is an array of <tt>svn_opt_revision_range_t
03776  * *</tt> ranges.  These ranges may describe additive and/or
03777  * subtractive merge ranges, they may overlap fully or partially,
03778  * and/or they may partially or fully negate each other.  This
03779  * rangelist is not required to be sorted.  If any revision in the
03780  * list of provided ranges has an `unspecified' or unrecognized
03781  * `kind', return #SVN_ERR_CLIENT_BAD_REVISION.
03782  *
03783  * If @a ranges_to_merge is an empty array, then do nothing.
03784  *
03785  * All other options are handled identically to svn_client_merge5().
03786  *
03787  * @since New in 1.8.
03788  */
03789 svn_error_t *
03790 svn_client_merge_peg5(const char *source_path_or_url,
03791                       const apr_array_header_t *ranges_to_merge,
03792                       const svn_opt_revision_t *source_peg_revision,
03793                       const char *target_wcpath,
03794                       svn_depth_t depth,
03795                       svn_boolean_t ignore_mergeinfo,
03796                       svn_boolean_t diff_ignore_ancestry,
03797                       svn_boolean_t force_delete,
03798                       svn_boolean_t record_only,
03799                       svn_boolean_t dry_run,
03800                       svn_boolean_t allow_mixed_rev,
03801                       const apr_array_header_t *merge_options,
03802                       svn_client_ctx_t *ctx,
03803                       apr_pool_t *pool);
03804 
03805 /**
03806  * Similar to svn_client_merge_peg5(), but automatic merge is not available
03807  * (@a ranges_to_merge must not be NULL), and the single @a ignore_ancestry
03808  * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry.
03809  *
03810  * @deprecated Provided for backward compatibility with the 1.7 API.
03811  * @since New in 1.7.
03812  */
03813 SVN_DEPRECATED
03814 svn_error_t *
03815 svn_client_merge_peg4(const char *source_path_or_url,
03816                       const apr_array_header_t *ranges_to_merge,
03817                       const svn_opt_revision_t *source_peg_revision,
03818                       const char *target_wcpath,
03819                       svn_depth_t depth,
03820                       svn_boolean_t ignore_ancestry,
03821                       svn_boolean_t force_delete,
03822                       svn_boolean_t record_only,
03823                       svn_boolean_t dry_run,
03824                       svn_boolean_t allow_mixed_rev,
03825                       const apr_array_header_t *merge_options,
03826                       svn_client_ctx_t *ctx,
03827                       apr_pool_t *pool);
03828 
03829 /**
03830  * Similar to svn_client_merge_peg4(), but with @a allow_mixed_rev set to
03831  * @c TRUE.  The @a force parameter maps to the @c force_delete parameter
03832  * of svn_client_merge_peg4().
03833  *
03834  * @deprecated Provided for backward compatibility with the 1.6 API.
03835  *
03836  * @since New in 1.5.
03837  */
03838 SVN_DEPRECATED
03839 svn_error_t *
03840 svn_client_merge_peg3(const char *source,
03841                       const apr_array_header_t *ranges_to_merge,
03842                       const svn_opt_revision_t *peg_revision,
03843                       const char *target_wcpath,
03844                       svn_depth_t depth,
03845                       svn_boolean_t ignore_ancestry,
03846                       svn_boolean_t force,
03847                       svn_boolean_t record_only,
03848                       svn_boolean_t dry_run,
03849                       const apr_array_header_t *merge_options,
03850                       svn_client_ctx_t *ctx,
03851                       apr_pool_t *pool);
03852 
03853 /**
03854  * Similar to svn_client_merge_peg3(), but with @a record_only set to
03855  * @c FALSE, and @a depth set according to @a recurse: if @a recurse
03856  * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is
03857  * FALSE, set @a depth to #svn_depth_files.
03858  *
03859  * @deprecated Provided for backwards compatibility with the 1.4 API.
03860  *
03861  * @since New in 1.4.
03862  */
03863 SVN_DEPRECATED
03864 svn_error_t *
03865 svn_client_merge_peg2(const char *source,
03866                       const svn_opt_revision_t *revision1,
03867                       const svn_opt_revision_t *revision2,
03868                       const svn_opt_revision_t *peg_revision,
03869                       const char *target_wcpath,
03870                       svn_boolean_t recurse,
03871                       svn_boolean_t ignore_ancestry,
03872                       svn_boolean_t force,
03873                       svn_boolean_t dry_run,
03874                       const apr_array_header_t *merge_options,
03875                       svn_client_ctx_t *ctx,
03876                       apr_pool_t *pool);
03877 
03878 /**
03879  * Similar to svn_client_merge_peg2(), but with @a merge_options set to
03880  * NULL.
03881  *
03882  * @deprecated Provided for backwards compatibility with the 1.3 API.
03883  *
03884  * @since New in 1.1.
03885  */
03886 SVN_DEPRECATED
03887 svn_error_t *
03888 svn_client_merge_peg(const char *source,
03889                      const svn_opt_revision_t *revision1,
03890                      const svn_opt_revision_t *revision2,
03891                      const svn_opt_revision_t *peg_revision,
03892                      const char *target_wcpath,
03893                      svn_boolean_t recurse,
03894                      svn_boolean_t ignore_ancestry,
03895                      svn_boolean_t force,
03896                      svn_boolean_t dry_run,
03897                      svn_client_ctx_t *ctx,
03898                      apr_pool_t *pool);
03899 
03900 
03901 /** Set @a suggestions to an ordered array of @c const char *
03902  * potential merge sources (expressed as full repository URLs) for @a
03903  * path_or_url at @a peg_revision.  @a path_or_url is a working copy
03904  * path or repository URL.  @a ctx is a context used for
03905  * authentication in the repository case.  Use @a pool for all
03906  * allocations.
03907  *
03908  * @since New in 1.5.
03909  */
03910 svn_error_t *
03911 svn_client_suggest_merge_sources(apr_array_header_t **suggestions,
03912                                  const char *path_or_url,
03913                                  const svn_opt_revision_t *peg_revision,
03914                                  svn_client_ctx_t *ctx,
03915                                  apr_pool_t *pool);
03916 
03917 
03918 /**
03919  * Get the mergeinfo for a single target node (ignoring any subtrees).
03920  *
03921  * Set @a *mergeinfo to a hash mapping <tt>const char *</tt> merge source
03922  * URLs to <tt>svn_rangelist_t *</tt> rangelists describing the ranges which
03923  * have been merged into @a path_or_url as of @a peg_revision, per
03924  * @a path_or_url's explicit mergeinfo or inherited mergeinfo if no
03925  * explicit mergeinfo if found.  If no explicit or inherited mergeinfo
03926  * is found, then set @a *mergeinfo to NULL.
03927  *
03928  * Use @a pool for all necessary allocations.
03929  *
03930  * If the server doesn't support retrieval of mergeinfo (which will
03931  * never happen for file:// URLs), return an
03932  * #SVN_ERR_UNSUPPORTED_FEATURE error.
03933  *
03934  * @note Unlike most APIs which deal with mergeinfo, this one returns
03935  * data where the keys of the hash are absolute repository URLs rather
03936  * than repository filesystem paths.
03937  *
03938  * @since New in 1.5.
03939  */
03940 svn_error_t *
03941 svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo,
03942                                 const char *path_or_url,
03943                                 const svn_opt_revision_t *peg_revision,
03944                                 svn_client_ctx_t *ctx,
03945                                 apr_pool_t *pool);
03946 
03947 
03948 /**
03949  * Describe the revisions that either have or have not been merged from
03950  * one source branch (or subtree) into another.
03951  *
03952  * If @a finding_merged is TRUE, then drive log entry callbacks
03953  * @a receiver / @a receiver_baton with the revisions merged from
03954  * @a source_path_or_url (as of @a source_peg_revision) into
03955  * @a target_path_or_url (as of @a target_peg_revision).  If @a
03956  * finding_merged is FALSE then find the revisions eligible for merging.
03957  *
03958  * If both @a source_start_revision and @a source_end_revision are
03959  * unspecified (that is, of kind @c svn_opt_revision_unspecified),
03960  * @a receiver will be called the requested revisions from 0 to
03961  * @a source_peg_revision and in that order (that is, oldest to
03962  * youngest).  Otherwise, both @a source_start_revision and
03963  * @a source_end_revision must be specified, which has two effects:
03964  *
03965  *   - @a receiver will be called only with revisions which fall
03966  *     within range of @a source_start_revision to
03967  *     @a source_end_revision, inclusive, and
03968  *
03969  *   - those revisions will be ordered in the same "direction" as the
03970  *     walk from @a source_start_revision to @a source_end_revision.
03971  *     (If @a source_start_revision is the younger of the two, @a
03972  *     receiver will be called with revisions in youngest-to-oldest
03973  *     order; otherwise, the reverse occurs.)
03974  *
03975  * If @a depth is #svn_depth_empty consider only the explicit or
03976  * inherited mergeinfo on @a target_path_or_url when calculating merged
03977  * revisions from @a source_path_or_url.  If @a depth is #svn_depth_infinity
03978  * then also consider the explicit subtree mergeinfo under @a
03979  * target_path_or_url.
03980  * If a depth other than #svn_depth_empty or #svn_depth_infinity is
03981  * requested then return a #SVN_ERR_UNSUPPORTED_FEATURE error.
03982  *
03983  * In addition to the behavior of @a discover_changed_paths described in
03984  * svn_client_log5(), if set to TRUE it enables detection of sub-tree
03985  * merges that are complete but can't be detected as complete without
03986  * access to the changed paths.  Sub-tree merges detected as complete will
03987  * be included if @a finding_merged is TRUE or filtered if @a finding_merged
03988  * is FALSE.
03989  *
03990  * @a revprops is the same as for svn_client_log5().  Use @a scratch_pool for
03991  * all temporary allocations.
03992  *
03993  * @a ctx is a context used for authentication.
03994  *
03995  * If the server doesn't support retrieval of mergeinfo, return an
03996  * #SVN_ERR_UNSUPPORTED_FEATURE error.
03997  *
03998  * @since New in 1.8.
03999  */
04000 svn_error_t *
04001 svn_client_mergeinfo_log2(svn_boolean_t finding_merged,
04002                           const char *target_path_or_url,
04003                           const svn_opt_revision_t *target_peg_revision,
04004                           const char *source_path_or_url,
04005                           const svn_opt_revision_t *source_peg_revision,
04006                           const svn_opt_revision_t *source_start_revision,
04007                           const svn_opt_revision_t *source_end_revision,
04008                           svn_log_entry_receiver_t receiver,
04009                           void *receiver_baton,
04010                           svn_boolean_t discover_changed_paths,
04011                           svn_depth_t depth,
04012                           const apr_array_header_t *revprops,
04013                           svn_client_ctx_t *ctx,
04014                           apr_pool_t *scratch_pool);
04015 
04016 /**
04017  * Similar to svn_client_mergeinfo_log2(), but with @a source_start_revision
04018  * and @a source_end_revision always of kind @c svn_opt_revision_unspecified;
04019  *
04020  * @deprecated Provided for backwards compatibility with the 1.7 API.
04021  * @since New in 1.7.
04022  */
04023 SVN_DEPRECATED
04024 svn_error_t *
04025 svn_client_mergeinfo_log(svn_boolean_t finding_merged,
04026                          const char *target_path_or_url,
04027                          const svn_opt_revision_t *target_peg_revision,
04028                          const char *source_path_or_url,
04029                          const svn_opt_revision_t *source_peg_revision,
04030                          svn_log_entry_receiver_t receiver,
04031                          void *receiver_baton,
04032                          svn_boolean_t discover_changed_paths,
04033                          svn_depth_t depth,
04034                          const apr_array_header_t *revprops,
04035                          svn_client_ctx_t *ctx,
04036                          apr_pool_t *scratch_pool);
04037 
04038 /**
04039  * Similar to svn_client_mergeinfo_log(), but finds only merged revisions
04040  * and always operates at @a depth #svn_depth_empty.
04041  *
04042  * @deprecated Provided for backwards compatibility with the 1.6 API. Use
04043  * svn_client_mergeinfo_log() instead.
04044  * @since New in 1.5.
04045  */
04046 SVN_DEPRECATED
04047 svn_error_t *
04048 svn_client_mergeinfo_log_merged(const char *path_or_url,
04049                                 const svn_opt_revision_t *peg_revision,
04050                                 const char *merge_source_path_or_url,
04051                                 const svn_opt_revision_t *src_peg_revision,
04052                                 svn_log_entry_receiver_t receiver,
04053                                 void *receiver_baton,
04054                                 svn_boolean_t discover_changed_paths,
04055                                 const apr_array_header_t *revprops,
04056                                 svn_client_ctx_t *ctx,
04057                                 apr_pool_t *pool);
04058 
04059 /**
04060  * Similar to svn_client_mergeinfo_log(), but finds only eligible revisions
04061  * and always operates at @a depth #svn_depth_empty.
04062  *
04063  * @deprecated Provided for backwards compatibility with the 1.6 API. Use
04064  * svn_client_mergeinfo_log() instead.
04065  * @since New in 1.5.
04066  */
04067 SVN_DEPRECATED
04068 svn_error_t *
04069 svn_client_mergeinfo_log_eligible(const char *path_or_url,
04070                                   const svn_opt_revision_t *peg_revision,
04071                                   const char *merge_source_path_or_url,
04072                                   const svn_opt_revision_t *src_peg_revision,
04073                                   svn_log_entry_receiver_t receiver,
04074                                   void *receiver_baton,
04075                                   svn_boolean_t discover_changed_paths,
04076                                   const apr_array_header_t *revprops,
04077                                   svn_client_ctx_t *ctx,
04078                                   apr_pool_t *pool);
04079 
04080 /** @} */
04081 
04082 /**
04083  * @defgroup Cleanup Cleanup an abnormally terminated working copy.
04084  *
04085  * @{
04086  */
04087 
04088 /** Recursively vacuum a working copy directory @a dir, removing unnecessary
04089  * data.
04090  *
04091  * If @a include_externals is @c TRUE, recurse into externals and vacuum them
04092  * as well.
04093  *
04094  * If @a remove_unversioned_items is @c TRUE, remove unversioned items
04095  * in @a dir after successful working copy cleanup.
04096  * If @a remove_ignored_items is @c TRUE, remove ignored unversioned items
04097  * in @a dir after successful working copy cleanup.
04098  *
04099  * When asked to remove unversioned or ignored items, and the working copy
04100  * is already locked, return #SVN_ERR_WC_LOCKED. This prevents accidental
04101  * working copy corruption in case users run the cleanup operation to
04102  * remove unversioned items while another client is performing some other
04103  * operation on the working copy.
04104  *
04105  * If @a ctx->cancel_func is non-NULL, invoke it with @a
04106  * ctx->cancel_baton at various points during the operation.  If it
04107  * returns an error (typically #SVN_ERR_CANCELLED), return that error
04108  * immediately.
04109  *
04110  * Use @a scratch_pool for any temporary allocations.
04111  *
04112  * @since New in 1.9.
04113  */
04114 svn_error_t *
04115 svn_client_vacuum(const char *dir_abspath,
04116                   svn_boolean_t remove_unversioned_items,
04117                   svn_boolean_t remove_ignored_items,
04118                   svn_boolean_t fix_recorded_timestamps,
04119                   svn_boolean_t vacuum_pristines,
04120                   svn_boolean_t include_externals,
04121                   svn_client_ctx_t *ctx,
04122                   apr_pool_t *scratch_pool);
04123 
04124 
04125 /** Recursively cleanup a working copy directory @a dir, finishing any
04126  * incomplete operations, removing lockfiles, etc.
04127  *
04128  * If @a include_externals is @c TRUE, recurse into externals and clean
04129  * them up as well.
04130  *
04131  * If @a ctx->cancel_func is non-NULL, invoke it with @a
04132  * ctx->cancel_baton at various points during the operation.  If it
04133  * returns an error (typically #SVN_ERR_CANCELLED), return that error
04134  * immediately.
04135  *
04136  * Use @a scratch_pool for any temporary allocations.
04137  *
04138  * @since New in 1.9.
04139  */
04140 svn_error_t *
04141 svn_client_cleanup2(const char *dir_abspath,
04142                     svn_boolean_t break_locks,
04143                     svn_boolean_t fix_recorded_timestamps,
04144                     svn_boolean_t clear_dav_cache,
04145                     svn_boolean_t vacuum_pristines,
04146                     svn_boolean_t include_externals,
04147                     svn_client_ctx_t *ctx,
04148                     apr_pool_t *scratch_pool);
04149 
04150 /* Like svn_client_cleanup2(), but no support for not breaking locks and
04151  * cleaning up externals and using a potentially non absolute path.
04152  *
04153  * @deprecated Provided for limited backwards compatibility with the 1.8 API.
04154  */
04155 svn_error_t *
04156 svn_client_cleanup(const char *dir,
04157                    svn_client_ctx_t *ctx,
04158                    apr_pool_t *scratch_pool);
04159 
04160 
04161 /** @} */
04162 
04163 /**
04164  * @defgroup Upgrade Upgrade a working copy.
04165  *
04166  * @{
04167  */
04168 
04169 /** Recursively upgrade a working copy from any older format to the current
04170  * WC metadata storage format.  @a wcroot_dir is the path to the WC root.
04171  *
04172  * Use @a scratch_pool for any temporary allocations.
04173  *
04174  * @since New in 1.7.
04175  */
04176 svn_error_t *
04177 svn_client_upgrade(const char *wcroot_dir,
04178                    svn_client_ctx_t *ctx,
04179                    apr_pool_t *scratch_pool);
04180 
04181 
04182 /** @} */
04183 
04184 /**
04185  * @defgroup Relocate Switch a working copy to a different repository.
04186  *
04187  * @{
04188  */
04189 
04190 /**
04191  * Recursively modify a working copy rooted at @a wcroot_dir, changing
04192  * any repository URLs that begin with @a from_prefix to begin with @a
04193  * to_prefix instead.
04194  *
04195  * @param wcroot_dir Working copy root directory
04196  * @param from_prefix Original URL
04197  * @param to_prefix New URL
04198  * @param ignore_externals If not set, recurse into external working
04199  *        copies after relocating the primary working copy
04200  * @param ctx svn_client_ctx_t
04201  * @param pool The pool from which to perform memory allocations
04202  *
04203  * @since New in 1.7
04204  */
04205 svn_error_t *
04206 svn_client_relocate2(const char *wcroot_dir,
04207                      const char *from_prefix,
04208                      const char *to_prefix,
04209                      svn_boolean_t ignore_externals,
04210                      svn_client_ctx_t *ctx,
04211                      apr_pool_t *pool);
04212 
04213 /**
04214  * Similar to svn_client_relocate2(), but with @a ignore_externals
04215  * always TRUE.
04216  *
04217  * @note As of the 1.7 API, @a dir is required to be a working copy
04218  * root directory, and @a recurse is required to be TRUE.
04219  *
04220  * @deprecated Provided for limited backwards compatibility with the
04221  * 1.6 API.
04222  */
04223 SVN_DEPRECATED
04224 svn_error_t *
04225 svn_client_relocate(const char *dir,
04226                     const char *from_prefix,
04227                     const char *to_prefix,
04228                     svn_boolean_t recurse,
04229                     svn_client_ctx_t *ctx,
04230                     apr_pool_t *pool);
04231 
04232 /** @} */
04233 
04234 /**
04235  * @defgroup Revert Remove local changes in a repository.
04236  *
04237  * @{
04238  */
04239 
04240 /**
04241  * Restore the pristine version of working copy @a paths,
04242  * effectively undoing any local mods.  For each path in @a paths,
04243  * revert it if it is a file.  Else if it is a directory, revert
04244  * according to @a depth:
04245  *
04246  * @a paths is an array of (const char *) local WC paths.
04247  *
04248  * If @a depth is #svn_depth_empty, revert just the properties on
04249  * the directory; else if #svn_depth_files, revert the properties
04250  * and any files immediately under the directory; else if
04251  * #svn_depth_immediates, revert all of the preceding plus
04252  * properties on immediate subdirectories; else if #svn_depth_infinity,
04253  * revert path and everything under it fully recursively.
04254  *
04255  * @a changelists is an array of <tt>const char *</tt> changelist
04256  * names, used as a restrictive filter on items reverted; that is,
04257  * don't revert any item unless it's a member of one of those
04258  * changelists.  If @a changelists is empty (or altogether @c NULL),
04259  * no changelist filtering occurs.
04260  *
04261  * If @a clear_changelists is TRUE, then changelist information for the
04262  * paths is cleared while reverting.
04263  *
04264  * If @a ctx->notify_func2 is non-NULL, then for each item reverted,
04265  * call @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of
04266  * the reverted item.
04267  *
04268  * If an item specified for reversion is not under version control,
04269  * then do not error, just invoke @a ctx->notify_func2 with @a
04270  * ctx->notify_baton2, using notification code #svn_wc_notify_skip.
04271  *
04272  * @since New in 1.9.
04273  */
04274 svn_error_t *
04275 svn_client_revert3(const apr_array_header_t *paths,
04276                    svn_depth_t depth,
04277                    const apr_array_header_t *changelists,
04278                    svn_boolean_t clear_changelists,
04279                    svn_client_ctx_t *ctx,
04280                    apr_pool_t *pool);
04281 
04282 /** Similar to svn_client_revert2, but with @a clear_changelists set to
04283  * FALSE.
04284  *
04285  * @since New in 1.5.
04286  * @deprecated Provided for backwards compatibility with the 1.8 API.
04287  */
04288 SVN_DEPRECATED
04289 svn_error_t *
04290 svn_client_revert2(const apr_array_header_t *paths,
04291                    svn_depth_t depth,
04292                    const apr_array_header_t *changelists,
04293                    svn_client_ctx_t *ctx,
04294                    apr_pool_t *pool);
04295 
04296 
04297 /**
04298  * Similar to svn_client_revert2(), but with @a changelists passed as
04299  * @c NULL, and @a depth set according to @a recurse: if @a recurse is
04300  * TRUE, @a depth is #svn_depth_infinity, else if @a recurse is
04301  * FALSE, @a depth is #svn_depth_empty.
04302  *
04303  * @note Most APIs map @a recurse==FALSE to @a depth==svn_depth_files;
04304  * revert is deliberately different.
04305  *
04306  * @deprecated Provided for backwards compatibility with the 1.4 API.
04307  */
04308 SVN_DEPRECATED
04309 svn_error_t *
04310 svn_client_revert(const apr_array_header_t *paths,
04311                   svn_boolean_t recursive,
04312                   svn_client_ctx_t *ctx,
04313                   apr_pool_t *pool);
04314 
04315 
04316 /** @} */
04317 
04318 /**
04319  * @defgroup Resolved Mark conflicted paths as resolved.
04320  *
04321  * @{
04322  */
04323 
04324 /**
04325  * Similar to svn_client_resolve(), but without automatic conflict
04326  * resolution support.
04327  *
04328  * @deprecated Provided for backward compatibility with the 1.4 API.
04329  * Use svn_client_resolve() with @a conflict_choice == @c
04330  * svn_wc_conflict_choose_merged instead.
04331  */
04332 SVN_DEPRECATED
04333 svn_error_t *
04334 svn_client_resolved(const char *path,
04335                     svn_boolean_t recursive,
04336                     svn_client_ctx_t *ctx,
04337                     apr_pool_t *pool);
04338 
04339 /** Perform automatic conflict resolution on a working copy @a path.
04340  *
04341  * If @a conflict_choice is
04342  *
04343  *   - #svn_wc_conflict_choose_base:
04344  *     resolve the conflict with the old file contents
04345  *
04346  *   - #svn_wc_conflict_choose_mine_full:
04347  *     use the original working contents
04348  *
04349  *   - #svn_wc_conflict_choose_theirs_full:
04350  *     use the new contents
04351  *
04352  *   - #svn_wc_conflict_choose_merged:
04353  *     don't change the contents at all, just remove the conflict
04354  *     status, which is the pre-1.5 behavior.
04355  *
04356  *   - #svn_wc_conflict_choose_theirs_conflict
04357  *     ###...
04358  *
04359  *   - #svn_wc_conflict_choose_mine_conflict
04360  *     ###...
04361  *
04362  *   - svn_wc_conflict_choose_unspecified
04363  *     invoke @a ctx->conflict_func2 with @a ctx->conflict_baton2 to obtain
04364  *     a resolution decision for each conflict.  This can be used to
04365  *     implement interactive conflict resolution.
04366  *
04367  * #svn_wc_conflict_choose_theirs_conflict and
04368  * #svn_wc_conflict_choose_mine_conflict are not legal for binary
04369  * files or properties.
04370  *
04371  * If @a path is not in a state of conflict to begin with, do nothing.
04372  * If @a path's conflict state is removed and @a ctx->notify_func2 is non-NULL,
04373  * call @a ctx->notify_func2 with @a ctx->notify_baton2 and @a path.
04374  * ### with what notification parameters?
04375  *
04376  * If @a depth is #svn_depth_empty, act only on @a path; if
04377  * #svn_depth_files, resolve @a path and its conflicted file
04378  * children (if any); if #svn_depth_immediates, resolve @a path and
04379  * all its immediate conflicted children (both files and directories,
04380  * if any); if #svn_depth_infinity, resolve @a path and every
04381  * conflicted file or directory anywhere beneath it.
04382  *
04383  * Note that this operation will try to lock the parent directory of
04384  * @a path in order to be able to resolve tree-conflicts on @a path.
04385  *
04386  * @since New in 1.5.
04387  */
04388 svn_error_t *
04389 svn_client_resolve(const char *path,
04390                    svn_depth_t depth,
04391                    svn_wc_conflict_choice_t conflict_choice,
04392                    svn_client_ctx_t *ctx,
04393                    apr_pool_t *pool);
04394 
04395 
04396 /** @} */
04397 
04398 /**
04399  * @defgroup Copy Copy paths in the working copy and repository.
04400  *
04401  * @{
04402  */
04403 
04404 /**
04405  * A structure which describes the source of a copy operation--its path,
04406  * revision, and peg revision.
04407  *
04408  * @since New in 1.5.
04409  */
04410 typedef struct svn_client_copy_source_t
04411 {
04412     /** The source path or URL. */
04413     const char *path;
04414 
04415     /** The source operational revision. */
04416     const svn_opt_revision_t *revision;
04417 
04418     /** The source peg revision. */
04419     const svn_opt_revision_t *peg_revision;
04420 } svn_client_copy_source_t;
04421 
04422 /** Copy each source in @a sources to @a dst_path.
04423  *
04424  * If multiple @a sources are given, @a dst_path must be a directory,
04425  * and @a sources will be copied as children of @a dst_path.
04426  *
04427  * @a sources is an array of <tt>svn_client_copy_source_t *</tt> elements,
04428  * either all referring to local WC items or all referring to versioned
04429  * items in the repository.
04430  *
04431  * If @a sources has only one item, attempt to copy it to @a dst_path.  If
04432  * @a copy_as_child is TRUE and @a dst_path already exists, attempt to copy the
04433  * item as a child of @a dst_path.  If @a copy_as_child is FALSE and
04434  * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path
04435  * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a
04436  * URL.
04437  *
04438  * If @a sources has multiple items, and @a copy_as_child is TRUE, all
04439  * @a sources are copied as children of @a dst_path.  If any child of
04440  * @a dst_path already exists with the same name any item in @a sources,
04441  * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and
04442  * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL.
04443  *
04444  * If @a sources has multiple items, and @a copy_as_child is FALSE, fail
04445  * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED.
04446  *
04447  * If @a dst_path is a URL, use the authentication baton
04448  * in @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to immediately
04449  * attempt to commit the copy action in the repository.
04450  *
04451  * If @a dst_path is not a URL, then this is just a variant of
04452  * svn_client_add(), where the @a sources are scheduled for addition
04453  * as copies.  No changes will happen to the repository until a commit occurs.
04454  * This scheduling can be removed with svn_client_revert2().
04455  *
04456  * If @a make_parents is TRUE, create any non-existent parent directories
04457  * also.  Otherwise the parent of @a dst_path must already exist.
04458  *
04459  * If @a ignore_externals is set, don't process externals definitions
04460  * as part of this operation.
04461  *
04462  * If non-NULL, @a revprop_table is a hash table holding additional,
04463  * custom revision properties (<tt>const char *</tt> names mapped to
04464  * <tt>svn_string_t *</tt> values) to be set on the new revision in
04465  * the event that this is a committing operation.  This table cannot
04466  * contain any standard Subversion properties.
04467  *
04468  * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton combo
04469  * that this function can use to query for a commit log message when one is
04470  * needed.
04471  *
04472  * If @a ctx->notify_func2 is non-NULL, invoke it with @a ctx->notify_baton2
04473  * for each item added at the new location, passing the new, relative path of
04474  * the added item.
04475  *
04476  * If @a commit_callback is non-NULL, then for each successful commit, call
04477  * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
04478  * the commit.
04479  *
04480  * @since New in 1.7.
04481  */
04482 svn_error_t *
04483 svn_client_copy6(const apr_array_header_t *sources,
04484                  const char *dst_path,
04485                  svn_boolean_t copy_as_child,
04486                  svn_boolean_t make_parents,
04487                  svn_boolean_t ignore_externals,
04488                  const apr_hash_t *revprop_table,
04489                  svn_commit_callback2_t commit_callback,
04490                  void *commit_baton,
04491                  svn_client_ctx_t *ctx,
04492                  apr_pool_t *pool);
04493 
04494 /**
04495  * Similar to svn_client_copy6(), but returns the commit info in
04496  * @a *commit_info_p rather than through a callback function.
04497  *
04498  * @since New in 1.6.
04499  * @deprecated Provided for backward compatibility with the 1.6 API.
04500  */
04501 SVN_DEPRECATED
04502 svn_error_t *
04503 svn_client_copy5(svn_commit_info_t **commit_info_p,
04504                  const apr_array_header_t *sources,
04505                  const char *dst_path,
04506                  svn_boolean_t copy_as_child,
04507                  svn_boolean_t make_parents,
04508                  svn_boolean_t ignore_externals,
04509                  const apr_hash_t *revprop_table,
04510                  svn_client_ctx_t *ctx,
04511                  apr_pool_t *pool);
04512 
04513 /**
04514  * Similar to svn_client_copy5(), with @a ignore_externals set to @c FALSE.
04515  *
04516  * @since New in 1.5.
04517  *
04518  * @deprecated Provided for backward compatibility with the 1.5 API.
04519  */
04520 SVN_DEPRECATED
04521 svn_error_t *
04522 svn_client_copy4(svn_commit_info_t **commit_info_p,
04523                  const apr_array_header_t *sources,
04524                  const char *dst_path,
04525                  svn_boolean_t copy_as_child,
04526                  svn_boolean_t make_parents,
04527                  const apr_hash_t *revprop_table,
04528                  svn_client_ctx_t *ctx,
04529                  apr_pool_t *pool);
04530 
04531 /**
04532  * Similar to svn_client_copy4(), with only one @a src_path, @a
04533  * copy_as_child set to @c FALSE, @a revprop_table passed as NULL, and
04534  * @a make_parents set to @c FALSE.  Also, use @a src_revision as both
04535  * the operational and peg revision.
04536  *
04537  * @since New in 1.4.
04538  *
04539  * @deprecated Provided for backward compatibility with the 1.4 API.
04540  */
04541 SVN_DEPRECATED
04542 svn_error_t *
04543 svn_client_copy3(svn_commit_info_t **commit_info_p,
04544                  const char *src_path,
04545                  const svn_opt_revision_t *src_revision,
04546                  const char *dst_path,
04547                  svn_client_ctx_t *ctx,
04548                  apr_pool_t *pool);
04549 
04550 
04551 /**
04552  * Similar to svn_client_copy3(), with the difference that if @a dst_path
04553  * already exists and is a directory, copy the item into that directory,
04554  * keeping its name (the last component of @a src_path).
04555  *
04556  * @since New in 1.3.
04557  *
04558  * @deprecated Provided for backward compatibility with the 1.3 API.
04559  */
04560 SVN_DEPRECATED
04561 svn_error_t *
04562 svn_client_copy2(svn_commit_info_t **commit_info_p,
04563                  const char *src_path,
04564                  const svn_opt_revision_t *src_revision,
04565                  const char *dst_path,
04566                  svn_client_ctx_t *ctx,
04567                  apr_pool_t *pool);
04568 
04569 
04570 /**
04571  * Similar to svn_client_copy2(), but uses #svn_client_commit_info_t
04572  * for @a commit_info_p.
04573  *
04574  * @deprecated Provided for backward compatibility with the 1.2 API.
04575  */
04576 SVN_DEPRECATED
04577 svn_error_t *
04578 svn_client_copy(svn_client_commit_info_t **commit_info_p,
04579                 const char *src_path,
04580                 const svn_opt_revision_t *src_revision,
04581                 const char *dst_path,
04582                 svn_client_ctx_t *ctx,
04583                 apr_pool_t *pool);
04584 
04585 
04586 /** @} */
04587 
04588 /**
04589  * @defgroup Move Move paths in the working copy or repository.
04590  *
04591  * @{
04592  */
04593 
04594 /**
04595  * Move @a src_paths to @a dst_path.
04596  *
04597  * @a src_paths is an array of (const char *) paths -- either all WC paths
04598  * or all URLs -- of versioned items.  If multiple @a src_paths are given,
04599  * @a dst_path must be a directory and @a src_paths will be moved as
04600  * children of @a dst_path.
04601  *
04602  * If @a src_paths are repository URLs:
04603  *
04604  *   - @a dst_path must also be a repository URL.
04605  *
04606  *   - The authentication baton in @a ctx and @a ctx->log_msg_func/@a
04607  *     ctx->log_msg_baton are used to commit the move.
04608  *
04609  *   - The move operation will be immediately committed.
04610  *
04611  * If @a src_paths are working copy paths:
04612  *
04613  *   - @a dst_path must also be a working copy path.
04614  *
04615  *   - @a ctx->log_msg_func3 and @a ctx->log_msg_baton3 are ignored.
04616  *
04617  *   - This is a scheduling operation.  No changes will happen to the
04618  *     repository until a commit occurs.  This scheduling can be removed
04619  *     with svn_client_revert2().  If one of @a src_paths is a file it is
04620  *     removed from the working copy immediately.  If one of @a src_path
04621  *     is a directory it will remain in the working copy but all the files,
04622  *     and unversioned items, it contains will be removed.
04623  *
04624  * If @a src_paths has only one item, attempt to move it to @a dst_path.  If
04625  * @a move_as_child is TRUE and @a dst_path already exists, attempt to move the
04626  * item as a child of @a dst_path.  If @a move_as_child is FALSE and
04627  * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path
04628  * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a
04629  * URL.
04630  *
04631  * If @a src_paths has multiple items, and @a move_as_child is TRUE, all
04632  * @a src_paths are moved as children of @a dst_path.  If any child of
04633  * @a dst_path already exists with the same name any item in @a src_paths,
04634  * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and
04635  * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL.
04636  *
04637  * If @a src_paths has multiple items, and @a move_as_child is FALSE, fail
04638  * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED.
04639  *
04640  * If @a make_parents is TRUE, create any non-existent parent directories
04641  * also.  Otherwise, the parent of @a dst_path must already exist.
04642  *
04643  * If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS
04644  * will be raised if the move source is a mixed-revision subtree.
04645  * If @a allow_mixed_revisions is TRUE, a mixed-revision move source is
04646  * allowed but the move will degrade to a copy and a delete without local
04647  * move tracking. This parameter should be set to FALSE except where backwards
04648  * compatibility to svn_client_move6() is required.
04649  *
04650  * If @a metadata_only is @c TRUE and moving a file in a working copy,
04651  * everything in the metadata is updated as if the node is moved, but the
04652  * actual disk move operation is not performed. This feature is useful for
04653  * clients that want to keep the working copy in sync while the actual working
04654  * copy is updated by some other task.
04655  *
04656  * If non-NULL, @a revprop_table is a hash table holding additional,
04657  * custom revision properties (<tt>const char *</tt> names mapped to
04658  * <tt>svn_string_t *</tt> values) to be set on the new revision in
04659  * the event that this is a committing operation.  This table cannot
04660  * contain any standard Subversion properties.
04661  *
04662  * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton combo that
04663  * this function can use to query for a commit log message when one is needed.
04664  *
04665  * If @a ctx->notify_func2 is non-NULL, then for each item moved, call
04666  * @a ctx->notify_func2 with the @a ctx->notify_baton2 twice, once to indicate
04667  * the deletion of the moved thing, and once to indicate the addition of
04668  * the new location of the thing.
04669  *
04670  * ### Is this really true?  What about svn_wc_notify_commit_replaced()? ###
04671  *
04672  * If @a commit_callback is non-NULL, then for each successful commit, call
04673  * @a commit_callback with @a commit_baton and a #svn_commit_info_t for
04674  * the commit.
04675  *
04676  * @since New in 1.8.
04677  */
04678 svn_error_t *
04679 svn_client_move7(const apr_array_header_t *src_paths,
04680                  const char *dst_path,
04681                  svn_boolean_t move_as_child,
04682                  svn_boolean_t make_parents,
04683                  svn_boolean_t allow_mixed_revisions,
04684                  svn_boolean_t metadata_only,
04685                  const apr_hash_t *revprop_table,
04686                  svn_commit_callback2_t commit_callback,
04687                  void *commit_baton,
04688                  svn_client_ctx_t *ctx,
04689                  apr_pool_t *pool);
04690 
04691 /**
04692  * Similar to svn_client_move7(), but with @a allow_mixed_revisions always
04693  * set to @c TRUE and @a metadata_only always to @c FALSE.
04694  *
04695  * @since New in 1.7.
04696  * @deprecated Provided for backward compatibility with the 1.7 API.
04697  */
04698 SVN_DEPRECATED
04699 svn_error_t *
04700 svn_client_move6(const apr_array_header_t *src_paths,
04701                  const char *dst_path,
04702                  svn_boolean_t move_as_child,
04703                  svn_boolean_t make_parents,
04704                  const apr_hash_t *revprop_table,
04705                  svn_commit_callback2_t commit_callback,
04706                  void *commit_baton,
04707                  svn_client_ctx_t *ctx,
04708                  apr_pool_t *pool);
04709 
04710 /**
04711  * Similar to svn_client_move6(), but returns the commit info in
04712  * @a *commit_info_p rather than through a callback function.
04713  *
04714  * A WC-to-WC move will include any modified and/or unversioned children.
04715  * @a force is ignored.
04716  *
04717  * @since New in 1.5.
04718  * @deprecated Provided for backward compatibility with the 1.6 API.
04719  */
04720 SVN_DEPRECATED
04721 svn_error_t *
04722 svn_client_move5(svn_commit_info_t **commit_info_p,
04723                  const apr_array_header_t *src_paths,
04724                  const char *dst_path,
04725                  svn_boolean_t force,
04726                  svn_boolean_t move_as_child,
04727                  svn_boolean_t make_parents,
04728                  const apr_hash_t *revprop_table,
04729                  svn_client_ctx_t *ctx,
04730                  apr_pool_t *pool);
04731 
04732 /**
04733  * Similar to svn_client_move5(), with only one @a src_path, @a
04734  * move_as_child set to @c FALSE, @a revprop_table passed as NULL, and
04735  * @a make_parents set to @c FALSE.
04736  *
04737  * Note: The behaviour of @a force changed in 1.5 (r860885 and r861421), when
04738  * the 'move' semantics were improved to just move the source including any
04739  * modified and/or unversioned items in it.  Before that, @a force
04740  * controlled what happened to such items, but now @a force is ignored.
04741  *
04742  * @since New in 1.4.
04743  *
04744  * @deprecated Provided for backward compatibility with the 1.4 API.
04745  */
04746 SVN_DEPRECATED
04747 svn_error_t *
04748 svn_client_move4(svn_commit_info_t **commit_info_p,
04749                  const char *src_path,
04750                  const char *dst_path,
04751                  svn_boolean_t force,
04752                  svn_client_ctx_t *ctx,
04753                  apr_pool_t *pool);
04754 
04755 /**
04756  * Similar to svn_client_move4(), with the difference that if @a dst_path
04757  * already exists and is a directory, move the item into that directory,
04758  * keeping its name (the last component of @a src_path).
04759  *
04760  * @since New in 1.3.
04761  *
04762  * @deprecated Provided for backward compatibility with the 1.3 API.
04763  */
04764 SVN_DEPRECATED
04765 svn_error_t *
04766 svn_client_move3(svn_commit_info_t **commit_info_p,
04767                  const char *src_path,
04768                  const char *dst_path,
04769                  svn_boolean_t force,
04770                  svn_client_ctx_t *ctx,
04771                  apr_pool_t *pool);
04772 
04773 /**
04774  * Similar to svn_client_move3(), but uses #svn_client_commit_info_t
04775  * for @a commit_info_p.
04776  *
04777  * @deprecated Provided for backward compatibility with the 1.2 API.
04778  *
04779  * @since New in 1.2.
04780  */
04781 SVN_DEPRECATED
04782 svn_error_t *
04783 svn_client_move2(svn_client_commit_info_t **commit_info_p,
04784                  const char *src_path,
04785                  const char *dst_path,
04786                  svn_boolean_t force,
04787                  svn_client_ctx_t *ctx,
04788                  apr_pool_t *pool);
04789 
04790 /**
04791  * Similar to svn_client_move2(), but an extra argument @a src_revision
04792  * must be passed.  This has no effect, but must be of kind
04793  * #svn_opt_revision_unspecified or #svn_opt_revision_head,
04794  * otherwise error #SVN_ERR_UNSUPPORTED_FEATURE is returned.
04795  *
04796  * @deprecated Provided for backward compatibility with the 1.1 API.
04797  */
04798 SVN_DEPRECATED
04799 svn_error_t *
04800 svn_client_move(svn_client_commit_info_t **commit_info_p,
04801                 const char *src_path,
04802                 const svn_opt_revision_t *src_revision,
04803                 const char *dst_path,
04804                 svn_boolean_t force,
04805                 svn_client_ctx_t *ctx,
04806                 apr_pool_t *pool);
04807 
04808 /** @} */
04809 
04810 
04811 /** Properties
04812  *
04813  * Note that certain svn-controlled properties must always have their
04814  * values set and stored in UTF8 with LF line endings.  When
04815  * retrieving these properties, callers must convert the values back
04816  * to native locale and native line-endings before displaying them to
04817  * the user.  For help with this task, see
04818  * svn_prop_needs_translation(), svn_subst_translate_string(),  and
04819  * svn_subst_detranslate_string().
04820  *
04821  * @defgroup svn_client_prop_funcs Property functions
04822  * @{
04823  */
04824 
04825 
04826 /**
04827  * Set @a propname to @a propval on @a url.  A @a propval of @c NULL will
04828  * delete the property.
04829  *
04830  * Immediately attempt to commit the property change in the repository,
04831  * using the authentication baton in @a ctx and @a
04832  * ctx->log_msg_func3/@a ctx->log_msg_baton3.
04833  *
04834  * If the property has changed on @a url since revision
04835  * @a base_revision_for_url (which must not be #SVN_INVALID_REVNUM), no
04836  * change will be made and an error will be returned.
04837  *
04838  * If non-NULL, @a revprop_table is a hash table holding additional,
04839  * custom revision properties (<tt>const char *</tt> names mapped to
04840  * <tt>svn_string_t *</tt> values) to be set on the new revision.  This
04841  * table cannot contain any standard Subversion properties.
04842  *
04843  * If @a commit_callback is non-NULL, then call @a commit_callback with
04844  * @a commit_baton and a #svn_commit_info_t for the commit.
04845  *
04846  * If @a propname is an svn-controlled property (i.e. prefixed with
04847  * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
04848  * the value is UTF8-encoded and uses LF line-endings.
04849  *
04850  * If @a skip_checks is TRUE, do no validity checking.  But if @a
04851  * skip_checks is FALSE, and @a propname is not a valid property for @a
04852  * url, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the property is
04853  * not appropriate for @a url), or * #SVN_ERR_BAD_MIME_TYPE (if @a propname
04854  * is "svn:mime-type", but @a propval is not a valid mime-type).
04855  *
04856  * Use @a scratch_pool for all memory allocation.
04857  *
04858  * @since New in 1.7.
04859  */
04860 svn_error_t *
04861 svn_client_propset_remote(const char *propname,
04862                           const svn_string_t *propval,
04863                           const char *url,
04864                           svn_boolean_t skip_checks,
04865                           svn_revnum_t base_revision_for_url,
04866                           const apr_hash_t *revprop_table,
04867                           svn_commit_callback2_t commit_callback,
04868                           void *commit_baton,
04869                           svn_client_ctx_t *ctx,
04870                           apr_pool_t *scratch_pool);
04871 
04872 /**
04873  * Set @a propname to @a propval on each (const char *) target in @a
04874  * targets.  The targets must be all working copy paths.  A @a propval
04875  * of @c NULL will delete the property.
04876  *
04877  * If @a depth is #svn_depth_empty, set the property on each member of
04878  * @a targets only; if #svn_depth_files, set it on @a targets and their
04879  * file children (if any); if #svn_depth_immediates, on @a targets and all
04880  * of their immediate children (both files and directories); if
04881  * #svn_depth_infinity, on @a targets and everything beneath them.
04882  *
04883  * @a changelists is an array of <tt>const char *</tt> changelist
04884  * names, used as a restrictive filter on items whose properties are
04885  * set; that is, don't set properties on any item unless it's a member
04886  * of one of those changelists.  If @a changelists is empty (or
04887  * altogether @c NULL), no changelist filtering occurs.
04888  *
04889  * If @a propname is an svn-controlled property (i.e. prefixed with
04890  * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
04891  * the value is UTF8-encoded and uses LF line-endings.
04892  *
04893  * If @a skip_checks is TRUE, do no validity checking.  But if @a
04894  * skip_checks is FALSE, and @a propname is not a valid property for @a
04895  * targets, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the
04896  * property is not appropriate for @a targets), or
04897  * #SVN_ERR_BAD_MIME_TYPE (if @a propname is "svn:mime-type", but @a
04898  * propval is not a valid mime-type).
04899  *
04900  * If @a ctx->cancel_func is non-NULL, invoke it passing @a
04901  * ctx->cancel_baton at various places during the operation.
04902  *
04903  * Use @a scratch_pool for all memory allocation.
04904  *
04905  * @since New in 1.7.
04906  */
04907 svn_error_t *
04908 svn_client_propset_local(const char *propname,
04909                          const svn_string_t *propval,
04910                          const apr_array_header_t *targets,
04911                          svn_depth_t depth,
04912                          svn_boolean_t skip_checks,
04913                          const apr_array_header_t *changelists,
04914                          svn_client_ctx_t *ctx,
04915                          apr_pool_t *scratch_pool);
04916 
04917 /**
04918  * An amalgamation of svn_client_propset_local() and
04919  * svn_client_propset_remote() that takes only a single target, and
04920  * returns the commit info in @a *commit_info_p rather than through a
04921  * callback function.
04922  *
04923  * @since New in 1.5.
04924  * @deprecated Provided for backward compatibility with the 1.6 API.
04925  */
04926 SVN_DEPRECATED
04927 svn_error_t *
04928 svn_client_propset3(svn_commit_info_t **commit_info_p,
04929                     const char *propname,
04930                     const svn_string_t *propval,
04931                     const char *target,
04932                     svn_depth_t depth,
04933                     svn_boolean_t skip_checks,
04934                     svn_revnum_t base_revision_for_url,
04935                     const apr_array_header_t *changelists,
04936                     const apr_hash_t *revprop_table,
04937                     svn_client_ctx_t *ctx,
04938                     apr_pool_t *pool);
04939 
04940 /**
04941  * Like svn_client_propset3(), but with @a base_revision_for_url
04942  * always #SVN_INVALID_REVNUM; @a commit_info_p always @c NULL; @a
04943  * changelists always @c NULL; @a revprop_table always @c NULL; and @a
04944  * depth set according to @a recurse: if @a recurse is TRUE, @a depth
04945  * is #svn_depth_infinity, else #svn_depth_empty.
04946  *
04947  * @deprecated Provided for backward compatibility with the 1.4 API.
04948  */
04949 SVN_DEPRECATED
04950 svn_error_t *
04951 svn_client_propset2(const char *propname,
04952                     const svn_string_t *propval,
04953                     const char *target,
04954                     svn_boolean_t recurse,
04955                     svn_boolean_t skip_checks,
04956                     svn_client_ctx_t *ctx,
04957                     apr_pool_t *pool);
04958 
04959 /**
04960  * Like svn_client_propset2(), but with @a skip_checks always FALSE and a
04961  * newly created @a ctx.
04962  *
04963  * @deprecated Provided for backward compatibility with the 1.1 API.
04964  */
04965 SVN_DEPRECATED
04966 svn_error_t *
04967 svn_client_propset(const char *propname,
04968                    const svn_string_t *propval,
04969                    const char *target,
04970                    svn_boolean_t recurse,
04971                    apr_pool_t *pool);
04972 
04973 /** Set @a propname to @a propval on revision @a revision in the repository
04974  * represented by @a URL.  Use the authentication baton in @a ctx for
04975  * authentication, and @a pool for all memory allocation.  Return the actual
04976  * rev affected in @a *set_rev.  A @a propval of @c NULL will delete the
04977  * property.
04978  *
04979  * If @a original_propval is non-NULL, then just before setting the
04980  * new value, check that the old value matches @a original_propval;
04981  * if they do not match, return the error #SVN_ERR_RA_OUT_OF_DATE.
04982  * This is to help clients support interactive editing of revprops:
04983  * without this check, the window during which the property may change
04984  * underneath the user is as wide as the amount of time the user
04985  * spends editing the property.  With this check, the window is
04986  * reduced to a small, constant amount of time right before we set the
04987  * new value.  (To check that an old value is still non-existent, set
04988  * @a original_propval->data to NULL, and @a original_propval->len is
04989  * ignored.)
04990  * If the server advertises #SVN_RA_CAPABILITY_ATOMIC_REVPROPS, the
04991  * check of @a original_propval is done atomically.
04992  *
04993  * Note: the representation of "property is not set" in @a
04994  * original_propval differs from the representation in other APIs
04995  * (such as svn_fs_change_rev_prop2() and svn_ra_change_rev_prop2()).
04996  *
04997  * If @a force is TRUE, allow newlines in the author property.
04998  *
04999  * If @a propname is an svn-controlled property (i.e. prefixed with
05000  * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
05001  * the value UTF8-encoded and uses LF line-endings.
05002  *
05003  * Note that unlike its cousin svn_client_propset3(), this routine
05004  * doesn't affect the working copy at all;  it's a pure network
05005  * operation that changes an *unversioned* property attached to a
05006  * revision.  This can be used to tweak log messages, dates, authors,
05007  * and the like.  Be careful:  it's a lossy operation.
05008 
05009  * @a ctx->notify_func2 and @a ctx->notify_baton2 are the notification
05010  * functions and baton which are called upon successful setting of the
05011  * property.
05012  *
05013  * Also note that unless the administrator creates a
05014  * pre-revprop-change hook in the repository, this feature will fail.
05015  *
05016  * @since New in 1.6.
05017  */
05018 svn_error_t *
05019 svn_client_revprop_set2(const char *propname,
05020                         const svn_string_t *propval,
05021                         const svn_string_t *original_propval,
05022                         const char *URL,
05023                         const svn_opt_revision_t *revision,
05024                         svn_revnum_t *set_rev,
05025                         svn_boolean_t force,
05026                         svn_client_ctx_t *ctx,
05027                         apr_pool_t *pool);
05028 
05029 /**
05030  * Similar to svn_client_revprop_set2(), but with @a original_propval
05031  * always @c NULL.
05032  *
05033  * @deprecated Provided for backward compatibility with the 1.5 API.
05034  */
05035 SVN_DEPRECATED
05036 svn_error_t *
05037 svn_client_revprop_set(const char *propname,
05038                        const svn_string_t *propval,
05039                        const char *URL,
05040                        const svn_opt_revision_t *revision,
05041                        svn_revnum_t *set_rev,
05042                        svn_boolean_t force,
05043                        svn_client_ctx_t *ctx,
05044                        apr_pool_t *pool);
05045 
05046 /**
05047  * Set @a *props to a hash table whose keys are absolute paths or URLs
05048  * of items on which property @a propname is explicitly set, and whose
05049  * values are <tt>svn_string_t *</tt> representing the property value for
05050  * @a propname at that path.
05051  *
05052  * If @a inherited_props is not @c NULL, then set @a *inherited_props to a
05053  * depth-first ordered array of #svn_prop_inherited_item_t * structures
05054  * representing the properties inherited by @a target.  If @a target is a
05055  * working copy path, then properties inherited by @a target as far as the
05056  * root of the working copy are obtained from the working copy's actual
05057  * property values.  Properties inherited from above the working copy root
05058  * come from the inherited properties cache.  If @a target is a URL, then
05059  * the inherited properties come from the repository.  If @a inherited_props
05060  * is not @c NULL and no inheritable properties are found, then set
05061  * @a *inherited_props to an empty array.
05062  *
05063  * The #svn_prop_inherited_item_t->path_or_url members of the
05064  * #svn_prop_inherited_item_t * structures in @a *inherited_props are
05065  * URLs if @a target is a URL or if @a target is a working copy path but the
05066  * property represented by the structure is above the working copy root (i.e.
05067  * the inherited property is from the cache).  In all other cases the
05068  * #svn_prop_inherited_item_t->path_or_url members are absolute working copy
05069  * paths.
05070  *
05071  * Allocate @a *props (including keys and values) and @a *inherited_props
05072  * (including its elements) in @a result_pool, use @a scratch_pool for
05073  * temporary allocations.
05074  *
05075  * @a target is a WC absolute path or a URL.
05076  *
05077  * Don't store any path, not even @a target, if it does not have a
05078  * property named @a propname.
05079  *
05080  * If @a revision->kind is #svn_opt_revision_unspecified, then: get
05081  * properties from the working copy if @a target is a working copy
05082  * path, or from the repository head if @a target is a URL.  Else get
05083  * the properties as of @a revision.  The actual node revision
05084  * selected is determined by the path as it exists in @a peg_revision.
05085  * If @a peg_revision->kind is #svn_opt_revision_unspecified, then
05086  * it defaults to #svn_opt_revision_head for URLs or
05087  * #svn_opt_revision_working for WC targets.  Use the authentication
05088  * baton in @a ctx for authentication if contacting the repository.
05089  * If @a actual_revnum is not @c NULL, the actual revision number used
05090  * for the fetch is stored in @a *actual_revnum.
05091  *
05092  * If @a depth is #svn_depth_empty, fetch the property from
05093  * @a target only; if #svn_depth_files, fetch from @a target and its
05094  * file children (if any); if #svn_depth_immediates, from @a target
05095  * and all of its immediate children (both files and directories); if
05096  * #svn_depth_infinity, from @a target and everything beneath it.
05097  *
05098  * @a changelists is an array of <tt>const char *</tt> changelist
05099  * names, used as a restrictive filter on items whose properties are
05100  * gotten; that is, don't get @a propname on any item unless it's a member
05101  * of one of those changelists.  If @a changelists is empty (or
05102  * altogether @c NULL), no changelist filtering occurs.
05103  *
05104  * If error, don't touch @a *props, otherwise @a *props is a hash table
05105  * even if empty.
05106  *
05107  * This function returns SVN_ERR_UNVERSIONED_RESOURCE when it is called on
05108  * unversioned nodes.
05109  *
05110  * @since New in 1.8.
05111  */
05112 svn_error_t *
05113 svn_client_propget5(apr_hash_t **props,
05114                     apr_array_header_t **inherited_props,
05115                     const char *propname,
05116                     const char *target,  /* abspath or URL */
05117                     const svn_opt_revision_t *peg_revision,
05118                     const svn_opt_revision_t *revision,
05119                     svn_revnum_t *actual_revnum,
05120                     svn_depth_t depth,
05121                     const apr_array_header_t *changelists,
05122                     svn_client_ctx_t *ctx,
05123                     apr_pool_t *result_pool,
05124                     apr_pool_t *scratch_pool);
05125 
05126 /**
05127  * Similar to svn_client_propget5 but with @a inherited_props always
05128  * passed as NULL.
05129  *
05130  * @since New in 1.7.
05131  * @deprecated Provided for backward compatibility with the 1.7 API.
05132  */
05133 SVN_DEPRECATED
05134 svn_error_t *
05135 svn_client_propget4(apr_hash_t **props,
05136                     const char *propname,
05137                     const char *target,  /* abspath or URL */
05138                     const svn_opt_revision_t *peg_revision,
05139                     const svn_opt_revision_t *revision,
05140                     svn_revnum_t *actual_revnum,
05141                     svn_depth_t depth,
05142                     const apr_array_header_t *changelists,
05143                     svn_client_ctx_t *ctx,
05144                     apr_pool_t *result_pool,
05145                     apr_pool_t *scratch_pool);
05146 
05147 /**
05148  * Similar to svn_client_propget4(), but with the following change to the
05149  * output hash keys:  keys are `<tt>char *</tt>' paths, prefixed by
05150  * @a target, which is a working copy path or a URL.
05151  *
05152  * This function returns SVN_ERR_ENTRY_NOT_FOUND where svn_client_propget4
05153  * would return SVN_ERR_UNVERSIONED_RESOURCE.
05154  *
05155  * @since New in 1.5.
05156  * @deprecated Provided for backward compatibility with the 1.6 API.
05157  */
05158 SVN_DEPRECATED
05159 svn_error_t *
05160 svn_client_propget3(apr_hash_t **props,
05161                     const char *propname,
05162                     const char *target,
05163                     const svn_opt_revision_t *peg_revision,
05164                     const svn_opt_revision_t *revision,
05165                     svn_revnum_t *actual_revnum,
05166                     svn_depth_t depth,
05167                     const apr_array_header_t *changelists,
05168                     svn_client_ctx_t *ctx,
05169                     apr_pool_t *pool);
05170 
05171 /**
05172  * Similar to svn_client_propget3(), except that @a actual_revnum and
05173  * @a changelists are always @c NULL, and @a depth is set according to
05174  * @a recurse: if @a recurse is TRUE, then @a depth is
05175  * #svn_depth_infinity, else #svn_depth_empty.
05176  *
05177  * @deprecated Provided for backward compatibility with the 1.4 API.
05178  */
05179 SVN_DEPRECATED
05180 svn_error_t *
05181 svn_client_propget2(apr_hash_t **props,
05182                     const char *propname,
05183                     const char *target,
05184                     const svn_opt_revision_t *peg_revision,
05185                     const svn_opt_revision_t *revision,
05186                     svn_boolean_t recurse,
05187                     svn_client_ctx_t *ctx,
05188                     apr_pool_t *pool);
05189 
05190 /**
05191  * Similar to svn_client_propget2(), except that @a peg_revision is
05192  * always the same as @a revision.
05193  *
05194  * @deprecated Provided for backward compatibility with the 1.1 API.
05195  */
05196 SVN_DEPRECATED
05197 svn_error_t *
05198 svn_client_propget(apr_hash_t **props,
05199                    const char *propname,
05200                    const char *target,
05201                    const svn_opt_revision_t *revision,
05202                    svn_boolean_t recurse,
05203                    svn_client_ctx_t *ctx,
05204                    apr_pool_t *pool);
05205 
05206 /** Set @a *propval to the value of @a propname on revision @a revision
05207  * in the repository represented by @a URL.  Use the authentication baton
05208  * in @a ctx for authentication, and @a pool for all memory allocation.
05209  * Return the actual rev queried in @a *set_rev.
05210  *
05211  * Note that unlike its cousin svn_client_propget(), this routine
05212  * doesn't affect the working copy at all; it's a pure network
05213  * operation that queries an *unversioned* property attached to a
05214  * revision.  This can query log messages, dates, authors, and the
05215  * like.
05216  */
05217 svn_error_t *
05218 svn_client_revprop_get(const char *propname,
05219                        svn_string_t **propval,
05220                        const char *URL,
05221                        const svn_opt_revision_t *revision,
05222                        svn_revnum_t *set_rev,
05223                        svn_client_ctx_t *ctx,
05224                        apr_pool_t *pool);
05225 
05226 /**
05227  * Invoke @a receiver with @a receiver_baton to return the regular explicit, and
05228  * possibly the inherited, properties of @a target, a URL or working copy path.
05229  * @a receiver will be called for each path encountered.
05230  *
05231  * @a target is a WC path or a URL.
05232  *
05233  * If @a revision->kind is #svn_opt_revision_unspecified, then get the
05234  * explicit (and possibly the inherited) properties from the working copy,
05235  * if @a target is a working copy path, or from the repository head if
05236  * @a target is a URL.  Else get the properties as of @a revision.
05237  * The actual node revision selected is determined by the path as it exists
05238  * in @a peg_revision.  If @a peg_revision->kind is
05239  * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head
05240  * for URLs or #svn_opt_revision_working for WC targets.  Use the
05241  * authentication baton cached in @a ctx for authentication if contacting
05242  * the repository.
05243  *
05244  * If @a depth is #svn_depth_empty, list only the properties of
05245  * @a target itself.  If @a depth is #svn_depth_files, and
05246  * @a target is a directory, list the properties of @a target
05247  * and its file entries.  If #svn_depth_immediates, list the properties
05248  * of its immediate file and directory entries.  If #svn_depth_infinity,
05249  * list the properties of its file entries and recurse (with
05250  * #svn_depth_infinity) on directory entries.  #svn_depth_unknown is
05251  * equivalent to #svn_depth_empty.  All other values produce undefined
05252  * results.
05253  *
05254  * @a changelists is an array of <tt>const char *</tt> changelist
05255  * names, used as a restrictive filter on items whose properties are
05256  * listed; that is, don't list properties on any item unless it's a member
05257  * of one of those changelists.  If @a changelists is empty (or
05258  * altogether @c NULL), no changelist filtering occurs.
05259  *
05260  * If @a get_target_inherited_props is true, then also return any inherited
05261  * properties when @a receiver is called for @a target.  If @a target is a
05262  * working copy path, then properties inherited by @a target as far as the
05263  * root of the working copy are obtained from the working copy's actual
05264  * property values.  Properties inherited from above the working copy
05265  * root come from the inherited properties cache.  If @a target is a URL,
05266  * then the inherited properties come from the repository.
05267  * If @a get_target_inherited_props is false, then no inherited properties
05268  * are returned to @a receiver.
05269  *
05270  * If @a target is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND.
05271  *
05272  * @since New in 1.8.
05273  */
05274 svn_error_t *
05275 svn_client_proplist4(const char *target,
05276                      const svn_opt_revision_t *peg_revision,
05277                      const svn_opt_revision_t *revision,
05278                      svn_depth_t depth,
05279                      const apr_array_header_t *changelists,
05280                      svn_boolean_t get_target_inherited_props,
05281                      svn_proplist_receiver2_t receiver,
05282                      void *receiver_baton,
05283                      svn_client_ctx_t *ctx,
05284                      apr_pool_t *scratch_pool);
05285 
05286 /**
05287  * Similar to svn_client_proplist4(), except that the @a receiver type
05288  * is a #svn_proplist_receiver_t, @a get_target_inherited_props is
05289  * always passed NULL, and there is no separate scratch pool.
05290  *
05291  * @since New in 1.5.
05292  * @deprecated Provided for backward compatibility with the 1.7 API.
05293  */
05294 SVN_DEPRECATED
05295 svn_error_t *
05296 svn_client_proplist3(const char *target,
05297                      const svn_opt_revision_t *peg_revision,
05298                      const svn_opt_revision_t *revision,
05299                      svn_depth_t depth,
05300                      const apr_array_header_t *changelists,
05301                      svn_proplist_receiver_t receiver,
05302                      void *receiver_baton,
05303                      svn_client_ctx_t *ctx,
05304                      apr_pool_t *pool);
05305 
05306 /**
05307  * Similar to svn_client_proplist3(), except the properties are
05308  * returned as an array of #svn_client_proplist_item_t * structures
05309  * instead of by invoking the receiver function, there's no support
05310  * for @a changelists filtering, and @a recurse is used instead of a
05311  * #svn_depth_t parameter (FALSE corresponds to #svn_depth_empty,
05312  * and TRUE to #svn_depth_infinity).
05313  *
05314  * @since New in 1.2.
05315  *
05316  * @deprecated Provided for backward compatibility with the 1.4 API.
05317  */
05318 SVN_DEPRECATED
05319 svn_error_t *
05320 svn_client_proplist2(apr_array_header_t **props,
05321                      const char *target,
05322                      const svn_opt_revision_t *peg_revision,
05323                      const svn_opt_revision_t *revision,
05324                      svn_boolean_t recurse,
05325                      svn_client_ctx_t *ctx,
05326                      apr_pool_t *pool);
05327 
05328 /**
05329  * Similar to svn_client_proplist2(), except that @a peg_revision is
05330  * always the same as @a revision.
05331  *
05332  * @deprecated Provided for backward compatibility with the 1.1 API.
05333  */
05334 SVN_DEPRECATED
05335 svn_error_t *
05336 svn_client_proplist(apr_array_header_t **props,
05337                     const char *target,
05338                     const svn_opt_revision_t *revision,
05339                     svn_boolean_t recurse,
05340                     svn_client_ctx_t *ctx,
05341                     apr_pool_t *pool);
05342 
05343 /** Set @a *props to a hash of the revision props attached to @a revision in
05344  * the repository represented by @a URL.  Use the authentication baton cached
05345  * in @a ctx for authentication, and @a pool for all memory allocation.
05346  * Return the actual rev queried in @a *set_rev.
05347  *
05348  * The allocated hash maps (<tt>const char *</tt>) property names to
05349  * (#svn_string_t *) property values.
05350  *
05351  * Note that unlike its cousin svn_client_proplist(), this routine
05352  * doesn't read a working copy at all; it's a pure network operation
05353  * that reads *unversioned* properties attached to a revision.
05354  */
05355 svn_error_t *
05356 svn_client_revprop_list(apr_hash_t **props,
05357                         const char *URL,
05358                         const svn_opt_revision_t *revision,
05359                         svn_revnum_t *set_rev,
05360                         svn_client_ctx_t *ctx,
05361                         apr_pool_t *pool);
05362 /** @} */
05363 
05364 
05365 /**
05366  * @defgroup Export Export a tree from version control.
05367  *
05368  * @{
05369  */
05370 
05371 /**
05372  * Export the contents of either a subversion repository or a
05373  * subversion working copy into a 'clean' directory (meaning a
05374  * directory with no administrative directories).  If @a result_rev
05375  * is not @c NULL and the path being exported is a repository URL, set
05376  * @a *result_rev to the value of the revision actually exported (set
05377  * it to #SVN_INVALID_REVNUM for local exports).
05378  *
05379  * @a from_path_or_url is either the path the working copy on disk, or
05380  * a URL to the repository you wish to export.
05381  *
05382  * When exporting a directory, @a to_path is the path to the directory
05383  * where you wish to create the exported tree; when exporting a file, it
05384  * is the path of the file that will be created.  If @a to_path is the
05385  * empty path, then the basename of the export file/directory in the repository
05386  * will be used.  If @a to_path represents an existing directory, and a
05387  * file is being exported, then a file with the that basename will be
05388  * created under that directory (as with 'copy' operations).
05389  *
05390  * @a peg_revision is the revision where the path is first looked up
05391  * when exporting from a repository.  If @a peg_revision->kind is
05392  * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head
05393  * for URLs or #svn_opt_revision_working for WC targets.
05394  *
05395  * @a revision is the revision that should be exported, which is only used
05396  * when exporting from a repository.
05397  *
05398  * @a peg_revision and @a revision must not be @c NULL.
05399  *
05400  * @a ctx->notify_func2 and @a ctx->notify_baton2 are the notification
05401  * functions and baton which are passed to svn_client_checkout() when
05402  * exporting from a repository.
05403  *
05404  * @a ctx is a context used for authentication in the repository case.
05405  *
05406  * @a overwrite if TRUE will cause the export to overwrite files or
05407  * directories.
05408  *
05409  * If @a ignore_externals is set, don't process externals definitions
05410  * as part of this operation.
05411  *
05412  * If @a ignore_keywords is set, don't expand keywords as part of this
05413  * operation.
05414  *
05415  * @a native_eol allows you to override the standard eol marker on the
05416  * platform you are running on.  Can be either "LF", "CR" or "CRLF" or
05417  * NULL.  If NULL will use the standard eol marker.  Any other value
05418  * will cause the #SVN_ERR_IO_UNKNOWN_EOL error to be returned.
05419  *
05420  * If @a depth is #svn_depth_infinity, export fully recursively.  Else
05421  * if it is #svn_depth_immediates, export @a from_path_or_url and its
05422  * immediate children (if any), but with subdirectories empty and at
05423  * #svn_depth_empty.  Else if #svn_depth_files, export @a
05424  * from_path_or_url and its immediate file children (if any) only.  If
05425  * @a depth is #svn_depth_empty, then export exactly @a
05426  * from_path_or_url and none of its children.
05427  *
05428  * All allocations are done in @a pool.
05429  *
05430  * @since New in 1.7.
05431  */
05432 svn_error_t *
05433 svn_client_export5(svn_revnum_t *result_rev,
05434                    const char *from_path_or_url,
05435                    const char *to_path,
05436                    const svn_opt_revision_t *peg_revision,
05437                    const svn_opt_revision_t *revision,
05438                    svn_boolean_t overwrite,
05439                    svn_boolean_t ignore_externals,
05440                    svn_boolean_t ignore_keywords,
05441                    svn_depth_t depth,
05442                    const char *native_eol,
05443                    svn_client_ctx_t *ctx,
05444                    apr_pool_t *pool);
05445 
05446 /**
05447  * Similar to svn_client_export5(), but with @a ignore_keywords set
05448  * to FALSE.
05449  *
05450  * @deprecated Provided for backward compatibility with the 1.6 API.
05451  * @since New in 1.5.
05452  */
05453 SVN_DEPRECATED
05454 svn_error_t *
05455 svn_client_export4(svn_revnum_t *result_rev,
05456                    const char *from_path_or_url,
05457                    const char *to_path,
05458                    const svn_opt_revision_t *peg_revision,
05459                    const svn_opt_revision_t *revision,
05460                    svn_boolean_t overwrite,
05461                    svn_boolean_t ignore_externals,
05462                    svn_depth_t depth,
05463                    const char *native_eol,
05464                    svn_client_ctx_t *ctx,
05465                    apr_pool_t *pool);
05466 
05467 
05468 /**
05469  * Similar to svn_client_export4(), but with @a depth set according to
05470  * @a recurse: if @a recurse is TRUE, set @a depth to
05471  * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to
05472  * #svn_depth_files.
05473  *
05474  * @deprecated Provided for backward compatibility with the 1.4 API.
05475  *
05476  * @since New in 1.2.
05477  */
05478 SVN_DEPRECATED
05479 svn_error_t *
05480 svn_client_export3(svn_revnum_t *result_rev,
05481                    const char *from_path_or_url,
05482                    const char *to_path,
05483                    const svn_opt_revision_t *peg_revision,
05484                    const svn_opt_revision_t *revision,
05485                    svn_boolean_t overwrite,
05486                    svn_boolean_t ignore_externals,
05487                    svn_boolean_t recurse,
05488                    const char *native_eol,
05489                    svn_client_ctx_t *ctx,
05490                    apr_pool_t *pool);
05491 
05492 
05493 /**
05494  * Similar to svn_client_export3(), but with @a peg_revision
05495  * always set to #svn_opt_revision_unspecified, @a overwrite set to
05496  * the value of @a force, @a ignore_externals always FALSE, and
05497  * @a recurse always TRUE.
05498  *
05499  * @since New in 1.1.
05500  * @deprecated Provided for backward compatibility with the 1.1 API.
05501  */
05502 SVN_DEPRECATED
05503 svn_error_t *
05504 svn_client_export2(svn_revnum_t *result_rev,
05505                    const char *from_path_or_url,
05506                    const char *to_path,
05507                    svn_opt_revision_t *revision,
05508                    svn_boolean_t force,
05509                    const char *native_eol,
05510                    svn_client_ctx_t *ctx,
05511                    apr_pool_t *pool);
05512 
05513 
05514 /**
05515  * Similar to svn_client_export2(), but with @a native_eol always set
05516  * to NULL.
05517  *
05518  * @deprecated Provided for backward compatibility with the 1.0 API.
05519  */
05520 SVN_DEPRECATED
05521 svn_error_t *
05522 svn_client_export(svn_revnum_t *result_rev,
05523                   const char *from_path_or_url,
05524                   const char *to_path,
05525                   svn_opt_revision_t *revision,
05526                   svn_boolean_t force,
05527                   svn_client_ctx_t *ctx,
05528                   apr_pool_t *pool);
05529 
05530 /** @} */
05531 
05532 /**
05533  * @defgroup List List / ls
05534  *
05535  * @{
05536  */
05537 
05538 /** The type of function invoked by svn_client_list3() to report the details
05539  * of each directory entry being listed.
05540  *
05541  * @a baton is the baton that was passed to the caller.  @a path is the
05542  * entry's path relative to @a abs_path; it is the empty path when reporting
05543  * the top node of the list operation.  @a dirent contains some or all of
05544  * the directory entry's details, as determined by the caller.  @a lock is
05545  * the entry's lock, if it is locked and if lock information is being
05546  * reported by the caller; otherwise @a lock is NULL.  @a abs_path is the
05547  * repository path of the top node of the list operation; it is relative to
05548  * the repository root and begins with "/".
05549  *
05550  * If svn_client_list3() was called with @a include_externals set to TRUE,
05551  * @a external_parent_url and @a external_target will be set.
05552  * @a external_parent_url is url of the directory which has the
05553  * externals definitions. @a external_target is the target subdirectory of
05554  * externals definitions which is relative to the parent directory that holds
05555  * the external item.
05556  *
05557  * If external_parent_url and external_target are defined, the item being
05558  * listed is part of the external described by external_parent_url and
05559  * external_target. Else, the item is not part of any external.
05560  * Moreover, we will never mix items which are part of separate
05561  * externals, and will always finish listing an external before listing
05562  * the next one.
05563  *
05564  * @a scratch_pool may be used for temporary allocations.
05565  *
05566  * @since New in 1.8.
05567  */
05568 typedef svn_error_t *(*svn_client_list_func2_t)(
05569   void *baton,
05570   const char *path,
05571   const svn_dirent_t *dirent,
05572   const svn_lock_t *lock,
05573   const char *abs_path,
05574   const char *external_parent_url,
05575   const char *external_target,
05576   apr_pool_t *scratch_pool);
05577 
05578 /**
05579  * Similar to #svn_client_list_func2_t, but without any information about
05580  * externals definitions.
05581  *
05582  * @deprecated Provided for backward compatibility with the 1.7 API.
05583  *
05584  * @since New in 1.4
05585  *
05586  * */
05587 typedef svn_error_t *(*svn_client_list_func_t)(void *baton,
05588                                                const char *path,
05589                                                const svn_dirent_t *dirent,
05590                                                const svn_lock_t *lock,
05591                                                const char *abs_path,
05592                                                apr_pool_t *pool);
05593 
05594 /**
05595  * Report the directory entry, and possibly children, for @a
05596  * path_or_url at @a revision.  The actual node revision selected is
05597  * determined by the path as it exists in @a peg_revision.  If @a
05598  * peg_revision->kind is #svn_opt_revision_unspecified, then it defaults
05599  * to #svn_opt_revision_head for URLs or #svn_opt_revision_working
05600  * for WC targets.
05601  *
05602  * Report directory entries by invoking @a list_func/@a baton with @a path
05603  * relative to @a path_or_url.  The dirent for @a path_or_url is reported
05604  * using an empty @a path.  If @a path_or_url is a directory, also report
05605  * its children.  If @a path_or_url is non-existent, return
05606  * #SVN_ERR_FS_NOT_FOUND.
05607  *
05608  * If @a fetch_locks is TRUE, include locks when reporting directory entries.
05609  *
05610  * If @a include_externals is TRUE, also list all external items
05611  * reached by recursion. @a depth value passed to the original list target
05612  * applies for the externals also.
05613  *
05614  * Use @a pool for temporary allocations.
05615  *
05616  * Use authentication baton cached in @a ctx to authenticate against the
05617  * repository.
05618  *
05619  * If @a depth is #svn_depth_empty, list just @a path_or_url itself.
05620  * If @a depth is #svn_depth_files, list @a path_or_url and its file
05621  * entries.  If #svn_depth_immediates, list its immediate file and
05622  * directory entries.  If #svn_depth_infinity, list file entries and
05623  * recurse (with #svn_depth_infinity) on directory entries.
05624  *
05625  * @a dirent_fields controls which fields in the #svn_dirent_t's are
05626  * filled in.  To have them totally filled in use #SVN_DIRENT_ALL,
05627  * otherwise simply bitwise OR together the combination of @c SVN_DIRENT_
05628  * fields you care about.
05629  *
05630  * @since New in 1.8.
05631  */
05632 svn_error_t *
05633 svn_client_list3(const char *path_or_url,
05634                  const svn_opt_revision_t *peg_revision,
05635                  const svn_opt_revision_t *revision,
05636                  svn_depth_t depth,
05637                  apr_uint32_t dirent_fields,
05638                  svn_boolean_t fetch_locks,
05639                  svn_boolean_t include_externals,
05640                  svn_client_list_func2_t list_func,
05641                  void *baton,
05642                  svn_client_ctx_t *ctx,
05643                  apr_pool_t *pool);
05644 
05645 
05646 /** Similar to svn_client_list3(), but with @a include_externals set
05647  * to FALSE, and using a #svn_client_list_func_t as callback.
05648  *
05649  * @deprecated Provided for backwards compatibility with the 1.7 API.
05650  *
05651  * @since New in 1.5.
05652  */
05653 SVN_DEPRECATED
05654 svn_error_t *
05655 svn_client_list2(const char *path_or_url,
05656                  const svn_opt_revision_t *peg_revision,
05657                  const svn_opt_revision_t *revision,
05658                  svn_depth_t depth,
05659                  apr_uint32_t dirent_fields,
05660                  svn_boolean_t fetch_locks,
05661                  svn_client_list_func_t list_func,
05662                  void *baton,
05663                  svn_client_ctx_t *ctx,
05664                  apr_pool_t *pool);
05665 
05666 /**
05667  * Similar to svn_client_list2(), but with @a recurse instead of @a depth.
05668  * If @a recurse is TRUE, pass #svn_depth_files for @a depth; else
05669  * pass #svn_depth_infinity.
05670  *
05671  * @since New in 1.4.
05672  *
05673  * @deprecated Provided for backward compatibility with the 1.4 API.
05674  */
05675 SVN_DEPRECATED
05676 svn_error_t *
05677 svn_client_list(const char *path_or_url,
05678                 const svn_opt_revision_t *peg_revision,
05679                 const svn_opt_revision_t *revision,
05680                 svn_boolean_t recurse,
05681                 apr_uint32_t dirent_fields,
05682                 svn_boolean_t fetch_locks,
05683                 svn_client_list_func_t list_func,
05684                 void *baton,
05685                 svn_client_ctx_t *ctx,
05686                 apr_pool_t *pool);
05687 
05688 /**
05689  * Same as svn_client_list(), but always passes #SVN_DIRENT_ALL for
05690  * the @a dirent_fields argument and returns all information in two
05691  * hash tables instead of invoking a callback.
05692  *
05693  * Set @a *dirents to a newly allocated hash of directory entries.
05694  * The @a dirents hash maps entry names (<tt>const char *</tt>) to
05695  * #svn_dirent_t *'s.
05696  *
05697  * If @a locks is not @c NULL, set @a *locks to a hash table mapping
05698  * entry names (<tt>const char *</tt>) to #svn_lock_t *'s.
05699  *
05700  * @since New in 1.3.
05701  *
05702  * @deprecated Provided for backward compatibility with the 1.3 API.
05703  * Use svn_client_list2() instead.
05704  */
05705 SVN_DEPRECATED
05706 svn_error_t *
05707 svn_client_ls3(apr_hash_t **dirents,
05708                apr_hash_t **locks,
05709                const char *path_or_url,
05710                const svn_opt_revision_t *peg_revision,
05711                const svn_opt_revision_t *revision,
05712                svn_boolean_t recurse,
05713                svn_client_ctx_t *ctx,
05714                apr_pool_t *pool);
05715 
05716 /**
05717  * Same as svn_client_ls3(), but without the ability to get locks.
05718  *
05719  * @since New in 1.2.
05720  *
05721  * @deprecated Provided for backward compatibility with the 1.2 API.
05722  * Use svn_client_list2() instead.
05723  */
05724 SVN_DEPRECATED
05725 svn_error_t *
05726 svn_client_ls2(apr_hash_t **dirents,
05727                const char *path_or_url,
05728                const svn_opt_revision_t *peg_revision,
05729                const svn_opt_revision_t *revision,
05730                svn_boolean_t recurse,
05731                svn_client_ctx_t *ctx,
05732                apr_pool_t *pool);
05733 
05734 /**
05735  * Similar to svn_client_ls2() except that @a peg_revision is always
05736  * the same as @a revision.
05737  *
05738  * @deprecated Provided for backward compatibility with the 1.1 API.
05739  * Use svn_client_list2() instead.
05740  */
05741 SVN_DEPRECATED
05742 svn_error_t *
05743 svn_client_ls(apr_hash_t **dirents,
05744               const char *path_or_url,
05745               svn_opt_revision_t *revision,
05746               svn_boolean_t recurse,
05747               svn_client_ctx_t *ctx,
05748               apr_pool_t *pool);
05749 
05750 
05751 /** @} */
05752 
05753 /**
05754  * @defgroup Cat View the contents of a file in the repository.
05755  *
05756  * @{
05757  */
05758 
05759 /**
05760  * Output the content of a file.
05761  *
05762  * @param[out] props           Optional output argument to obtain properties.
05763  * @param[in] out              The stream to which the content will be written.
05764  * @param[in] path_or_url      The path or URL of the file.
05765  * @param[in] peg_revision     The peg revision.
05766  * @param[in] revision         The operative revision.
05767  * @param[in] expand_keywords  When true, keywords (when set) are expanded.
05768  * @param[in] ctx   The standard client context, used for possible
05769  *                  authentication.
05770  * @param[in] pool  Used for any temporary allocation.
05771  *
05772  * @todo Add an expansion/translation flag?
05773  *
05774  * @return A pointer to an #svn_error_t of the type (this list is not
05775  *         exhaustive): <br>
05776  *         An unspecified error if @a revision is of kind
05777  *         #svn_opt_revision_previous (or some other kind that requires
05778  *         a local path), because the desired revision cannot be
05779  *         determined. <br>
05780  *         If no error occurred, return #SVN_NO_ERROR.
05781  *
05782  * @see #svn_client_ctx_t <br> @ref clnt_revisions for
05783  *      a discussion of operative and peg revisions.
05784  *
05785  * @since New in 1.9.
05786  */
05787 svn_error_t *
05788 svn_client_cat3(apr_hash_t **props,
05789                 svn_stream_t *out,
05790                 const char *path_or_url,
05791                 const svn_opt_revision_t *peg_revision,
05792                 const svn_opt_revision_t *revision,
05793                 svn_boolean_t expand_keywords,
05794                 svn_client_ctx_t *ctx,
05795                 apr_pool_t *result_pool,
05796                 apr_pool_t *scratch_pool);
05797 
05798 /**
05799  * Similar to svn_client_cat3() except without the option of directly
05800  * reading the properties, and with @a expand_keywords always TRUE.
05801  *
05802  * @deprecated Provided for backward compatibility with the 1.8 API.
05803  */
05804 SVN_DEPRECATED
05805 svn_error_t *
05806 svn_client_cat2(svn_stream_t *out,
05807                 const char *path_or_url,
05808                 const svn_opt_revision_t *peg_revision,
05809                 const svn_opt_revision_t *revision,
05810                 svn_client_ctx_t *ctx,
05811                 apr_pool_t *pool);
05812 
05813 
05814 /**
05815  * Similar to svn_client_cat2() except that the peg revision is always
05816  * the same as @a revision.
05817  *
05818  * @deprecated Provided for backward compatibility with the 1.1 API.
05819  */
05820 SVN_DEPRECATED
05821 svn_error_t *
05822 svn_client_cat(svn_stream_t *out,
05823                const char *path_or_url,
05824                const svn_opt_revision_t *revision,
05825                svn_client_ctx_t *ctx,
05826                apr_pool_t *pool);
05827 
05828 /** @} end group: cat */
05829 
05830 
05831 
05832 /** Changelist commands
05833  *
05834  * @defgroup svn_client_changelist_funcs Client Changelist Functions
05835  * @{
05836  */
05837 
05838 /** Implementation note:
05839  *
05840  *  For now, changelists are implemented by scattering the
05841  *  associations across multiple .svn/entries files in a working copy.
05842  *  However, this client API was written so that we have the option of
05843  *  changing the underlying implementation -- we may someday want to
05844  *  store changelist definitions in a centralized database.
05845  */
05846 
05847 /**
05848  * Add each path in @a paths (recursing to @a depth as necessary) to
05849  * @a changelist.  If a path is already a member of another
05850  * changelist, then remove it from the other changelist and add it to
05851  * @a changelist.  (For now, a path cannot belong to two changelists
05852  * at once.)
05853  *
05854  * @a paths is an array of (const char *) local WC paths.
05855  *
05856  * @a changelists is an array of <tt>const char *</tt> changelist
05857  * names, used as a restrictive filter on items whose changelist
05858  * assignments are adjusted; that is, don't tweak the changeset of any
05859  * item unless it's currently a member of one of those changelists.
05860  * If @a changelists is empty (or altogether @c NULL), no changelist
05861  * filtering occurs.
05862  *
05863  * @note This metadata is purely a client-side "bookkeeping"
05864  * convenience, and is entirely managed by the working copy.
05865  *
05866  * @since New in 1.5.
05867  */
05868 svn_error_t *
05869 svn_client_add_to_changelist(const apr_array_header_t *paths,
05870                              const char *changelist,
05871                              svn_depth_t depth,
05872                              const apr_array_header_t *changelists,
05873                              svn_client_ctx_t *ctx,
05874                              apr_pool_t *pool);
05875 
05876 /**
05877  * Remove each path in @a paths (recursing to @a depth as necessary)
05878  * from changelists to which they are currently assigned.
05879  *
05880  * @a paths is an array of (const char *) local WC paths.
05881  *
05882  * @a changelists is an array of <tt>const char *</tt> changelist
05883  * names, used as a restrictive filter on items whose changelist
05884  * assignments are removed; that is, don't remove from a changeset any
05885  * item unless it's currently a member of one of those changelists.
05886  * If @a changelists is empty (or altogether @c NULL), all changelist
05887  * assignments in and under each path in @a paths (to @a depth) will
05888  * be removed.
05889  *
05890  * @note This metadata is purely a client-side "bookkeeping"
05891  * convenience, and is entirely managed by the working copy.
05892  *
05893  * @since New in 1.5.
05894  */
05895 svn_error_t *
05896 svn_client_remove_from_changelists(const apr_array_header_t *paths,
05897                                    svn_depth_t depth,
05898                                    const apr_array_header_t *changelists,
05899                                    svn_client_ctx_t *ctx,
05900                                    apr_pool_t *pool);
05901 
05902 
05903 /**
05904  * Beginning at @a path, crawl to @a depth to discover every path in
05905  * or under @a path which belongs to one of the changelists in @a
05906  * changelists (an array of <tt>const char *</tt> changelist names).
05907  * If @a changelists is @c NULL, discover paths with any changelist.
05908  * Call @a callback_func (with @a callback_baton) each time a
05909  * changelist-having path is discovered.
05910  *
05911  * @a path is a local WC path.
05912  *
05913  * If @a ctx->cancel_func is not @c NULL, invoke it passing @a
05914  * ctx->cancel_baton during the recursive walk.
05915  *
05916  * @since New in 1.5.
05917  */
05918 svn_error_t *
05919 svn_client_get_changelists(const char *path,
05920                            const apr_array_header_t *changelists,
05921                            svn_depth_t depth,
05922                            svn_changelist_receiver_t callback_func,
05923                            void *callback_baton,
05924                            svn_client_ctx_t *ctx,
05925                            apr_pool_t *pool);
05926 
05927 /** @} */
05928 
05929 
05930 
05931 /** Locking commands
05932  *
05933  * @defgroup svn_client_locking_funcs Client Locking Functions
05934  * @{
05935  */
05936 
05937 /**
05938  * Lock @a targets in the repository.  @a targets is an array of
05939  * <tt>const char *</tt> paths - either all working copy paths or all URLs.
05940  * All targets must be in the same repository.
05941  *
05942  * If a target is already locked in the repository, no lock will be
05943  * acquired unless @a steal_lock is TRUE, in which case the locks are
05944  * stolen.  @a comment, if non-NULL, is an xml-escapable description
05945  * stored with each lock in the repository.  Each acquired lock will
05946  * be stored in the working copy if the targets are WC paths.
05947  *
05948  * For each target @a ctx->notify_func2/notify_baton2 will be used to indicate
05949  * whether it was locked.  An action of #svn_wc_notify_locked
05950  * means that the path was locked.  If the path was not locked because
05951  * it was out of date or there was already a lock in the repository,
05952  * the notification function will be called with
05953  * #svn_wc_notify_failed_lock, and the error passed in the notification
05954  * structure.
05955  *
05956  * Use @a pool for temporary allocations.
05957  *
05958  * @since New in 1.2.
05959  */
05960 svn_error_t *
05961 svn_client_lock(const apr_array_header_t *targets,
05962                 const char *comment,
05963                 svn_boolean_t steal_lock,
05964                 svn_client_ctx_t *ctx,
05965                 apr_pool_t *pool);
05966 
05967 /**
05968  * Unlock @a targets in the repository.  @a targets is an array of
05969  * <tt>const char *</tt> paths - either all working copy paths or all URLs.
05970  * All targets must be in the same repository.
05971  *
05972  * If the targets are WC paths, and @a break_lock is FALSE, the working
05973  * copy must contain a lock for each target.
05974  * If this is not the case, or the working copy lock doesn't match the
05975  * lock token in the repository, an error will be signaled.
05976  *
05977  * If the targets are URLs, the locks may be broken even if @a break_lock
05978  * is FALSE, but only if the lock owner is the same as the
05979  * authenticated user.
05980  *
05981  * If @a break_lock is TRUE, the locks will be broken in the
05982  * repository.  In both cases, the locks, if any, will be removed from
05983  * the working copy if the targets are WC paths.
05984  *
05985  * The notification functions in @a ctx will be called for each
05986  * target.  If the target was successfully unlocked,
05987  * #svn_wc_notify_unlocked will be used.  Else, if the error is
05988  * directly related to unlocking the path (see
05989  * #SVN_ERR_IS_UNLOCK_ERROR), #svn_wc_notify_failed_unlock will be
05990  * used and the error will be passed in the notification structure.
05991 
05992  * Use @a pool for temporary allocations.
05993  *
05994  * @since New in 1.2.
05995  */
05996 svn_error_t *
05997 svn_client_unlock(const apr_array_header_t *targets,
05998                   svn_boolean_t break_lock,
05999                   svn_client_ctx_t *ctx,
06000                   apr_pool_t *pool);
06001 
06002 /** @} */
06003 
06004 /**
06005  * @defgroup Info Show repository information about a working copy.
06006  *
06007  * @{
06008  */
06009 
06010 /** The size of the file is unknown.
06011  * Used as value in fields of type @c apr_size_t in #svn_info_t.
06012  *
06013  * @since New in 1.5
06014  * @deprecated Provided for backward compatibility with the 1.6 API.
06015  */
06016 #define SVN_INFO_SIZE_UNKNOWN ((apr_size_t) -1)
06017 
06018 /**
06019  * A structure which describes various system-generated metadata about
06020  * a working-copy path or URL.
06021  *
06022  * @note Fields may be added to the end of this structure in future
06023  * versions.  Therefore, users shouldn't allocate structures of this
06024  * type, to preserve binary compatibility.
06025  *
06026  * @since New in 1.2.
06027  * @deprecated Provided for backward compatibility with the 1.6 API.  The new
06028  * API is #svn_client_info2_t.
06029  */
06030 typedef struct svn_info_t
06031 {
06032   /** Where the item lives in the repository. */
06033   const char *URL;
06034 
06035   /** The revision of the object.  If path_or_url is a working-copy
06036    * path, then this is its current working revnum.  If path_or_url
06037    * is a URL, then this is the repos revision that path_or_url lives in. */
06038   svn_revnum_t rev;
06039 
06040   /** The node's kind. */
06041   svn_node_kind_t kind;
06042 
06043   /** The root URL of the repository. */
06044   const char *repos_root_URL;
06045 
06046   /** The repository's UUID. */
06047   const char *repos_UUID;
06048 
06049   /** The last revision in which this object changed. */
06050   svn_revnum_t last_changed_rev;
06051 
06052   /** The date of the last_changed_rev. */
06053   apr_time_t last_changed_date;
06054 
06055   /** The author of the last_changed_rev. */
06056   const char *last_changed_author;
06057 
06058   /** An exclusive lock, if present.  Could be either local or remote. */
06059   svn_lock_t *lock;
06060 
06061   /** Whether or not to ignore the next 10 wc-specific fields. */
06062   svn_boolean_t has_wc_info;
06063 
06064   /**
06065    * @name Working-copy path fields
06066    * These things only apply to a working-copy path.
06067    * See svn_wc_entry_t for explanations.
06068    * @{
06069    */
06070   svn_wc_schedule_t schedule;
06071   const char *copyfrom_url;
06072   svn_revnum_t copyfrom_rev;
06073   apr_time_t text_time;
06074   apr_time_t prop_time;  /* will always be 0 for svn 1.4 and later */
06075   const char *checksum;
06076   const char *conflict_old;
06077   const char *conflict_new;
06078   const char *conflict_wrk;
06079   const char *prejfile;
06080   /** @since New in 1.5. */
06081   const char *changelist;
06082   /** @since New in 1.5. */
06083   svn_depth_t depth;
06084 
06085   /**
06086    * Similar to working_size64, but will be #SVN_INFO_SIZE_UNKNOWN when
06087    * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte).
06088    *
06089    * @deprecated Provided for backward compatibility with the 1.5 API.
06090    */
06091   apr_size_t working_size;
06092 
06093   /** @} */
06094 
06095   /**
06096    * Similar to size64, but size will be #SVN_INFO_SIZE_UNKNOWN when
06097    * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte).
06098    *
06099    * @deprecated Provided for backward compatibility with the 1.5 API.
06100    */
06101   apr_size_t size;
06102 
06103   /**
06104    * The size of the file in the repository (untranslated,
06105    * e.g. without adjustment of line endings and keyword
06106    * expansion). Only applicable for file -- not directory -- URLs.
06107    * For working copy paths, size64 will be #SVN_INVALID_FILESIZE.
06108    * @since New in 1.6.
06109    */
06110   svn_filesize_t size64;
06111 
06112   /**
06113    * The size of the file after being translated into its local
06114    * representation, or #SVN_INVALID_FILESIZE if unknown.
06115    * Not applicable for directories.
06116    * @since New in 1.6.
06117    * @name Working-copy path fields
06118    * @{
06119    */
06120   svn_filesize_t working_size64;
06121 
06122   /**
06123    * Info on any tree conflict of which this node is a victim. Otherwise NULL.
06124    * @since New in 1.6.
06125    */
06126   svn_wc_conflict_description_t *tree_conflict;
06127 
06128   /** @} */
06129 
06130 } svn_info_t;
06131 
06132 
06133 /**
06134  * The callback invoked by svn_client_info2().  Each invocation
06135  * describes @a path with the information present in @a info.  Note
06136  * that any fields within @a info may be NULL if information is
06137  * unavailable.  Use @a pool for all temporary allocation.
06138  *
06139  * @since New in 1.2.
06140  * @deprecated Provided for backward compatibility with the 1.6 API.  The new
06141  * API is #svn_client_info_receiver2_t.
06142  */
06143 typedef svn_error_t *(*svn_info_receiver_t)(
06144   void *baton,
06145   const char *path,
06146   const svn_info_t *info,
06147   apr_pool_t *pool);
06148 
06149 /**
06150  * Return a duplicate of @a info, allocated in @a pool. No part of the new
06151  * structure will be shared with @a info.
06152  *
06153  * @since New in 1.3.
06154  * @deprecated Provided for backward compatibility with the 1.6 API.  The new
06155  * API is #svn_client_info2_dup().
06156  */
06157 SVN_DEPRECATED
06158 svn_info_t *
06159 svn_info_dup(const svn_info_t *info,
06160              apr_pool_t *pool);
06161 
06162 /**
06163  * A structure which describes various system-generated metadata about
06164  * a working-copy path or URL.
06165  *
06166  * @note Fields may be added to the end of this structure in future
06167  * versions.  Therefore, users shouldn't allocate structures of this
06168  * type, to preserve binary compatibility.
06169  *
06170  * @since New in 1.7.
06171  */
06172 typedef struct svn_client_info2_t
06173 {
06174   /** Where the item lives in the repository. */
06175   const char *URL;
06176 
06177   /** The revision of the object.  If the target is a working-copy
06178    * path, then this is its current working revnum.  If the target
06179    * is a URL, then this is the repos revision that it lives in. */
06180   svn_revnum_t rev;
06181 
06182   /** The root URL of the repository. */
06183   const char *repos_root_URL;
06184 
06185   /** The repository's UUID. */
06186   const char *repos_UUID;
06187 
06188   /** The node's kind. */
06189   svn_node_kind_t kind;
06190 
06191   /** The size of the file in the repository (untranslated,
06192    * e.g. without adjustment of line endings and keyword
06193    * expansion). Only applicable for file -- not directory -- URLs.
06194    * For working copy paths, @a size will be #SVN_INVALID_FILESIZE. */
06195   svn_filesize_t size;
06196 
06197   /** The last revision in which this object changed. */
06198   svn_revnum_t last_changed_rev;
06199 
06200   /** The date of the last_changed_rev. */
06201   apr_time_t last_changed_date;
06202 
06203   /** The author of the last_changed_rev. */
06204   const char *last_changed_author;
06205 
06206   /** An exclusive lock, if present.  Could be either local or remote. */
06207   const svn_lock_t *lock;
06208 
06209   /** Possible information about the working copy, NULL if not valid. */
06210   const svn_wc_info_t *wc_info;
06211 
06212 } svn_client_info2_t;
06213 
06214 /**
06215  * Return a duplicate of @a info, allocated in @a pool. No part of the new
06216  * structure will be shared with @a info.
06217  *
06218  * @since New in 1.7.
06219  */
06220 svn_client_info2_t *
06221 svn_client_info2_dup(const svn_client_info2_t *info,
06222                      apr_pool_t *pool);
06223 
06224 /**
06225  * The callback invoked by info retrievers.  Each invocation
06226  * describes @a abspath_or_url with the information present in @a info.
06227  * Use @a scratch_pool for all temporary allocation.
06228  *
06229  * @since New in 1.7.
06230  */
06231 typedef svn_error_t *(*svn_client_info_receiver2_t)(
06232                          void *baton,
06233                          const char *abspath_or_url,
06234                          const svn_client_info2_t *info,
06235                          apr_pool_t *scratch_pool);
06236 
06237 /**
06238  * Invoke @a receiver with @a receiver_baton to return information
06239  * about @a abspath_or_url in @a revision.  The information returned is
06240  * system-generated metadata, not the sort of "property" metadata
06241  * created by users.  See #svn_client_info2_t.
06242  *
06243  * If both revision arguments are either #svn_opt_revision_unspecified
06244  * or @c NULL, then information will be pulled solely from the working copy;
06245  * no network connections will be made.
06246  *
06247  * Otherwise, information will be pulled from a repository.  The
06248  * actual node revision selected is determined by the @a abspath_or_url
06249  * as it exists in @a peg_revision.  If @a peg_revision->kind is
06250  * #svn_opt_revision_unspecified, then it defaults to
06251  * #svn_opt_revision_head for URLs or #svn_opt_revision_working for
06252  * WC targets.
06253  *
06254  * If @a abspath_or_url is not a local path, then if @a revision is of
06255  * kind #svn_opt_revision_previous (or some other kind that requires
06256  * a local path), an error will be returned, because the desired
06257  * revision cannot be determined.
06258  *
06259  * Use the authentication baton cached in @a ctx to authenticate
06260  * against the repository.
06261  *
06262  * If @a abspath_or_url is a file, just invoke @a receiver on it.  If it
06263  * is a directory, then descend according to @a depth.  If @a depth is
06264  * #svn_depth_empty, invoke @a receiver on @a abspath_or_url and
06265  * nothing else; if #svn_depth_files, on @a abspath_or_url and its
06266  * immediate file children; if #svn_depth_immediates, the preceding
06267  * plus on each immediate subdirectory; if #svn_depth_infinity, then
06268  * recurse fully, invoking @a receiver on @a abspath_or_url and
06269  * everything beneath it.
06270  *
06271  * If @a fetch_excluded is TRUE, also also send excluded nodes in the working
06272  * copy to @a receiver, otherwise these are skipped. If @a fetch_actual_only
06273  * is TRUE also send nodes that don't exist as versioned but are still
06274  * tree conflicted.
06275  *
06276  * If @a include_externals is @c TRUE, recurse into externals and report about
06277  * them as well.
06278  *
06279  * @a changelists is an array of <tt>const char *</tt> changelist
06280  * names, used as a restrictive filter on items whose info is
06281  * reported; that is, don't report info about any item unless
06282  * it's a member of one of those changelists.  If @a changelists is
06283  * empty (or altogether @c NULL), no changelist filtering occurs.
06284  *
06285  * @since New in 1.9.
06286  */
06287 svn_error_t *
06288 svn_client_info4(const char *abspath_or_url,
06289                  const svn_opt_revision_t *peg_revision,
06290                  const svn_opt_revision_t *revision,
06291                  svn_depth_t depth,
06292                  svn_boolean_t fetch_excluded,
06293                  svn_boolean_t fetch_actual_only,
06294                  svn_boolean_t include_externals,
06295                  const apr_array_header_t *changelists,
06296                  svn_client_info_receiver2_t receiver,
06297                  void *receiver_baton,
06298                  svn_client_ctx_t *ctx,
06299                  apr_pool_t *scratch_pool);
06300 
06301 
06302 /** Similar to svn_client_info4, but doesn't support walking externals.
06303  *
06304  * @since New in 1.7.
06305  * @deprecated Provided for backward compatibility with the 1.8 API.
06306  */
06307 SVN_DEPRECATED
06308 svn_error_t *
06309 svn_client_info3(const char *abspath_or_url,
06310                  const svn_opt_revision_t *peg_revision,
06311                  const svn_opt_revision_t *revision,
06312                  svn_depth_t depth,
06313                  svn_boolean_t fetch_excluded,
06314                  svn_boolean_t fetch_actual_only,
06315                  const apr_array_header_t *changelists,
06316                  svn_client_info_receiver2_t receiver,
06317                  void *receiver_baton,
06318                  svn_client_ctx_t *ctx,
06319                  apr_pool_t *scratch_pool);
06320 
06321 /** Similar to svn_client_info3, but uses an svn_info_receiver_t instead of
06322  * a #svn_client_info_receiver2_t, and @a path_or_url may be a relative path.
06323  *
06324  * @since New in 1.5.
06325  * @deprecated Provided for backward compatibility with the 1.6 API.
06326  */
06327 SVN_DEPRECATED
06328 svn_error_t *
06329 svn_client_info2(const char *path_or_url,
06330                  const svn_opt_revision_t *peg_revision,
06331                  const svn_opt_revision_t *revision,
06332                  svn_info_receiver_t receiver,
06333                  void *receiver_baton,
06334                  svn_depth_t depth,
06335                  const apr_array_header_t *changelists,
06336                  svn_client_ctx_t *ctx,
06337                  apr_pool_t *pool);
06338 
06339 /**
06340  * Similar to svn_client_info2() but with @a changelists passed as @c
06341  * NULL, and @a depth set according to @a recurse: if @a recurse is
06342  * TRUE, @a depth is #svn_depth_infinity, else #svn_depth_empty.
06343  *
06344  * @deprecated Provided for backward compatibility with the 1.4 API.
06345  */
06346 SVN_DEPRECATED
06347 svn_error_t *
06348 svn_client_info(const char *path_or_url,
06349                 const svn_opt_revision_t *peg_revision,
06350                 const svn_opt_revision_t *revision,
06351                 svn_info_receiver_t receiver,
06352                 void *receiver_baton,
06353                 svn_boolean_t recurse,
06354                 svn_client_ctx_t *ctx,
06355                 apr_pool_t *pool);
06356 
06357 /**
06358  * Set @a *wcroot_abspath to the local abspath of the root of the
06359  * working copy in which @a local_abspath resides.
06360  *
06361  * @since New in 1.7.
06362  */
06363 svn_error_t *
06364 svn_client_get_wc_root(const char **wcroot_abspath,
06365                        const char *local_abspath,
06366                        svn_client_ctx_t *ctx,
06367                        apr_pool_t *result_pool,
06368                        apr_pool_t *scratch_pool);
06369 
06370 /**
06371  * Set @a *min_revision and @a *max_revision to the lowest and highest
06372  * revision numbers found within @a local_abspath.  If @a committed is
06373  * TRUE, set @a *min_revision and @a *max_revision to the lowest and
06374  * highest comitted (i.e. "last changed") revision numbers,
06375  * respectively.  NULL may be passed for either of @a min_revision and
06376  * @a max_revision to indicate the caller's lack of interest in the
06377  * value.  Use @a scratch_pool for temporary allocations.
06378  *
06379  * @since New in 1.7.
06380  */
06381 svn_error_t *
06382 svn_client_min_max_revisions(svn_revnum_t *min_revision,
06383                              svn_revnum_t *max_revision,
06384                              const char *local_abspath,
06385                              svn_boolean_t committed,
06386                              svn_client_ctx_t *ctx,
06387                              apr_pool_t *scratch_pool);
06388 
06389 /** @} */
06390 
06391 
06392 /**
06393  * @defgroup Patch Apply a patch to the working copy
06394  *
06395  * @{
06396  */
06397 
06398 /**
06399  * The callback invoked by svn_client_patch() before attempting to patch
06400  * the target file at @a canon_path_from_patchfile (the path as parsed from
06401  * the patch file, but in canonicalized form). The callback can set
06402  * @a *filtered to @c TRUE to prevent the file from being patched, or else
06403  * must set it to @c FALSE.
06404  *
06405  * The callback is also provided with @a patch_abspath, the path of a
06406  * temporary file containing the patched result, and with @a reject_abspath,
06407  * the path to a temporary file containing the diff text of any hunks
06408  * which were rejected during patching.
06409  *
06410  * Because the callback is invoked before the patching attempt is made,
06411  * there is no guarantee that the target file will actually be patched
06412  * successfully. Client implementations must pay attention to notification
06413  * feedback provided by svn_client_patch() to find out which paths were
06414  * patched successfully.
06415  *
06416  * Note also that the files at @a patch_abspath and @a reject_abspath are
06417  * guaranteed to remain on disk after patching only if the
06418  * @a remove_tempfiles parameter for svn_client_patch() is @c FALSE.
06419  *
06420  * The const char * parameters may be allocated in @a scratch_pool which
06421  * will be cleared after each invocation.
06422  *
06423  * @since New in 1.7.
06424  */
06425 typedef svn_error_t *(*svn_client_patch_func_t)(
06426   void *baton,
06427   svn_boolean_t *filtered,
06428   const char *canon_path_from_patchfile,
06429   const char *patch_abspath,
06430   const char *reject_abspath,
06431   apr_pool_t *scratch_pool);
06432 
06433 /**
06434  * Apply a unidiff patch that's located at absolute path
06435  * @a patch_abspath to the working copy directory at @a wc_dir_abspath.
06436  *
06437  * This function makes a best-effort attempt at applying the patch.
06438  * It might skip patch targets which cannot be patched (e.g. targets
06439  * that are outside of the working copy). It will also reject hunks
06440  * which cannot be applied to a target in case the hunk's context
06441  * does not match anywhere in the patch target.
06442  *
06443  * If @a dry_run is TRUE, the patching process is carried out, and full
06444  * notification feedback is provided, but the working copy is not modified.
06445  *
06446  * @a strip_count specifies how many leading path components should be
06447  * stripped from paths obtained from the patch. It is an error if a
06448  * negative strip count is passed.
06449  *
06450  * If @a reverse is @c TRUE, apply patches in reverse, deleting lines
06451  * the patch would add and adding lines the patch would delete.
06452  *
06453  * If @a ignore_whitespace is TRUE, allow patches to be applied if they
06454  * only differ from the target by whitespace.
06455  *
06456  * If @a remove_tempfiles is TRUE, lifetimes of temporary files created
06457  * during patching will be managed internally. Otherwise, the caller should
06458  * take ownership of these files, the names of which can be obtained by
06459  * passing a @a patch_func callback.
06460  *
06461  * If @a patch_func is non-NULL, invoke @a patch_func with @a patch_baton
06462  * for each patch target processed.
06463  *
06464  * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
06465  * @a ctx->notify_baton2 as patching progresses.
06466  *
06467  * If @a ctx->cancel_func is non-NULL, invoke it passing @a
06468  * ctx->cancel_baton at various places during the operation.
06469  *
06470  * Use @a scratch_pool for temporary allocations.
06471  *
06472  * @since New in 1.7.
06473  */
06474 svn_error_t *
06475 svn_client_patch(const char *patch_abspath,
06476                  const char *wc_dir_abspath,
06477                  svn_boolean_t dry_run,
06478                  int strip_count,
06479                  svn_boolean_t reverse,
06480                  svn_boolean_t ignore_whitespace,
06481                  svn_boolean_t remove_tempfiles,
06482                  svn_client_patch_func_t patch_func,
06483                  void *patch_baton,
06484                  svn_client_ctx_t *ctx,
06485                  apr_pool_t *scratch_pool);
06486 
06487 /** @} */
06488 
06489 /** @} end group: Client working copy management */
06490 
06491 /**
06492  *
06493  * @defgroup clnt_sessions Client session related functions
06494  *
06495  * @{
06496  *
06497  */
06498 
06499 
06500 /* Converting paths to URLs. */
06501 
06502 /** Set @a *url to the URL for @a path_or_url allocated in result_pool.
06503  *
06504  * If @a path_or_url is already a URL, set @a *url to @a path_or_url.
06505  *
06506  * If @a path_or_url is a versioned item, set @a *url to @a
06507  * path_or_url's entry URL.  If @a path_or_url is unversioned (has
06508  * no entry), set @a *url to NULL.
06509  *
06510  * Use @a ctx->wc_ctx to retrieve the information. Use
06511  ** @a scratch_pool for temporary allocations.
06512  *
06513  * @since New in 1.7.
06514  */
06515 svn_error_t *
06516 svn_client_url_from_path2(const char **url,
06517                           const char *path_or_url,
06518                           svn_client_ctx_t *ctx,
06519                           apr_pool_t *result_pool,
06520                           apr_pool_t *scratch_pool);
06521 
06522 /** Similar to svn_client_url_from_path2(), but without a context argument.
06523  *
06524  * @since New in 1.5.
06525  * @deprecated Provided for backward compatibility with the 1.6 API.
06526  */
06527 SVN_DEPRECATED
06528 svn_error_t *
06529 svn_client_url_from_path(const char **url,
06530                          const char *path_or_url,
06531                          apr_pool_t *pool);
06532 
06533 
06534 
06535 /* Fetching a repository's root URL and UUID. */
06536 
06537 /** Set @a *repos_root_url and @a *repos_uuid, to the root URL and UUID of
06538  * the repository in which @a abspath_or_url is versioned. Use the
06539  * authentication baton and working copy context cached in @a ctx as
06540  * necessary. @a repos_root_url and/or @a repos_uuid may be NULL if not
06541  * wanted.
06542  *
06543  * This function will open a temporary RA session to the repository if
06544  * necessary to get the information.
06545  *
06546  * Allocate @a *repos_root_url and @a *repos_uuid in @a result_pool.
06547  * Use @a scratch_pool for temporary allocations.
06548  *
06549  * @since New in 1.8.
06550  */
06551 svn_error_t *
06552 svn_client_get_repos_root(const char **repos_root_url,
06553                           const char **repos_uuid,
06554                           const char *abspath_or_url,
06555                           svn_client_ctx_t *ctx,
06556                           apr_pool_t *result_pool,
06557                           apr_pool_t *scratch_pool);
06558 
06559 /** Set @a *url to the repository root URL of the repository in which
06560  * @a path_or_url is versioned (or scheduled to be versioned),
06561  * allocated in @a pool.  @a ctx is required for possible repository
06562  * authentication.
06563  *
06564  * @since New in 1.5.
06565  * @deprecated Provided for backward compatibility with the 1.7 API. Use
06566  * svn_client_get_repos_root() instead, with an absolute path.
06567  */
06568 SVN_DEPRECATED
06569 svn_error_t *
06570 svn_client_root_url_from_path(const char **url,
06571                               const char *path_or_url,
06572                               svn_client_ctx_t *ctx,
06573                               apr_pool_t *pool);
06574 
06575 /** Get repository @a uuid for @a url.
06576  *
06577  * Use a @a pool to open a temporary RA session to @a url, discover the
06578  * repository uuid, and free the session.  Return the uuid in @a uuid,
06579  * allocated in @a pool.  @a ctx is required for possible repository
06580  * authentication.
06581  *
06582  * @deprecated Provided for backward compatibility with the 1.7 API. Use
06583  * svn_client_get_repos_root() instead.
06584  */
06585 SVN_DEPRECATED
06586 svn_error_t *
06587 svn_client_uuid_from_url(const char **uuid,
06588                          const char *url,
06589                          svn_client_ctx_t *ctx,
06590                          apr_pool_t *pool);
06591 
06592 
06593 /** Return the repository @a uuid for working-copy @a local_abspath,
06594  * allocated in @a result_pool.  Use @a ctx->wc_ctx to retrieve the
06595  * information.
06596  *
06597  * Use @a scratch_pool for temporary allocations.
06598  *
06599  * @since New in 1.7.
06600  * @deprecated Provided for backward compatibility with the 1.7 API. Use
06601  * svn_client_get_repos_root() instead.
06602  */
06603 SVN_DEPRECATED
06604 svn_error_t *
06605 svn_client_uuid_from_path2(const char **uuid,
06606                            const char *local_abspath,
06607                            svn_client_ctx_t *ctx,
06608                            apr_pool_t *result_pool,
06609                            apr_pool_t *scratch_pool);
06610 
06611 /** Similar to svn_client_uuid_from_path2(), but with a relative path and
06612  * an access baton.
06613  *
06614  * @deprecated Provided for backward compatibility with the 1.6 API.
06615  */
06616 SVN_DEPRECATED
06617 svn_error_t *
06618 svn_client_uuid_from_path(const char **uuid,
06619                           const char *path,
06620                           svn_wc_adm_access_t *adm_access,
06621                           svn_client_ctx_t *ctx,
06622                           apr_pool_t *pool);
06623 
06624 
06625 /* Opening RA sessions. */
06626 
06627 /** Open an RA session rooted at @a url, and return it in @a *session.
06628  *
06629  * Use the authentication baton stored in @a ctx for authentication.
06630  * @a *session is allocated in @a result_pool.
06631  *
06632  * If @a wri_abspath is not NULL, use the working copy identified by @a
06633  * wri_abspath to potentially avoid transferring unneeded data.
06634  *
06635  * @note This function is similar to svn_ra_open4(), but the caller avoids
06636  * having to providing its own callback functions.
06637  * @since New in 1.8.
06638  */
06639 svn_error_t *
06640 svn_client_open_ra_session2(svn_ra_session_t **session,
06641                            const char *url,
06642                            const char *wri_abspath,
06643                            svn_client_ctx_t *ctx,
06644                            apr_pool_t *result_pool,
06645                            apr_pool_t *scratch_pool);
06646 
06647 /** Similar to svn_client_open_ra_session2(), but with @ wri_abspath
06648  * always passed as NULL, and with the same pool used as both @a
06649  * result_pool and @a scratch_pool.
06650  *
06651  * @since New in 1.3.
06652  * @deprecated Provided for backward compatibility with the 1.7 API.
06653  */
06654 SVN_DEPRECATED
06655 svn_error_t *
06656 svn_client_open_ra_session(svn_ra_session_t **session,
06657                            const char *url,
06658                            svn_client_ctx_t *ctx,
06659                            apr_pool_t *pool);
06660 
06661 
06662 /** @} end group: Client session related functions */
06663 
06664 /** @} */
06665 
06666 #ifdef __cplusplus
06667 }
06668 #endif /* __cplusplus */
06669 
06670 #endif  /* SVN_CLIENT_H */

Generated on Mon Mar 17 15:46:32 2014 for Subversion by  doxygen 1.4.7