- Main Page
- Related Pages
- Modules
- Data Structures
- Files

- File List
- Globals

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

All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines