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