svn_client.h revision 362181
1/** 2 * @copyright 3 * ==================================================================== 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 * ==================================================================== 21 * @endcopyright 22 * 23 * @file svn_client.h 24 * @brief Subversion's client library 25 * 26 * Requires: The working copy library and repository access library. 27 * Provides: Broad wrappers around working copy library functionality. 28 * Used By: Client programs. 29 */ 30 31#ifndef SVN_CLIENT_H 32#define SVN_CLIENT_H 33 34#include <apr.h> 35#include <apr_pools.h> 36#include <apr_hash.h> 37#include <apr_tables.h> 38#include <apr_getopt.h> 39#include <apr_file_io.h> 40#include <apr_time.h> 41 42#include "svn_types.h" 43#include "svn_string.h" 44#include "svn_wc.h" 45#include "svn_opt.h" 46#include "svn_ra.h" 47#include "svn_diff.h" 48#include "svn_auth.h" 49 50#ifdef __cplusplus 51extern "C" { 52#endif /* __cplusplus */ 53 54 55 56/** 57 * Get libsvn_client version information. 58 * 59 * @since New in 1.1. 60 */ 61const svn_version_t * 62svn_client_version(void); 63 64/** Client supporting functions 65 * 66 * @defgroup clnt_support Client supporting subsystem 67 * 68 * @{ 69 */ 70 71 72/*** Authentication stuff ***/ 73 74/** The new authentication system allows the RA layer to "pull" 75 * information as needed from libsvn_client. 76 * 77 * @deprecated Replaced by the svn_auth_* functions. 78 * @see auth_fns 79 * 80 * @defgroup auth_fns_depr (deprecated) AuthZ client subsystem 81 * 82 * @{ 83 */ 84 85/** Create and return @a *provider, an authentication provider of type 86 * svn_auth_cred_simple_t that gets information by prompting the user 87 * with @a prompt_func and @a prompt_baton. Allocate @a *provider in 88 * @a pool. 89 * 90 * If both #SVN_AUTH_PARAM_DEFAULT_USERNAME and 91 * #SVN_AUTH_PARAM_DEFAULT_PASSWORD are defined as runtime 92 * parameters in the @c auth_baton, then @a *provider will return the 93 * default arguments when svn_auth_first_credentials() is called. If 94 * svn_auth_first_credentials() fails, then @a *provider will 95 * re-prompt @a retry_limit times (via svn_auth_next_credentials()). 96 * For infinite retries, set @a retry_limit to value less than 0. 97 * 98 * @deprecated Provided for backward compatibility with the 1.3 API. 99 * Use svn_auth_get_simple_prompt_provider() instead. 100 */ 101SVN_DEPRECATED 102void 103svn_client_get_simple_prompt_provider( 104 svn_auth_provider_object_t **provider, 105 svn_auth_simple_prompt_func_t prompt_func, 106 void *prompt_baton, 107 int retry_limit, 108 apr_pool_t *pool); 109 110 111/** Create and return @a *provider, an authentication provider of type 112 * #svn_auth_cred_username_t that gets information by prompting the 113 * user with @a prompt_func and @a prompt_baton. Allocate @a *provider 114 * in @a pool. 115 * 116 * If #SVN_AUTH_PARAM_DEFAULT_USERNAME is defined as a runtime 117 * parameter in the @c auth_baton, then @a *provider will return the 118 * default argument when svn_auth_first_credentials() is called. If 119 * svn_auth_first_credentials() fails, then @a *provider will 120 * re-prompt @a retry_limit times (via svn_auth_next_credentials()). 121 * For infinite retries, set @a retry_limit to value less than 0. 122 * 123 * @deprecated Provided for backward compatibility with the 1.3 API. 124 * Use svn_auth_get_username_prompt_provider() instead. 125 */ 126SVN_DEPRECATED 127void 128svn_client_get_username_prompt_provider( 129 svn_auth_provider_object_t **provider, 130 svn_auth_username_prompt_func_t prompt_func, 131 void *prompt_baton, 132 int retry_limit, 133 apr_pool_t *pool); 134 135 136/** Create and return @a *provider, an authentication provider of type 137 * #svn_auth_cred_simple_t that gets/sets information from the user's 138 * ~/.subversion configuration directory. Allocate @a *provider in 139 * @a pool. 140 * 141 * If a default username or password is available, @a *provider will 142 * honor them as well, and return them when 143 * svn_auth_first_credentials() is called. (see 144 * #SVN_AUTH_PARAM_DEFAULT_USERNAME and #SVN_AUTH_PARAM_DEFAULT_PASSWORD). 145 * 146 * @deprecated Provided for backward compatibility with the 1.3 API. 147 * Use svn_auth_get_simple_provider2() instead. 148 */ 149SVN_DEPRECATED 150void 151svn_client_get_simple_provider(svn_auth_provider_object_t **provider, 152 apr_pool_t *pool); 153 154 155#if (defined(WIN32) && !defined(__MINGW32__)) || defined(DOXYGEN) || defined(CTYPESGEN) || defined(SWIG) 156/** 157 * Create and return @a *provider, an authentication provider of type 158 * #svn_auth_cred_simple_t that gets/sets information from the user's 159 * ~/.subversion configuration directory. Allocate @a *provider in 160 * @a pool. 161 * 162 * This is like svn_client_get_simple_provider(), except that, when 163 * running on Window 2000 or newer (or any other Windows version that 164 * includes the CryptoAPI), the provider encrypts the password before 165 * storing it to disk. On earlier versions of Windows, the provider 166 * does nothing. 167 * 168 * @since New in 1.2. 169 * @note This function is only available on Windows. 170 * 171 * @note An administrative password reset may invalidate the account's 172 * secret key. This function will detect that situation and behave as 173 * if the password were not cached at all. 174 * 175 * @deprecated Provided for backward compatibility with the 1.3 API. 176 * Use svn_auth_get_windows_simple_provider() instead. 177 */ 178SVN_DEPRECATED 179void 180svn_client_get_windows_simple_provider(svn_auth_provider_object_t **provider, 181 apr_pool_t *pool); 182#endif /* WIN32 && !__MINGW32__ || DOXYGEN || CTYPESGEN || SWIG */ 183 184/** Create and return @a *provider, an authentication provider of type 185 * #svn_auth_cred_username_t that gets/sets information from a user's 186 * ~/.subversion configuration directory. Allocate @a *provider in 187 * @a pool. 188 * 189 * If a default username is available, @a *provider will honor it, 190 * and return it when svn_auth_first_credentials() is called. (see 191 * #SVN_AUTH_PARAM_DEFAULT_USERNAME). 192 * 193 * @deprecated Provided for backward compatibility with the 1.3 API. 194 * Use svn_auth_get_username_provider() instead. 195 */ 196SVN_DEPRECATED 197void 198svn_client_get_username_provider(svn_auth_provider_object_t **provider, 199 apr_pool_t *pool); 200 201 202/** Create and return @a *provider, an authentication provider of type 203 * #svn_auth_cred_ssl_server_trust_t, allocated in @a pool. 204 * 205 * @a *provider retrieves its credentials from the configuration 206 * mechanism. The returned credential is used to override SSL 207 * security on an error. 208 * 209 * @deprecated Provided for backward compatibility with the 1.3 API. 210 * Use svn_auth_get_ssl_server_trust_file_provider() instead. 211 */ 212SVN_DEPRECATED 213void 214svn_client_get_ssl_server_trust_file_provider( 215 svn_auth_provider_object_t **provider, 216 apr_pool_t *pool); 217 218 219/** Create and return @a *provider, an authentication provider of type 220 * #svn_auth_cred_ssl_client_cert_t, allocated in @a pool. 221 * 222 * @a *provider retrieves its credentials from the configuration 223 * mechanism. The returned credential is used to load the appropriate 224 * client certificate for authentication when requested by a server. 225 * 226 * @deprecated Provided for backward compatibility with the 1.3 API. 227 * Use svn_auth_get_ssl_client_cert_file_provider() instead. 228 */ 229SVN_DEPRECATED 230void 231svn_client_get_ssl_client_cert_file_provider( 232 svn_auth_provider_object_t **provider, 233 apr_pool_t *pool); 234 235 236/** Create and return @a *provider, an authentication provider of type 237 * #svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool. 238 * 239 * @a *provider retrieves its credentials from the configuration 240 * mechanism. The returned credential is used when a loaded client 241 * certificate is protected by a passphrase. 242 * 243 * @deprecated Provided for backward compatibility with the 1.3 API. 244 * Use svn_auth_get_ssl_client_cert_pw_file_provider2() instead. 245 */ 246SVN_DEPRECATED 247void 248svn_client_get_ssl_client_cert_pw_file_provider( 249 svn_auth_provider_object_t **provider, 250 apr_pool_t *pool); 251 252 253/** Create and return @a *provider, an authentication provider of type 254 * #svn_auth_cred_ssl_server_trust_t, allocated in @a pool. 255 * 256 * @a *provider retrieves its credentials by using the @a prompt_func 257 * and @a prompt_baton. The returned credential is used to override 258 * SSL security on an error. 259 * 260 * @deprecated Provided for backward compatibility with the 1.3 API. 261 * Use svn_auth_get_ssl_server_trust_prompt_provider() instead. 262 */ 263SVN_DEPRECATED 264void 265svn_client_get_ssl_server_trust_prompt_provider( 266 svn_auth_provider_object_t **provider, 267 svn_auth_ssl_server_trust_prompt_func_t prompt_func, 268 void *prompt_baton, 269 apr_pool_t *pool); 270 271 272/** Create and return @a *provider, an authentication provider of type 273 * #svn_auth_cred_ssl_client_cert_t, allocated in @a pool. 274 * 275 * @a *provider retrieves its credentials by using the @a prompt_func 276 * and @a prompt_baton. The returned credential is used to load the 277 * appropriate client certificate for authentication when requested by 278 * a server. The prompt will be retried @a retry_limit times. 279 * For infinite retries, set @a retry_limit to value less than 0. 280 * 281 * @deprecated Provided for backward compatibility with the 1.3 API. 282 * Use svn_auth_get_ssl_client_cert_prompt_provider() instead. 283 */ 284SVN_DEPRECATED 285void 286svn_client_get_ssl_client_cert_prompt_provider( 287 svn_auth_provider_object_t **provider, 288 svn_auth_ssl_client_cert_prompt_func_t prompt_func, 289 void *prompt_baton, 290 int retry_limit, 291 apr_pool_t *pool); 292 293 294/** Create and return @a *provider, an authentication provider of type 295 * #svn_auth_cred_ssl_client_cert_pw_t, allocated in @a pool. 296 * 297 * @a *provider retrieves its credentials by using the @a prompt_func 298 * and @a prompt_baton. The returned credential is used when a loaded 299 * client certificate is protected by a passphrase. The prompt will 300 * be retried @a retry_limit times. For infinite retries, set @a retry_limit 301 * to value less than 0. 302 * 303 * @deprecated Provided for backward compatibility with the 1.3 API. 304 * Use svn_auth_get_ssl_client_cert_pw_prompt_provider() instead. 305 */ 306SVN_DEPRECATED 307void 308svn_client_get_ssl_client_cert_pw_prompt_provider( 309 svn_auth_provider_object_t **provider, 310 svn_auth_ssl_client_cert_pw_prompt_func_t prompt_func, 311 void *prompt_baton, 312 int retry_limit, 313 apr_pool_t *pool); 314 315/** @} */ 316 317/** 318 * Revisions and Peg Revisions 319 * 320 * @defgroup clnt_revisions Revisions and Peg Revisions 321 * 322 * A brief word on operative and peg revisions. 323 * 324 * If the kind of the peg revision is #svn_opt_revision_unspecified, then it 325 * defaults to #svn_opt_revision_head for URLs and #svn_opt_revision_working 326 * for local paths. 327 * 328 * For deeper insight, please see the 329 * <a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.pegrevs.html"> 330 * Peg and Operative Revisions</a> section of the Subversion Book. 331 */ 332 333/** 334 * Commit operations 335 * 336 * @defgroup clnt_commit Client commit subsystem 337 * 338 * @{ 339 */ 340 341/** This is a structure which stores a filename and a hash of property 342 * names and values. 343 * 344 * @deprecated Provided for backward compatibility with the 1.4 API. 345 */ 346typedef struct svn_client_proplist_item_t 347{ 348 /** The name of the node on which these properties are set. */ 349 svn_stringbuf_t *node_name; 350 351 /** A hash of (const char *) property names, and (svn_string_t *) property 352 * values. */ 353 apr_hash_t *prop_hash; 354 355} svn_client_proplist_item_t; 356 357/** 358 * The callback invoked by svn_client_proplist4(). Each invocation 359 * provides the regular and/or inherited properties of @a path, which is 360 * either a working copy path or a URL. If @a prop_hash is not @c NULL, then 361 * it maps explicit <tt>const char *</tt> property names to 362 * <tt>svn_string_t *</tt> explicit property values. If @a inherited_props 363 * is not @c NULL, then it is a depth-first ordered array of 364 * #svn_prop_inherited_item_t * structures representing the 365 * properties inherited by @a path. Use @a scratch_pool for all temporary 366 * allocations. 367 * 368 * The #svn_prop_inherited_item_t->path_or_url members of the 369 * #svn_prop_inherited_item_t * structures in @a inherited_props are 370 * URLs if @a path is a URL or if @a path is a working copy path but the 371 * property represented by the structure is above the working copy root (i.e. 372 * the inherited property is from the cache). In all other cases the 373 * #svn_prop_inherited_item_t->path_or_url members are absolute working copy 374 * paths. 375 * 376 * @since New in 1.8. 377 */ 378typedef svn_error_t *(*svn_proplist_receiver2_t)( 379 void *baton, 380 const char *path, 381 apr_hash_t *prop_hash, 382 apr_array_header_t *inherited_props, 383 apr_pool_t *scratch_pool); 384 385/** 386 * Similar to #svn_proplist_receiver2_t, but doesn't return inherited 387 * properties. 388 * 389 * @deprecated Provided for backward compatibility with the 1.7 API. 390 * 391 * @since New in 1.5. 392 */ 393typedef svn_error_t *(*svn_proplist_receiver_t)( 394 void *baton, 395 const char *path, 396 apr_hash_t *prop_hash, 397 apr_pool_t *pool); 398 399/** 400 * Return a duplicate of @a item, allocated in @a pool. No part of the new 401 * structure will be shared with @a item. 402 * 403 * @since New in 1.3. 404 * 405 * @deprecated Provided for backward compatibility with the 1.4 API. 406 */ 407SVN_DEPRECATED 408svn_client_proplist_item_t * 409svn_client_proplist_item_dup(const svn_client_proplist_item_t *item, 410 apr_pool_t *pool); 411 412/** Information about commits passed back to client from this module. 413 * 414 * @deprecated Provided for backward compatibility with the 1.2 API. 415 */ 416typedef struct svn_client_commit_info_t 417{ 418 /** just-committed revision. */ 419 svn_revnum_t revision; 420 421 /** server-side date of the commit. */ 422 const char *date; 423 424 /** author of the commit. */ 425 const char *author; 426 427} svn_client_commit_info_t; 428 429 430/** 431 * @name Commit state flags 432 * @brief State flags for use with the #svn_client_commit_item3_t structure 433 * (see the note about the namespace for that structure, which also 434 * applies to these flags). 435 * @{ 436 */ 437#define SVN_CLIENT_COMMIT_ITEM_ADD 0x01 438#define SVN_CLIENT_COMMIT_ITEM_DELETE 0x02 439#define SVN_CLIENT_COMMIT_ITEM_TEXT_MODS 0x04 440#define SVN_CLIENT_COMMIT_ITEM_PROP_MODS 0x08 441#define SVN_CLIENT_COMMIT_ITEM_IS_COPY 0x10 442/** One of the flags for a commit item. The node has a lock token that 443 * should be released after a successful commit and, if the node is also 444 * modified, transferred to the server as part of the commit process. 445 * 446 * @since New in 1.2. */ 447#define SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN 0x20 448/** One of the flags for a commit item. The node is the 'moved here' 449 * side of a local move. This is used to check and enforce that the 450 * other side of the move is also included in the commit. 451 * 452 * @since New in 1.8. */ 453#define SVN_CLIENT_COMMIT_ITEM_MOVED_HERE 0x40 454/** @} */ 455 456/** The commit candidate structure. 457 * 458 * In order to avoid backwards compatibility problems clients should use 459 * svn_client_commit_item3_create() to allocate and initialize this 460 * structure instead of doing so themselves. 461 * 462 * @since New in 1.5. 463 */ 464typedef struct svn_client_commit_item3_t 465{ 466 /* IMPORTANT: If you extend this structure, add new fields to the end. */ 467 468 /** absolute working-copy path of item. Always set during normal commits 469 * (and copies from a working copy) to the repository. Can only be NULL 470 * when stub commit items are created for operations that only involve 471 * direct repository operations. During WC->REPOS copy operations, this 472 * path is the WC source path of the operation. */ 473 const char *path; 474 475 /** node kind (dir, file) */ 476 svn_node_kind_t kind; 477 478 /** commit URL for this item. Points to the repository location of PATH 479 * during commits, or to the final URL of the item when copying from the 480 * working copy to the repository. */ 481 const char *url; 482 483 /** revision of textbase */ 484 svn_revnum_t revision; 485 486 /** copyfrom-url or NULL if not a copied item */ 487 const char *copyfrom_url; 488 489 /** copyfrom-rev, valid when copyfrom_url != NULL */ 490 svn_revnum_t copyfrom_rev; 491 492 /** state flags */ 493 apr_byte_t state_flags; 494 495 /** An array of #svn_prop_t *'s, which are incoming changes from 496 * the repository to WC properties. These changes are applied 497 * post-commit. 498 * 499 * When adding to this array, allocate the #svn_prop_t and its 500 * contents in @c incoming_prop_changes->pool, so that it has the 501 * same lifetime as this data structure. 502 * 503 * See https://issues.apache.org/jira/browse/SVN-806 for a 504 * description of what would happen if the post-commit process 505 * didn't group these changes together with all other changes to the 506 * item. 507 */ 508 apr_array_header_t *incoming_prop_changes; 509 510 /** An array of #svn_prop_t *'s, which are outgoing changes to 511 * make to properties in the repository. These extra property 512 * changes are declared pre-commit, and applied to the repository as 513 * part of a commit. 514 * 515 * When adding to this array, allocate the #svn_prop_t and its 516 * contents in @c outgoing_prop_changes->pool, so that it has the 517 * same lifetime as this data structure. 518 */ 519 apr_array_header_t *outgoing_prop_changes; 520 521 /** 522 * When processing the commit this contains the relative path for 523 * the commit session. NULL until the commit item is preprocessed. 524 * @since New in 1.7. 525 */ 526 const char *session_relpath; 527 528 /** 529 * When committing a move, this contains the absolute path where 530 * the node was directly moved from. (If an ancestor at the original 531 * location was moved then it points to where the node itself was 532 * moved from; not the original location.) 533 * @since New in 1.8. 534 */ 535 const char *moved_from_abspath; 536 537} svn_client_commit_item3_t; 538 539/** The commit candidate structure. 540 * 541 * @deprecated Provided for backward compatibility with the 1.4 API. 542 */ 543typedef struct svn_client_commit_item2_t 544{ 545 /** absolute working-copy path of item */ 546 const char *path; 547 548 /** node kind (dir, file) */ 549 svn_node_kind_t kind; 550 551 /** commit URL for this item */ 552 const char *url; 553 554 /** revision of textbase */ 555 svn_revnum_t revision; 556 557 /** copyfrom-url or NULL if not a copied item */ 558 const char *copyfrom_url; 559 560 /** copyfrom-rev, valid when copyfrom_url != NULL */ 561 svn_revnum_t copyfrom_rev; 562 563 /** state flags */ 564 apr_byte_t state_flags; 565 566 /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes 567 * field. 568 */ 569 apr_array_header_t *wcprop_changes; 570} svn_client_commit_item2_t; 571 572/** The commit candidate structure. 573 * 574 * @deprecated Provided for backward compatibility with the 1.2 API. 575 */ 576typedef struct svn_client_commit_item_t 577{ 578 /** absolute working-copy path of item */ 579 const char *path; 580 581 /** node kind (dir, file) */ 582 svn_node_kind_t kind; 583 584 /** commit URL for this item */ 585 const char *url; 586 587 /** revision (copyfrom-rev if _IS_COPY) */ 588 svn_revnum_t revision; 589 590 /** copyfrom-url */ 591 const char *copyfrom_url; 592 593 /** state flags */ 594 apr_byte_t state_flags; 595 596 /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes 597 * field. 598 */ 599 apr_array_header_t *wcprop_changes; 600 601} svn_client_commit_item_t; 602 603/** Return a new commit item object, allocated in @a pool. 604 * 605 * In order to avoid backwards compatibility problems, this function 606 * is used to initialize and allocate the #svn_client_commit_item3_t 607 * structure rather than doing so explicitly, as the size of this 608 * structure may change in the future. 609 * 610 * @since New in 1.6. 611 */ 612svn_client_commit_item3_t * 613svn_client_commit_item3_create(apr_pool_t *pool); 614 615/** Like svn_client_commit_item3_create() but with a stupid "const" 616 * qualifier on the returned structure, and it returns an error that 617 * will never happen. 618 * 619 * @deprecated Provided for backward compatibility with the 1.5 API. 620 */ 621SVN_DEPRECATED 622svn_error_t * 623svn_client_commit_item_create(const svn_client_commit_item3_t **item, 624 apr_pool_t *pool); 625 626/** 627 * Return a duplicate of @a item, allocated in @a pool. No part of the 628 * new structure will be shared with @a item, except for the adm_access 629 * member. 630 * 631 * @since New in 1.5. 632 */ 633svn_client_commit_item3_t * 634svn_client_commit_item3_dup(const svn_client_commit_item3_t *item, 635 apr_pool_t *pool); 636 637/** 638 * Return a duplicate of @a item, allocated in @a pool. No part of the new 639 * structure will be shared with @a item. 640 * 641 * @deprecated Provided for backward compatibility with the 1.4 API. 642 */ 643SVN_DEPRECATED 644svn_client_commit_item2_t * 645svn_client_commit_item2_dup(const svn_client_commit_item2_t *item, 646 apr_pool_t *pool); 647 648/** Callback type used by commit-y operations to get a commit log message 649 * from the caller. 650 * 651 * Set @a *log_msg to the log message for the commit, allocated in @a 652 * pool, or @c NULL if wish to abort the commit process. Set @a *tmp_file 653 * to the path of any temporary file which might be holding that log 654 * message, or @c NULL if no such file exists (though, if @a *log_msg is 655 * @c NULL, this value is undefined). The log message MUST be a UTF8 656 * string with LF line separators. 657 * 658 * @a commit_items is a read-only array of #svn_client_commit_item3_t 659 * structures, which may be fully or only partially filled-in, 660 * depending on the type of commit operation. 661 * 662 * @a baton is provided along with the callback for use by the handler. 663 * 664 * All allocations should be performed in @a pool. 665 * 666 * @since New in 1.5. 667 */ 668typedef svn_error_t *(*svn_client_get_commit_log3_t)( 669 const char **log_msg, 670 const char **tmp_file, 671 const apr_array_header_t *commit_items, 672 void *baton, 673 apr_pool_t *pool); 674 675/** Callback type used by commit-y operations to get a commit log message 676 * from the caller. 677 * 678 * Set @a *log_msg to the log message for the commit, allocated in @a 679 * pool, or @c NULL if wish to abort the commit process. Set @a *tmp_file 680 * to the path of any temporary file which might be holding that log 681 * message, or @c NULL if no such file exists (though, if @a *log_msg is 682 * @c NULL, this value is undefined). The log message MUST be a UTF8 683 * string with LF line separators. 684 * 685 * @a commit_items is a read-only array of #svn_client_commit_item2_t 686 * structures, which may be fully or only partially filled-in, 687 * depending on the type of commit operation. 688 * 689 * @a baton is provided along with the callback for use by the handler. 690 * 691 * All allocations should be performed in @a pool. 692 * 693 * @deprecated Provided for backward compatibility with the 1.3 API. 694 */ 695typedef svn_error_t *(*svn_client_get_commit_log2_t)( 696 const char **log_msg, 697 const char **tmp_file, 698 const apr_array_header_t *commit_items, 699 void *baton, 700 apr_pool_t *pool); 701 702/** Callback type used by commit-y operations to get a commit log message 703 * from the caller. 704 * 705 * Set @a *log_msg to the log message for the commit, allocated in @a 706 * pool, or @c NULL if wish to abort the commit process. Set @a *tmp_file 707 * to the path of any temporary file which might be holding that log 708 * message, or @c NULL if no such file exists (though, if @a *log_msg is 709 * @c NULL, this value is undefined). The log message MUST be a UTF8 710 * string with LF line separators. 711 * 712 * @a commit_items is a read-only array of #svn_client_commit_item_t 713 * structures, which may be fully or only partially filled-in, 714 * depending on the type of commit operation. 715 * 716 * @a baton is provided along with the callback for use by the handler. 717 * 718 * All allocations should be performed in @a pool. 719 * 720 * @deprecated Provided for backward compatibility with the 1.2 API. 721 */ 722typedef svn_error_t *(*svn_client_get_commit_log_t)( 723 const char **log_msg, 724 const char **tmp_file, 725 apr_array_header_t *commit_items, 726 void *baton, 727 apr_pool_t *pool); 728 729/** @} */ 730 731/** 732 * Client blame 733 * 734 * @defgroup clnt_blame Client blame functionality 735 * 736 * @{ 737 */ 738 739/** Callback type used by svn_client_blame6() to notify the caller 740 * that line @a line_no of the blamed file was last changed in @a revision 741 * which has the revision properties @a rev_props, and that the contents were 742 * @a line. 743 * 744 * If svn_client_blame5() was called with @a include_merged_revisions set to 745 * TRUE, @a merged_revision, @a merged_rev_props and @a merged_path will be 746 * set, otherwise they will be NULL. @a merged_path will be set to the 747 * absolute repository path. 748 * 749 * All allocations should be performed in @a pool. 750 * 751 * @note If there is no blame information for this line, @a revision will be 752 * invalid and @a rev_props will be NULL. In this case @a local_change 753 * will be true if the reason there is no blame information is that the line 754 * was modified locally. In all other cases @a local_change will be false. 755 * 756 * Character Encoding and Line Splitting: 757 * 758 * It is up to the client to determine the character encoding. The @a line 759 * content is delivered without any encoding conversion. The line splitting 760 * is designed to work with ASCII-compatible encodings including UTF-8. Any 761 * of the byte sequences LF ("\n"), CR ("\n"), CR LF ("\r\n") ends a line 762 * and is not included in @a line. The @a line content can include all other 763 * byte values including zero (ASCII NUL). 764 * 765 * @note That is how line splitting is done on the final file content, from 766 * which this callback is driven. It is not entirely clear whether the line 767 * splitting used to calculate diffs between each revision and assign a 768 * revision number to each line is exactly compatible with this in all cases. 769 * 770 * Blaming files that have <tt>svn:mime-type</tt> set to something other 771 * than <tt>text/...</tt> requires the @a ignore_mime_type flag to be set to 772 * true when calling the svn_client_blame6 function. 773 * 774 * @since New in 1.12. 775 */ 776typedef svn_error_t *(*svn_client_blame_receiver4_t)( 777 void *baton, 778 apr_int64_t line_no, 779 svn_revnum_t revision, 780 apr_hash_t *rev_props, 781 svn_revnum_t merged_revision, 782 apr_hash_t *merged_rev_props, 783 const char *merged_path, 784 const svn_string_t *line, 785 svn_boolean_t local_change, 786 apr_pool_t *pool); 787 788/** 789 * Similar to #svn_client_blame_receiver4_t, but with the @a line parameter 790 * as a (const char*) instead of an svn_string_t, and the parameters 791 * @a start_revnum and @a end_revnum contain the start and end revision 792 * number of the entire blame operation, as resolved from the repository 793 * inside svn_client_blame6(). 794 * 795 * @deprecated Provided for backward compatibility with the 1.11 API. 796 * To replace @a start_revnum and @a end_revnum, see the corresponding 797 * output parameters in svn_client_blame6(). 798 * 799 * @since New in 1.7. 800 */ 801typedef svn_error_t *(*svn_client_blame_receiver3_t)( 802 void *baton, 803 svn_revnum_t start_revnum, 804 svn_revnum_t end_revnum, 805 apr_int64_t line_no, 806 svn_revnum_t revision, 807 apr_hash_t *rev_props, 808 svn_revnum_t merged_revision, 809 apr_hash_t *merged_rev_props, 810 const char *merged_path, 811 const char *line, 812 svn_boolean_t local_change, 813 apr_pool_t *pool); 814 815/** 816 * Similar to #svn_client_blame_receiver3_t, but with separate author and 817 * date revision properties instead of all revision properties, and without 818 * information about local changes. 819 * 820 * @deprecated Provided for backward compatibility with the 1.6 API. 821 * 822 * @since New in 1.5. 823 */ 824typedef svn_error_t *(*svn_client_blame_receiver2_t)( 825 void *baton, 826 apr_int64_t line_no, 827 svn_revnum_t revision, 828 const char *author, 829 const char *date, 830 svn_revnum_t merged_revision, 831 const char *merged_author, 832 const char *merged_date, 833 const char *merged_path, 834 const char *line, 835 apr_pool_t *pool); 836 837/** 838 * Similar to #svn_client_blame_receiver2_t, but without @a merged_revision, 839 * @a merged_author, @a merged_date, or @a merged_path members. 840 * 841 * @note New in 1.4 is that the line is defined to contain only the line 842 * content (and no [partial] EOLs; which was undefined in older versions). 843 * Using this callback with svn_client_blame() or svn_client_blame2() 844 * will still give you the old behaviour. 845 * 846 * @deprecated Provided for backward compatibility with the 1.4 API. 847 */ 848typedef svn_error_t *(*svn_client_blame_receiver_t)( 849 void *baton, 850 apr_int64_t line_no, 851 svn_revnum_t revision, 852 const char *author, 853 const char *date, 854 const char *line, 855 apr_pool_t *pool); 856 857 858/** @} */ 859 860/** 861 * Client diff 862 * 863 * @defgroup clnt_diff Client diff functionality 864 * 865 * @{ 866 */ 867/** The difference type in an svn_diff_summarize_t structure. 868 * 869 * @since New in 1.4. 870 */ 871typedef enum svn_client_diff_summarize_kind_t 872{ 873 /** An item with no text modifications */ 874 svn_client_diff_summarize_kind_normal, 875 876 /** An added item */ 877 svn_client_diff_summarize_kind_added, 878 879 /** An item with text modifications */ 880 svn_client_diff_summarize_kind_modified, 881 882 /** A deleted item */ 883 svn_client_diff_summarize_kind_deleted 884} svn_client_diff_summarize_kind_t; 885 886 887/** A struct that describes the diff of an item. Passed to 888 * #svn_client_diff_summarize_func_t. 889 * 890 * @note Fields may be added to the end of this structure in future 891 * versions. Therefore, users shouldn't allocate structures of this 892 * type, to preserve binary compatibility. 893 * 894 * @since New in 1.4. 895 */ 896typedef struct svn_client_diff_summarize_t 897{ 898 /** Path relative to the target. If the target is a file, path is 899 * the empty string. */ 900 const char *path; 901 902 /** Change kind */ 903 svn_client_diff_summarize_kind_t summarize_kind; 904 905 /** Properties changed? For consistency with 'svn status' output, 906 * this should be false if summarize_kind is _added or _deleted. */ 907 svn_boolean_t prop_changed; 908 909 /** File or dir */ 910 svn_node_kind_t node_kind; 911} svn_client_diff_summarize_t; 912 913/** 914 * Return a duplicate of @a diff, allocated in @a pool. No part of the new 915 * structure will be shared with @a diff. 916 * 917 * @since New in 1.4. 918 */ 919svn_client_diff_summarize_t * 920svn_client_diff_summarize_dup(const svn_client_diff_summarize_t *diff, 921 apr_pool_t *pool); 922 923 924/** A callback used in svn_client_diff_summarize2() and 925 * svn_client_diff_summarize_peg2() for reporting a @a diff summary. 926 * 927 * All allocations should be performed in @a pool. 928 * 929 * @a baton is a closure object; it should be provided by the implementation, 930 * and passed by the caller. 931 * 932 * @since New in 1.4. 933 */ 934typedef svn_error_t *(*svn_client_diff_summarize_func_t)( 935 const svn_client_diff_summarize_t *diff, 936 void *baton, 937 apr_pool_t *pool); 938 939 940 941/** @} */ 942 943 944/** 945 * Client context 946 * 947 * @defgroup clnt_ctx Client context management 948 * 949 * @{ 950 */ 951 952/** A client context structure, which holds client specific callbacks, 953 * batons, serves as a cache for configuration options, and other various 954 * and sundry things. In order to avoid backwards compatibility problems 955 * clients should use svn_client_create_context() to allocate and 956 * initialize this structure instead of doing so themselves. 957 */ 958typedef struct svn_client_ctx_t 959{ 960 /** main authentication baton. */ 961 svn_auth_baton_t *auth_baton; 962 963 /** notification callback function. 964 * This will be called by notify_func2() by default. 965 * @deprecated Provided for backward compatibility with the 1.1 API. 966 * Use @c notify_func2 instead. */ 967 svn_wc_notify_func_t notify_func; 968 969 /** notification callback baton for notify_func() 970 * @deprecated Provided for backward compatibility with the 1.1 API. 971 * Use @c notify_baton2 instead */ 972 void *notify_baton; 973 974 /** Log message callback function. NULL means that Subversion 975 * should try not attempt to fetch a log message. 976 * @deprecated Provided for backward compatibility with the 1.2 API. 977 * Use @c log_msg_func2 instead. */ 978 svn_client_get_commit_log_t log_msg_func; 979 980 /** log message callback baton 981 * @deprecated Provided for backward compatibility with the 1.2 API. 982 * Use @c log_msg_baton2 instead. */ 983 void *log_msg_baton; 984 985 /** a hash mapping of <tt>const char *</tt> configuration file names to 986 * #svn_config_t *'s. For example, the '~/.subversion/config' file's 987 * contents should have the key "config". May be left unset (or set to 988 * NULL) to use the built-in default settings and not use any configuration. 989 */ 990 apr_hash_t *config; 991 992 /** a callback to be used to see if the client wishes to cancel the running 993 * operation. */ 994 svn_cancel_func_t cancel_func; 995 996 /** a baton to pass to the cancellation callback. */ 997 void *cancel_baton; 998 999 /** notification function, defaulting to a function that forwards 1000 * to notify_func(). If @c NULL, it will not be invoked. 1001 * @since New in 1.2. */ 1002 svn_wc_notify_func2_t notify_func2; 1003 1004 /** notification baton for notify_func2(). 1005 * @since New in 1.2. */ 1006 void *notify_baton2; 1007 1008 /** Log message callback function. NULL means that Subversion 1009 * should try log_msg_func. 1010 * @since New in 1.3. */ 1011 svn_client_get_commit_log2_t log_msg_func2; 1012 1013 /** callback baton for log_msg_func2 1014 * @since New in 1.3. */ 1015 void *log_msg_baton2; 1016 1017 /** Notification callback for network progress information. 1018 * May be NULL if not used. 1019 * @since New in 1.3. */ 1020 svn_ra_progress_notify_func_t progress_func; 1021 1022 /** Callback baton for progress_func. 1023 * @since New in 1.3. */ 1024 void *progress_baton; 1025 1026 /** Log message callback function. NULL means that Subversion 1027 * should try @c log_msg_func2, then @c log_msg_func. 1028 * @since New in 1.5. */ 1029 svn_client_get_commit_log3_t log_msg_func3; 1030 1031 /** The callback baton for @c log_msg_func3. 1032 * @since New in 1.5. */ 1033 void *log_msg_baton3; 1034 1035 /** MIME types map. 1036 * @since New in 1.5. */ 1037 apr_hash_t *mimetypes_map; 1038 1039 /** Conflict resolution callback and baton, if available. 1040 * @since New in 1.5. */ 1041 svn_wc_conflict_resolver_func_t conflict_func; 1042 void *conflict_baton; 1043 1044 /** Custom client name string, or @c NULL. 1045 * @since New in 1.5. */ 1046 const char *client_name; 1047 1048 /** Conflict resolution callback and baton, if available. NULL means that 1049 * subversion should try @c conflict_func. 1050 * @since New in 1.7. */ 1051 svn_wc_conflict_resolver_func2_t conflict_func2; 1052 void *conflict_baton2; 1053 1054 /** A working copy context for the client operation to use. 1055 * This is initialized by svn_client_create_context() and should never 1056 * be @c NULL. 1057 * 1058 * @since New in 1.7. */ 1059 svn_wc_context_t *wc_ctx; 1060 1061 /** Check-tunnel callback 1062 * 1063 * If not @c NULL, and open_tunnel_func is also not @c NULL, this 1064 * callback will be invoked to check if open_tunnel_func should be 1065 * used to create a specific tunnel, or if the default tunnel 1066 * implementation (either built-in or configured in the client 1067 * configuration file) should be used instead. 1068 * @since New in 1.9. 1069 */ 1070 svn_ra_check_tunnel_func_t check_tunnel_func; 1071 1072 /** Open-tunnel callback 1073 * 1074 * If not @c NULL, this callback will be invoked to create a tunnel 1075 * for a ra_svn connection that needs one, overriding any tunnel 1076 * definitions in the client config file. This callback is used only 1077 * for ra_svn and ignored by the other RA modules. 1078 * @since New in 1.9. 1079 */ 1080 svn_ra_open_tunnel_func_t open_tunnel_func; 1081 1082 /** The baton used with check_tunnel_func and open_tunnel_func. 1083 * @since New in 1.9. 1084 */ 1085 void *tunnel_baton; 1086} svn_client_ctx_t; 1087 1088/** Initialize a client context. 1089 * Set @a *ctx to a client context object, allocated in @a pool, that 1090 * represents a particular instance of an svn client. @a cfg_hash is used 1091 * to initialise the config member of the returned context object and should 1092 * remain valid for the lifetime of the object. @a cfg_hash may be @c NULL, 1093 * in which case it is ignored. 1094 * 1095 * In order to avoid backwards compatibility problems, clients must 1096 * use this function to initialize and allocate the 1097 * #svn_client_ctx_t structure rather than doing so themselves, as 1098 * the size of this structure may change in the future. 1099 * 1100 * The current implementation never returns error, but callers should 1101 * still check for error, for compatibility with future versions. 1102 * 1103 * @since New in 1.8. 1104 */ 1105svn_error_t * 1106svn_client_create_context2(svn_client_ctx_t **ctx, 1107 apr_hash_t *cfg_hash, 1108 apr_pool_t *pool); 1109 1110 1111/** Similar to svn_client_create_context2 but passes a NULL @a cfg_hash. 1112 * 1113 * @deprecated Provided for backward compatibility with the 1.7 API. 1114 */ 1115SVN_DEPRECATED 1116svn_error_t * 1117svn_client_create_context(svn_client_ctx_t **ctx, 1118 apr_pool_t *pool); 1119 1120/** @} end group: Client context management */ 1121 1122/** 1123 * @deprecated Provided for backward compatibility. This constant was never 1124 * used in released versions. 1125 */ 1126#define SVN_CLIENT_AUTH_USERNAME "username" 1127/** 1128 * @deprecated Provided for backward compatibility. This constant was never 1129 * used in released versions. 1130 */ 1131#define SVN_CLIENT_AUTH_PASSWORD "password" 1132 1133/** Client argument processing 1134 * 1135 * @defgroup clnt_cmdline Client command-line processing 1136 * 1137 * @{ 1138 */ 1139 1140/** 1141 * Pull remaining target arguments from @a os into @a *targets_p, 1142 * converting them to UTF-8, followed by targets from @a known_targets 1143 * (which might come from, for example, the "--targets" command line option). 1144 * 1145 * Process each target in one of the following ways. For a repository- 1146 * relative URL: resolve to a full URL, contacting the repository if 1147 * necessary to do so, and then treat as a full URL. For a URL: do some 1148 * IRI-to-URI encoding and some auto-escaping, and canonicalize. For a 1149 * local path: canonicalize case and path separators. 1150 * 1151 * If @a keep_last_origpath_on_truepath_collision is TRUE, and there are 1152 * exactly two targets which both case-canonicalize to the same path, the last 1153 * target will be returned in the original non-case-canonicalized form. 1154 * 1155 * Allocate @a *targets_p and its elements in @a pool. 1156 * 1157 * @a ctx is required for possible repository authentication. 1158 * 1159 * If a path has the same name as a Subversion working copy 1160 * administrative directory, return #SVN_ERR_RESERVED_FILENAME_SPECIFIED; 1161 * if multiple reserved paths are encountered, return a chain of 1162 * errors, all of which are #SVN_ERR_RESERVED_FILENAME_SPECIFIED. Do 1163 * not return this type of error in a chain with any other type of 1164 * error, and if this is the only type of error encountered, complete 1165 * the operation before returning the error(s). 1166 * 1167 * Return an error if a target is just a peg specifier with no path, such as 1168 * "@abc". Before v1.6.5 (r878062) this form was interpreted as a literal path; 1169 * it is now ambiguous. The form "@abc@" should now be used to refer to the 1170 * literal path "@abc" with no peg revision, or the form ".@abc" to refer to 1171 * the empty path with peg revision "abc". 1172 * 1173 * @since New in 1.7 1174 */ 1175svn_error_t * 1176svn_client_args_to_target_array2(apr_array_header_t **targets_p, 1177 apr_getopt_t *os, 1178 const apr_array_header_t *known_targets, 1179 svn_client_ctx_t *ctx, 1180 svn_boolean_t keep_last_origpath_on_truepath_collision, 1181 apr_pool_t *pool); 1182 1183/** 1184 * Similar to svn_client_args_to_target_array2() but with 1185 * @a keep_last_origpath_on_truepath_collision always set to FALSE. 1186 * 1187 * @since Since 1.6.5, this returns an error if a path contains a peg 1188 * specifier with no path before it, such as "@abc". 1189 * 1190 * @deprecated Provided for backward compatibility with the 1.6 API. 1191 */ 1192SVN_DEPRECATED 1193svn_error_t * 1194svn_client_args_to_target_array(apr_array_header_t **targets_p, 1195 apr_getopt_t *os, 1196 const apr_array_header_t *known_targets, 1197 svn_client_ctx_t *ctx, 1198 apr_pool_t *pool); 1199 1200/** @} group end: Client command-line processing */ 1201 1202/** @} */ 1203 1204/** 1205 * Client working copy management functions 1206 * 1207 * @defgroup clnt_wc Client working copy management 1208 * 1209 * @{ 1210 */ 1211 1212/** 1213 * @defgroup clnt_wc_checkout Checkout 1214 * 1215 * @{ 1216 */ 1217 1218 1219/** 1220 * Checkout a working copy from a repository. 1221 * 1222 * @param[out] result_rev If non-NULL, the value of the revision checked 1223 * out from the repository. 1224 * @param[in] URL The repository URL of the checkout source. 1225 * @param[in] path The root of the new working copy. 1226 * @param[in] peg_revision The peg revision. 1227 * @param[in] revision The operative revision. 1228 * @param[in] depth The depth of the operation. If #svn_depth_unknown, 1229 * then behave as if for #svn_depth_infinity, except in the case 1230 * of resuming a previous checkout of @a path (i.e., updating), 1231 * in which case use the depth of the existing working copy. 1232 * @param[in] ignore_externals If @c TRUE, don't process externals 1233 * definitions as part of this operation. 1234 * @param[in] allow_unver_obstructions If @c TRUE, then tolerate existing 1235 * unversioned items that obstruct incoming paths. Only 1236 * obstructions of the same type (file or dir) as the added 1237 * item are tolerated. The text of obstructing files is left 1238 * as-is, effectively treating it as a user modification after 1239 * the checkout. Working properties of obstructing items are 1240 * set equal to the base properties. <br> 1241 * If @c FALSE, then abort if there are any unversioned 1242 * obstructing items. 1243 * @param[in] ctx The standard client context, used for authentication and 1244 * notification. 1245 * @param[in] pool Used for any temporary allocation. 1246 * 1247 * @return A pointer to an #svn_error_t of the type (this list is not 1248 * exhaustive): <br> 1249 * #SVN_ERR_UNSUPPORTED_FEATURE if @a URL refers to a file rather 1250 * than a directory; <br> 1251 * #SVN_ERR_RA_ILLEGAL_URL if @a URL does not exist; <br> 1252 * #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of 1253 * #svn_opt_revision_number, #svn_opt_revision_head, or 1254 * #svn_opt_revision_date. <br> 1255 * If no error occurred, return #SVN_NO_ERROR. 1256 * 1257 * @since New in 1.5. 1258 * 1259 * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for 1260 * a discussion of operative and peg revisions. 1261 */ 1262svn_error_t * 1263svn_client_checkout3(svn_revnum_t *result_rev, 1264 const char *URL, 1265 const char *path, 1266 const svn_opt_revision_t *peg_revision, 1267 const svn_opt_revision_t *revision, 1268 svn_depth_t depth, 1269 svn_boolean_t ignore_externals, 1270 svn_boolean_t allow_unver_obstructions, 1271 svn_client_ctx_t *ctx, 1272 apr_pool_t *pool); 1273 1274 1275/** 1276 * Similar to svn_client_checkout3() but with @a allow_unver_obstructions 1277 * always set to FALSE, and @a depth set according to @a recurse: if 1278 * @a recurse is TRUE, @a depth is #svn_depth_infinity, if @a recurse 1279 * is FALSE, @a depth is #svn_depth_files. 1280 * 1281 * @deprecated Provided for backward compatibility with the 1.4 API. 1282 */ 1283SVN_DEPRECATED 1284svn_error_t * 1285svn_client_checkout2(svn_revnum_t *result_rev, 1286 const char *URL, 1287 const char *path, 1288 const svn_opt_revision_t *peg_revision, 1289 const svn_opt_revision_t *revision, 1290 svn_boolean_t recurse, 1291 svn_boolean_t ignore_externals, 1292 svn_client_ctx_t *ctx, 1293 apr_pool_t *pool); 1294 1295 1296/** 1297 * Similar to svn_client_checkout2(), but with @a peg_revision 1298 * always set to #svn_opt_revision_unspecified and 1299 * @a ignore_externals always set to FALSE. 1300 * 1301 * @deprecated Provided for backward compatibility with the 1.1 API. 1302 */ 1303SVN_DEPRECATED 1304svn_error_t * 1305svn_client_checkout(svn_revnum_t *result_rev, 1306 const char *URL, 1307 const char *path, 1308 const svn_opt_revision_t *revision, 1309 svn_boolean_t recurse, 1310 svn_client_ctx_t *ctx, 1311 apr_pool_t *pool); 1312/** @} */ 1313 1314/** 1315 * @defgroup Update Bring a working copy up-to-date with a repository 1316 * 1317 * @{ 1318 * 1319 */ 1320 1321/** 1322 * Update working trees @a paths to @a revision, authenticating with the 1323 * authentication baton cached in @a ctx. @a paths is an array of const 1324 * char * paths to be updated. Unversioned paths that are direct children 1325 * of a versioned path will cause an update that attempts to add that path; 1326 * other unversioned paths are skipped. If @a result_revs is not NULL, 1327 * @a *result_revs will be set to an array of svn_revnum_t with each 1328 * element set to the revision to which @a revision was resolved for the 1329 * corresponding element of @a paths. 1330 * 1331 * @a revision must be of kind #svn_opt_revision_number, 1332 * #svn_opt_revision_head, or #svn_opt_revision_date. If @a 1333 * revision does not meet these requirements, return the error 1334 * #SVN_ERR_CLIENT_BAD_REVISION. 1335 * 1336 * The paths in @a paths can be from multiple working copies from multiple 1337 * repositories, but even if they all come from the same repository there 1338 * is no guarantee that revision represented by #svn_opt_revision_head 1339 * will remain the same as each path is updated. 1340 * 1341 * If @a ignore_externals is set, don't process externals definitions 1342 * as part of this operation. 1343 * 1344 * If @a depth is #svn_depth_infinity, update fully recursively. 1345 * Else if it is #svn_depth_immediates or #svn_depth_files, update 1346 * each target and its file entries, but not its subdirectories. Else 1347 * if #svn_depth_empty, update exactly each target, nonrecursively 1348 * (essentially, update the target's properties). 1349 * 1350 * If @a depth is #svn_depth_unknown, take the working depth from 1351 * @a paths and then behave as described above. 1352 * 1353 * If @a depth_is_sticky is set and @a depth is not 1354 * #svn_depth_unknown, then in addition to updating PATHS, also set 1355 * their sticky ambient depth value to @a depth. 1356 * 1357 * If @a allow_unver_obstructions is TRUE then the update tolerates 1358 * existing unversioned items that obstruct added paths. Only 1359 * obstructions of the same type (file or dir) as the added item are 1360 * tolerated. The text of obstructing files is left as-is, effectively 1361 * treating it as a user modification after the update. Working 1362 * properties of obstructing items are set equal to the base properties. 1363 * If @a allow_unver_obstructions is FALSE then the update will abort 1364 * if there are any unversioned obstructing items. 1365 * 1366 * If @a adds_as_modification is TRUE, a local addition at the same path 1367 * as an incoming addition of the same node kind results in a normal node 1368 * with a possible local modification, instead of a tree conflict. 1369 * 1370 * If @a make_parents is TRUE, create any non-existent parent 1371 * directories also by checking them out at depth=empty. 1372 * 1373 * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with 1374 * @a ctx->notify_baton2 for each item handled by the update, and also for 1375 * files restored from text-base. If @a ctx->cancel_func is non-NULL, invoke 1376 * it passing @a ctx->cancel_baton at various places during the update. 1377 * 1378 * Use @a pool for any temporary allocation. 1379 * 1380 * @todo Multiple Targets 1381 * - Up for debate: an update on multiple targets is *not* atomic. 1382 * Right now, svn_client_update only takes one path. What's 1383 * debatable is whether this should ever change. On the one hand, 1384 * it's kind of losing to have the client application loop over 1385 * targets and call svn_client_update() on each one; each call to 1386 * update initializes a whole new repository session (network 1387 * overhead, etc.) On the other hand, it's a very simple 1388 * implementation, and allows for the possibility that different 1389 * targets may come from different repositories. 1390 * 1391 * @since New in 1.7. 1392 */ 1393svn_error_t * 1394svn_client_update4(apr_array_header_t **result_revs, 1395 const apr_array_header_t *paths, 1396 const svn_opt_revision_t *revision, 1397 svn_depth_t depth, 1398 svn_boolean_t depth_is_sticky, 1399 svn_boolean_t ignore_externals, 1400 svn_boolean_t allow_unver_obstructions, 1401 svn_boolean_t adds_as_modification, 1402 svn_boolean_t make_parents, 1403 svn_client_ctx_t *ctx, 1404 apr_pool_t *pool); 1405 1406/** 1407 * Similar to svn_client_update4() but with @a make_parents always set 1408 * to FALSE and @a adds_as_modification set to TRUE. 1409 * 1410 * @deprecated Provided for backward compatibility with the 1.6 API. 1411 * @since New in 1.5. 1412 */ 1413SVN_DEPRECATED 1414svn_error_t * 1415svn_client_update3(apr_array_header_t **result_revs, 1416 const apr_array_header_t *paths, 1417 const svn_opt_revision_t *revision, 1418 svn_depth_t depth, 1419 svn_boolean_t depth_is_sticky, 1420 svn_boolean_t ignore_externals, 1421 svn_boolean_t allow_unver_obstructions, 1422 svn_client_ctx_t *ctx, 1423 apr_pool_t *pool); 1424 1425/** 1426 * Similar to svn_client_update3() but with @a allow_unver_obstructions 1427 * always set to FALSE, @a depth_is_sticky to FALSE, and @a depth set 1428 * according to @a recurse: if @a recurse is TRUE, set @a depth to 1429 * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to 1430 * #svn_depth_files. 1431 * 1432 * @deprecated Provided for backward compatibility with the 1.4 API. 1433 */ 1434SVN_DEPRECATED 1435svn_error_t * 1436svn_client_update2(apr_array_header_t **result_revs, 1437 const apr_array_header_t *paths, 1438 const svn_opt_revision_t *revision, 1439 svn_boolean_t recurse, 1440 svn_boolean_t ignore_externals, 1441 svn_client_ctx_t *ctx, 1442 apr_pool_t *pool); 1443 1444/** 1445 * Similar to svn_client_update2() except that it accepts only a single 1446 * target in @a path, returns a single revision if @a result_rev is 1447 * not NULL, and @a ignore_externals is always set to FALSE. 1448 * 1449 * @deprecated Provided for backward compatibility with the 1.1 API. 1450 */ 1451SVN_DEPRECATED 1452svn_error_t * 1453svn_client_update(svn_revnum_t *result_rev, 1454 const char *path, 1455 const svn_opt_revision_t *revision, 1456 svn_boolean_t recurse, 1457 svn_client_ctx_t *ctx, 1458 apr_pool_t *pool); 1459/** @} */ 1460 1461/** 1462 * @defgroup Switch Switch a working copy to another location. 1463 * 1464 * @{ 1465 */ 1466 1467/** 1468 * Switch an existing working copy directory to a different repository 1469 * location. 1470 * 1471 * This is normally used to switch a working copy directory over to another 1472 * line of development, such as a branch or a tag. Switching an existing 1473 * working copy directory is more efficient than checking out @a url from 1474 * scratch. 1475 * 1476 * @param[out] result_rev If non-NULL, the value of the revision to which 1477 * the working copy was actually switched. 1478 * @param[in] path The directory to be switched. This need not be the 1479 * root of a working copy. 1480 * @param[in] url The repository URL to switch to. 1481 * @param[in] peg_revision The peg revision. 1482 * @param[in] revision The operative revision. 1483 * @param[in] depth The depth of the operation. If #svn_depth_infinity, 1484 * switch fully recursively. Else if #svn_depth_immediates, 1485 * switch @a path and its file children (if any), and 1486 * switch subdirectories but do not update them. Else if 1487 * #svn_depth_files, switch just file children, ignoring 1488 * subdirectories completely. Else if #svn_depth_empty, 1489 * switch just @a path and touch nothing underneath it. 1490 * @param[in] depth_is_sticky If @c TRUE, and @a depth is not 1491 * #svn_depth_unknown, then in addition to switching @a path, also 1492 * set its sticky ambient depth value to @a depth. 1493 * @param[in] ignore_externals If @c TRUE, don't process externals 1494 * definitions as part of this operation. 1495 * @param[in] allow_unver_obstructions If @c TRUE, then tolerate existing 1496 * unversioned items that obstruct incoming paths. Only 1497 * obstructions of the same type (file or dir) as the added 1498 * item are tolerated. The text of obstructing files is left 1499 * as-is, effectively treating it as a user modification after 1500 * the checkout. Working properties of obstructing items are 1501 * set equal to the base properties. <br> 1502 * If @c FALSE, then abort if there are any unversioned 1503 * obstructing items. 1504 * @param[in] ignore_ancestry If @c FALSE, then verify that the file 1505 * or directory at @a path shares some common version control 1506 * ancestry with the switch URL location (represented by the 1507 * combination of @a url, @a peg_revision, and @a revision), 1508 * and returning #SVN_ERR_CLIENT_UNRELATED_RESOURCES if they 1509 * do not. If @c TRUE, no such sanity checks are performed. 1510 * 1511 * @param[in] ctx The standard client context, used for authentication and 1512 * notification. The notifier is invoked for paths affected by 1513 * the switch, and also for files which may be restored from the 1514 * pristine store after being previously removed from the working 1515 * copy. 1516 * @param[in] pool Used for any temporary allocation. 1517 * 1518 * @return A pointer to an #svn_error_t of the type (this list is not 1519 * exhaustive): <br> 1520 * #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of 1521 * #svn_opt_revision_number, #svn_opt_revision_head, or 1522 * #svn_opt_revision_date. <br> 1523 * If no error occurred, return #SVN_NO_ERROR. 1524 * 1525 * @since New in 1.7. 1526 * 1527 * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for 1528 * a discussion of operative and peg revisions. 1529 */ 1530svn_error_t * 1531svn_client_switch3(svn_revnum_t *result_rev, 1532 const char *path, 1533 const char *url, 1534 const svn_opt_revision_t *peg_revision, 1535 const svn_opt_revision_t *revision, 1536 svn_depth_t depth, 1537 svn_boolean_t depth_is_sticky, 1538 svn_boolean_t ignore_externals, 1539 svn_boolean_t allow_unver_obstructions, 1540 svn_boolean_t ignore_ancestry, 1541 svn_client_ctx_t *ctx, 1542 apr_pool_t *pool); 1543 1544 1545/** 1546 * Similar to svn_client_switch3() but with @a ignore_ancestry always 1547 * set to TRUE. 1548 * 1549 * @since New in 1.5. 1550 * @deprecated Provided for backward compatibility with the 1.4 API. 1551 */ 1552SVN_DEPRECATED 1553svn_error_t * 1554svn_client_switch2(svn_revnum_t *result_rev, 1555 const char *path, 1556 const char *url, 1557 const svn_opt_revision_t *peg_revision, 1558 const svn_opt_revision_t *revision, 1559 svn_depth_t depth, 1560 svn_boolean_t depth_is_sticky, 1561 svn_boolean_t ignore_externals, 1562 svn_boolean_t allow_unver_obstructions, 1563 svn_client_ctx_t *ctx, 1564 apr_pool_t *pool); 1565 1566 1567/** 1568 * Similar to svn_client_switch2() but with @a allow_unver_obstructions, 1569 * @a ignore_externals, and @a depth_is_sticky always set to FALSE, 1570 * and @a depth set according to @a recurse: if @a recurse is TRUE, 1571 * set @a depth to #svn_depth_infinity, if @a recurse is FALSE, set 1572 * @a depth to #svn_depth_files. 1573 * 1574 * @deprecated Provided for backward compatibility with the 1.4 API. 1575 */ 1576SVN_DEPRECATED 1577svn_error_t * 1578svn_client_switch(svn_revnum_t *result_rev, 1579 const char *path, 1580 const char *url, 1581 const svn_opt_revision_t *revision, 1582 svn_boolean_t recurse, 1583 svn_client_ctx_t *ctx, 1584 apr_pool_t *pool); 1585 1586/** @} */ 1587 1588/** Callback for svn_client__layout_list() 1589 * 1590 * @warning EXPERIMENTAL. 1591 */ 1592typedef svn_error_t * (*svn_client__layout_func_t)( 1593 void *layout_baton, 1594 const char *local_abspath, 1595 const char *repos_root_url, 1596 svn_boolean_t not_present, 1597 svn_boolean_t url_changed, 1598 const char *url, 1599 svn_boolean_t revision_changed, 1600 svn_revnum_t revision, 1601 svn_boolean_t depth_changed, 1602 svn_depth_t depth, 1603 apr_pool_t *scratch_pool); 1604 1605/** 1606 * Describe the layout of the working copy below @a local_abspath to 1607 * the callback @a layout. 1608 * 1609 * @warning EXPERIMENTAL. 1610 */ 1611SVN_EXPERIMENTAL 1612svn_error_t * 1613svn_client__layout_list(const char *local_abspath, 1614 svn_client__layout_func_t layout, 1615 void *layout_baton, 1616 svn_client_ctx_t *ctx, 1617 apr_pool_t *scratch_pool); 1618 1619 1620/** 1621 * @defgroup Add Begin versioning files/directories in a working copy. 1622 * 1623 * @{ 1624 */ 1625 1626/** 1627 * Schedule a working copy @a path for addition to the repository. 1628 * 1629 * If @a depth is #svn_depth_empty, add just @a path and nothing 1630 * below it. If #svn_depth_files, add @a path and any file 1631 * children of @a path. If #svn_depth_immediates, add @a path, any 1632 * file children, and any immediate subdirectories (but nothing 1633 * underneath those subdirectories). If #svn_depth_infinity, add 1634 * @a path and everything under it fully recursively. 1635 * 1636 * @a path's parent must be under revision control already (unless 1637 * @a add_parents is TRUE), but @a path is not. 1638 * 1639 * If @a force is not set and @a path is already under version 1640 * control, return the error #SVN_ERR_ENTRY_EXISTS. If @a force is 1641 * set, do not error on already-versioned items. When used on a 1642 * directory in conjunction with a @a depth value greater than 1643 * #svn_depth_empty, this has the effect of scheduling for addition 1644 * any unversioned files and directories scattered within even a 1645 * versioned tree (up to @a depth). 1646 * 1647 * If @a ctx->notify_func2 is non-NULL, then for each added item, call 1648 * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the 1649 * added item. 1650 * 1651 * If @a no_ignore is FALSE, don't add any file or directory (or recurse 1652 * into any directory) that is unversioned and found by recursion (as 1653 * opposed to being the explicit target @a path) and whose name matches the 1654 * svn:ignore property on its parent directory or the global-ignores list in 1655 * @a ctx->config. If @a no_ignore is TRUE, do include such files and 1656 * directories. (Note that an svn:ignore property can influence this 1657 * behaviour only when recursing into an already versioned directory with @a 1658 * force.) 1659 * 1660 * If @a no_autoprops is TRUE, don't set any autoprops on added files. If 1661 * @a no_autoprops is FALSE then all added files have autprops set as per 1662 * the auto-props list in @a ctx->config and the value of any 1663 * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by the nearest 1664 * parents of @a path which are already under version control. 1665 * 1666 * If @a add_parents is TRUE, recurse up @a path's directory and look for 1667 * a versioned directory. If found, add all intermediate paths between it 1668 * and @a path. If not found, return #SVN_ERR_CLIENT_NO_VERSIONED_PARENT. 1669 * 1670 * @a scratch_pool is used for temporary allocations only. 1671 * 1672 * @par Important: 1673 * This is a *scheduling* operation. No changes will 1674 * happen to the repository until a commit occurs. This scheduling 1675 * can be removed with svn_client_revert2(). 1676 * 1677 * @since New in 1.8. 1678 */ 1679svn_error_t * 1680svn_client_add5(const char *path, 1681 svn_depth_t depth, 1682 svn_boolean_t force, 1683 svn_boolean_t no_ignore, 1684 svn_boolean_t no_autoprops, 1685 svn_boolean_t add_parents, 1686 svn_client_ctx_t *ctx, 1687 apr_pool_t *scratch_pool); 1688 1689/** 1690 * Similar to svn_client_add5(), but with @a no_autoprops always set to 1691 * FALSE. 1692 * 1693 * @deprecated Provided for backward compatibility with the 1.7 API. 1694 */ 1695SVN_DEPRECATED 1696svn_error_t * 1697svn_client_add4(const char *path, 1698 svn_depth_t depth, 1699 svn_boolean_t force, 1700 svn_boolean_t no_ignore, 1701 svn_boolean_t add_parents, 1702 svn_client_ctx_t *ctx, 1703 apr_pool_t *pool); 1704 1705/** 1706 * Similar to svn_client_add4(), but with @a add_parents always set to 1707 * FALSE and @a depth set according to @a recursive: if TRUE, then 1708 * @a depth is #svn_depth_infinity, if FALSE, then #svn_depth_empty. 1709 * 1710 * @deprecated Provided for backward compatibility with the 1.4 API. 1711 */ 1712SVN_DEPRECATED 1713svn_error_t * 1714svn_client_add3(const char *path, 1715 svn_boolean_t recursive, 1716 svn_boolean_t force, 1717 svn_boolean_t no_ignore, 1718 svn_client_ctx_t *ctx, 1719 apr_pool_t *pool); 1720 1721/** 1722 * Similar to svn_client_add3(), but with @a no_ignore always set to 1723 * FALSE. 1724 * 1725 * @deprecated Provided for backward compatibility with the 1.2 API. 1726 */ 1727SVN_DEPRECATED 1728svn_error_t * 1729svn_client_add2(const char *path, 1730 svn_boolean_t recursive, 1731 svn_boolean_t force, 1732 svn_client_ctx_t *ctx, 1733 apr_pool_t *pool); 1734 1735/** 1736 * Similar to svn_client_add2(), but with @a force always set to FALSE. 1737 * 1738 * @deprecated Provided for backward compatibility with the 1.0 API. 1739 */ 1740SVN_DEPRECATED 1741svn_error_t * 1742svn_client_add(const char *path, 1743 svn_boolean_t recursive, 1744 svn_client_ctx_t *ctx, 1745 apr_pool_t *pool); 1746 1747/** @} */ 1748 1749/** 1750 * @defgroup Mkdir Create directories in a working copy or repository. 1751 * 1752 * @{ 1753 */ 1754 1755/** Create a directory, either in a repository or a working copy. 1756 * 1757 * @a paths is an array of (const char *) paths, either all local WC paths 1758 * or all URLs. 1759 * 1760 * If @a paths contains URLs, use the authentication baton in @a ctx 1761 * and @a message to immediately attempt to commit the creation of the 1762 * directories in @a paths in the repository. 1763 * 1764 * Else, create the directories on disk, and attempt to schedule them 1765 * for addition (using svn_client_add(), whose docstring you should 1766 * read). 1767 * 1768 * If @a make_parents is TRUE, create any non-existent parent directories 1769 * also. 1770 * 1771 * If non-NULL, @a revprop_table is a hash table holding additional, 1772 * custom revision properties (<tt>const char *</tt> names mapped to 1773 * <tt>svn_string_t *</tt> values) to be set on the new revision in 1774 * the event that this is a committing operation. This table cannot 1775 * contain any standard Subversion properties. 1776 * 1777 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton 1778 * combo that this function can use to query for a commit log message 1779 * when one is needed. 1780 * 1781 * If @a ctx->notify_func2 is non-NULL, when the directory has been created 1782 * (successfully) in the working copy, call @a ctx->notify_func2 with 1783 * @a ctx->notify_baton2 and the path of the new directory. Note that this is 1784 * only called for items added to the working copy. 1785 * 1786 * If @a commit_callback is non-NULL, then for each successful commit, call 1787 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 1788 * the commit. 1789 * 1790 * @since New in 1.7. 1791 */ 1792svn_error_t * 1793svn_client_mkdir4(const apr_array_header_t *paths, 1794 svn_boolean_t make_parents, 1795 const apr_hash_t *revprop_table, 1796 svn_commit_callback2_t commit_callback, 1797 void *commit_baton, 1798 svn_client_ctx_t *ctx, 1799 apr_pool_t *pool); 1800 1801/** 1802 * Similar to svn_client_mkdir4(), but returns the commit info in 1803 * @a *commit_info_p rather than through a callback function. 1804 * 1805 * @since New in 1.5. 1806 * @deprecated Provided for backward compatibility with the 1.6 API. 1807 */ 1808SVN_DEPRECATED 1809svn_error_t * 1810svn_client_mkdir3(svn_commit_info_t **commit_info_p, 1811 const apr_array_header_t *paths, 1812 svn_boolean_t make_parents, 1813 const apr_hash_t *revprop_table, 1814 svn_client_ctx_t *ctx, 1815 apr_pool_t *pool); 1816 1817 1818/** 1819 * Same as svn_client_mkdir3(), but with @a make_parents always FALSE, 1820 * and @a revprop_table always NULL. 1821 * 1822 * @since New in 1.3. 1823 * @deprecated Provided for backward compatibility with the 1.4 API. 1824 */ 1825SVN_DEPRECATED 1826svn_error_t * 1827svn_client_mkdir2(svn_commit_info_t **commit_info_p, 1828 const apr_array_header_t *paths, 1829 svn_client_ctx_t *ctx, 1830 apr_pool_t *pool); 1831 1832/** 1833 * Same as svn_client_mkdir2(), but takes the #svn_client_commit_info_t 1834 * type for @a commit_info_p. 1835 * 1836 * @deprecated Provided for backward compatibility with the 1.2 API. 1837 */ 1838SVN_DEPRECATED 1839svn_error_t * 1840svn_client_mkdir(svn_client_commit_info_t **commit_info_p, 1841 const apr_array_header_t *paths, 1842 svn_client_ctx_t *ctx, 1843 apr_pool_t *pool); 1844 1845/** @} */ 1846 1847/** 1848 * @defgroup Delete Remove files/directories from a working copy or repository. 1849 * 1850 * @{ 1851 */ 1852 1853/** Delete items from a repository or working copy. 1854 * 1855 * @a paths is an array of (const char *) paths, either all local WC paths 1856 * or all URLs. 1857 * 1858 * If the paths in @a paths are URLs, use the authentication baton in 1859 * @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to 1860 * immediately attempt to commit a deletion of the URLs from the 1861 * repository. Every path must belong to the same repository. 1862 * 1863 * Else, schedule the working copy paths in @a paths for removal from 1864 * the repository. Each path's parent must be under revision control. 1865 * This is just a *scheduling* operation. No changes will happen to 1866 * the repository until a commit occurs. This scheduling can be 1867 * removed with svn_client_revert2(). If a path is a file it is 1868 * immediately removed from the working copy. If the path is a 1869 * directory it will remain in the working copy but all the files, and 1870 * all unversioned items, it contains will be removed. If @a force is 1871 * not set then this operation will fail if any path contains locally 1872 * modified and/or unversioned items. If @a force is set such items 1873 * will be deleted. 1874 * 1875 * If the paths are working copy paths and @a keep_local is TRUE then 1876 * the paths will not be removed from the working copy, only scheduled 1877 * for removal from the repository. Once the scheduled deletion is 1878 * committed, they will appear as unversioned paths in the working copy. 1879 * 1880 * If non-NULL, @a revprop_table is a hash table holding additional, 1881 * custom revision properties (<tt>const char *</tt> names mapped to 1882 * <tt>svn_string_t *</tt> values) to be set on the new revision in 1883 * the event that this is a committing operation. This table cannot 1884 * contain any standard Subversion properties. 1885 * 1886 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton 1887 * combo that this function can use to query for a commit log message 1888 * when one is needed. 1889 * 1890 * If @a ctx->notify_func2 is non-NULL, then for each item deleted, call 1891 * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the deleted 1892 * item. 1893 * 1894 * If @a commit_callback is non-NULL, then for each successful commit, call 1895 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 1896 * the commit. 1897 * 1898 * @since New in 1.7. 1899 */ 1900svn_error_t * 1901svn_client_delete4(const apr_array_header_t *paths, 1902 svn_boolean_t force, 1903 svn_boolean_t keep_local, 1904 const apr_hash_t *revprop_table, 1905 svn_commit_callback2_t commit_callback, 1906 void *commit_baton, 1907 svn_client_ctx_t *ctx, 1908 apr_pool_t *pool); 1909 1910/** 1911 * Similar to svn_client_delete4(), but returns the commit info in 1912 * @a *commit_info_p rather than through a callback function. 1913 * 1914 * @since New in 1.5. 1915 * @deprecated Provided for backward compatibility with the 1.6 API. 1916 */ 1917SVN_DEPRECATED 1918svn_error_t * 1919svn_client_delete3(svn_commit_info_t **commit_info_p, 1920 const apr_array_header_t *paths, 1921 svn_boolean_t force, 1922 svn_boolean_t keep_local, 1923 const apr_hash_t *revprop_table, 1924 svn_client_ctx_t *ctx, 1925 apr_pool_t *pool); 1926 1927/** 1928 * Similar to svn_client_delete3(), but with @a keep_local always set 1929 * to FALSE, and @a revprop_table passed as NULL. 1930 * 1931 * @deprecated Provided for backward compatibility with the 1.4 API. 1932 */ 1933SVN_DEPRECATED 1934svn_error_t * 1935svn_client_delete2(svn_commit_info_t **commit_info_p, 1936 const apr_array_header_t *paths, 1937 svn_boolean_t force, 1938 svn_client_ctx_t *ctx, 1939 apr_pool_t *pool); 1940 1941/** 1942 * Similar to svn_client_delete2(), but takes the #svn_client_commit_info_t 1943 * type for @a commit_info_p. 1944 * 1945 * @deprecated Provided for backward compatibility with the 1.2 API. 1946 */ 1947SVN_DEPRECATED 1948svn_error_t * 1949svn_client_delete(svn_client_commit_info_t **commit_info_p, 1950 const apr_array_header_t *paths, 1951 svn_boolean_t force, 1952 svn_client_ctx_t *ctx, 1953 apr_pool_t *pool); 1954 1955 1956/** @} */ 1957 1958/** 1959 * @defgroup Import Import files into the repository. 1960 * 1961 * @{ 1962 */ 1963 1964/** 1965 * The callback invoked by svn_client_import5() before adding a node to the 1966 * list of nodes to be imported. 1967 * 1968 * @a baton is the value passed to @a svn_client_import5 as filter_baton. 1969 * 1970 * The callback receives the @a local_abspath for each node and the @a dirent 1971 * for it when walking the directory tree. Only the kind of node, including 1972 * special status is available in @a dirent. 1973 * 1974 * Implementations can set @a *filtered to TRUE, to make the import 1975 * process omit the node and (if the node is a directory) all its 1976 * descendants. 1977 * 1978 * @a scratch_pool can be used for temporary allocations. 1979 * 1980 * @since New in 1.8. 1981 */ 1982typedef svn_error_t *(*svn_client_import_filter_func_t)( 1983 void *baton, 1984 svn_boolean_t *filtered, 1985 const char *local_abspath, 1986 const svn_io_dirent2_t *dirent, 1987 apr_pool_t *scratch_pool); 1988 1989/** Import file or directory @a path into repository directory @a url at 1990 * head, authenticating with the authentication baton cached in @a ctx, 1991 * and using @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to get a log message 1992 * for the (implied) commit. If some components of @a url do not exist 1993 * then create parent directories as necessary. 1994 * 1995 * This function reads an unversioned tree from disk and skips any ".svn" 1996 * directories. Even if a file or directory being imported is part of an 1997 * existing WC, this function sees it as unversioned and does not notice any 1998 * existing Subversion properties in it. 1999 * 2000 * If @a path is a directory, the contents of that directory are 2001 * imported directly into the directory identified by @a url. Note that the 2002 * directory @a path itself is not imported -- that is, the basename of 2003 * @a path is not part of the import. 2004 * 2005 * If @a path is a file, then the dirname of @a url is the directory 2006 * receiving the import. The basename of @a url is the filename in the 2007 * repository. In this case if @a url already exists, return error. 2008 * 2009 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with 2010 * @a ctx->notify_baton2 as the import progresses, with any of the following 2011 * actions: #svn_wc_notify_commit_added, 2012 * #svn_wc_notify_commit_postfix_txdelta. 2013 * 2014 * Use @a scratch_pool for any temporary allocation. 2015 * 2016 * If non-NULL, @a revprop_table is a hash table holding additional, 2017 * custom revision properties (<tt>const char *</tt> names mapped to 2018 * <tt>svn_string_t *</tt> values) to be set on the new revision. 2019 * This table cannot contain any standard Subversion properties. 2020 * 2021 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton 2022 * combo that this function can use to query for a commit log message 2023 * when one is needed. 2024 * 2025 * If @a depth is #svn_depth_empty, import just @a path and nothing 2026 * below it. If #svn_depth_files, import @a path and any file 2027 * children of @a path. If #svn_depth_immediates, import @a path, any 2028 * file children, and any immediate subdirectories (but nothing 2029 * underneath those subdirectories). If #svn_depth_infinity, import 2030 * @a path and everything under it fully recursively. 2031 * 2032 * If @a no_ignore is @c FALSE, don't import any file or directory (or 2033 * recurse into any directory) that is found by recursion (as opposed to 2034 * being the explicit target @a path) and whose name matches the 2035 * global-ignores list in @a ctx->config. If @a no_ignore is @c TRUE, do 2036 * include such files and directories. (Note that svn:ignore properties are 2037 * not involved, as auto-props cannot set properties on directories and even 2038 * if the target is part of a WC the import ignores any existing 2039 * properties.) 2040 * 2041 * If @a no_autoprops is TRUE, don't set any autoprops on imported files. If 2042 * @a no_autoprops is FALSE then all imported files have autprops set as per 2043 * the auto-props list in @a ctx->config and the value of any 2044 * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by and explicitly set 2045 * on @a url if @a url is already under versioned control, or the nearest parents 2046 * of @a path which are already under version control if not. 2047 * 2048 * If @a ignore_unknown_node_types is @c TRUE, ignore files of which the 2049 * node type is unknown, such as device files and pipes. 2050 * 2051 * If @a filter_callback is non-NULL, call it for each node that isn't ignored 2052 * for other reasons with @a filter_baton, to allow third party to ignore 2053 * specific nodes during importing. 2054 * 2055 * If @a commit_callback is non-NULL, then for each successful commit, call 2056 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 2057 * the commit. 2058 * 2059 * @since New in 1.8. 2060 */ 2061svn_error_t * 2062svn_client_import5(const char *path, 2063 const char *url, 2064 svn_depth_t depth, 2065 svn_boolean_t no_ignore, 2066 svn_boolean_t no_autoprops, 2067 svn_boolean_t ignore_unknown_node_types, 2068 const apr_hash_t *revprop_table, 2069 svn_client_import_filter_func_t filter_callback, 2070 void *filter_baton, 2071 svn_commit_callback2_t commit_callback, 2072 void *commit_baton, 2073 svn_client_ctx_t *ctx, 2074 apr_pool_t *scratch_pool); 2075 2076/** 2077 * Similar to svn_client_import5(), but without support for an optional 2078 * @a filter_callback and @a no_autoprops always set to FALSE. 2079 * 2080 * @since New in 1.7. 2081 * @deprecated Provided for backward compatibility with the 1.7 API. 2082 */ 2083SVN_DEPRECATED 2084svn_error_t * 2085svn_client_import4(const char *path, 2086 const char *url, 2087 svn_depth_t depth, 2088 svn_boolean_t no_ignore, 2089 svn_boolean_t ignore_unknown_node_types, 2090 const apr_hash_t *revprop_table, 2091 svn_commit_callback2_t commit_callback, 2092 void *commit_baton, 2093 svn_client_ctx_t *ctx, 2094 apr_pool_t *pool); 2095 2096/** 2097 * Similar to svn_client_import4(), but returns the commit info in 2098 * @a *commit_info_p rather than through a callback function. 2099 * 2100 * @since New in 1.5. 2101 * @deprecated Provided for backward compatibility with the 1.6 API. 2102 */ 2103SVN_DEPRECATED 2104svn_error_t * 2105svn_client_import3(svn_commit_info_t **commit_info_p, 2106 const char *path, 2107 const char *url, 2108 svn_depth_t depth, 2109 svn_boolean_t no_ignore, 2110 svn_boolean_t ignore_unknown_node_types, 2111 const apr_hash_t *revprop_table, 2112 svn_client_ctx_t *ctx, 2113 apr_pool_t *pool); 2114 2115/** 2116 * Similar to svn_client_import3(), but with @a ignore_unknown_node_types 2117 * always set to @c FALSE, @a revprop_table passed as NULL, and @a 2118 * depth set according to @a nonrecursive: if TRUE, then @a depth is 2119 * #svn_depth_files, else #svn_depth_infinity. 2120 * 2121 * @since New in 1.3. 2122 * 2123 * @deprecated Provided for backward compatibility with the 1.4 API 2124 */ 2125SVN_DEPRECATED 2126svn_error_t * 2127svn_client_import2(svn_commit_info_t **commit_info_p, 2128 const char *path, 2129 const char *url, 2130 svn_boolean_t nonrecursive, 2131 svn_boolean_t no_ignore, 2132 svn_client_ctx_t *ctx, 2133 apr_pool_t *pool); 2134 2135/** 2136 * Similar to svn_client_import2(), but with @a no_ignore always set 2137 * to FALSE and using the #svn_client_commit_info_t type for 2138 * @a commit_info_p. 2139 * 2140 * @deprecated Provided for backward compatibility with the 1.2 API. 2141 */ 2142SVN_DEPRECATED 2143svn_error_t * 2144svn_client_import(svn_client_commit_info_t **commit_info_p, 2145 const char *path, 2146 const char *url, 2147 svn_boolean_t nonrecursive, 2148 svn_client_ctx_t *ctx, 2149 apr_pool_t *pool); 2150 2151/** @} */ 2152 2153/** 2154 * @defgroup Commit Commit local modifications to the repository. 2155 * 2156 * @{ 2157 */ 2158 2159/** 2160 * Commit files or directories into repository, authenticating with 2161 * the authentication baton cached in @a ctx, and using 2162 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to obtain the log message. 2163 * Set @a *commit_info_p to the results of the commit, allocated in @a pool. 2164 * 2165 * @a targets is an array of <tt>const char *</tt> paths to commit. They 2166 * need not be canonicalized nor condensed; this function will take care of 2167 * that. If @a targets has zero elements, then do nothing and return 2168 * immediately without error. 2169 * 2170 * If non-NULL, @a revprop_table is a hash table holding additional, 2171 * custom revision properties (<tt>const char *</tt> names mapped to 2172 * <tt>svn_string_t *</tt> values) to be set on the new revision. 2173 * This table cannot contain any standard Subversion properties. 2174 * 2175 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with 2176 * @a ctx->notify_baton2 as the commit progresses, with any of the following 2177 * actions: #svn_wc_notify_commit_modified, #svn_wc_notify_commit_added, 2178 * #svn_wc_notify_commit_deleted, #svn_wc_notify_commit_replaced, 2179 * #svn_wc_notify_commit_copied, #svn_wc_notify_commit_copied_replaced, 2180 * #svn_wc_notify_commit_postfix_txdelta. 2181 * 2182 * If @a depth is #svn_depth_infinity, commit all changes to and 2183 * below named targets. If @a depth is #svn_depth_empty, commit 2184 * only named targets (that is, only property changes on named 2185 * directory targets, and property and content changes for named file 2186 * targets). If @a depth is #svn_depth_files, behave as above for 2187 * named file targets, and for named directory targets, commit 2188 * property changes on a named directory and all changes to files 2189 * directly inside that directory. If #svn_depth_immediates, behave 2190 * as for #svn_depth_files, and for subdirectories of any named 2191 * directory target commit as though for #svn_depth_empty. 2192 * 2193 * Unlock paths in the repository, unless @a keep_locks is TRUE. 2194 * 2195 * @a changelists is an array of <tt>const char *</tt> changelist 2196 * names, used as a restrictive filter on items that are committed; 2197 * that is, don't commit anything unless it's a member of one of those 2198 * changelists. After the commit completes successfully, remove 2199 * changelist associations from the targets, unless @a 2200 * keep_changelists is set. If @a changelists is 2201 * empty (or altogether @c NULL), no changelist filtering occurs. 2202 * 2203 * If @a commit_as_operations is set to FALSE, when a copy is committed 2204 * all changes below the copy are always committed at the same time 2205 * (independent of the value of @a depth). If @a commit_as_operations is 2206 * #TRUE, changes to descendants are only committed if they are itself 2207 * included via @a depth and targets. 2208 * 2209 * If @a include_file_externals and/or @a include_dir_externals are #TRUE, 2210 * also commit all file and/or dir externals (respectively) that are reached 2211 * by recursion, except for those externals which: 2212 * - have a fixed revision, or 2213 * - come from a different repository root URL (dir externals). 2214 * These flags affect only recursion; externals that directly appear in @a 2215 * targets are always included in the commit. 2216 * 2217 * ### TODO: currently, file externals hidden inside an unversioned dir are 2218 * skipped deliberately, because we can't commit those yet. 2219 * See STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW. 2220 * 2221 * ### TODO: With @c depth_immediates, this function acts as if 2222 * @a include_dir_externals was passed #FALSE, but caller expects 2223 * immediate child dir externals to be included @c depth_empty. 2224 * 2225 * When @a commit_as_operations is #TRUE it is possible to delete a node and 2226 * all its descendants by selecting just the root of the deletion. If it is 2227 * set to #FALSE this will raise an error. 2228 * 2229 * If @a commit_callback is non-NULL, then for each successful commit, call 2230 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 2231 * the commit. 2232 * 2233 * @note #svn_depth_unknown and #svn_depth_exclude must not be passed 2234 * for @a depth. 2235 * 2236 * Use @a pool for any temporary allocations. 2237 * 2238 * @since New in 1.8. 2239 */ 2240svn_error_t * 2241svn_client_commit6(const apr_array_header_t *targets, 2242 svn_depth_t depth, 2243 svn_boolean_t keep_locks, 2244 svn_boolean_t keep_changelists, 2245 svn_boolean_t commit_as_operations, 2246 svn_boolean_t include_file_externals, 2247 svn_boolean_t include_dir_externals, 2248 const apr_array_header_t *changelists, 2249 const apr_hash_t *revprop_table, 2250 svn_commit_callback2_t commit_callback, 2251 void *commit_baton, 2252 svn_client_ctx_t *ctx, 2253 apr_pool_t *pool); 2254 2255/** 2256 * Similar to svn_client_commit6(), but passes @a include_file_externals as 2257 * FALSE and @a include_dir_externals as FALSE. 2258 * 2259 * @since New in 1.7. 2260 * @deprecated Provided for backward compatibility with the 1.7 API. 2261 */ 2262SVN_DEPRECATED 2263svn_error_t * 2264svn_client_commit5(const apr_array_header_t *targets, 2265 svn_depth_t depth, 2266 svn_boolean_t keep_locks, 2267 svn_boolean_t keep_changelists, 2268 svn_boolean_t commit_as_operations, 2269 const apr_array_header_t *changelists, 2270 const apr_hash_t *revprop_table, 2271 svn_commit_callback2_t commit_callback, 2272 void *commit_baton, 2273 svn_client_ctx_t *ctx, 2274 apr_pool_t *pool); 2275 2276/** 2277 * Similar to svn_client_commit5(), but returns the commit info in 2278 * @a *commit_info_p rather than through a callback function. Does not use 2279 * #svn_wc_notify_commit_copied or #svn_wc_notify_commit_copied_replaced 2280 * (preferring #svn_wc_notify_commit_added and 2281 * #svn_wc_notify_commit_replaced, respectively, instead). 2282 * 2283 * Also, if no error is returned and @a (*commit_info_p)->revision is set to 2284 * #SVN_INVALID_REVNUM, then the commit was a no-op; nothing needed to 2285 * be committed. 2286 * 2287 * Sets @a commit_as_operations to FALSE to match Subversion 1.6's behavior. 2288 * 2289 * @since New in 1.5. 2290 * @deprecated Provided for backward compatibility with the 1.6 API. 2291 */ 2292SVN_DEPRECATED 2293svn_error_t * 2294svn_client_commit4(svn_commit_info_t **commit_info_p, 2295 const apr_array_header_t *targets, 2296 svn_depth_t depth, 2297 svn_boolean_t keep_locks, 2298 svn_boolean_t keep_changelists, 2299 const apr_array_header_t *changelists, 2300 const apr_hash_t *revprop_table, 2301 svn_client_ctx_t *ctx, 2302 apr_pool_t *pool); 2303 2304/** 2305 * Similar to svn_client_commit4(), but always with NULL for 2306 * @a changelist_name, FALSE for @a keep_changelist, NULL for @a 2307 * revprop_table, and @a depth set according to @a recurse: if @a 2308 * recurse is TRUE, use #svn_depth_infinity, else #svn_depth_empty. 2309 * 2310 * @deprecated Provided for backward compatibility with the 1.4 API. 2311 * 2312 * @since New in 1.3. 2313 */ 2314SVN_DEPRECATED 2315svn_error_t * 2316svn_client_commit3(svn_commit_info_t **commit_info_p, 2317 const apr_array_header_t *targets, 2318 svn_boolean_t recurse, 2319 svn_boolean_t keep_locks, 2320 svn_client_ctx_t *ctx, 2321 apr_pool_t *pool); 2322 2323/** 2324 * Similar to svn_client_commit3(), but uses #svn_client_commit_info_t 2325 * for @a commit_info_p. 2326 * 2327 * @deprecated Provided for backward compatibility with the 1.2 API. 2328 * 2329 * @since New in 1.2. 2330 */ 2331SVN_DEPRECATED 2332svn_error_t * 2333svn_client_commit2(svn_client_commit_info_t **commit_info_p, 2334 const apr_array_header_t *targets, 2335 svn_boolean_t recurse, 2336 svn_boolean_t keep_locks, 2337 svn_client_ctx_t *ctx, 2338 apr_pool_t *pool); 2339 2340/** 2341 * Similar to svn_client_commit2(), but with @a keep_locks set to 2342 * TRUE and @a nonrecursive instead of @a recurse. 2343 * 2344 * @deprecated Provided for backward compatibility with the 1.1 API. 2345 */ 2346SVN_DEPRECATED 2347svn_error_t * 2348svn_client_commit(svn_client_commit_info_t **commit_info_p, 2349 const apr_array_header_t *targets, 2350 svn_boolean_t nonrecursive, 2351 svn_client_ctx_t *ctx, 2352 apr_pool_t *pool); 2353 2354/** @} */ 2355 2356/** 2357 * @defgroup Status Report interesting information about paths in the \ 2358 * working copy. 2359 * 2360 * @{ 2361 */ 2362 2363/** 2364 * Structure for holding the "status" of a working copy item. 2365 * 2366 * @note Fields may be added to the end of this structure in future 2367 * versions. Therefore, to preserve binary compatibility, users 2368 * should not directly allocate structures of this type. 2369 * 2370 * @since New in 1.7. 2371 */ 2372typedef struct svn_client_status_t 2373{ 2374 /** The kind of node as recorded in the working copy */ 2375 svn_node_kind_t kind; 2376 2377 /** The absolute path to the node */ 2378 const char *local_abspath; 2379 2380 /** The actual size of the working file on disk, or SVN_INVALID_FILESIZE 2381 * if unknown (or if the item isn't a file at all). */ 2382 svn_filesize_t filesize; 2383 2384 /** If the path is under version control, versioned is TRUE, otherwise 2385 * FALSE. */ 2386 svn_boolean_t versioned; 2387 2388 /** Set to TRUE if the node is the victim of some kind of conflict. */ 2389 svn_boolean_t conflicted; 2390 2391 /** The status of the node, based on the restructuring changes and if the 2392 * node has no restructuring changes the text and prop status. */ 2393 enum svn_wc_status_kind node_status; 2394 2395 /** The status of the text of the node, not including restructuring changes. 2396 * Valid values are: svn_wc_status_none, svn_wc_status_normal, 2397 * svn_wc_status_modified and svn_wc_status_conflicted. */ 2398 enum svn_wc_status_kind text_status; 2399 2400 /** The status of the node's properties. 2401 * Valid values are: svn_wc_status_none, svn_wc_status_normal, 2402 * svn_wc_status_modified and svn_wc_status_conflicted. */ 2403 enum svn_wc_status_kind prop_status; 2404 2405 /** A node can be 'locked' if a working copy update is in progress or 2406 * was interrupted. */ 2407 svn_boolean_t wc_is_locked; 2408 2409 /** A file or directory can be 'copied' if it's scheduled for 2410 * addition-with-history (or part of a subtree that is scheduled as such.). 2411 */ 2412 svn_boolean_t copied; 2413 2414 /** The URL of the repository root. */ 2415 const char *repos_root_url; 2416 2417 /** The UUID of the repository */ 2418 const char *repos_uuid; 2419 2420 /** The in-repository path relative to the repository root. */ 2421 const char *repos_relpath; 2422 2423 /** Base revision. */ 2424 svn_revnum_t revision; 2425 2426 /** Last revision this was changed */ 2427 svn_revnum_t changed_rev; 2428 2429 /** Date of last commit. */ 2430 apr_time_t changed_date; 2431 2432 /** Last commit author of this item */ 2433 const char *changed_author; 2434 2435 /** A file or directory can be 'switched' if the switch command has been 2436 * used. If this is TRUE, then file_external will be FALSE. 2437 */ 2438 svn_boolean_t switched; 2439 2440 /** If the item is a file that was added to the working copy with an 2441 * svn:externals; if file_external is TRUE, then switched is always 2442 * FALSE. 2443 */ 2444 svn_boolean_t file_external; 2445 2446 /** The locally present lock. (Values of path, token, owner, comment and 2447 * are available if a lock is present) */ 2448 const svn_lock_t *lock; 2449 2450 /** Which changelist this item is part of, or NULL if not part of any. */ 2451 const char *changelist; 2452 2453 /** The depth of the node as recorded in the working copy 2454 * (#svn_depth_unknown for files or when no depth is recorded) */ 2455 svn_depth_t depth; 2456 2457 /** 2458 * @defgroup svn_wc_status_ood WC out-of-date info from the repository 2459 * @{ 2460 * 2461 * When the working copy item is out-of-date compared to the 2462 * repository, the following fields represent the state of the 2463 * youngest revision of the item in the repository. If the working 2464 * copy is not out of date, the fields are initialized as described 2465 * below. 2466 */ 2467 2468 /** Set to the node kind of the youngest commit, or #svn_node_none 2469 * if not out of date. */ 2470 svn_node_kind_t ood_kind; 2471 2472 /** The status of the node, based on the text status if the node has no 2473 * restructuring changes */ 2474 enum svn_wc_status_kind repos_node_status; 2475 2476 /** The node's text status in the repository. */ 2477 enum svn_wc_status_kind repos_text_status; 2478 2479 /** The node's property status in the repository. */ 2480 enum svn_wc_status_kind repos_prop_status; 2481 2482 /** The node's lock in the repository, if any. */ 2483 const svn_lock_t *repos_lock; 2484 2485 /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM 2486 * if not out of date. */ 2487 svn_revnum_t ood_changed_rev; 2488 2489 /** Set to the most recent commit date, or @c 0 if not out of date. */ 2490 apr_time_t ood_changed_date; 2491 2492 /** Set to the user name of the youngest commit, or @c NULL if not 2493 * out of date or non-existent. Because a non-existent @c 2494 * svn:author property has the same behavior as an out-of-date 2495 * working copy, examine @c ood_changed_rev to determine whether 2496 * the working copy is out of date. */ 2497 const char *ood_changed_author; 2498 2499 /** @} */ 2500 2501 /** Reserved for libsvn_client's internal use; this value is only to be used 2502 * for libsvn_client backwards compatibility wrappers. This value may be NULL 2503 * or to other data in future versions. */ 2504 const void *backwards_compatibility_baton; 2505 2506 /** Set to the local absolute path that this node was moved from, if this 2507 * file or directory has been moved here locally and is the root of that 2508 * move. Otherwise set to NULL. 2509 * 2510 * This will be NULL for moved-here nodes that are just part of a subtree 2511 * that was moved along (and are not themselves a root of a different move 2512 * operation). 2513 * 2514 * @since New in 1.8. */ 2515 const char *moved_from_abspath; 2516 2517 /** Set to the local absolute path that this node was moved to, if this file 2518 * or directory has been moved away locally and corresponds to the root 2519 * of the destination side of the move. Otherwise set to NULL. 2520 * 2521 * Note: Saying just "root" here could be misleading. For example: 2522 * svn mv A AA; 2523 * svn mv AA/B BB; 2524 * creates a situation where A/B is moved-to BB, but one could argue that 2525 * the move source's root actually was AA/B. Note that, as far as the 2526 * working copy is concerned, above case is exactly identical to: 2527 * svn mv A/B BB; 2528 * svn mv A AA; 2529 * In both situations, @a moved_to_abspath would be set for nodes A (moved 2530 * to AA) and A/B (moved to BB), only. 2531 * 2532 * This will be NULL for moved-away nodes that were just part of a subtree 2533 * that was moved along (and are not themselves a root of a different move 2534 * operation). 2535 * 2536 * @since New in 1.8. */ 2537 const char *moved_to_abspath; 2538 2539 /* NOTE! Please update svn_client_status_dup() when adding new fields here. */ 2540} svn_client_status_t; 2541 2542/** 2543 * Return a duplicate of @a status, allocated in @a result_pool. No part of the new 2544 * structure will be shared with @a status. 2545 * 2546 * @since New in 1.7. 2547 */ 2548svn_client_status_t * 2549svn_client_status_dup(const svn_client_status_t *status, 2550 apr_pool_t *result_pool); 2551 2552/** 2553 * A callback for reporting a @a status about @a path (which may be an 2554 * absolute or relative path). 2555 * 2556 * @a baton is a closure object; it should be provided by the 2557 * implementation, and passed by the caller. 2558 * 2559 * @a scratch_pool will be cleared between invocations to the callback. 2560 * 2561 * @since New in 1.7. 2562 */ 2563typedef svn_error_t *(*svn_client_status_func_t)( 2564 void *baton, 2565 const char *path, 2566 const svn_client_status_t *status, 2567 apr_pool_t *scratch_pool); 2568 2569/** 2570 * Given @a path to a working copy directory (or single file), call 2571 * @a status_func/status_baton with a set of #svn_wc_status_t * 2572 * structures which describe the status of @a path, and its children 2573 * (recursing according to @a depth). 2574 * 2575 * - If @a get_all is set, retrieve all entries; otherwise, 2576 * retrieve only "interesting" entries (local mods and/or 2577 * out of date). 2578 * 2579 * - If @a check_out_of_date is set, contact the repository and 2580 * augment the status structures with information about 2581 * out-of-dateness (with respect to @a revision). Also, if @a 2582 * result_rev is not @c NULL, set @a *result_rev to the actual 2583 * revision against which the working copy was compared (@a 2584 * *result_rev is not meaningful unless @a check_out_of_date is 2585 * set). 2586 * 2587 * - If @a check_working_copy is not set, do not scan the working 2588 * copy for local modifications. This parameter will be ignored 2589 * unless @a check_out_of_date is set. When set, the status 2590 * report will not contain any information about local changes in 2591 * the working copy; this includes local deletions and 2592 * replacements. 2593 * 2594 * If @a no_ignore is @c FALSE, don't report any file or directory (or 2595 * recurse into any directory) that is found by recursion (as opposed to 2596 * being the explicit target @a path) and whose name matches the 2597 * svn:ignore property on its parent directory or the global-ignores 2598 * list in @a ctx->config. If @a no_ignore is @c TRUE, report each such 2599 * file or directory with the status code #svn_wc_status_ignored. 2600 * 2601 * If @a ignore_externals is not set, then recurse into externals 2602 * definitions (if any exist) after handling the main target. This 2603 * calls the client notification function (in @a ctx) with the 2604 * #svn_wc_notify_status_external action before handling each externals 2605 * definition, and with #svn_wc_notify_status_completed 2606 * after each. 2607 * 2608 * If @a depth_as_sticky is set and @a depth is not 2609 * #svn_depth_unknown, then the status is calculated as if depth_is_sticky 2610 * was passed to an equivalent update command. 2611 * 2612 * @a changelists is an array of <tt>const char *</tt> changelist 2613 * names, used as a restrictive filter on items whose statuses are 2614 * reported; that is, don't report status about any item unless 2615 * it's a member of one of those changelists. If @a changelists is 2616 * empty (or altogether @c NULL), no changelist filtering occurs. 2617 * 2618 * If @a path is an absolute path then the @c path parameter passed in each 2619 * call to @a status_func will be an absolute path. 2620 * 2621 * All temporary allocations are performed in @a scratch_pool. 2622 * 2623 * @since New in 1.9. 2624 */ 2625svn_error_t * 2626svn_client_status6(svn_revnum_t *result_rev, 2627 svn_client_ctx_t *ctx, 2628 const char *path, 2629 const svn_opt_revision_t *revision, 2630 svn_depth_t depth, 2631 svn_boolean_t get_all, 2632 svn_boolean_t check_out_of_date, 2633 svn_boolean_t check_working_copy, 2634 svn_boolean_t no_ignore, 2635 svn_boolean_t ignore_externals, 2636 svn_boolean_t depth_as_sticky, 2637 const apr_array_header_t *changelists, 2638 svn_client_status_func_t status_func, 2639 void *status_baton, 2640 apr_pool_t *scratch_pool); 2641 2642 2643/** 2644 * Same as svn_client_status6(), but with @a check_out_of_date set to 2645 * @a update and @a check_working_copy set to @c TRUE. 2646 * 2647 * @since New in 1.7. 2648 * @deprecated Provided for backward compatibility with the 1.8 API. 2649 */ 2650SVN_DEPRECATED 2651svn_error_t * 2652svn_client_status5(svn_revnum_t *result_rev, 2653 svn_client_ctx_t *ctx, 2654 const char *path, 2655 const svn_opt_revision_t *revision, 2656 svn_depth_t depth, 2657 svn_boolean_t get_all, 2658 svn_boolean_t update, 2659 svn_boolean_t no_ignore, 2660 svn_boolean_t ignore_externals, 2661 svn_boolean_t depth_as_sticky, 2662 const apr_array_header_t *changelists, 2663 svn_client_status_func_t status_func, 2664 void *status_baton, 2665 apr_pool_t *scratch_pool); 2666 2667/** 2668 * Same as svn_client_status5(), but using #svn_wc_status_func3_t 2669 * instead of #svn_client_status_func_t and depth_as_sticky set to TRUE. 2670 * 2671 * @since New in 1.6. 2672 * @deprecated Provided for backward compatibility with the 1.6 API. 2673 */ 2674SVN_DEPRECATED 2675svn_error_t * 2676svn_client_status4(svn_revnum_t *result_rev, 2677 const char *path, 2678 const svn_opt_revision_t *revision, 2679 svn_wc_status_func3_t status_func, 2680 void *status_baton, 2681 svn_depth_t depth, 2682 svn_boolean_t get_all, 2683 svn_boolean_t update, 2684 svn_boolean_t no_ignore, 2685 svn_boolean_t ignore_externals, 2686 const apr_array_header_t *changelists, 2687 svn_client_ctx_t *ctx, 2688 apr_pool_t *pool); 2689 2690/** 2691 * Same as svn_client_status4(), but using an #svn_wc_status_func2_t 2692 * instead of an #svn_wc_status_func3_t. 2693 * 2694 * @since New in 1.5. 2695 * @deprecated Provided for backward compatibility with the 1.5 API. 2696 */ 2697SVN_DEPRECATED 2698svn_error_t * 2699svn_client_status3(svn_revnum_t *result_rev, 2700 const char *path, 2701 const svn_opt_revision_t *revision, 2702 svn_wc_status_func2_t status_func, 2703 void *status_baton, 2704 svn_depth_t depth, 2705 svn_boolean_t get_all, 2706 svn_boolean_t update, 2707 svn_boolean_t no_ignore, 2708 svn_boolean_t ignore_externals, 2709 const apr_array_header_t *changelists, 2710 svn_client_ctx_t *ctx, 2711 apr_pool_t *pool); 2712 2713/** 2714 * Like svn_client_status3(), except with @a changelists passed as @c 2715 * NULL, and with @a recurse instead of @a depth. If @a recurse is 2716 * TRUE, behave as if for #svn_depth_infinity; else if @a recurse is 2717 * FALSE, behave as if for #svn_depth_immediates. 2718 * 2719 * @since New in 1.2. 2720 * @deprecated Provided for backward compatibility with the 1.4 API. 2721 */ 2722SVN_DEPRECATED 2723svn_error_t * 2724svn_client_status2(svn_revnum_t *result_rev, 2725 const char *path, 2726 const svn_opt_revision_t *revision, 2727 svn_wc_status_func2_t status_func, 2728 void *status_baton, 2729 svn_boolean_t recurse, 2730 svn_boolean_t get_all, 2731 svn_boolean_t update, 2732 svn_boolean_t no_ignore, 2733 svn_boolean_t ignore_externals, 2734 svn_client_ctx_t *ctx, 2735 apr_pool_t *pool); 2736 2737 2738/** 2739 * Similar to svn_client_status2(), but with @a ignore_externals 2740 * always set to FALSE, taking the #svn_wc_status_func_t type 2741 * instead of the #svn_wc_status_func2_t type for @a status_func, 2742 * and requiring @a *revision to be non-const even though it is 2743 * treated as constant. 2744 * 2745 * @deprecated Provided for backward compatibility with the 1.1 API. 2746 */ 2747SVN_DEPRECATED 2748svn_error_t * 2749svn_client_status(svn_revnum_t *result_rev, 2750 const char *path, 2751 svn_opt_revision_t *revision, 2752 svn_wc_status_func_t status_func, 2753 void *status_baton, 2754 svn_boolean_t recurse, 2755 svn_boolean_t get_all, 2756 svn_boolean_t update, 2757 svn_boolean_t no_ignore, 2758 svn_client_ctx_t *ctx, 2759 apr_pool_t *pool); 2760 2761/** @} */ 2762 2763/** 2764 * @defgroup Log View information about previous revisions of an object. 2765 * 2766 * @{ 2767 */ 2768 2769/** 2770 * Invoke @a receiver with @a receiver_baton on each log message from 2771 * each (#svn_opt_revision_range_t *) range in @a revision_ranges in turn, 2772 * inclusive (but never invoke @a receiver on a given log message more 2773 * than once). 2774 * 2775 * @a targets contains either a URL followed by zero or more relative 2776 * paths, or 1 working copy path, as <tt>const char *</tt>, for which log 2777 * messages are desired. @a receiver is invoked only on messages whose 2778 * revisions involved a change to some path in @a targets. @a peg_revision 2779 * indicates in which revision @a targets are valid. If @a peg_revision is 2780 * #svn_opt_revision_unspecified, it defaults to #svn_opt_revision_head 2781 * for URLs or #svn_opt_revision_working for WC paths. 2782 * 2783 * If @a limit is greater than zero only invoke @a receiver on the first 2784 * @a limit logs. 2785 * 2786 * If @a discover_changed_paths is set, then the @c changed_paths and @c 2787 * changed_paths2 fields in the @c log_entry argument to @a receiver will be 2788 * populated on each invocation. @note The @c text_modified and @c 2789 * props_modified fields of the changed paths structure may have the value 2790 * #svn_tristate_unknown if the repository does not report that information. 2791 * 2792 * If @a strict_node_history is set, copy history (if any exists) will 2793 * not be traversed while harvesting revision logs for each target. 2794 * 2795 * If @a include_merged_revisions is set, log information for revisions 2796 * which have been merged to @a targets will also be returned. 2797 * 2798 * If @a revprops is NULL, retrieve all revision properties; else, retrieve 2799 * only the revision properties named by the (const char *) array elements 2800 * (i.e. retrieve none if the array is empty). 2801 * 2802 * Use @a pool for any temporary allocation. 2803 * 2804 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2/baton2 2805 * with a 'skip' signal on any unversioned targets. 2806 * 2807 * @since New in 1.6. 2808 */ 2809svn_error_t * 2810svn_client_log5(const apr_array_header_t *targets, 2811 const svn_opt_revision_t *peg_revision, 2812 const apr_array_header_t *revision_ranges, 2813 int limit, 2814 svn_boolean_t discover_changed_paths, 2815 svn_boolean_t strict_node_history, 2816 svn_boolean_t include_merged_revisions, 2817 const apr_array_header_t *revprops, 2818 svn_log_entry_receiver_t receiver, 2819 void *receiver_baton, 2820 svn_client_ctx_t *ctx, 2821 apr_pool_t *pool); 2822 2823/** 2824 * Similar to svn_client_log5(), but takes explicit start and end parameters 2825 * instead of an array of revision ranges. 2826 * 2827 * @deprecated Provided for compatibility with the 1.5 API. 2828 * @since New in 1.5. 2829 */ 2830SVN_DEPRECATED 2831svn_error_t * 2832svn_client_log4(const apr_array_header_t *targets, 2833 const svn_opt_revision_t *peg_revision, 2834 const svn_opt_revision_t *start, 2835 const svn_opt_revision_t *end, 2836 int limit, 2837 svn_boolean_t discover_changed_paths, 2838 svn_boolean_t strict_node_history, 2839 svn_boolean_t include_merged_revisions, 2840 const apr_array_header_t *revprops, 2841 svn_log_entry_receiver_t receiver, 2842 void *receiver_baton, 2843 svn_client_ctx_t *ctx, 2844 apr_pool_t *pool); 2845 2846/** 2847 * Similar to svn_client_log4(), but using #svn_log_message_receiver_t 2848 * instead of #svn_log_entry_receiver_t. Also, @a 2849 * include_merged_revisions is set to @c FALSE and @a revprops is 2850 * svn:author, svn:date, and svn:log. 2851 * 2852 * @deprecated Provided for compatibility with the 1.4 API. 2853 * @since New in 1.4. 2854 */ 2855SVN_DEPRECATED 2856svn_error_t * 2857svn_client_log3(const apr_array_header_t *targets, 2858 const svn_opt_revision_t *peg_revision, 2859 const svn_opt_revision_t *start, 2860 const svn_opt_revision_t *end, 2861 int limit, 2862 svn_boolean_t discover_changed_paths, 2863 svn_boolean_t strict_node_history, 2864 svn_log_message_receiver_t receiver, 2865 void *receiver_baton, 2866 svn_client_ctx_t *ctx, 2867 apr_pool_t *pool); 2868 2869 2870/** 2871 * Similar to svn_client_log3(), but with the @c kind field of 2872 * @a peg_revision set to #svn_opt_revision_unspecified. 2873 * 2874 * @par Important: 2875 * A special case for the revision range HEAD:1, which was present 2876 * in svn_client_log(), has been removed from svn_client_log2(). Instead, it 2877 * is expected that callers will specify the range HEAD:0, to avoid a 2878 * #SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository 2879 * (i.e. one not containing a revision 1). 2880 * 2881 * @deprecated Provided for compatibility with the 1.3 API. 2882 * @since New in 1.2. 2883 */ 2884SVN_DEPRECATED 2885svn_error_t * 2886svn_client_log2(const apr_array_header_t *targets, 2887 const svn_opt_revision_t *start, 2888 const svn_opt_revision_t *end, 2889 int limit, 2890 svn_boolean_t discover_changed_paths, 2891 svn_boolean_t strict_node_history, 2892 svn_log_message_receiver_t receiver, 2893 void *receiver_baton, 2894 svn_client_ctx_t *ctx, 2895 apr_pool_t *pool); 2896 2897 2898/** 2899 * Similar to svn_client_log2(), but with @a limit set to 0, and the 2900 * following special case: 2901 * 2902 * Special case for repositories at revision 0: 2903 * 2904 * If @a start->kind is #svn_opt_revision_head, and @a end->kind is 2905 * #svn_opt_revision_number && @a end->number is @c 1, then handle an 2906 * empty (no revisions) repository specially: instead of erroring 2907 * because requested revision 1 when the highest revision is 0, just 2908 * invoke @a receiver on revision 0, passing @c NULL for changed paths and 2909 * empty strings for the author and date. This is because that 2910 * particular combination of @a start and @a end usually indicates the 2911 * common case of log invocation -- the user wants to see all log 2912 * messages from youngest to oldest, where the oldest commit is 2913 * revision 1. That works fine, except when there are no commits in 2914 * the repository, hence this special case. 2915 * 2916 * @deprecated Provided for backward compatibility with the 1.1 API. 2917 */ 2918SVN_DEPRECATED 2919svn_error_t * 2920svn_client_log(const apr_array_header_t *targets, 2921 const svn_opt_revision_t *start, 2922 const svn_opt_revision_t *end, 2923 svn_boolean_t discover_changed_paths, 2924 svn_boolean_t strict_node_history, 2925 svn_log_message_receiver_t receiver, 2926 void *receiver_baton, 2927 svn_client_ctx_t *ctx, 2928 apr_pool_t *pool); 2929 2930/** @} */ 2931 2932/** 2933 * @defgroup Blame Show modification information about lines in a file. 2934 * 2935 * @{ 2936 */ 2937 2938/** 2939 * Invoke @a receiver with @a receiver_baton on each line-blame item 2940 * associated with revision @a end of @a path_or_url, using @a start 2941 * as the default source of all blame. @a peg_revision indicates in 2942 * which revision @a path_or_url is valid. If @a peg_revision->kind 2943 * is #svn_opt_revision_unspecified, then it defaults to 2944 * #svn_opt_revision_head for URLs or #svn_opt_revision_working for 2945 * WC targets. 2946 * 2947 * If @a start->kind or @a end->kind is #svn_opt_revision_unspecified, 2948 * return the error #SVN_ERR_CLIENT_BAD_REVISION. If either are 2949 * #svn_opt_revision_working, return the error 2950 * #SVN_ERR_UNSUPPORTED_FEATURE. If any of the revisions of @a 2951 * path_or_url have a binary mime-type, return the error 2952 * #SVN_ERR_CLIENT_IS_BINARY_FILE, unless @a ignore_mime_type is TRUE, 2953 * in which case blame information will be generated regardless of the 2954 * MIME types of the revisions. 2955 * 2956 * @a start may resolve to a revision number greater (younger) than @a end 2957 * only if the server is 1.8.0 or greater (supports 2958 * #SVN_RA_CAPABILITY_GET_FILE_REVS_REVERSE) and the client is 1.9.0 or 2959 * newer. 2960 * 2961 * Before the first call to @a receiver, set @a *start_revnum_p and 2962 * @a *end_revnum_p to the start and end revision number of the entire 2963 * blame operation, as resolved from the repository. This can be useful 2964 * for the blame receiver to format the blame output. Any or both of these 2965 * arguments may be @c NULL. 2966 * 2967 * Use @a diff_options to determine how to compare different revisions of the 2968 * target. 2969 * 2970 * If @a include_merged_revisions is TRUE, also return data based upon 2971 * revisions which have been merged to @a path_or_url. 2972 * 2973 * Use @a pool for any temporary allocation. 2974 * 2975 * @since New in 1.12. 2976 */ 2977svn_error_t * 2978svn_client_blame6(svn_revnum_t *start_revnum_p, 2979 svn_revnum_t *end_revnum_p, 2980 const char *path_or_url, 2981 const svn_opt_revision_t *peg_revision, 2982 const svn_opt_revision_t *start, 2983 const svn_opt_revision_t *end, 2984 const svn_diff_file_options_t *diff_options, 2985 svn_boolean_t ignore_mime_type, 2986 svn_boolean_t include_merged_revisions, 2987 svn_client_blame_receiver4_t receiver, 2988 void *receiver_baton, 2989 svn_client_ctx_t *ctx, 2990 apr_pool_t *pool); 2991 2992 2993/** 2994 * Similar to svn_client_blame6(), but with #svn_client_blame_receiver3_t 2995 * as the receiver. 2996 * 2997 * @deprecated Provided for backwards compatibility with the 1.11 API. 2998 * 2999 * @since New in 1.7. 3000 */ 3001SVN_DEPRECATED 3002svn_error_t * 3003svn_client_blame5(const char *path_or_url, 3004 const svn_opt_revision_t *peg_revision, 3005 const svn_opt_revision_t *start, 3006 const svn_opt_revision_t *end, 3007 const svn_diff_file_options_t *diff_options, 3008 svn_boolean_t ignore_mime_type, 3009 svn_boolean_t include_merged_revisions, 3010 svn_client_blame_receiver3_t receiver, 3011 void *receiver_baton, 3012 svn_client_ctx_t *ctx, 3013 apr_pool_t *pool); 3014 3015/** 3016 * Similar to svn_client_blame5(), but with #svn_client_blame_receiver2_t 3017 * as the receiver. 3018 * 3019 * @deprecated Provided for backwards compatibility with the 1.6 API. 3020 * 3021 * @since New in 1.5. 3022 */ 3023SVN_DEPRECATED 3024svn_error_t * 3025svn_client_blame4(const char *path_or_url, 3026 const svn_opt_revision_t *peg_revision, 3027 const svn_opt_revision_t *start, 3028 const svn_opt_revision_t *end, 3029 const svn_diff_file_options_t *diff_options, 3030 svn_boolean_t ignore_mime_type, 3031 svn_boolean_t include_merged_revisions, 3032 svn_client_blame_receiver2_t receiver, 3033 void *receiver_baton, 3034 svn_client_ctx_t *ctx, 3035 apr_pool_t *pool); 3036 3037/** 3038 * Similar to svn_client_blame4(), but with @a include_merged_revisions set 3039 * to FALSE, and using a #svn_client_blame_receiver2_t as the receiver. 3040 * 3041 * @deprecated Provided for backwards compatibility with the 1.4 API. 3042 * 3043 * @since New in 1.4. 3044 */ 3045SVN_DEPRECATED 3046svn_error_t * 3047svn_client_blame3(const char *path_or_url, 3048 const svn_opt_revision_t *peg_revision, 3049 const svn_opt_revision_t *start, 3050 const svn_opt_revision_t *end, 3051 const svn_diff_file_options_t *diff_options, 3052 svn_boolean_t ignore_mime_type, 3053 svn_client_blame_receiver_t receiver, 3054 void *receiver_baton, 3055 svn_client_ctx_t *ctx, 3056 apr_pool_t *pool); 3057 3058/** 3059 * Similar to svn_client_blame3(), but with @a diff_options set to 3060 * default options as returned by svn_diff_file_options_parse() and 3061 * @a ignore_mime_type set to FALSE. 3062 * 3063 * @deprecated Provided for backwards compatibility with the 1.3 API. 3064 * 3065 * @since New in 1.2. 3066 */ 3067SVN_DEPRECATED 3068svn_error_t * 3069svn_client_blame2(const char *path_or_url, 3070 const svn_opt_revision_t *peg_revision, 3071 const svn_opt_revision_t *start, 3072 const svn_opt_revision_t *end, 3073 svn_client_blame_receiver_t receiver, 3074 void *receiver_baton, 3075 svn_client_ctx_t *ctx, 3076 apr_pool_t *pool); 3077 3078/** 3079 * Similar to svn_client_blame2() except that @a peg_revision is always 3080 * the same as @a end. 3081 * 3082 * @deprecated Provided for backward compatibility with the 1.1 API. 3083 */ 3084SVN_DEPRECATED 3085svn_error_t * 3086svn_client_blame(const char *path_or_url, 3087 const svn_opt_revision_t *start, 3088 const svn_opt_revision_t *end, 3089 svn_client_blame_receiver_t receiver, 3090 void *receiver_baton, 3091 svn_client_ctx_t *ctx, 3092 apr_pool_t *pool); 3093 3094/** @} */ 3095 3096/** 3097 * @defgroup Diff Generate differences between paths. 3098 * 3099 * @{ 3100 */ 3101 3102/** 3103 * Produce diff output which describes the delta between 3104 * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2. Print 3105 * the output of the diff to @a outstream, and any errors to @a 3106 * errstream. @a path_or_url1 and @a path_or_url2 can be either 3107 * working-copy paths or URLs. 3108 * 3109 * If @a relative_to_dir is not @c NULL, the original path and 3110 * modified path will have the @a relative_to_dir stripped from the 3111 * front of the respective paths. If @a relative_to_dir is @c NULL, 3112 * paths will not be modified. If @a relative_to_dir is not 3113 * @c NULL but @a relative_to_dir is not a parent path of the target, 3114 * an error is returned. Finally, if @a relative_to_dir is a URL, an 3115 * error will be returned. 3116 * 3117 * If either @a revision1 or @a revision2 has an `unspecified' or 3118 * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION. 3119 * 3120 * @a path_or_url1 and @a path_or_url2 must both represent the same node 3121 * kind -- that is, if @a path_or_url1 is a directory, @a path_or_url2 3122 * must also be, and if @a path_or_url1 is a file, @a path_or_url2 must 3123 * also be. 3124 * 3125 * If @a depth is #svn_depth_infinity, diff fully recursively. 3126 * Else if it is #svn_depth_immediates, diff the named paths and 3127 * their file children (if any), and diff properties of 3128 * subdirectories, but do not descend further into the subdirectories. 3129 * Else if #svn_depth_files, behave as if for #svn_depth_immediates 3130 * except don't diff properties of subdirectories. If 3131 * #svn_depth_empty, diff exactly the named paths but nothing 3132 * underneath them. 3133 * 3134 * Use @a ignore_ancestry to control whether or not items being 3135 * diffed will be checked for relatedness first. Unrelated items 3136 * are typically transmitted to the editor as a deletion of one thing 3137 * and the addition of another, but if this flag is TRUE, unrelated 3138 * items will be diffed as if they were related. 3139 * 3140 * If @a no_diff_added is TRUE, then no diff output will be generated 3141 * on added files. 3142 * 3143 * If @a no_diff_deleted is TRUE, then no diff output will be 3144 * generated on deleted files. 3145 * 3146 * If @a show_copies_as_adds is TRUE, then copied files will not be diffed 3147 * against their copyfrom source, and will appear in the diff output 3148 * in their entirety, as if they were newly added. 3149 * ### BUGS: For a repos-repos diff, this is ignored. Instead, a file is 3150 * diffed against its copyfrom source iff the file is the diff target 3151 * and not if some parent directory is the diff target. For a repos-WC 3152 * diff, this is ignored if the file is the diff target. 3153 * 3154 * If @a use_git_diff_format is TRUE, then the git's extended diff format 3155 * will be used. 3156 * ### Do we need to say more about the format? A reference perhaps? 3157 * 3158 * If @a ignore_properties is TRUE, do not show property differences. 3159 * If @a properties_only is TRUE, show only property changes. 3160 * The above two options are mutually exclusive. It is an error to set 3161 * both to TRUE. 3162 * 3163 * If @a pretty_print_mergeinfo is true, then describe 'svn:mergeinfo' 3164 * property changes in a human-readable form that says what changes were 3165 * merged or reverse merged; otherwise (or if the mergeinfo property values 3166 * don't parse correctly) display them just like any other property. 3167 * 3168 * Generated headers are encoded using @a header_encoding. 3169 * 3170 * If either side has an svn:mime-type property that indicates 'binary' 3171 * content, then if @a ignore_content_type is set, attempt to produce the 3172 * diff in the usual way, otherwise produce a 'GIT binary diff' in git mode 3173 * or print a warning message in non-git mode. 3174 * 3175 * @a diff_options (an array of <tt>const char *</tt>) is used to pass 3176 * additional command line options to the diff processes invoked to compare 3177 * files. @a diff_options is allowed to be @c NULL, in which case a value 3178 * for this option might still be obtained from the Subversion configuration 3179 * file via client context @a ctx. 3180 * 3181 * The authentication baton cached in @a ctx is used to communicate with 3182 * the repository. 3183 * 3184 * @a changelists is an array of <tt>const char *</tt> changelist 3185 * names, used as a restrictive filter on items whose differences are 3186 * reported; that is, don't generate diffs about any item unless 3187 * it's a member of one of those changelists. If @a changelists is 3188 * empty (or altogether @c NULL), no changelist filtering occurs. 3189 * 3190 * @note Changelist filtering only applies to diffs in which at least 3191 * one side of the diff represents working copy data. 3192 * 3193 * @note @a header_encoding doesn't affect headers generated by external 3194 * diff programs. 3195 * 3196 * @note @a relative_to_dir doesn't affect the path index generated by 3197 * external diff programs. 3198 * 3199 * @since New in 1.11. 3200 */ 3201svn_error_t * 3202svn_client_diff7(const apr_array_header_t *diff_options, 3203 const char *path_or_url1, 3204 const svn_opt_revision_t *revision1, 3205 const char *path_or_url2, 3206 const svn_opt_revision_t *revision2, 3207 const char *relative_to_dir, 3208 svn_depth_t depth, 3209 svn_boolean_t ignore_ancestry, 3210 svn_boolean_t no_diff_added, 3211 svn_boolean_t no_diff_deleted, 3212 svn_boolean_t show_copies_as_adds, 3213 svn_boolean_t ignore_content_type, 3214 svn_boolean_t ignore_properties, 3215 svn_boolean_t properties_only, 3216 svn_boolean_t use_git_diff_format, 3217 svn_boolean_t pretty_print_mergeinfo, 3218 const char *header_encoding, 3219 svn_stream_t *outstream, 3220 svn_stream_t *errstream, 3221 const apr_array_header_t *changelists, 3222 svn_client_ctx_t *ctx, 3223 apr_pool_t *pool); 3224 3225/** Similar to svn_client_diff7(), but with @a pretty_print_mergeinfo 3226 * always passed as @c TRUE. 3227 * 3228 * @deprecated Provided for backward compatibility with the 1.10 API. 3229 * @since New in 1.8. 3230 */ 3231SVN_DEPRECATED 3232svn_error_t * 3233svn_client_diff6(const apr_array_header_t *diff_options, 3234 const char *path_or_url1, 3235 const svn_opt_revision_t *revision1, 3236 const char *path_or_url2, 3237 const svn_opt_revision_t *revision2, 3238 const char *relative_to_dir, 3239 svn_depth_t depth, 3240 svn_boolean_t ignore_ancestry, 3241 svn_boolean_t no_diff_added, 3242 svn_boolean_t no_diff_deleted, 3243 svn_boolean_t show_copies_as_adds, 3244 svn_boolean_t ignore_content_type, 3245 svn_boolean_t ignore_properties, 3246 svn_boolean_t properties_only, 3247 svn_boolean_t use_git_diff_format, 3248 const char *header_encoding, 3249 svn_stream_t *outstream, 3250 svn_stream_t *errstream, 3251 const apr_array_header_t *changelists, 3252 svn_client_ctx_t *ctx, 3253 apr_pool_t *pool); 3254 3255/** Similar to svn_client_diff6(), but with @a outfile and @a errfile, 3256 * instead of @a outstream and @a errstream, and with @a 3257 * no_diff_added, @a ignore_properties, and @a properties_only always 3258 * passed as @c FALSE (which means that additions and property changes 3259 * are always transmitted). 3260 * 3261 * @deprecated Provided for backward compatibility with the 1.7 API. 3262 * @since New in 1.7. 3263 */ 3264SVN_DEPRECATED 3265svn_error_t * 3266svn_client_diff5(const apr_array_header_t *diff_options, 3267 const char *path1, 3268 const svn_opt_revision_t *revision1, 3269 const char *path2, 3270 const svn_opt_revision_t *revision2, 3271 const char *relative_to_dir, 3272 svn_depth_t depth, 3273 svn_boolean_t ignore_ancestry, 3274 svn_boolean_t no_diff_deleted, 3275 svn_boolean_t show_copies_as_adds, 3276 svn_boolean_t ignore_content_type, 3277 svn_boolean_t use_git_diff_format, 3278 const char *header_encoding, 3279 apr_file_t *outfile, 3280 apr_file_t *errfile, 3281 const apr_array_header_t *changelists, 3282 svn_client_ctx_t *ctx, 3283 apr_pool_t *pool); 3284 3285/** 3286 * Similar to svn_client_diff5(), but with @a show_copies_as_adds set to 3287 * @c FALSE and @a use_git_diff_format set to @c FALSE. 3288 * 3289 * @deprecated Provided for backward compatibility with the 1.6 API. 3290 * @since New in 1.5. 3291 */ 3292SVN_DEPRECATED 3293svn_error_t * 3294svn_client_diff4(const apr_array_header_t *diff_options, 3295 const char *path1, 3296 const svn_opt_revision_t *revision1, 3297 const char *path2, 3298 const svn_opt_revision_t *revision2, 3299 const char *relative_to_dir, 3300 svn_depth_t depth, 3301 svn_boolean_t ignore_ancestry, 3302 svn_boolean_t no_diff_deleted, 3303 svn_boolean_t ignore_content_type, 3304 const char *header_encoding, 3305 apr_file_t *outfile, 3306 apr_file_t *errfile, 3307 const apr_array_header_t *changelists, 3308 svn_client_ctx_t *ctx, 3309 apr_pool_t *pool); 3310 3311/** 3312 * Similar to svn_client_diff4(), but with @a changelists passed as @c 3313 * NULL, and @a depth set according to @a recurse: if @a recurse is 3314 * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 3315 * FALSE, set @a depth to #svn_depth_empty. 3316 * 3317 * @deprecated Provided for backward compatibility with the 1.4 API. 3318 * @since New in 1.3. 3319 */ 3320SVN_DEPRECATED 3321svn_error_t * 3322svn_client_diff3(const apr_array_header_t *diff_options, 3323 const char *path1, 3324 const svn_opt_revision_t *revision1, 3325 const char *path2, 3326 const svn_opt_revision_t *revision2, 3327 svn_boolean_t recurse, 3328 svn_boolean_t ignore_ancestry, 3329 svn_boolean_t no_diff_deleted, 3330 svn_boolean_t ignore_content_type, 3331 const char *header_encoding, 3332 apr_file_t *outfile, 3333 apr_file_t *errfile, 3334 svn_client_ctx_t *ctx, 3335 apr_pool_t *pool); 3336 3337 3338/** 3339 * Similar to svn_client_diff3(), but with @a header_encoding set to 3340 * @c APR_LOCALE_CHARSET. 3341 * 3342 * @deprecated Provided for backward compatibility with the 1.2 API. 3343 * @since New in 1.2. 3344 */ 3345SVN_DEPRECATED 3346svn_error_t * 3347svn_client_diff2(const apr_array_header_t *diff_options, 3348 const char *path1, 3349 const svn_opt_revision_t *revision1, 3350 const char *path2, 3351 const svn_opt_revision_t *revision2, 3352 svn_boolean_t recurse, 3353 svn_boolean_t ignore_ancestry, 3354 svn_boolean_t no_diff_deleted, 3355 svn_boolean_t ignore_content_type, 3356 apr_file_t *outfile, 3357 apr_file_t *errfile, 3358 svn_client_ctx_t *ctx, 3359 apr_pool_t *pool); 3360 3361/** 3362 * Similar to svn_client_diff2(), but with @a ignore_content_type 3363 * always set to FALSE. 3364 * 3365 * @deprecated Provided for backward compatibility with the 1.1 API. 3366 */ 3367SVN_DEPRECATED 3368svn_error_t * 3369svn_client_diff(const apr_array_header_t *diff_options, 3370 const char *path1, 3371 const svn_opt_revision_t *revision1, 3372 const char *path2, 3373 const svn_opt_revision_t *revision2, 3374 svn_boolean_t recurse, 3375 svn_boolean_t ignore_ancestry, 3376 svn_boolean_t no_diff_deleted, 3377 apr_file_t *outfile, 3378 apr_file_t *errfile, 3379 svn_client_ctx_t *ctx, 3380 apr_pool_t *pool); 3381 3382/** 3383 * Produce diff output which describes the delta between the filesystem 3384 * object @a path_or_url in peg revision @a peg_revision, as it changed 3385 * between @a start_revision and @a end_revision. @a path_or_url can 3386 * be either a working-copy path or URL. 3387 * 3388 * If @a peg_revision is #svn_opt_revision_unspecified, behave 3389 * identically to svn_client_diff7(), using @a path_or_url for both of that 3390 * function's @a path_or_url1 and @a path_or_url2 arguments. 3391 * 3392 * All other options are handled identically to svn_client_diff7(). 3393 * 3394 * @since New in 1.8. 3395 */ 3396svn_error_t * 3397svn_client_diff_peg7(const apr_array_header_t *diff_options, 3398 const char *path_or_url, 3399 const svn_opt_revision_t *peg_revision, 3400 const svn_opt_revision_t *start_revision, 3401 const svn_opt_revision_t *end_revision, 3402 const char *relative_to_dir, 3403 svn_depth_t depth, 3404 svn_boolean_t ignore_ancestry, 3405 svn_boolean_t no_diff_added, 3406 svn_boolean_t no_diff_deleted, 3407 svn_boolean_t show_copies_as_adds, 3408 svn_boolean_t ignore_content_type, 3409 svn_boolean_t ignore_properties, 3410 svn_boolean_t properties_only, 3411 svn_boolean_t use_git_diff_format, 3412 svn_boolean_t pretty_print_mergeinfo, 3413 const char *header_encoding, 3414 svn_stream_t *outstream, 3415 svn_stream_t *errstream, 3416 const apr_array_header_t *changelists, 3417 svn_client_ctx_t *ctx, 3418 apr_pool_t *pool); 3419 3420/** Similar to svn_client_diff_peg7(), but with @a pretty_print_mergeinfo 3421 * always passed as @c TRUE. 3422 * 3423 * @deprecated Provided for backward compatibility with the 1.7 API. 3424 * @since New in 1.7. 3425 */ 3426SVN_DEPRECATED 3427svn_error_t * 3428svn_client_diff_peg6(const apr_array_header_t *diff_options, 3429 const char *path_or_url, 3430 const svn_opt_revision_t *peg_revision, 3431 const svn_opt_revision_t *start_revision, 3432 const svn_opt_revision_t *end_revision, 3433 const char *relative_to_dir, 3434 svn_depth_t depth, 3435 svn_boolean_t ignore_ancestry, 3436 svn_boolean_t no_diff_added, 3437 svn_boolean_t no_diff_deleted, 3438 svn_boolean_t show_copies_as_adds, 3439 svn_boolean_t ignore_content_type, 3440 svn_boolean_t ignore_properties, 3441 svn_boolean_t properties_only, 3442 svn_boolean_t use_git_diff_format, 3443 const char *header_encoding, 3444 svn_stream_t *outstream, 3445 svn_stream_t *errstream, 3446 const apr_array_header_t *changelists, 3447 svn_client_ctx_t *ctx, 3448 apr_pool_t *pool); 3449 3450/** Similar to svn_client_diff6_peg6(), but with @a outfile and @a errfile, 3451 * instead of @a outstream and @a errstream, and with @a 3452 * no_diff_added, @a ignore_properties, and @a properties_only always 3453 * passed as @c FALSE (which means that additions and property changes 3454 * are always transmitted). 3455 * 3456 * @deprecated Provided for backward compatibility with the 1.7 API. 3457 * @since New in 1.7. 3458 */ 3459SVN_DEPRECATED 3460svn_error_t * 3461svn_client_diff_peg5(const apr_array_header_t *diff_options, 3462 const char *path, 3463 const svn_opt_revision_t *peg_revision, 3464 const svn_opt_revision_t *start_revision, 3465 const svn_opt_revision_t *end_revision, 3466 const char *relative_to_dir, 3467 svn_depth_t depth, 3468 svn_boolean_t ignore_ancestry, 3469 svn_boolean_t no_diff_deleted, 3470 svn_boolean_t show_copies_as_adds, 3471 svn_boolean_t ignore_content_type, 3472 svn_boolean_t use_git_diff_format, 3473 const char *header_encoding, 3474 apr_file_t *outfile, 3475 apr_file_t *errfile, 3476 const apr_array_header_t *changelists, 3477 svn_client_ctx_t *ctx, 3478 apr_pool_t *pool); 3479 3480/** 3481 * Similar to svn_client_diff_peg5(), but with @a show_copies_as_adds set to 3482 * @c FALSE and @a use_git_diff_format set to @c FALSE. 3483 * 3484 * @since New in 1.5. 3485 * @deprecated Provided for backward compatibility with the 1.6 API. 3486 */ 3487SVN_DEPRECATED 3488svn_error_t * 3489svn_client_diff_peg4(const apr_array_header_t *diff_options, 3490 const char *path, 3491 const svn_opt_revision_t *peg_revision, 3492 const svn_opt_revision_t *start_revision, 3493 const svn_opt_revision_t *end_revision, 3494 const char *relative_to_dir, 3495 svn_depth_t depth, 3496 svn_boolean_t ignore_ancestry, 3497 svn_boolean_t no_diff_deleted, 3498 svn_boolean_t ignore_content_type, 3499 const char *header_encoding, 3500 apr_file_t *outfile, 3501 apr_file_t *errfile, 3502 const apr_array_header_t *changelists, 3503 svn_client_ctx_t *ctx, 3504 apr_pool_t *pool); 3505 3506/** 3507 * Similar to svn_client_diff_peg4(), but with @a changelists passed 3508 * as @c NULL, and @a depth set according to @a recurse: if @a recurse 3509 * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 3510 * FALSE, set @a depth to #svn_depth_files. 3511 * 3512 * @deprecated Provided for backward compatibility with the 1.4 API. 3513 * @since New in 1.3. 3514 */ 3515SVN_DEPRECATED 3516svn_error_t * 3517svn_client_diff_peg3(const apr_array_header_t *diff_options, 3518 const char *path, 3519 const svn_opt_revision_t *peg_revision, 3520 const svn_opt_revision_t *start_revision, 3521 const svn_opt_revision_t *end_revision, 3522 svn_boolean_t recurse, 3523 svn_boolean_t ignore_ancestry, 3524 svn_boolean_t no_diff_deleted, 3525 svn_boolean_t ignore_content_type, 3526 const char *header_encoding, 3527 apr_file_t *outfile, 3528 apr_file_t *errfile, 3529 svn_client_ctx_t *ctx, 3530 apr_pool_t *pool); 3531 3532/** 3533 * Similar to svn_client_diff_peg3(), but with @a header_encoding set to 3534 * @c APR_LOCALE_CHARSET. 3535 * 3536 * @deprecated Provided for backward compatibility with the 1.2 API. 3537 * @since New in 1.2. 3538 */ 3539SVN_DEPRECATED 3540svn_error_t * 3541svn_client_diff_peg2(const apr_array_header_t *diff_options, 3542 const char *path, 3543 const svn_opt_revision_t *peg_revision, 3544 const svn_opt_revision_t *start_revision, 3545 const svn_opt_revision_t *end_revision, 3546 svn_boolean_t recurse, 3547 svn_boolean_t ignore_ancestry, 3548 svn_boolean_t no_diff_deleted, 3549 svn_boolean_t ignore_content_type, 3550 apr_file_t *outfile, 3551 apr_file_t *errfile, 3552 svn_client_ctx_t *ctx, 3553 apr_pool_t *pool); 3554 3555/** 3556 * Similar to svn_client_diff_peg2(), but with @a ignore_content_type 3557 * always set to FALSE. 3558 * 3559 * @since New in 1.1. 3560 * @deprecated Provided for backward compatibility with the 1.1 API. 3561 */ 3562SVN_DEPRECATED 3563svn_error_t * 3564svn_client_diff_peg(const apr_array_header_t *diff_options, 3565 const char *path, 3566 const svn_opt_revision_t *peg_revision, 3567 const svn_opt_revision_t *start_revision, 3568 const svn_opt_revision_t *end_revision, 3569 svn_boolean_t recurse, 3570 svn_boolean_t ignore_ancestry, 3571 svn_boolean_t no_diff_deleted, 3572 apr_file_t *outfile, 3573 apr_file_t *errfile, 3574 svn_client_ctx_t *ctx, 3575 apr_pool_t *pool); 3576 3577/** 3578 * Produce a diff summary which lists the changed items between 3579 * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2 without 3580 * creating text deltas. @a path_or_url1 and @a path_or_url2 can be 3581 * either working-copy paths or URLs. 3582 * 3583 * The function may report false positives if @a ignore_ancestry is false, 3584 * since a file might have been modified between two revisions, but still 3585 * have the same contents. 3586 * 3587 * Calls @a summarize_func with @a summarize_baton for each difference 3588 * with a #svn_client_diff_summarize_t structure describing the difference. 3589 * 3590 * See svn_client_diff7() for a description of the other parameters. 3591 * 3592 * @since New in 1.5. 3593 */ 3594svn_error_t * 3595svn_client_diff_summarize2(const char *path_or_url1, 3596 const svn_opt_revision_t *revision1, 3597 const char *path_or_url2, 3598 const svn_opt_revision_t *revision2, 3599 svn_depth_t depth, 3600 svn_boolean_t ignore_ancestry, 3601 const apr_array_header_t *changelists, 3602 svn_client_diff_summarize_func_t summarize_func, 3603 void *summarize_baton, 3604 svn_client_ctx_t *ctx, 3605 apr_pool_t *pool); 3606 3607/** 3608 * Similar to svn_client_diff_summarize2(), but with @a changelists 3609 * passed as @c NULL, and @a depth set according to @a recurse: if @a 3610 * recurse is TRUE, set @a depth to #svn_depth_infinity, if @a 3611 * recurse is FALSE, set @a depth to #svn_depth_files. 3612 * 3613 * @deprecated Provided for backward compatibility with the 1.4 API. 3614 * 3615 * @since New in 1.4. 3616 */ 3617SVN_DEPRECATED 3618svn_error_t * 3619svn_client_diff_summarize(const char *path1, 3620 const svn_opt_revision_t *revision1, 3621 const char *path2, 3622 const svn_opt_revision_t *revision2, 3623 svn_boolean_t recurse, 3624 svn_boolean_t ignore_ancestry, 3625 svn_client_diff_summarize_func_t summarize_func, 3626 void *summarize_baton, 3627 svn_client_ctx_t *ctx, 3628 apr_pool_t *pool); 3629 3630/** 3631 * Produce a diff summary which lists the changed items between the 3632 * filesystem object @a path_or_url in peg revision @a peg_revision, as it 3633 * changed between @a start_revision and @a end_revision. @a path_or_url can 3634 * be either a working-copy path or URL. 3635 * 3636 * If @a peg_revision is #svn_opt_revision_unspecified, behave 3637 * identically to svn_client_diff_summarize2(), using @a path_or_url for 3638 * both of that function's @a path_or_url1 and @a path_or_url2 arguments. 3639 * 3640 * The function may report false positives if @a ignore_ancestry is false, 3641 * as described in the documentation for svn_client_diff_summarize2(). 3642 * 3643 * Call @a summarize_func with @a summarize_baton for each difference 3644 * with a #svn_client_diff_summarize_t structure describing the difference. 3645 * 3646 * See svn_client_diff_peg5() for a description of the other parameters. 3647 * 3648 * @since New in 1.5. 3649 */ 3650svn_error_t * 3651svn_client_diff_summarize_peg2(const char *path_or_url, 3652 const svn_opt_revision_t *peg_revision, 3653 const svn_opt_revision_t *start_revision, 3654 const svn_opt_revision_t *end_revision, 3655 svn_depth_t depth, 3656 svn_boolean_t ignore_ancestry, 3657 const apr_array_header_t *changelists, 3658 svn_client_diff_summarize_func_t summarize_func, 3659 void *summarize_baton, 3660 svn_client_ctx_t *ctx, 3661 apr_pool_t *pool); 3662 3663/** 3664 * Similar to svn_client_diff_summarize_peg2(), but with @a 3665 * changelists passed as @c NULL, and @a depth set according to @a 3666 * recurse: if @a recurse is TRUE, set @a depth to 3667 * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to 3668 * #svn_depth_files. 3669 * 3670 * @deprecated Provided for backward compatibility with the 1.4 API. 3671 * 3672 * @since New in 1.4. 3673 */ 3674SVN_DEPRECATED 3675svn_error_t * 3676svn_client_diff_summarize_peg(const char *path, 3677 const svn_opt_revision_t *peg_revision, 3678 const svn_opt_revision_t *start_revision, 3679 const svn_opt_revision_t *end_revision, 3680 svn_boolean_t recurse, 3681 svn_boolean_t ignore_ancestry, 3682 svn_client_diff_summarize_func_t summarize_func, 3683 void *summarize_baton, 3684 svn_client_ctx_t *ctx, 3685 apr_pool_t *pool); 3686 3687/** @} */ 3688 3689/** 3690 * @defgroup Merge Merge changes between branches. 3691 * 3692 * @{ 3693 */ 3694 3695/** Get information about the state of merging between two branches. 3696 * 3697 * The source is specified by @a source_path_or_url at @a source_revision. 3698 * The target is specified by @a target_path_or_url at @a target_revision, 3699 * which refers to either a WC or a repository location. 3700 * 3701 * Set @a *needs_reintegration to true if an automatic merge from source 3702 * to target would be a reintegration merge: that is, if the last automatic 3703 * merge was in the opposite direction; or to false otherwise. 3704 * 3705 * Set @a *yca_url, @a *yca_rev, @a *base_url, @a *base_rev, @a *right_url, 3706 * @a *right_rev, @a *target_url, @a *target_rev to the repository locations 3707 * of, respectively: the youngest common ancestor of the branches, the base 3708 * chosen for 3-way merge, the right-hand side of the source diff, and the 3709 * target. 3710 * 3711 * Set @a repos_root_url to the URL of the repository root. This is a 3712 * common prefix of all four URL outputs. 3713 * 3714 * Allocate the results in @a result_pool. Any of the output pointers may 3715 * be NULL if not wanted. 3716 * 3717 * @since New in 1.8. 3718 */ 3719svn_error_t * 3720svn_client_get_merging_summary(svn_boolean_t *needs_reintegration, 3721 const char **yca_url, svn_revnum_t *yca_rev, 3722 const char **base_url, svn_revnum_t *base_rev, 3723 const char **right_url, svn_revnum_t *right_rev, 3724 const char **target_url, svn_revnum_t *target_rev, 3725 const char **repos_root_url, 3726 const char *source_path_or_url, 3727 const svn_opt_revision_t *source_revision, 3728 const char *target_path_or_url, 3729 const svn_opt_revision_t *target_revision, 3730 svn_client_ctx_t *ctx, 3731 apr_pool_t *result_pool, 3732 apr_pool_t *scratch_pool); 3733 3734 3735/** Merge changes from @a source1/@a revision1 to @a source2/@a revision2 into 3736 * the working-copy path @a target_wcpath. 3737 * 3738 * @a source1 and @a source2 are either URLs that refer to entries in the 3739 * repository, or paths to entries in the working copy. 3740 * 3741 * By "merging", we mean: apply file differences using 3742 * svn_wc_merge(), and schedule additions & deletions when appropriate. 3743 * 3744 * @a source1 and @a source2 must both represent the same node kind -- that 3745 * is, if @a source1 is a directory, @a source2 must also be, and if @a source1 3746 * is a file, @a source2 must also be. 3747 * 3748 * If either @a revision1 or @a revision2 has an `unspecified' or 3749 * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION. 3750 * 3751 * If @a depth is #svn_depth_infinity, merge fully recursively. 3752 * Else if #svn_depth_immediates, merge changes at most to files 3753 * that are immediate children of @a target_wcpath and to directory 3754 * properties of @a target_wcpath and its immediate subdirectory children. 3755 * Else if #svn_depth_files, merge at most to immediate file 3756 * children of @a target_wcpath and to @a target_wcpath itself. 3757 * Else if #svn_depth_empty, apply changes only to @a target_wcpath 3758 * (i.e., directory property changes only) 3759 * 3760 * If @a depth is #svn_depth_unknown, use the depth of @a target_wcpath. 3761 * 3762 * If @a ignore_mergeinfo is true, disable merge tracking, by treating the 3763 * two sources as unrelated even if they actually have a common ancestor. 3764 * 3765 * If @a diff_ignore_ancestry is true, diff unrelated nodes as if related: 3766 * that is, diff the 'left' and 'right' versions of a node as if they were 3767 * related (if they are the same kind) even if they are not related. 3768 * Otherwise, diff unrelated items as a deletion of one thing and the 3769 * addition of another. 3770 * 3771 * If @a force_delete is false and the merge involves deleting a file whose 3772 * content differs from the source-left version, or a locally modified 3773 * directory, or an unversioned item, then the operation will fail. If 3774 * @a force_delete is true then all such items will be deleted. 3775 * 3776 * @a merge_options (an array of <tt>const char *</tt>), if non-NULL, 3777 * is used to pass additional command line arguments to the merge 3778 * processes (internal or external). @see 3779 * svn_diff_file_options_parse(). 3780 * 3781 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with @a 3782 * ctx->notify_baton2 once for each merged target, passing the target's local 3783 * path. 3784 * 3785 * If @a record_only is TRUE, the merge is performed, but is limited only to 3786 * mergeinfo property changes on existing paths in @a target_wcpath. 3787 * 3788 * If @a dry_run is TRUE, the merge is carried out, and full notification 3789 * feedback is provided, but the working copy is not modified. 3790 * 3791 * If allow_mixed_rev is @c FALSE, and @a merge_target is a mixed-revision 3792 * working copy, raise @c SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED. 3793 * Because users rarely intend to merge into mixed-revision working copies, 3794 * it is recommended to set this parameter to FALSE by default unless the 3795 * user has explicitly requested a merge into a mixed-revision working copy. 3796 * 3797 * The authentication baton cached in @a ctx is used to communicate with the 3798 * repository. 3799 * 3800 * @since New in 1.8. 3801 */ 3802svn_error_t * 3803svn_client_merge5(const char *source1, 3804 const svn_opt_revision_t *revision1, 3805 const char *source2, 3806 const svn_opt_revision_t *revision2, 3807 const char *target_wcpath, 3808 svn_depth_t depth, 3809 svn_boolean_t ignore_mergeinfo, 3810 svn_boolean_t diff_ignore_ancestry, 3811 svn_boolean_t force_delete, 3812 svn_boolean_t record_only, 3813 svn_boolean_t dry_run, 3814 svn_boolean_t allow_mixed_rev, 3815 const apr_array_header_t *merge_options, 3816 svn_client_ctx_t *ctx, 3817 apr_pool_t *pool); 3818 3819/** 3820 * Similar to svn_client_merge5(), but the single @a ignore_ancestry 3821 * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry. 3822 * 3823 * @deprecated Provided for backward compatibility with the 1.7 API. 3824 * @since New in 1.7. 3825 */ 3826SVN_DEPRECATED 3827svn_error_t * 3828svn_client_merge4(const char *source1, 3829 const svn_opt_revision_t *revision1, 3830 const char *source2, 3831 const svn_opt_revision_t *revision2, 3832 const char *target_wcpath, 3833 svn_depth_t depth, 3834 svn_boolean_t ignore_ancestry, 3835 svn_boolean_t force_delete, 3836 svn_boolean_t record_only, 3837 svn_boolean_t dry_run, 3838 svn_boolean_t allow_mixed_rev, 3839 const apr_array_header_t *merge_options, 3840 svn_client_ctx_t *ctx, 3841 apr_pool_t *pool); 3842 3843/** 3844 * Similar to svn_client_merge4(), but with @a allow_mixed_rev set to 3845 * @c TRUE. The @a force parameter maps to the @c force_delete parameter 3846 * of svn_client_merge4(). 3847 * 3848 * @deprecated Provided for backward compatibility with the 1.6 API. 3849 * 3850 * @since New in 1.5. 3851 */ 3852SVN_DEPRECATED 3853svn_error_t * 3854svn_client_merge3(const char *source1, 3855 const svn_opt_revision_t *revision1, 3856 const char *source2, 3857 const svn_opt_revision_t *revision2, 3858 const char *target_wcpath, 3859 svn_depth_t depth, 3860 svn_boolean_t ignore_ancestry, 3861 svn_boolean_t force, 3862 svn_boolean_t record_only, 3863 svn_boolean_t dry_run, 3864 const apr_array_header_t *merge_options, 3865 svn_client_ctx_t *ctx, 3866 apr_pool_t *pool); 3867 3868/** 3869 * Similar to svn_client_merge3(), but with @a record_only set to @c 3870 * FALSE, and @a depth set according to @a recurse: if @a recurse is 3871 * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 3872 * FALSE, set @a depth to #svn_depth_files. 3873 * 3874 * @deprecated Provided for backward compatibility with the 1.4 API. 3875 * 3876 * @since New in 1.4. 3877 */ 3878SVN_DEPRECATED 3879svn_error_t * 3880svn_client_merge2(const char *source1, 3881 const svn_opt_revision_t *revision1, 3882 const char *source2, 3883 const svn_opt_revision_t *revision2, 3884 const char *target_wcpath, 3885 svn_boolean_t recurse, 3886 svn_boolean_t ignore_ancestry, 3887 svn_boolean_t force, 3888 svn_boolean_t dry_run, 3889 const apr_array_header_t *merge_options, 3890 svn_client_ctx_t *ctx, 3891 apr_pool_t *pool); 3892 3893 3894/** 3895 * Similar to svn_client_merge2(), but with @a merge_options set to NULL. 3896 * 3897 * @deprecated Provided for backwards compatibility with the 1.3 API. 3898 */ 3899SVN_DEPRECATED 3900svn_error_t * 3901svn_client_merge(const char *source1, 3902 const svn_opt_revision_t *revision1, 3903 const char *source2, 3904 const svn_opt_revision_t *revision2, 3905 const char *target_wcpath, 3906 svn_boolean_t recurse, 3907 svn_boolean_t ignore_ancestry, 3908 svn_boolean_t force, 3909 svn_boolean_t dry_run, 3910 svn_client_ctx_t *ctx, 3911 apr_pool_t *pool); 3912 3913 3914/** 3915 * Perform a reintegration merge of @a source_path_or_url at @a source_peg_revision 3916 * into @a target_wcpath. 3917 * @a target_wcpath must be a single-revision, #svn_depth_infinity, 3918 * pristine, unswitched working copy -- in other words, it must 3919 * reflect a single revision tree, the "target". The mergeinfo on @a 3920 * source_path_or_url must reflect that all of the target has been merged into it. 3921 * Then this behaves like a merge with svn_client_merge5() from the 3922 * target's URL to the source. 3923 * 3924 * All other options are handled identically to svn_client_merge5(). 3925 * The depth of the merge is always #svn_depth_infinity. 3926 * 3927 * @since New in 1.5. 3928 * @deprecated Provided for backwards compatibility with the 1.7 API. 3929 */ 3930SVN_DEPRECATED 3931svn_error_t * 3932svn_client_merge_reintegrate(const char *source_path_or_url, 3933 const svn_opt_revision_t *source_peg_revision, 3934 const char *target_wcpath, 3935 svn_boolean_t dry_run, 3936 const apr_array_header_t *merge_options, 3937 svn_client_ctx_t *ctx, 3938 apr_pool_t *pool); 3939 3940/** 3941 * Merge changes from the source branch identified by 3942 * @a source_path_or_url in peg revision @a source_peg_revision, 3943 * into the target branch working copy at @a target_wcpath. 3944 * 3945 * If @a ranges_to_merge is NULL then perform an automatic merge of 3946 * all the eligible changes up to @a source_peg_revision. If the merge 3947 * required is a reintegrate merge, then return an error if the WC has 3948 * mixed revisions, local modifications and/or switched subtrees; if 3949 * the merge is determined to be of the non-reintegrate kind, then 3950 * return an error if @a allow_mixed_rev is false and the WC contains 3951 * mixed revisions. 3952 * 3953 * If @a ranges_to_merge is not NULL then merge the changes specified 3954 * by the revision ranges in @a ranges_to_merge, or, when honouring 3955 * mergeinfo, only the eligible parts of those revision ranges. 3956 * @a ranges_to_merge is an array of <tt>svn_opt_revision_range_t 3957 * *</tt> ranges. These ranges may describe additive and/or 3958 * subtractive merge ranges, they may overlap fully or partially, 3959 * and/or they may partially or fully negate each other. This 3960 * rangelist is not required to be sorted. If any revision in the 3961 * list of provided ranges has an `unspecified' or unrecognized 3962 * `kind', return #SVN_ERR_CLIENT_BAD_REVISION. 3963 * 3964 * If @a ranges_to_merge is an empty array, then do nothing. 3965 * 3966 * All other options are handled identically to svn_client_merge5(). 3967 * 3968 * @since New in 1.8. 3969 */ 3970svn_error_t * 3971svn_client_merge_peg5(const char *source_path_or_url, 3972 const apr_array_header_t *ranges_to_merge, 3973 const svn_opt_revision_t *source_peg_revision, 3974 const char *target_wcpath, 3975 svn_depth_t depth, 3976 svn_boolean_t ignore_mergeinfo, 3977 svn_boolean_t diff_ignore_ancestry, 3978 svn_boolean_t force_delete, 3979 svn_boolean_t record_only, 3980 svn_boolean_t dry_run, 3981 svn_boolean_t allow_mixed_rev, 3982 const apr_array_header_t *merge_options, 3983 svn_client_ctx_t *ctx, 3984 apr_pool_t *pool); 3985 3986/** 3987 * Similar to svn_client_merge_peg5(), but automatic merge is not available 3988 * (@a ranges_to_merge must not be NULL), and the single @a ignore_ancestry 3989 * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry. 3990 * 3991 * @deprecated Provided for backward compatibility with the 1.7 API. 3992 * @since New in 1.7. 3993 */ 3994SVN_DEPRECATED 3995svn_error_t * 3996svn_client_merge_peg4(const char *source_path_or_url, 3997 const apr_array_header_t *ranges_to_merge, 3998 const svn_opt_revision_t *source_peg_revision, 3999 const char *target_wcpath, 4000 svn_depth_t depth, 4001 svn_boolean_t ignore_ancestry, 4002 svn_boolean_t force_delete, 4003 svn_boolean_t record_only, 4004 svn_boolean_t dry_run, 4005 svn_boolean_t allow_mixed_rev, 4006 const apr_array_header_t *merge_options, 4007 svn_client_ctx_t *ctx, 4008 apr_pool_t *pool); 4009 4010/** 4011 * Similar to svn_client_merge_peg4(), but with @a allow_mixed_rev set to 4012 * @c TRUE. The @a force parameter maps to the @c force_delete parameter 4013 * of svn_client_merge_peg4(). 4014 * 4015 * @deprecated Provided for backward compatibility with the 1.6 API. 4016 * 4017 * @since New in 1.5. 4018 */ 4019SVN_DEPRECATED 4020svn_error_t * 4021svn_client_merge_peg3(const char *source, 4022 const apr_array_header_t *ranges_to_merge, 4023 const svn_opt_revision_t *peg_revision, 4024 const char *target_wcpath, 4025 svn_depth_t depth, 4026 svn_boolean_t ignore_ancestry, 4027 svn_boolean_t force, 4028 svn_boolean_t record_only, 4029 svn_boolean_t dry_run, 4030 const apr_array_header_t *merge_options, 4031 svn_client_ctx_t *ctx, 4032 apr_pool_t *pool); 4033 4034/** 4035 * Similar to svn_client_merge_peg3(), but with @a record_only set to 4036 * @c FALSE, and @a depth set according to @a recurse: if @a recurse 4037 * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 4038 * FALSE, set @a depth to #svn_depth_files. 4039 * 4040 * @deprecated Provided for backwards compatibility with the 1.4 API. 4041 * 4042 * @since New in 1.4. 4043 */ 4044SVN_DEPRECATED 4045svn_error_t * 4046svn_client_merge_peg2(const char *source, 4047 const svn_opt_revision_t *revision1, 4048 const svn_opt_revision_t *revision2, 4049 const svn_opt_revision_t *peg_revision, 4050 const char *target_wcpath, 4051 svn_boolean_t recurse, 4052 svn_boolean_t ignore_ancestry, 4053 svn_boolean_t force, 4054 svn_boolean_t dry_run, 4055 const apr_array_header_t *merge_options, 4056 svn_client_ctx_t *ctx, 4057 apr_pool_t *pool); 4058 4059/** 4060 * Similar to svn_client_merge_peg2(), but with @a merge_options set to 4061 * NULL. 4062 * 4063 * @deprecated Provided for backwards compatibility with the 1.3 API. 4064 * 4065 * @since New in 1.1. 4066 */ 4067SVN_DEPRECATED 4068svn_error_t * 4069svn_client_merge_peg(const char *source, 4070 const svn_opt_revision_t *revision1, 4071 const svn_opt_revision_t *revision2, 4072 const svn_opt_revision_t *peg_revision, 4073 const char *target_wcpath, 4074 svn_boolean_t recurse, 4075 svn_boolean_t ignore_ancestry, 4076 svn_boolean_t force, 4077 svn_boolean_t dry_run, 4078 svn_client_ctx_t *ctx, 4079 apr_pool_t *pool); 4080 4081 4082/** Set @a suggestions to an ordered array of @c const char * 4083 * potential merge sources (expressed as full repository URLs) for @a 4084 * path_or_url at @a peg_revision. @a path_or_url is a working copy 4085 * path or repository URL. @a ctx is a context used for 4086 * authentication in the repository case. Use @a pool for all 4087 * allocations. 4088 * 4089 * @since New in 1.5. 4090 */ 4091svn_error_t * 4092svn_client_suggest_merge_sources(apr_array_header_t **suggestions, 4093 const char *path_or_url, 4094 const svn_opt_revision_t *peg_revision, 4095 svn_client_ctx_t *ctx, 4096 apr_pool_t *pool); 4097 4098 4099/** 4100 * Get the mergeinfo for a single target node (ignoring any subtrees). 4101 * 4102 * Set @a *mergeinfo to a hash mapping <tt>const char *</tt> merge source 4103 * URLs to <tt>svn_rangelist_t *</tt> rangelists describing the ranges which 4104 * have been merged into @a path_or_url as of @a peg_revision, per 4105 * @a path_or_url's explicit mergeinfo or inherited mergeinfo if no 4106 * explicit mergeinfo if found. If no explicit or inherited mergeinfo 4107 * is found, then set @a *mergeinfo to NULL. 4108 * 4109 * Use @a pool for all necessary allocations. 4110 * 4111 * If the server doesn't support retrieval of mergeinfo (which will 4112 * never happen for file:// URLs), return an 4113 * #SVN_ERR_UNSUPPORTED_FEATURE error. 4114 * 4115 * @note Unlike most APIs which deal with mergeinfo, this one returns 4116 * data where the keys of the hash are absolute repository URLs rather 4117 * than repository filesystem paths. 4118 * 4119 * @since New in 1.5. 4120 */ 4121svn_error_t * 4122svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo, 4123 const char *path_or_url, 4124 const svn_opt_revision_t *peg_revision, 4125 svn_client_ctx_t *ctx, 4126 apr_pool_t *pool); 4127 4128 4129/** 4130 * Describe the revisions that either have or have not been merged from 4131 * one source branch (or subtree) into another. 4132 * 4133 * If @a finding_merged is TRUE, then drive log entry callbacks 4134 * @a receiver / @a receiver_baton with the revisions merged from 4135 * @a source_path_or_url (as of @a source_peg_revision) into 4136 * @a target_path_or_url (as of @a target_peg_revision). If @a 4137 * finding_merged is FALSE then find the revisions eligible for merging. 4138 * 4139 * If both @a source_start_revision and @a source_end_revision are 4140 * unspecified (that is, of kind @c svn_opt_revision_unspecified), 4141 * @a receiver will be called the requested revisions from 0 to 4142 * @a source_peg_revision and in that order (that is, oldest to 4143 * youngest). Otherwise, both @a source_start_revision and 4144 * @a source_end_revision must be specified, which has two effects: 4145 * 4146 * - @a receiver will be called only with revisions which fall 4147 * within range of @a source_start_revision to 4148 * @a source_end_revision, inclusive, and 4149 * 4150 * - those revisions will be ordered in the same "direction" as the 4151 * walk from @a source_start_revision to @a source_end_revision. 4152 * (If @a source_start_revision is the younger of the two, @a 4153 * receiver will be called with revisions in youngest-to-oldest 4154 * order; otherwise, the reverse occurs.) 4155 * 4156 * If @a depth is #svn_depth_empty consider only the explicit or 4157 * inherited mergeinfo on @a target_path_or_url when calculating merged 4158 * revisions from @a source_path_or_url. If @a depth is #svn_depth_infinity 4159 * then also consider the explicit subtree mergeinfo under @a 4160 * target_path_or_url. 4161 * If a depth other than #svn_depth_empty or #svn_depth_infinity is 4162 * requested then return a #SVN_ERR_UNSUPPORTED_FEATURE error. 4163 * 4164 * In addition to the behavior of @a discover_changed_paths described in 4165 * svn_client_log5(), if set to TRUE it enables detection of sub-tree 4166 * merges that are complete but can't be detected as complete without 4167 * access to the changed paths. Sub-tree merges detected as complete will 4168 * be included if @a finding_merged is TRUE or filtered if @a finding_merged 4169 * is FALSE. 4170 * 4171 * @a revprops is the same as for svn_client_log5(). Use @a scratch_pool for 4172 * all temporary allocations. 4173 * 4174 * @a ctx is a context used for authentication. 4175 * 4176 * If the server doesn't support retrieval of mergeinfo, return an 4177 * #SVN_ERR_UNSUPPORTED_FEATURE error. 4178 * 4179 * @since New in 1.8. 4180 */ 4181svn_error_t * 4182svn_client_mergeinfo_log2(svn_boolean_t finding_merged, 4183 const char *target_path_or_url, 4184 const svn_opt_revision_t *target_peg_revision, 4185 const char *source_path_or_url, 4186 const svn_opt_revision_t *source_peg_revision, 4187 const svn_opt_revision_t *source_start_revision, 4188 const svn_opt_revision_t *source_end_revision, 4189 svn_log_entry_receiver_t receiver, 4190 void *receiver_baton, 4191 svn_boolean_t discover_changed_paths, 4192 svn_depth_t depth, 4193 const apr_array_header_t *revprops, 4194 svn_client_ctx_t *ctx, 4195 apr_pool_t *scratch_pool); 4196 4197/** 4198 * Similar to svn_client_mergeinfo_log2(), but with @a source_start_revision 4199 * and @a source_end_revision always of kind @c svn_opt_revision_unspecified; 4200 * 4201 * @deprecated Provided for backwards compatibility with the 1.7 API. 4202 * @since New in 1.7. 4203 */ 4204SVN_DEPRECATED 4205svn_error_t * 4206svn_client_mergeinfo_log(svn_boolean_t finding_merged, 4207 const char *target_path_or_url, 4208 const svn_opt_revision_t *target_peg_revision, 4209 const char *source_path_or_url, 4210 const svn_opt_revision_t *source_peg_revision, 4211 svn_log_entry_receiver_t receiver, 4212 void *receiver_baton, 4213 svn_boolean_t discover_changed_paths, 4214 svn_depth_t depth, 4215 const apr_array_header_t *revprops, 4216 svn_client_ctx_t *ctx, 4217 apr_pool_t *scratch_pool); 4218 4219/** 4220 * Similar to svn_client_mergeinfo_log(), but finds only merged revisions 4221 * and always operates at @a depth #svn_depth_empty. 4222 * 4223 * @deprecated Provided for backwards compatibility with the 1.6 API. Use 4224 * svn_client_mergeinfo_log() instead. 4225 * @since New in 1.5. 4226 */ 4227SVN_DEPRECATED 4228svn_error_t * 4229svn_client_mergeinfo_log_merged(const char *path_or_url, 4230 const svn_opt_revision_t *peg_revision, 4231 const char *merge_source_path_or_url, 4232 const svn_opt_revision_t *src_peg_revision, 4233 svn_log_entry_receiver_t receiver, 4234 void *receiver_baton, 4235 svn_boolean_t discover_changed_paths, 4236 const apr_array_header_t *revprops, 4237 svn_client_ctx_t *ctx, 4238 apr_pool_t *pool); 4239 4240/** 4241 * Similar to svn_client_mergeinfo_log(), but finds only eligible revisions 4242 * and always operates at @a depth #svn_depth_empty. 4243 * 4244 * @deprecated Provided for backwards compatibility with the 1.6 API. Use 4245 * svn_client_mergeinfo_log() instead. 4246 * @since New in 1.5. 4247 */ 4248SVN_DEPRECATED 4249svn_error_t * 4250svn_client_mergeinfo_log_eligible(const char *path_or_url, 4251 const svn_opt_revision_t *peg_revision, 4252 const char *merge_source_path_or_url, 4253 const svn_opt_revision_t *src_peg_revision, 4254 svn_log_entry_receiver_t receiver, 4255 void *receiver_baton, 4256 svn_boolean_t discover_changed_paths, 4257 const apr_array_header_t *revprops, 4258 svn_client_ctx_t *ctx, 4259 apr_pool_t *pool); 4260 4261/** @} */ 4262 4263/** 4264 * @defgroup Cleanup Cleanup an abnormally terminated working copy. 4265 * 4266 * @{ 4267 */ 4268 4269/** Recursively vacuum a working copy directory @a dir_abspath, 4270 * removing unnecessary data. 4271 * 4272 * If @a include_externals is @c TRUE, recurse into externals and vacuum them 4273 * as well. 4274 * 4275 * If @a remove_unversioned_items is @c TRUE, remove unversioned items 4276 * in @a dir_abspath after successful working copy cleanup. 4277 * If @a remove_ignored_items is @c TRUE, remove ignored unversioned items 4278 * in @a dir_abspath after successful working copy cleanup. 4279 * 4280 * If @a fix_recorded_timestamps is @c TRUE, this function fixes recorded 4281 * timestamps for unmodified files in the working copy, reducing comparision 4282 * time on future checks. 4283 * 4284 * If @a vacuum_pristines is @c TRUE, and @a dir_abspath points to the working 4285 * copy root unreferenced files in the pristine store are removed. 4286 * 4287 * When asked to remove unversioned or ignored items, and the working copy 4288 * is already locked, return #SVN_ERR_WC_LOCKED. This prevents accidental 4289 * working copy corruption in case users run the cleanup operation to 4290 * remove unversioned items while another client is performing some other 4291 * operation on the working copy. 4292 * 4293 * If @a ctx->cancel_func is non-NULL, invoke it with @a 4294 * ctx->cancel_baton at various points during the operation. If it 4295 * returns an error (typically #SVN_ERR_CANCELLED), return that error 4296 * immediately. 4297 * 4298 * Use @a scratch_pool for any temporary allocations. 4299 * 4300 * @since New in 1.9. 4301 */ 4302svn_error_t * 4303svn_client_vacuum(const char *dir_abspath, 4304 svn_boolean_t remove_unversioned_items, 4305 svn_boolean_t remove_ignored_items, 4306 svn_boolean_t fix_recorded_timestamps, 4307 svn_boolean_t vacuum_pristines, 4308 svn_boolean_t include_externals, 4309 svn_client_ctx_t *ctx, 4310 apr_pool_t *scratch_pool); 4311 4312 4313/** Recursively cleanup a working copy directory @a dir_abspath, finishing any 4314 * incomplete operations, removing lockfiles, etc. 4315 * 4316 * If @a break_locks is @c TRUE, existing working copy locks at or below @a 4317 * dir_abspath are broken, otherwise a normal write lock is obtained. 4318 * 4319 * If @a fix_recorded_timestamps is @c TRUE, this function fixes recorded 4320 * timestamps for unmodified files in the working copy, reducing comparision 4321 * time on future checks. 4322 * 4323 * If @a clear_dav_cache is @c TRUE, the caching of DAV information for older 4324 * mod_dav served repositories is cleared. This clearing invalidates some 4325 * cached information used for pre-HTTPv2 repositories. 4326 * 4327 * If @a vacuum_pristines is @c TRUE, and @a dir_abspath points to the working 4328 * copy root unreferenced files in the pristine store are removed. 4329 * 4330 * If @a include_externals is @c TRUE, recurse into externals and clean 4331 * them up as well. 4332 * 4333 * If @a ctx->cancel_func is non-NULL, invoke it with @a 4334 * ctx->cancel_baton at various points during the operation. If it 4335 * returns an error (typically #SVN_ERR_CANCELLED), return that error 4336 * immediately. 4337 * 4338 * Use @a scratch_pool for any temporary allocations. 4339 * 4340 * @since New in 1.9. 4341 */ 4342svn_error_t * 4343svn_client_cleanup2(const char *dir_abspath, 4344 svn_boolean_t break_locks, 4345 svn_boolean_t fix_recorded_timestamps, 4346 svn_boolean_t clear_dav_cache, 4347 svn_boolean_t vacuum_pristines, 4348 svn_boolean_t include_externals, 4349 svn_client_ctx_t *ctx, 4350 apr_pool_t *scratch_pool); 4351 4352/** Like svn_client_cleanup2(), but no support for not breaking locks and 4353 * cleaning up externals and using a potentially non absolute path. 4354 * 4355 * @deprecated Provided for limited backwards compatibility with the 1.8 API. 4356 */ 4357SVN_DEPRECATED 4358svn_error_t * 4359svn_client_cleanup(const char *dir, 4360 svn_client_ctx_t *ctx, 4361 apr_pool_t *scratch_pool); 4362 4363 4364/** @} */ 4365 4366/** 4367 * @defgroup Upgrade Upgrade a working copy. 4368 * 4369 * @{ 4370 */ 4371 4372/** Recursively upgrade a working copy from any older format to the current 4373 * WC metadata storage format. @a wcroot_dir is the path to the WC root. 4374 * 4375 * Use @a scratch_pool for any temporary allocations. 4376 * 4377 * @since New in 1.7. 4378 */ 4379svn_error_t * 4380svn_client_upgrade(const char *wcroot_dir, 4381 svn_client_ctx_t *ctx, 4382 apr_pool_t *scratch_pool); 4383 4384 4385/** @} */ 4386 4387/** 4388 * @defgroup Relocate Switch a working copy to a different repository. 4389 * 4390 * @{ 4391 */ 4392 4393/** 4394 * Recursively modify a working copy rooted at @a wcroot_dir, changing 4395 * any repository URLs that begin with @a from_prefix to begin with @a 4396 * to_prefix instead. 4397 * 4398 * @param wcroot_dir Working copy root directory 4399 * @param from_prefix Original URL 4400 * @param to_prefix New URL 4401 * @param ignore_externals If not set, recurse into external working 4402 * copies after relocating the primary working copy 4403 * @param ctx svn_client_ctx_t 4404 * @param pool The pool from which to perform memory allocations 4405 * 4406 * @since New in 1.7 4407 */ 4408svn_error_t * 4409svn_client_relocate2(const char *wcroot_dir, 4410 const char *from_prefix, 4411 const char *to_prefix, 4412 svn_boolean_t ignore_externals, 4413 svn_client_ctx_t *ctx, 4414 apr_pool_t *pool); 4415 4416/** 4417 * Similar to svn_client_relocate2(), but with @a ignore_externals 4418 * always TRUE. 4419 * 4420 * @note As of the 1.7 API, @a dir is required to be a working copy 4421 * root directory, and @a recurse is required to be TRUE. 4422 * 4423 * @deprecated Provided for limited backwards compatibility with the 4424 * 1.6 API. 4425 */ 4426SVN_DEPRECATED 4427svn_error_t * 4428svn_client_relocate(const char *dir, 4429 const char *from_prefix, 4430 const char *to_prefix, 4431 svn_boolean_t recurse, 4432 svn_client_ctx_t *ctx, 4433 apr_pool_t *pool); 4434 4435/** @} */ 4436 4437/** 4438 * @defgroup Revert Remove local changes in a repository. 4439 * 4440 * @{ 4441 */ 4442 4443/** 4444 * Restore the pristine version of working copy @a paths, 4445 * effectively undoing any local mods. This means returning each 4446 * path's versioned status to 'unmodified' and changing its on-disk 4447 * state to match that. 4448 * 4449 * If an item was in a state of conflict, reverting also marks the 4450 * conflict as resolved. If there are conflict marker files attached 4451 * to the item, these are removed. 4452 * 4453 * @a paths is an array of (const char *) local WC paths. 4454 * 4455 * For each path in @a paths, revert it if it is a file. Else if it is 4456 * a directory, revert according to @a depth: 4457 * If @a depth is #svn_depth_empty, revert just 4458 * the directory; else if #svn_depth_files, revert the directory 4459 * and any files immediately under the directory; else if 4460 * #svn_depth_immediates, revert all of the preceding plus 4461 * immediate subdirectories; else if #svn_depth_infinity, 4462 * revert path and everything under it fully recursively. 4463 * 4464 * @a changelists is an array of <tt>const char *</tt> changelist 4465 * names, used as a restrictive filter on items reverted; that is, 4466 * don't revert any item unless it's a member of one of those 4467 * changelists. If @a changelists is empty (or altogether @c NULL), 4468 * no changelist filtering occurs. 4469 * 4470 * If @a clear_changelists is TRUE, then changelist information for the 4471 * paths is cleared while reverting. 4472 * 4473 * The @a metadata_only and @a added_keep_local options control the 4474 * extent of reverting. If @a metadata_only is TRUE, the working copy 4475 * files are untouched, but if there are conflict marker files attached 4476 * to these files these markers are removed. Otherwise, if 4477 * @a added_keep_local is TRUE, then all items are reverted except an 4478 * item that was scheduled as plain 'add' (not a copy) will not be 4479 * removed from the working copy. Otherwise, all items are reverted and 4480 * their on-disk state changed to match. 4481 * 4482 * Consult the @c SVN_CONFIG_OPTION_USE_COMMIT_TIMES option in @a ctx to 4483 * determine whether or not to revert timestamp to the time of last 4484 * commit ('use-commit-times = yes'). 4485 * 4486 * If @a ctx->notify_func2 is non-NULL, then for each item reverted, 4487 * call @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of 4488 * the reverted item. 4489 * 4490 * If an item specified for reversion is not under version control, 4491 * then do not error, just invoke @a ctx->notify_func2 with @a 4492 * ctx->notify_baton2, using notification code #svn_wc_notify_skip. 4493 * 4494 * @warning The 'revert' command intentionally and permanently loses 4495 * local modifications. 4496 * 4497 * @since New in 1.11. 4498 */ 4499svn_error_t * 4500svn_client_revert4(const apr_array_header_t *paths, 4501 svn_depth_t depth, 4502 const apr_array_header_t *changelists, 4503 svn_boolean_t clear_changelists, 4504 svn_boolean_t metadata_only, 4505 svn_boolean_t added_keep_local, 4506 svn_client_ctx_t *ctx, 4507 apr_pool_t *scratch_pool); 4508 4509/** Similar to svn_client_revert4(), but with @a added_keep_local set to 4510 * TRUE. 4511 * 4512 * @since New in 1.9. 4513 * @deprecated Provided for backwards compatibility with the 1.10 API. 4514 */ 4515SVN_DEPRECATED 4516svn_error_t * 4517svn_client_revert3(const apr_array_header_t *paths, 4518 svn_depth_t depth, 4519 const apr_array_header_t *changelists, 4520 svn_boolean_t clear_changelists, 4521 svn_boolean_t metadata_only, 4522 svn_client_ctx_t *ctx, 4523 apr_pool_t *pool); 4524 4525/** Similar to svn_client_revert2, but with @a clear_changelists set to 4526 * FALSE and @a metadata_only set to FALSE. 4527 * 4528 * @since New in 1.5. 4529 * @deprecated Provided for backwards compatibility with the 1.8 API. 4530 */ 4531SVN_DEPRECATED 4532svn_error_t * 4533svn_client_revert2(const apr_array_header_t *paths, 4534 svn_depth_t depth, 4535 const apr_array_header_t *changelists, 4536 svn_client_ctx_t *ctx, 4537 apr_pool_t *pool); 4538 4539 4540/** 4541 * Similar to svn_client_revert2(), but with @a changelists passed as 4542 * @c NULL, and @a depth set according to @a recurse: if @a recurse is 4543 * TRUE, @a depth is #svn_depth_infinity, else if @a recurse is 4544 * FALSE, @a depth is #svn_depth_empty. 4545 * 4546 * @note Most APIs map @a recurse==FALSE to @a depth==svn_depth_files; 4547 * revert is deliberately different. 4548 * 4549 * @deprecated Provided for backwards compatibility with the 1.4 API. 4550 */ 4551SVN_DEPRECATED 4552svn_error_t * 4553svn_client_revert(const apr_array_header_t *paths, 4554 svn_boolean_t recursive, 4555 svn_client_ctx_t *ctx, 4556 apr_pool_t *pool); 4557 4558 4559/** @} */ 4560 4561/** 4562 * @defgroup Conflicts Dealing with conflicted paths. 4563 * 4564 * @{ 4565 */ 4566 4567/** 4568 * An opaque type which represents a conflicted node in the working copy. 4569 * 4570 * @since New in 1.10. 4571 */ 4572typedef struct svn_client_conflict_t svn_client_conflict_t; 4573 4574/** 4575 * An opaque type which represents a resolution option for a conflict. 4576 * 4577 * @since New in 1.10. 4578 */ 4579typedef struct svn_client_conflict_option_t svn_client_conflict_option_t; 4580 4581/** 4582 * A public enumeration of conflict option IDs. 4583 * 4584 * @since New in 1.10, unless noted otherwise. 4585 */ 4586typedef enum svn_client_conflict_option_id_t { 4587 4588 /* Options for text and property conflicts. 4589 * These values intentionally mirror svn_wc_conflict_choice_t. */ 4590 svn_client_conflict_option_undefined = -1, /* for private use only */ 4591 svn_client_conflict_option_postpone = 0, 4592 svn_client_conflict_option_base_text, 4593 svn_client_conflict_option_incoming_text, /* "theirs-full" */ 4594 svn_client_conflict_option_working_text, /* "mine-full" */ 4595 svn_client_conflict_option_incoming_text_where_conflicted, 4596 svn_client_conflict_option_working_text_where_conflicted, 4597 svn_client_conflict_option_merged_text, 4598 svn_client_conflict_option_unspecified, 4599 /* Values derived from svn_wc_conflict_choice_t end here. */ 4600 4601 /* Tree conflict resolution options start here. */ 4602 4603 /* Accept current working copy state. */ 4604 svn_client_conflict_option_accept_current_wc_state, 4605 4606 /* Options for local move vs incoming edit on update. */ 4607 svn_client_conflict_option_update_move_destination, 4608 4609 /* Options for local delete/replace vs incoming edit on update. */ 4610 svn_client_conflict_option_update_any_moved_away_children, 4611 4612 /* Options for incoming add vs local add or obstruction. */ 4613 svn_client_conflict_option_incoming_add_ignore, 4614 4615 /* Options for incoming file add vs local file add or obstruction. */ 4616 svn_client_conflict_option_incoming_added_file_text_merge, 4617 svn_client_conflict_option_incoming_added_file_replace_and_merge, 4618 4619 /* Options for incoming dir add vs local dir add or obstruction. */ 4620 svn_client_conflict_option_incoming_added_dir_merge, 4621 svn_client_conflict_option_incoming_added_dir_replace, 4622 svn_client_conflict_option_incoming_added_dir_replace_and_merge, 4623 4624 /* Options for incoming delete vs any */ 4625 svn_client_conflict_option_incoming_delete_ignore, 4626 svn_client_conflict_option_incoming_delete_accept, 4627 4628 /* Options for incoming move vs local edit */ 4629 svn_client_conflict_option_incoming_move_file_text_merge, 4630 svn_client_conflict_option_incoming_move_dir_merge, 4631 4632 /* Options for local move vs incoming edit on merge. */ 4633 svn_client_conflict_option_local_move_file_text_merge, 4634 svn_client_conflict_option_local_move_dir_merge, /**< @since New in 1.11. */ 4635 4636 /* Options for local missing vs incoming edit on merge. */ 4637 svn_client_conflict_option_sibling_move_file_text_merge, /**< @since New in 1.11. */ 4638 svn_client_conflict_option_sibling_move_dir_merge, /**< @since New in 1.11. */ 4639 4640 /* Options for local move vs incoming move on merge. */ 4641 svn_client_conflict_option_both_moved_file_merge, /*< @since New in 1.12 */ 4642 svn_client_conflict_option_both_moved_file_move_merge, /*< @since New in 1.12 */ 4643 svn_client_conflict_option_both_moved_dir_merge, /*< @since New in 1.12 */ 4644 svn_client_conflict_option_both_moved_dir_move_merge, /*< @since New in 1.12 */ 4645} svn_client_conflict_option_id_t; 4646 4647/** 4648 * Set a merged property value on @a option to @a merged_propval. 4649 * 4650 * Setting the merged value is required before resolving the property 4651 * conflict using an option with ID svn_client_conflict_option_merged_text. 4652 * 4653 * The contents of @a merged_propval are not copied, so the storage it 4654 * points to needs to remain valid until svn_client_conflict_prop_resolve() 4655 * has been called with @a option. 4656 * 4657 * @since New in 1.10. 4658 */ 4659void 4660svn_client_conflict_option_set_merged_propval( 4661 svn_client_conflict_option_t *option, 4662 const svn_string_t *merged_propval); 4663 4664/** 4665 * Get a list of possible repository paths which can be applied to @a option. 4666 * 4667 * In some situations, there can be multiple possible destinations for a move. 4668 * One such situation is where a file was copied and moved in the same revision: 4669 * svn cp a b; svn mv a c; svn commit 4670 * When this move is merged elsewhere, both b and c will appear as valid move 4671 * destinations to the conflict resolver. To resolve such ambiguity, the client 4672 * may call this function to obtain a list of possible destinations the user 4673 * may choose from. 4674 * 4675 * @a *possible_moved_to_repos_relpaths is set to NULL if the @a option does 4676 * not support multiple move targets. API users may assume that only one option 4677 * among those which can be applied to a conflict supports move targets. 4678 * 4679 * The array is allocated in @a result_pool and will have "const char *" 4680 * elements pointing to strings also allocated in @a result_pool. 4681 * All paths are relpaths, and relative to the repository root. 4682 * 4683 * @see svn_client_conflict_option_set_moved_to_repos_relpath2() 4684 * @since New in 1.11. 4685 */ 4686svn_error_t * 4687svn_client_conflict_option_get_moved_to_repos_relpath_candidates2( 4688 apr_array_header_t **possible_moved_to_repos_relpaths, 4689 svn_client_conflict_option_t *option, 4690 apr_pool_t *result_pool, 4691 apr_pool_t *scratch_pool); 4692 4693/** 4694 * Get a list of possible repository paths which can be applied to the 4695 * svn_client_conflict_option_incoming_move_file_text_merge, or the 4696 * svn_client_conflict_option_incoming_move_dir_merge resolution @a option. 4697 * 4698 * In SVN 1.10, if a different option is passed in, this function will 4699 * raise an assertion failure. Otherwise this function behaves just like 4700 * svn_client_conflict_option_get_moved_to_repos_relpath_candidates2(). 4701 * 4702 * @since New in 1.10. 4703 * @deprecated use svn_client_conflict_option_get_moved_to_repos_relpath_candidates2() 4704 */ 4705svn_error_t * 4706svn_client_conflict_option_get_moved_to_repos_relpath_candidates( 4707 apr_array_header_t **possible_moved_to_repos_relpaths, 4708 svn_client_conflict_option_t *option, 4709 apr_pool_t *result_pool, 4710 apr_pool_t *scratch_pool); 4711 4712/** 4713 * Set the preferred moved target repository path. If @a option is not 4714 * applicable to a moved target repository path, do nothing. 4715 * 4716 * @a preferred_move_target_idx must be a valid index into the list returned 4717 * by svn_client_conflict_option_get_moved_to_repos_relpath_candidates(). 4718 * 4719 * This function can be called multiple times. 4720 * It affects the output of svn_client_conflict_tree_get_description() and 4721 * svn_client_conflict_option_get_description(). Call these functions again 4722 * to get updated descriptions containing the newly selected move target. 4723 * 4724 * @since New in 1.11. 4725 */ 4726svn_error_t * 4727svn_client_conflict_option_set_moved_to_repos_relpath2( 4728 svn_client_conflict_option_t *option, 4729 int preferred_move_target_idx, 4730 svn_client_ctx_t *ctx, 4731 apr_pool_t *scratch_pool); 4732 4733/** 4734 * Like svn_client_conflict_option_set_moved_to_repos_relpath2(), except 4735 * that in SVN 1.10 it raises an assertion failure if an option other 4736 * than svn_client_conflict_option_incoming_move_file_text_merge or 4737 * svn_client_conflict_option_incoming_move_dir_merge is passed. 4738 * 4739 * @since New in 1.10. 4740 * @deprecated use svn_client_conflict_option_set_moved_to_repos_relpath2() 4741 */ 4742svn_error_t * 4743svn_client_conflict_option_set_moved_to_repos_relpath( 4744 svn_client_conflict_option_t *option, 4745 int preferred_move_target_idx, 4746 svn_client_ctx_t *ctx, 4747 apr_pool_t *scratch_pool); 4748 4749/** 4750 * Get a list of possible moved-to abspaths in the working copy which can be 4751 * applied to @a option. 4752 * 4753 * All working copy paths in the returned list correspond to one repository 4754 * path which is be one of the possible destinations of a move operation. 4755 * More than one repository-side move target candidate may exist; call 4756 * svn_client_conflict_option_get_moved_to_repos_relpath_candidates() before 4757 * calling this function to let the user select a repository path first. 4758 * Otherwise, one of the repository-side paths will be selected internally. 4759 * 4760 * @a *possible_moved_to_abspaths is set to NULL if the @a option does not 4761 * support multiple move targets. API users may assume that only one option 4762 * among those which can be applied to a conflict supports move targets. 4763 * 4764 * If no possible moved-to paths can be found, return an empty array. 4765 * This doesn't mean that no move happened in the repository. It is possible 4766 * that the move destination is outside the scope of the current working copy, 4767 * for example, in which case the conflict must be resolved in some other way. 4768 * 4769 * @see svn_client_conflict_option_set_moved_to_abspath2() 4770 * @since New in 1.11. 4771 */ 4772svn_error_t * 4773svn_client_conflict_option_get_moved_to_abspath_candidates2( 4774 apr_array_header_t **possible_moved_to_abspaths, 4775 svn_client_conflict_option_t *option, 4776 apr_pool_t *result_pool, 4777 apr_pool_t *scratch_pool); 4778 4779/** 4780 * Get a list of possible moved-to abspaths in the working copy which can be 4781 * svn_client_conflict_option_incoming_move_file_text_merge, or the 4782 * svn_client_conflict_option_incoming_move_dir_merge resolution @a option. 4783 * 4784 * In SVN 1.10, if a different option is passed in, this function will 4785 * raise an assertion failure. Otherwise this function behaves just like 4786 * svn_client_conflict_option_get_moved_to_abspath_candidates2(). 4787 * 4788 * @since New in 1.10. 4789 * @deprecated use svn_client_conflict_option_get_moved_to_abspath_candidates2() 4790 */ 4791svn_error_t * 4792svn_client_conflict_option_get_moved_to_abspath_candidates( 4793 apr_array_header_t **possible_moved_to_abspaths, 4794 svn_client_conflict_option_t *option, 4795 apr_pool_t *result_pool, 4796 apr_pool_t *scratch_pool); 4797 4798/** 4799 * Set the preferred moved target working copy path. If @a option is not 4800 * applicable to a moved target working copy path, do nothing. 4801 * 4802 * @a preferred_move_target_idx must be a valid index into the list 4803 * returned by svn_client_conflict_option_get_moved_to_abspath_candidates2(). 4804 * 4805 * This function can be called multiple times. 4806 * It affects the output of svn_client_conflict_tree_get_description() and 4807 * svn_client_conflict_option_get_description(). Call these functions again 4808 * to get updated descriptions containing the newly selected move target. 4809 * 4810 * @since New in 1.11. 4811 */ 4812svn_error_t * 4813svn_client_conflict_option_set_moved_to_abspath2( 4814 svn_client_conflict_option_t *option, 4815 int preferred_move_target_idx, 4816 svn_client_ctx_t *ctx, 4817 apr_pool_t *scratch_pool); 4818 4819/** 4820 * Like svn_client_conflict_option_set_moved_to_abspath2(), except that 4821 * in SVN 1.10 this function raises an assertion failure if an option 4822 * other than svn_client_conflict_option_incoming_move_file_text_merge or 4823 * svn_client_conflict_option_incoming_move_dir_merge is passed. 4824 * 4825 * @since New in 1.10. 4826 * @deprecated use svn_client_conflict_option_set_moved_to_abspath2() 4827 */ 4828svn_error_t * 4829svn_client_conflict_option_set_moved_to_abspath( 4830 svn_client_conflict_option_t *option, 4831 int preferred_move_target_idx, 4832 svn_client_ctx_t *ctx, 4833 apr_pool_t *scratch_pool); 4834 4835/** 4836 * Given an @a option_id, try to find the corresponding option in @a options, 4837 * which is an array of svn_client_conflict_option_t * elements. 4838 * 4839 * Return NULL if no corresponding option can be be found. 4840 * 4841 * @since New in 1.10. 4842 */ 4843svn_client_conflict_option_t * 4844svn_client_conflict_option_find_by_id( 4845 apr_array_header_t *options, 4846 svn_client_conflict_option_id_t option_id); 4847 4848/** 4849 * Return a conflict for the conflicted path @a local_abspath. 4850 * 4851 * @since New in 1.10. 4852 */ 4853svn_error_t * 4854svn_client_conflict_get(svn_client_conflict_t **conflict, 4855 const char *local_abspath, 4856 svn_client_ctx_t *ctx, 4857 apr_pool_t *result_pool, 4858 apr_pool_t *scratch_pool); 4859 4860/** 4861 * Callback for svn_client_conflict_conflict_walk(); 4862 * 4863 * The lifetime of @a conflict is limited. Its allocation in 4864 * memory will not persist beyond this callback's execution. 4865 * 4866 * @since New in 1.10. 4867 */ 4868typedef svn_error_t *(*svn_client_conflict_walk_func_t)( 4869 void *baton, 4870 svn_client_conflict_t *conflict, 4871 apr_pool_t *scratch_pool); 4872 4873/** 4874 * Walk all conflicts within the specified @a depth of @a local_abspath. 4875 * Pass each conflict found during the walk to the @a conflict_walk_func 4876 * callback, along with @a conflict_walk_func_baton. 4877 * Use cancellation and notification support provided by client context @a ctx. 4878 * 4879 * This callback may choose to resolve the conflict. If the act of resolving 4880 * a conflict creates new conflicts within the walked working copy (as might 4881 * be the case for some tree conflicts), the callback will be invoked for each 4882 * such new conflict as well. 4883 * 4884 * @since New in 1.10. 4885 */ 4886svn_error_t * 4887svn_client_conflict_walk(const char *local_abspath, 4888 svn_depth_t depth, 4889 svn_client_conflict_walk_func_t conflict_walk_func, 4890 void *conflict_walk_func_baton, 4891 svn_client_ctx_t *ctx, 4892 apr_pool_t *scratch_pool); 4893 4894/** 4895* Indicate the types of conflicts present on the working copy node 4896* described by @a conflict. Any output argument may be @c NULL if 4897* the caller is not interested in the status of a particular type. 4898* 4899* The returned @a *props_conflicted array is allocated in @a result_pool. 4900* It contains the names of conflicted properties. If no property conflict 4901* exists, the array will contain no elements. 4902* 4903* @since New in 1.10. 4904*/ 4905svn_error_t * 4906svn_client_conflict_get_conflicted(svn_boolean_t *text_conflicted, 4907 apr_array_header_t **props_conflicted, 4908 svn_boolean_t *tree_conflicted, 4909 svn_client_conflict_t *conflict, 4910 apr_pool_t *result_pool, 4911 apr_pool_t *scratch_pool); 4912 4913/** 4914 * Return a textual human-readable description of the property conflict 4915 * described by @a conflict, allocated in @a result_pool. The description 4916 * is encoded in UTF-8 and may contain multiple lines separated by 4917 * @c APR_EOL_STR. The last line is not terminated by a newline. 4918 * 4919 * Additionally, the description may be localized to the language used 4920 * by the current locale. 4921 * 4922 * @since New in 1.10. 4923 */ 4924svn_error_t * 4925svn_client_conflict_prop_get_description(const char **description, 4926 svn_client_conflict_t *conflict, 4927 apr_pool_t *result_pool, 4928 apr_pool_t *scratch_pool); 4929 4930/** 4931 * Return a textual human-readable description of the tree conflict 4932 * described by @a conflict, allocated in @a result_pool. The description 4933 * is encoded in UTF-8 and may contain multiple lines separated by 4934 * @c APR_EOL_STR. The last line is not terminated by a newline. 4935 * 4936 * Additionally, the description may be localized to the language used 4937 * by the current locale. 4938 * 4939 * While client implementors are free to enhance descriptions by adding 4940 * additional information to the text, or break up very long lines for 4941 * formatting purposes, there is no syntax defined for descriptions, and 4942 * implementors should not rely on any particular parts of descriptions 4943 * to remain stable over time, apart from what is stated below. 4944 * Descriptions may or may not form complete sentences. They may contain 4945 * paths relative to the repository root; such paths always start with "^/", 4946 * and end with either a peg revision (e.g. "@100") or a colon followed by 4947 * a range of revisions (as in svn:mergeinfo, e.g. ":100-200"). 4948 * Paths may appear on a line of their own to avoid overlong lines. 4949 * Any revision numbers mentioned elsewhere in the description are 4950 * prefixed with the letter 'r' (e.g. "r99"). 4951 * 4952 * The description has two parts: One part describes the "incoming change" 4953 * applied by an update, merge, or switch operation. The other part 4954 * describes the "local change" which occurred in the working copy or 4955 * perhaps in the history of a merge target branch. 4956 * Both parts are provided independently to allow for some flexibility 4957 * when displaying the description. As a convention, displaying the 4958 * "incoming change" first and the "local change" second is recommended. 4959 * 4960 * By default, the description is based only on information available in 4961 * the working copy. If svn_client_conflict_tree_get_details() was already 4962 * called for @a conflict, the description might also contain useful 4963 * information obtained from the repository and provide for a much better 4964 * user experience. 4965 * 4966 * @since New in 1.10. 4967 */ 4968svn_error_t * 4969svn_client_conflict_tree_get_description( 4970 const char **incoming_change_description, 4971 const char **local_change_description, 4972 svn_client_conflict_t *conflict, 4973 svn_client_ctx_t *ctx, 4974 apr_pool_t *result_pool, 4975 apr_pool_t *scratch_pool); 4976 4977/** 4978 * Set @a *options to an array of pointers to svn_client_conflict_option_t 4979 * objects applicable to text conflicts described by @a conflict. 4980 * 4981 * @since New in 1.10. 4982 */ 4983svn_error_t * 4984svn_client_conflict_text_get_resolution_options(apr_array_header_t **options, 4985 svn_client_conflict_t *conflict, 4986 svn_client_ctx_t *ctx, 4987 apr_pool_t *result_pool, 4988 apr_pool_t *scratch_pool); 4989 4990/** 4991 * Set @a *options to an array of pointers to svn_client_conflict_option_t 4992 * objects applicable to property conflicts described by @a conflict. 4993 * 4994 * @since New in 1.10. 4995 */ 4996svn_error_t * 4997svn_client_conflict_prop_get_resolution_options(apr_array_header_t **options, 4998 svn_client_conflict_t *conflict, 4999 svn_client_ctx_t *ctx, 5000 apr_pool_t *result_pool, 5001 apr_pool_t *scratch_pool); 5002 5003/** 5004 * Set @a *options to an array of pointers to svn_client_conflict_option_t 5005 * objects applicable to the tree conflict described by @a conflict. 5006 * 5007 * By default, the list of options is based only on information available in 5008 * the working copy. If svn_client_conflict_tree_get_details() was already 5009 * called for @a conflict, a more useful list of options might be returned. 5010 * 5011 * @since New in 1.10. 5012 */ 5013svn_error_t * 5014svn_client_conflict_tree_get_resolution_options(apr_array_header_t **options, 5015 svn_client_conflict_t *conflict, 5016 svn_client_ctx_t *ctx, 5017 apr_pool_t *result_pool, 5018 apr_pool_t *scratch_pool); 5019 5020/** 5021 * Find more information about the tree conflict represented by @a conflict. 5022 * 5023 * A call to svn_client_conflict_tree_get_description() may yield much better 5024 * results after this function has been called. 5025 * 5026 * A call to svn_client_conflict_tree_get_resolution_options() may provide 5027 * more useful resolution options if this function has been called. 5028 * 5029 * This function may contact the repository. Use the authentication baton 5030 * cached in @a ctx for authentication if contacting the repository. 5031 * 5032 * @since New in 1.10. 5033 */ 5034svn_error_t * 5035svn_client_conflict_tree_get_details(svn_client_conflict_t *conflict, 5036 svn_client_ctx_t *ctx, 5037 apr_pool_t *scratch_pool); 5038 5039/** 5040 * Return an ID for @a option. This ID can be used by callers to associate 5041 * arbitrary data with a particular conflict resolution option. 5042 * 5043 * The ID of a particular resolution option will never change in future 5044 * revisions of this API. 5045 * 5046 * @since New in 1.10. 5047 */ 5048svn_client_conflict_option_id_t 5049svn_client_conflict_option_get_id(svn_client_conflict_option_t *option); 5050 5051/** 5052 * Return a textual human-readable label of @a option, allocated in 5053 * @a result_pool. The label is encoded in UTF-8 and usually 5054 * contains up to three words. 5055 * 5056 * Additionally, the label may be localized to the language used 5057 * by the current locale. 5058 * 5059 * @since New in 1.10. 5060 */ 5061const char * 5062svn_client_conflict_option_get_label(svn_client_conflict_option_t *option, 5063 apr_pool_t *result_pool); 5064 5065/** 5066 * Return a textual human-readable description of @a option, allocated in 5067 * @a result_pool. The description is encoded in UTF-8 and may contain 5068 * multiple lines separated by @c APR_EOL_STR. 5069 * 5070 * Additionally, the description may be localized to the language used 5071 * by the current locale. 5072 * 5073 * @since New in 1.10. 5074 */ 5075const char * 5076svn_client_conflict_option_get_description(svn_client_conflict_option_t *option, 5077 apr_pool_t *result_pool); 5078 5079/** 5080 * Return the ID of the recommended resolution option. If no specific option 5081 * is recommended, return @c svn_client_conflict_option_unspecified; 5082 * 5083 * Client implementations which aim to avoid excessive interactive prompting 5084 * may wish to try a recommended resolution option before falling back to 5085 * asking the user which option to use. 5086 * 5087 * Conflict resolution with a recommended option is not guaranteed to succeed. 5088 * Clients should check for errors when trying to resolve a conflict and fall 5089 * back to other options and/or interactive prompting when the recommended 5090 * option fails to resolve a conflict. 5091 * 5092 * If @a conflict is a tree conflict, svn_client_conflict_tree_get_details() 5093 * should be called before this function to allow for useful recommendations. 5094 * 5095 * @since New in 1.10. 5096 */ 5097svn_client_conflict_option_id_t 5098svn_client_conflict_get_recommended_option_id(svn_client_conflict_t *conflict); 5099 5100/** 5101 * Return the absolute path to the conflicted working copy node described 5102 * by @a conflict. 5103 * 5104 * @since New in 1.10. 5105 */ 5106const char * 5107svn_client_conflict_get_local_abspath(svn_client_conflict_t *conflict); 5108 5109/** 5110 * Return the operation during which the conflict described by @a 5111 * conflict was recorded. 5112 * 5113 * @since New in 1.10. 5114 */ 5115svn_wc_operation_t 5116svn_client_conflict_get_operation(svn_client_conflict_t *conflict); 5117 5118/** 5119 * Return the action an update, switch, or merge operation attempted to 5120 * perform on the working copy node described by @a conflict. 5121 * 5122 * @since New in 1.10. 5123 */ 5124svn_wc_conflict_action_t 5125svn_client_conflict_get_incoming_change(svn_client_conflict_t *conflict); 5126 5127/** 5128 * Return the reason why the attempted action performed by an update, switch, 5129 * or merge operation conflicted with the state of the node in the working copy. 5130 * 5131 * During update and switch operations this local change is part of uncommitted 5132 * modifications in the working copy. During merge operations it may 5133 * additionally be part of the history of the merge target branch, anywhere 5134 * between the common ancestor revision and the working copy revision. 5135 * 5136 * @since New in 1.10. 5137 */ 5138svn_wc_conflict_reason_t 5139svn_client_conflict_get_local_change(svn_client_conflict_t *conflict); 5140 5141/** 5142 * Return information about the repository associated with @a conflict. 5143 * In case of a foreign-repository merge this will differ from the 5144 * repository information associated with the merge target working copy. 5145 * 5146 * @since New in 1.10. 5147 */ 5148svn_error_t * 5149svn_client_conflict_get_repos_info(const char **repos_root_url, 5150 const char **repos_uuid, 5151 svn_client_conflict_t *conflict, 5152 apr_pool_t *result_pool, 5153 apr_pool_t *scratch_pool); 5154 5155/** 5156 * Return the repository-relative location and the node kind of the incoming 5157 * old version of the conflicted node described by @a conflict. 5158 * 5159 * If the repository-relative path is not available, the @a 5160 * *incoming_old_repos_relpath will be set to @c NULL, 5161 * 5162 * If the peg revision is not available, @a *incoming_old_regrev will be 5163 * set to SVN_INVALID_REVNUM. 5164 * 5165 * If the node kind is not available or if the node does not exist at the 5166 * specified path and revision, @a *incoming_old_node_kind will be set to 5167 * svn_node_none. 5168 * ### Should return svn_node_unkown if not available? 5169 * 5170 * Any output parameter may be set to @c NULL by the caller to indicate that 5171 * a particular piece of information should not be returned. 5172 * 5173 * In case of tree conflicts, this "path@revision" does not necessarily exist 5174 * in the repository, and it does not necessarily represent the incoming 5175 * change which is responsible for the occurance of the tree conflict. 5176 * The responsible incoming change is generally located somewhere between 5177 * the old and new incoming versions. 5178 * 5179 * @since New in 1.10. 5180 */ 5181svn_error_t * 5182svn_client_conflict_get_incoming_old_repos_location( 5183 const char **incoming_old_repos_relpath, 5184 svn_revnum_t *incoming_old_regrev, 5185 svn_node_kind_t *incoming_old_node_kind, 5186 svn_client_conflict_t *conflict, 5187 apr_pool_t *result_pool, 5188 apr_pool_t *scratch_pool); 5189 5190/** 5191 * Like svn_client_conflict_get_incoming_old_repos_location(), expect this 5192 * function returns the same data for the incoming new version. 5193 * 5194 * The same note about tree conflicts applies. 5195 * 5196 * @since New in 1.10. 5197 */ 5198svn_error_t * 5199svn_client_conflict_get_incoming_new_repos_location( 5200 const char **incoming_new_repos_relpath, 5201 svn_revnum_t *incoming_new_regrev, 5202 svn_node_kind_t *incoming_new_node_kind, 5203 svn_client_conflict_t *conflict, 5204 apr_pool_t *result_pool, 5205 apr_pool_t *scratch_pool); 5206 5207/** 5208 * Return the node kind of the tree conflict victim described by @a conflict. 5209 * The victim is the local node in the working copy which was affected by the 5210 * tree conflict at the time the conflict was raised. 5211 * 5212 * @since New in 1.10. 5213 */ 5214svn_node_kind_t 5215svn_client_conflict_tree_get_victim_node_kind(svn_client_conflict_t *conflict); 5216 5217/** 5218 * Resolve a tree @a conflict using resolution option @a option. 5219 * 5220 * May raise an error in case the tree conflict cannot be resolved yet, for 5221 * instance @c SVN_ERR_WC_OBSTRUCTED_UPDATE, @c SVN_ERR_WC_FOUND_CONFLICT, 5222 * or @c SVN_ERR_WC_CONFLICT_RESOLVER_FAILUE. 5223 * This may happen when other tree conflicts, or unversioned obstructions, 5224 * block the resolution of this tree conflict. In such a case the other 5225 * conflicts should be resolved first and resolution of this conflict should 5226 * be attempted again later. 5227 * 5228 * @since New in 1.10. 5229 */ 5230svn_error_t * 5231svn_client_conflict_tree_resolve(svn_client_conflict_t *conflict, 5232 svn_client_conflict_option_t *option, 5233 svn_client_ctx_t *ctx, 5234 apr_pool_t *scratch_pool); 5235 5236/** 5237 * Like svn_client_conflict_tree_resolve(), except that it identifies 5238 * the desired resolution option by ID @a option_id. 5239 * 5240 * If the provided @a option_id is the ID of an option which resolves 5241 * @a conflict, try to resolve the tree conflict using that option. 5242 * Else, return @c SVN_ERR_CLIENT_CONFLICT_OPTION_NOT_APPLICABLE. 5243 * 5244 * @since New in 1.10. 5245 */ 5246svn_error_t * 5247svn_client_conflict_tree_resolve_by_id( 5248 svn_client_conflict_t *conflict, 5249 svn_client_conflict_option_id_t option_id, 5250 svn_client_ctx_t *ctx, 5251 apr_pool_t *scratch_pool); 5252 5253/** 5254 * Return the ID of the option this tree @a conflict has been resolved to. 5255 * If the conflict has not been resolved yet, then return 5256 * @c svn_client_conflict_option_unspecified. 5257 * 5258 * @since New in 1.10. 5259 */ 5260svn_client_conflict_option_id_t 5261svn_client_conflict_tree_get_resolution(svn_client_conflict_t *conflict); 5262 5263/** 5264 * Return the path to the legacy property conflicts reject file 5265 * for the property conflicts represented by @a conflict. 5266 * 5267 * This function exists for backwards compatibility only and should not be 5268 * used in new code. 5269 * 5270 * @since New in 1.10. 5271 */ 5272const char * 5273svn_client_conflict_prop_get_reject_abspath(svn_client_conflict_t *conflict); 5274 5275/** 5276 * Return the set of property values involved in the conflict of property 5277 * PROPNAME described by @a conflict. If a property value is unavailable the 5278 * corresponding output argument is set to @c NULL. 5279 * 5280 * A 3-way diff of these property values can be generated with 5281 * svn_diff_mem_string_diff3(). A merged version with conflict 5282 * markers can be generated with svn_diff_mem_string_output_merge3(). 5283 * 5284 * @since New in 1.10. 5285 */ 5286svn_error_t * 5287svn_client_conflict_prop_get_propvals(const svn_string_t **base_propval, 5288 const svn_string_t **working_propval, 5289 const svn_string_t **incoming_old_propval, 5290 const svn_string_t **incoming_new_propval, 5291 svn_client_conflict_t *conflict, 5292 const char *propname, 5293 apr_pool_t *result_pool); 5294 5295/** 5296 * Resolve a property @a conflict in property @a propname using resolution 5297 * option @a option. To resolve all properties to the same option at once, 5298 * set @a propname to the empty string "". 5299 * 5300 * @since New in 1.10. 5301 */ 5302svn_error_t * 5303svn_client_conflict_prop_resolve(svn_client_conflict_t *conflict, 5304 const char *propname, 5305 svn_client_conflict_option_t *option, 5306 svn_client_ctx_t *ctx, 5307 apr_pool_t *scratch_pool); 5308/** 5309 * If the provided @a option_id is the ID of an option which resolves 5310 * @a conflict, resolve the property conflict in property @a propname 5311 * using that option. 5312 * Else, return @c SVN_ERR_CLIENT_CONFLICT_OPTION_NOT_APPLICABLE. 5313 * 5314 * @since New in 1.10. 5315 */ 5316svn_error_t * 5317svn_client_conflict_prop_resolve_by_id( 5318 svn_client_conflict_t *conflict, 5319 const char *propname, 5320 svn_client_conflict_option_id_t option_id, 5321 svn_client_ctx_t *ctx, 5322 apr_pool_t *scratch_pool); 5323 5324/** 5325 * Return the ID of the option this property @a conflict in property 5326 * @a propname has been resolved to. 5327 * If the conflict has not been resolved yet, then return 5328 * @c svn_client_conflict_option_unspecified. 5329 * 5330 * @since New in 1.10. 5331 */ 5332svn_client_conflict_option_id_t 5333svn_client_conflict_prop_get_resolution(svn_client_conflict_t *conflict, 5334 const char *propname); 5335 5336/** 5337 * Return the MIME-type of the working version of the text-conflicted file 5338 * described by @a conflict. 5339 * 5340 * ### Really needed? What about base/incoming_old/incoming_new values? 5341 * @since: New in 1.10. 5342 */ 5343const char * 5344svn_client_conflict_text_get_mime_type(svn_client_conflict_t *conflict); 5345 5346/** 5347 * Return absolute paths to the versions of the text-conflicted file 5348 * described by @a conflict. 5349 * 5350 * If a particular content is not available, it is set to @c NULL. 5351 * 5352 * ### Should this be returning svn_stream_t instead of paths? 5353 * @since: New in 1.10. 5354 */ 5355svn_error_t * 5356svn_client_conflict_text_get_contents(const char **base_abspath, 5357 const char **working_abspath, 5358 const char **incoming_old_abspath, 5359 const char **incoming_new_abspath, 5360 svn_client_conflict_t *conflict, 5361 apr_pool_t *result_pool, 5362 apr_pool_t *scratch_pool); 5363 5364/** 5365 * Resolve a text @a conflict using resolution option @a option. 5366 * 5367 * @since New in 1.10. 5368 */ 5369svn_error_t * 5370svn_client_conflict_text_resolve(svn_client_conflict_t *conflict, 5371 svn_client_conflict_option_t *option, 5372 svn_client_ctx_t *ctx, 5373 apr_pool_t *scratch_pool); 5374 5375/** 5376 * If the provided @a option_id is the ID of an option which resolves 5377 * @a conflict, resolve the text conflict using that option. 5378 * Else, return @c SVN_ERR_CLIENT_CONFLICT_OPTION_NOT_APPLICABLE. 5379 * 5380 * @since New in 1.10. 5381 */ 5382svn_error_t * 5383svn_client_conflict_text_resolve_by_id( 5384 svn_client_conflict_t *conflict, 5385 svn_client_conflict_option_id_t option_id, 5386 svn_client_ctx_t *ctx, 5387 apr_pool_t *scratch_pool); 5388 5389/** 5390 * Return the ID of the option this text @a conflict has been resolved to. 5391 * If the conflict has not been resolved yet, then return 5392 * @c svn_client_conflict_option_unspecified. 5393 * 5394 * @since New in 1.10. 5395 */ 5396svn_client_conflict_option_id_t 5397svn_client_conflict_text_get_resolution(svn_client_conflict_t *conflict); 5398 5399/** @} */ 5400 5401/** 5402 * @defgroup Resolved Mark conflicted paths as resolved. 5403 * 5404 * @{ 5405 */ 5406 5407/** 5408 * Similar to svn_client_resolve(), but without automatic conflict 5409 * resolution support. 5410 * 5411 * @deprecated Provided for backward compatibility with the 1.4 API. 5412 * Use svn_client_resolve() with @a conflict_choice == @c 5413 * svn_wc_conflict_choose_merged instead. 5414 */ 5415SVN_DEPRECATED 5416svn_error_t * 5417svn_client_resolved(const char *path, 5418 svn_boolean_t recursive, 5419 svn_client_ctx_t *ctx, 5420 apr_pool_t *pool); 5421 5422/** Perform automatic conflict resolution on a working copy @a path. 5423 * 5424 * If @a conflict_choice is 5425 * 5426 * - #svn_wc_conflict_choose_base: 5427 * resolve the conflict with the old file contents 5428 * 5429 * - #svn_wc_conflict_choose_mine_full: 5430 * use the original working contents 5431 * 5432 * - #svn_wc_conflict_choose_theirs_full: 5433 * use the new contents 5434 * 5435 * - #svn_wc_conflict_choose_merged: 5436 * don't change the contents at all, just remove the conflict 5437 * status, which is the pre-1.5 behavior. 5438 * 5439 * - #svn_wc_conflict_choose_theirs_conflict 5440 * ###... 5441 * 5442 * - #svn_wc_conflict_choose_mine_conflict 5443 * ###... 5444 * 5445 * - svn_wc_conflict_choose_unspecified 5446 * invoke @a ctx->conflict_func2 with @a ctx->conflict_baton2 to obtain 5447 * a resolution decision for each conflict. This can be used to 5448 * implement interactive conflict resolution but is NOT RECOMMENDED for 5449 * new code. To perform conflict resolution based on interactive user 5450 * input on a per-conflict basis, use svn_client_conflict_text_resolve(), 5451 * svn_client_conflict_prop_resolve(), and 5452 * svn_client_conflict_tree_resolve() instead of svn_client_resolve(). 5453 * 5454 * #svn_wc_conflict_choose_theirs_conflict and 5455 * #svn_wc_conflict_choose_mine_conflict are not legal for binary 5456 * files or properties. 5457 * 5458 * If @a path is not in a state of conflict to begin with, do nothing. 5459 * If @a path's conflict state is removed and @a ctx->notify_func2 is non-NULL, 5460 * call @a ctx->notify_func2 with @a ctx->notify_baton2 and @a path. 5461 * ### with what notification parameters? 5462 * 5463 * If @a depth is #svn_depth_empty, act only on @a path; if 5464 * #svn_depth_files, resolve @a path and its conflicted file 5465 * children (if any); if #svn_depth_immediates, resolve @a path and 5466 * all its immediate conflicted children (both files and directories, 5467 * if any); if #svn_depth_infinity, resolve @a path and every 5468 * conflicted file or directory anywhere beneath it. 5469 * 5470 * Note that this operation will try to lock the parent directory of 5471 * @a path in order to be able to resolve tree-conflicts on @a path. 5472 * 5473 * @since New in 1.5. 5474 */ 5475svn_error_t * 5476svn_client_resolve(const char *path, 5477 svn_depth_t depth, 5478 svn_wc_conflict_choice_t conflict_choice, 5479 svn_client_ctx_t *ctx, 5480 apr_pool_t *pool); 5481 5482 5483/** @} */ 5484 5485/** 5486 * @defgroup Copy Copy paths in the working copy and repository. 5487 * 5488 * @{ 5489 */ 5490 5491/** 5492 * A structure which describes the source of a copy operation--its path, 5493 * revision, and peg revision. 5494 * 5495 * @since New in 1.5. 5496 */ 5497typedef struct svn_client_copy_source_t 5498{ 5499 /** The source path or URL. */ 5500 const char *path; 5501 5502 /** The source operational revision. */ 5503 const svn_opt_revision_t *revision; 5504 5505 /** The source peg revision. */ 5506 const svn_opt_revision_t *peg_revision; 5507} svn_client_copy_source_t; 5508 5509/** Copy each source in @a sources to @a dst_path. 5510 * 5511 * If multiple @a sources are given, @a dst_path must be a directory, 5512 * and @a sources will be copied as children of @a dst_path. 5513 * 5514 * @a sources is an array of <tt>svn_client_copy_source_t *</tt> elements, 5515 * either all referring to local WC items or all referring to versioned 5516 * items in the repository. 5517 * 5518 * If @a sources has only one item, attempt to copy it to @a dst_path. If 5519 * @a copy_as_child is TRUE and @a dst_path already exists, attempt to copy the 5520 * item as a child of @a dst_path. If @a copy_as_child is FALSE and 5521 * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path 5522 * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a 5523 * URL. 5524 * 5525 * If @a sources has multiple items, and @a copy_as_child is TRUE, all 5526 * @a sources are copied as children of @a dst_path. If any child of 5527 * @a dst_path already exists with the same name any item in @a sources, 5528 * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and 5529 * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL. 5530 * 5531 * If @a sources has multiple items, and @a copy_as_child is FALSE, fail 5532 * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED. 5533 * 5534 * If @a dst_path is a URL, use the authentication baton 5535 * in @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to immediately 5536 * attempt to commit the copy action in the repository. 5537 * 5538 * If @a dst_path is not a URL, then this is just a variant of 5539 * svn_client_add(), where the @a sources are scheduled for addition 5540 * as copies. No changes will happen to the repository until a commit occurs. 5541 * This scheduling can be removed with svn_client_revert2(). 5542 * 5543 * If @a make_parents is TRUE, create any non-existent parent directories 5544 * also. Otherwise the parent of @a dst_path must already exist. 5545 * 5546 * If @a ignore_externals is set, don't process externals definitions 5547 * as part of this operation. 5548 * 5549 * If @a metadata_only is @c TRUE and copying a file in a working copy, 5550 * everything in the metadata is updated as if the node is moved, but the 5551 * actual disk copy operation is not performed. This feature is useful for 5552 * clients that want to keep the working copy in sync while the actual working 5553 * copy is updated by some other task. 5554 * 5555 * If @a pin_externals is set, pin URLs in copied externals definitions 5556 * to their current revision unless they were already pinned to a 5557 * particular revision. A pinned external uses a URL which points at a 5558 * fixed revision, rather than the HEAD revision. Externals in the copy 5559 * destination are pinned to either a working copy base revision or the 5560 * HEAD revision of a repository (as of the time the copy operation is 5561 * performed), depending on the type of the copy source: 5562 <pre> 5563 copy source: working copy (WC) REPOS 5564 ------------+------------------------+---------------------------+ 5565 copy WC | external's WC BASE rev | external's repos HEAD rev | 5566 dest: |------------------------+---------------------------+ 5567 REPOS | external's WC BASE rev | external's repos HEAD rev | 5568 ------------+------------------------+---------------------------+ 5569 </pre> 5570 * If the copy source is a working copy, then all externals must be checked 5571 * out, be at a single-revision, contain no local modifications, and contain 5572 * no switched subtrees. Else, #SVN_ERR_WC_PATH_UNEXPECTED_STATUS is returned. 5573 * 5574 * If non-NULL, @a externals_to_pin restricts pinning to a subset of externals. 5575 * It is a hash table keyed by either a local absolute path or a URL at which 5576 * an svn:externals property is set. The hash table contains apr_array_header_t* 5577 * elements as returned by svn_wc_parse_externals_description3(). These arrays 5578 * contain elements of type svn_wc_external_item2_t*, each of which corresponds 5579 * to a single line of an svn:externals definition. Externals corresponding to 5580 * these items will be pinned, other externals will not be pinned. 5581 * If @a externals_to_pin is @c NULL then all externals are pinned. 5582 * If @a pin_externals is @c FALSE then @a externals_to_pin is ignored. 5583 * 5584 * If non-NULL, @a revprop_table is a hash table holding additional, 5585 * custom revision properties (<tt>const char *</tt> names mapped to 5586 * <tt>svn_string_t *</tt> values) to be set on the new revision in 5587 * the event that this is a committing operation. This table cannot 5588 * contain any standard Subversion properties. 5589 * 5590 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton combo 5591 * that this function can use to query for a commit log message when one is 5592 * needed. 5593 * 5594 * If @a ctx->notify_func2 is non-NULL, invoke it with @a ctx->notify_baton2 5595 * for each item added at the new location, passing the new, relative path of 5596 * the added item. 5597 * 5598 * If @a commit_callback is non-NULL, then for each successful commit, call 5599 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 5600 * the commit. 5601 * 5602 * @since New in 1.9. 5603 */ 5604svn_error_t * 5605svn_client_copy7(const apr_array_header_t *sources, 5606 const char *dst_path, 5607 svn_boolean_t copy_as_child, 5608 svn_boolean_t make_parents, 5609 svn_boolean_t ignore_externals, 5610 svn_boolean_t metadata_only, 5611 svn_boolean_t pin_externals, 5612 const apr_hash_t *externals_to_pin, 5613 const apr_hash_t *revprop_table, 5614 svn_commit_callback2_t commit_callback, 5615 void *commit_baton, 5616 svn_client_ctx_t *ctx, 5617 apr_pool_t *pool); 5618 5619/** 5620 * Similar to svn_client_copy7(), but doesn't support meta_data_only 5621 * and cannot pin externals. 5622 * 5623 * 5624 * @since New in 1.7. 5625 * @deprecated Provided for backward compatibility with the 1.8 API. 5626 */ 5627SVN_DEPRECATED 5628svn_error_t * 5629svn_client_copy6(const apr_array_header_t *sources, 5630 const char *dst_path, 5631 svn_boolean_t copy_as_child, 5632 svn_boolean_t make_parents, 5633 svn_boolean_t ignore_externals, 5634 const apr_hash_t *revprop_table, 5635 svn_commit_callback2_t commit_callback, 5636 void *commit_baton, 5637 svn_client_ctx_t *ctx, 5638 apr_pool_t *pool); 5639 5640/** 5641 * Similar to svn_client_copy6(), but returns the commit info in 5642 * @a *commit_info_p rather than through a callback function. 5643 * 5644 * @since New in 1.6. 5645 * @deprecated Provided for backward compatibility with the 1.6 API. 5646 */ 5647SVN_DEPRECATED 5648svn_error_t * 5649svn_client_copy5(svn_commit_info_t **commit_info_p, 5650 const apr_array_header_t *sources, 5651 const char *dst_path, 5652 svn_boolean_t copy_as_child, 5653 svn_boolean_t make_parents, 5654 svn_boolean_t ignore_externals, 5655 const apr_hash_t *revprop_table, 5656 svn_client_ctx_t *ctx, 5657 apr_pool_t *pool); 5658 5659/** 5660 * Similar to svn_client_copy5(), with @a ignore_externals set to @c FALSE. 5661 * 5662 * @since New in 1.5. 5663 * 5664 * @deprecated Provided for backward compatibility with the 1.5 API. 5665 */ 5666SVN_DEPRECATED 5667svn_error_t * 5668svn_client_copy4(svn_commit_info_t **commit_info_p, 5669 const apr_array_header_t *sources, 5670 const char *dst_path, 5671 svn_boolean_t copy_as_child, 5672 svn_boolean_t make_parents, 5673 const apr_hash_t *revprop_table, 5674 svn_client_ctx_t *ctx, 5675 apr_pool_t *pool); 5676 5677/** 5678 * Similar to svn_client_copy4(), with only one @a src_path, @a 5679 * copy_as_child set to @c FALSE, @a revprop_table passed as NULL, and 5680 * @a make_parents set to @c FALSE. Also, use @a src_revision as both 5681 * the operational and peg revision. 5682 * 5683 * @since New in 1.4. 5684 * 5685 * @deprecated Provided for backward compatibility with the 1.4 API. 5686 */ 5687SVN_DEPRECATED 5688svn_error_t * 5689svn_client_copy3(svn_commit_info_t **commit_info_p, 5690 const char *src_path, 5691 const svn_opt_revision_t *src_revision, 5692 const char *dst_path, 5693 svn_client_ctx_t *ctx, 5694 apr_pool_t *pool); 5695 5696 5697/** 5698 * Similar to svn_client_copy3(), with the difference that if @a dst_path 5699 * already exists and is a directory, copy the item into that directory, 5700 * keeping its name (the last component of @a src_path). 5701 * 5702 * @since New in 1.3. 5703 * 5704 * @deprecated Provided for backward compatibility with the 1.3 API. 5705 */ 5706SVN_DEPRECATED 5707svn_error_t * 5708svn_client_copy2(svn_commit_info_t **commit_info_p, 5709 const char *src_path, 5710 const svn_opt_revision_t *src_revision, 5711 const char *dst_path, 5712 svn_client_ctx_t *ctx, 5713 apr_pool_t *pool); 5714 5715 5716/** 5717 * Similar to svn_client_copy2(), but uses #svn_client_commit_info_t 5718 * for @a commit_info_p. 5719 * 5720 * @deprecated Provided for backward compatibility with the 1.2 API. 5721 */ 5722SVN_DEPRECATED 5723svn_error_t * 5724svn_client_copy(svn_client_commit_info_t **commit_info_p, 5725 const char *src_path, 5726 const svn_opt_revision_t *src_revision, 5727 const char *dst_path, 5728 svn_client_ctx_t *ctx, 5729 apr_pool_t *pool); 5730 5731 5732/** @} */ 5733 5734/** 5735 * @defgroup Move Move paths in the working copy or repository. 5736 * 5737 * @{ 5738 */ 5739 5740/** 5741 * Move @a src_paths to @a dst_path. 5742 * 5743 * @a src_paths is an array of (const char *) paths -- either all WC paths 5744 * or all URLs -- of versioned items. If multiple @a src_paths are given, 5745 * @a dst_path must be a directory and @a src_paths will be moved as 5746 * children of @a dst_path. 5747 * 5748 * If @a src_paths are repository URLs: 5749 * 5750 * - @a dst_path must also be a repository URL. 5751 * 5752 * - The authentication baton in @a ctx and @a ctx->log_msg_func/@a 5753 * ctx->log_msg_baton are used to commit the move. 5754 * 5755 * - The move operation will be immediately committed. 5756 * 5757 * If @a src_paths are working copy paths: 5758 * 5759 * - @a dst_path must also be a working copy path. 5760 * 5761 * - @a ctx->log_msg_func3 and @a ctx->log_msg_baton3 are ignored. 5762 * 5763 * - This is a scheduling operation. No changes will happen to the 5764 * repository until a commit occurs. This scheduling can be removed 5765 * with svn_client_revert2(). If one of @a src_paths is a file it is 5766 * removed from the working copy immediately. If one of @a src_path 5767 * is a directory it will remain in the working copy but all the files, 5768 * and unversioned items, it contains will be removed. 5769 * 5770 * If @a src_paths has only one item, attempt to move it to @a dst_path. If 5771 * @a move_as_child is TRUE and @a dst_path already exists, attempt to move the 5772 * item as a child of @a dst_path. If @a move_as_child is FALSE and 5773 * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path 5774 * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a 5775 * URL. 5776 * 5777 * If @a src_paths has multiple items, and @a move_as_child is TRUE, all 5778 * @a src_paths are moved as children of @a dst_path. If any child of 5779 * @a dst_path already exists with the same name any item in @a src_paths, 5780 * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and 5781 * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL. 5782 * 5783 * If @a src_paths has multiple items, and @a move_as_child is FALSE, fail 5784 * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED. 5785 * 5786 * If @a make_parents is TRUE, create any non-existent parent directories 5787 * also. Otherwise, the parent of @a dst_path must already exist. 5788 * 5789 * If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS 5790 * will be raised if the move source is a mixed-revision subtree. 5791 * If @a allow_mixed_revisions is TRUE, a mixed-revision move source is 5792 * allowed but the move will degrade to a copy and a delete without local 5793 * move tracking. This parameter should be set to FALSE except where backwards 5794 * compatibility to svn_client_move6() is required. 5795 * 5796 * If @a metadata_only is @c TRUE and moving a file in a working copy, 5797 * everything in the metadata is updated as if the node is moved, but the 5798 * actual disk move operation is not performed. This feature is useful for 5799 * clients that want to keep the working copy in sync while the actual working 5800 * copy is updated by some other task. 5801 * 5802 * If non-NULL, @a revprop_table is a hash table holding additional, 5803 * custom revision properties (<tt>const char *</tt> names mapped to 5804 * <tt>svn_string_t *</tt> values) to be set on the new revision in 5805 * the event that this is a committing operation. This table cannot 5806 * contain any standard Subversion properties. 5807 * 5808 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton combo that 5809 * this function can use to query for a commit log message when one is needed. 5810 * 5811 * If @a ctx->notify_func2 is non-NULL, then for each item moved, call 5812 * @a ctx->notify_func2 with the @a ctx->notify_baton2 twice, once to indicate 5813 * the deletion of the moved thing, and once to indicate the addition of 5814 * the new location of the thing. 5815 * 5816 * ### Is this really true? What about svn_wc_notify_commit_replaced()? ### 5817 * 5818 * If @a commit_callback is non-NULL, then for each successful commit, call 5819 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 5820 * the commit. 5821 * 5822 * @since New in 1.8. 5823 */ 5824svn_error_t * 5825svn_client_move7(const apr_array_header_t *src_paths, 5826 const char *dst_path, 5827 svn_boolean_t move_as_child, 5828 svn_boolean_t make_parents, 5829 svn_boolean_t allow_mixed_revisions, 5830 svn_boolean_t metadata_only, 5831 const apr_hash_t *revprop_table, 5832 svn_commit_callback2_t commit_callback, 5833 void *commit_baton, 5834 svn_client_ctx_t *ctx, 5835 apr_pool_t *pool); 5836 5837/** 5838 * Similar to svn_client_move7(), but with @a allow_mixed_revisions always 5839 * set to @c TRUE and @a metadata_only always to @c FALSE. 5840 * 5841 * @since New in 1.7. 5842 * @deprecated Provided for backward compatibility with the 1.7 API. 5843 */ 5844SVN_DEPRECATED 5845svn_error_t * 5846svn_client_move6(const apr_array_header_t *src_paths, 5847 const char *dst_path, 5848 svn_boolean_t move_as_child, 5849 svn_boolean_t make_parents, 5850 const apr_hash_t *revprop_table, 5851 svn_commit_callback2_t commit_callback, 5852 void *commit_baton, 5853 svn_client_ctx_t *ctx, 5854 apr_pool_t *pool); 5855 5856/** 5857 * Similar to svn_client_move6(), but returns the commit info in 5858 * @a *commit_info_p rather than through a callback function. 5859 * 5860 * A WC-to-WC move will include any modified and/or unversioned children. 5861 * @a force is ignored. 5862 * 5863 * @since New in 1.5. 5864 * @deprecated Provided for backward compatibility with the 1.6 API. 5865 */ 5866SVN_DEPRECATED 5867svn_error_t * 5868svn_client_move5(svn_commit_info_t **commit_info_p, 5869 const apr_array_header_t *src_paths, 5870 const char *dst_path, 5871 svn_boolean_t force, 5872 svn_boolean_t move_as_child, 5873 svn_boolean_t make_parents, 5874 const apr_hash_t *revprop_table, 5875 svn_client_ctx_t *ctx, 5876 apr_pool_t *pool); 5877 5878/** 5879 * Similar to svn_client_move5(), with only one @a src_path, @a 5880 * move_as_child set to @c FALSE, @a revprop_table passed as NULL, and 5881 * @a make_parents set to @c FALSE. 5882 * 5883 * Note: The behaviour of @a force changed in 1.5 (r860885 and r861421), when 5884 * the 'move' semantics were improved to just move the source including any 5885 * modified and/or unversioned items in it. Before that, @a force 5886 * controlled what happened to such items, but now @a force is ignored. 5887 * 5888 * @since New in 1.4. 5889 * 5890 * @deprecated Provided for backward compatibility with the 1.4 API. 5891 */ 5892SVN_DEPRECATED 5893svn_error_t * 5894svn_client_move4(svn_commit_info_t **commit_info_p, 5895 const char *src_path, 5896 const char *dst_path, 5897 svn_boolean_t force, 5898 svn_client_ctx_t *ctx, 5899 apr_pool_t *pool); 5900 5901/** 5902 * Similar to svn_client_move4(), with the difference that if @a dst_path 5903 * already exists and is a directory, move the item into that directory, 5904 * keeping its name (the last component of @a src_path). 5905 * 5906 * @since New in 1.3. 5907 * 5908 * @deprecated Provided for backward compatibility with the 1.3 API. 5909 */ 5910SVN_DEPRECATED 5911svn_error_t * 5912svn_client_move3(svn_commit_info_t **commit_info_p, 5913 const char *src_path, 5914 const char *dst_path, 5915 svn_boolean_t force, 5916 svn_client_ctx_t *ctx, 5917 apr_pool_t *pool); 5918 5919/** 5920 * Similar to svn_client_move3(), but uses #svn_client_commit_info_t 5921 * for @a commit_info_p. 5922 * 5923 * @deprecated Provided for backward compatibility with the 1.2 API. 5924 * 5925 * @since New in 1.2. 5926 */ 5927SVN_DEPRECATED 5928svn_error_t * 5929svn_client_move2(svn_client_commit_info_t **commit_info_p, 5930 const char *src_path, 5931 const char *dst_path, 5932 svn_boolean_t force, 5933 svn_client_ctx_t *ctx, 5934 apr_pool_t *pool); 5935 5936/** 5937 * Similar to svn_client_move2(), but an extra argument @a src_revision 5938 * must be passed. This has no effect, but must be of kind 5939 * #svn_opt_revision_unspecified or #svn_opt_revision_head, 5940 * otherwise error #SVN_ERR_UNSUPPORTED_FEATURE is returned. 5941 * 5942 * @deprecated Provided for backward compatibility with the 1.1 API. 5943 */ 5944SVN_DEPRECATED 5945svn_error_t * 5946svn_client_move(svn_client_commit_info_t **commit_info_p, 5947 const char *src_path, 5948 const svn_opt_revision_t *src_revision, 5949 const char *dst_path, 5950 svn_boolean_t force, 5951 svn_client_ctx_t *ctx, 5952 apr_pool_t *pool); 5953 5954/** @} */ 5955 5956 5957/** Properties 5958 * 5959 * Note that certain svn-controlled properties must always have their 5960 * values set and stored in UTF8 with LF line endings. When 5961 * retrieving these properties, callers must convert the values back 5962 * to native locale and native line-endings before displaying them to 5963 * the user. For help with this task, see 5964 * svn_prop_needs_translation(), svn_subst_translate_string(), and 5965 * svn_subst_detranslate_string(). 5966 * 5967 * @defgroup svn_client_prop_funcs Property functions 5968 * @{ 5969 */ 5970 5971 5972/** 5973 * Set @a propname to @a propval on @a url. A @a propval of @c NULL will 5974 * delete the property. 5975 * 5976 * Immediately attempt to commit the property change in the repository, 5977 * using the authentication baton in @a ctx and @a 5978 * ctx->log_msg_func3/@a ctx->log_msg_baton3. 5979 * 5980 * If the property has changed on @a url since revision 5981 * @a base_revision_for_url (which must not be #SVN_INVALID_REVNUM), no 5982 * change will be made and an error will be returned. 5983 * 5984 * If non-NULL, @a revprop_table is a hash table holding additional, 5985 * custom revision properties (<tt>const char *</tt> names mapped to 5986 * <tt>svn_string_t *</tt> values) to be set on the new revision. This 5987 * table cannot contain any standard Subversion properties. 5988 * 5989 * If @a commit_callback is non-NULL, then call @a commit_callback with 5990 * @a commit_baton and a #svn_commit_info_t for the commit. 5991 * 5992 * If @a propname is an svn-controlled property (i.e. prefixed with 5993 * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that 5994 * the value is UTF8-encoded and uses LF line-endings. 5995 * 5996 * If @a skip_checks is TRUE, do no validity checking. But if @a 5997 * skip_checks is FALSE, and @a propname is not a valid property for @a 5998 * url, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the property is 5999 * not appropriate for @a url), or * #SVN_ERR_BAD_MIME_TYPE (if @a propname 6000 * is "svn:mime-type", but @a propval is not a valid mime-type). 6001 * 6002 * Use @a scratch_pool for all memory allocation. 6003 * 6004 * @since New in 1.7. 6005 */ 6006svn_error_t * 6007svn_client_propset_remote(const char *propname, 6008 const svn_string_t *propval, 6009 const char *url, 6010 svn_boolean_t skip_checks, 6011 svn_revnum_t base_revision_for_url, 6012 const apr_hash_t *revprop_table, 6013 svn_commit_callback2_t commit_callback, 6014 void *commit_baton, 6015 svn_client_ctx_t *ctx, 6016 apr_pool_t *scratch_pool); 6017 6018/** 6019 * Set @a propname to @a propval on each (const char *) target in @a 6020 * targets. The targets must be all working copy paths. A @a propval 6021 * of @c NULL will delete the property. 6022 * 6023 * If @a depth is #svn_depth_empty, set the property on each member of 6024 * @a targets only; if #svn_depth_files, set it on @a targets and their 6025 * file children (if any); if #svn_depth_immediates, on @a targets and all 6026 * of their immediate children (both files and directories); if 6027 * #svn_depth_infinity, on @a targets and everything beneath them. 6028 * 6029 * @a changelists is an array of <tt>const char *</tt> changelist 6030 * names, used as a restrictive filter on items whose properties are 6031 * set; that is, don't set properties on any item unless it's a member 6032 * of one of those changelists. If @a changelists is empty (or 6033 * altogether @c NULL), no changelist filtering occurs. 6034 * 6035 * If @a propname is an svn-controlled property (i.e. prefixed with 6036 * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that 6037 * the value is UTF8-encoded and uses LF line-endings. 6038 * 6039 * If @a skip_checks is TRUE, do no validity checking. But if @a 6040 * skip_checks is FALSE, and @a propname is not a valid property for @a 6041 * targets, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the 6042 * property is not appropriate for @a targets), or 6043 * #SVN_ERR_BAD_MIME_TYPE (if @a propname is "svn:mime-type", but @a 6044 * propval is not a valid mime-type). 6045 * 6046 * If @a ctx->cancel_func is non-NULL, invoke it passing @a 6047 * ctx->cancel_baton at various places during the operation. 6048 * 6049 * Use @a scratch_pool for all memory allocation. 6050 * 6051 * @since New in 1.7. 6052 */ 6053svn_error_t * 6054svn_client_propset_local(const char *propname, 6055 const svn_string_t *propval, 6056 const apr_array_header_t *targets, 6057 svn_depth_t depth, 6058 svn_boolean_t skip_checks, 6059 const apr_array_header_t *changelists, 6060 svn_client_ctx_t *ctx, 6061 apr_pool_t *scratch_pool); 6062 6063/** 6064 * An amalgamation of svn_client_propset_local() and 6065 * svn_client_propset_remote() that takes only a single target, and 6066 * returns the commit info in @a *commit_info_p rather than through a 6067 * callback function. 6068 * 6069 * @since New in 1.5. 6070 * @deprecated Provided for backward compatibility with the 1.6 API. 6071 */ 6072SVN_DEPRECATED 6073svn_error_t * 6074svn_client_propset3(svn_commit_info_t **commit_info_p, 6075 const char *propname, 6076 const svn_string_t *propval, 6077 const char *target, 6078 svn_depth_t depth, 6079 svn_boolean_t skip_checks, 6080 svn_revnum_t base_revision_for_url, 6081 const apr_array_header_t *changelists, 6082 const apr_hash_t *revprop_table, 6083 svn_client_ctx_t *ctx, 6084 apr_pool_t *pool); 6085 6086/** 6087 * Like svn_client_propset3(), but with @a base_revision_for_url 6088 * always #SVN_INVALID_REVNUM; @a commit_info_p always @c NULL; @a 6089 * changelists always @c NULL; @a revprop_table always @c NULL; and @a 6090 * depth set according to @a recurse: if @a recurse is TRUE, @a depth 6091 * is #svn_depth_infinity, else #svn_depth_empty. 6092 * 6093 * @deprecated Provided for backward compatibility with the 1.4 API. 6094 */ 6095SVN_DEPRECATED 6096svn_error_t * 6097svn_client_propset2(const char *propname, 6098 const svn_string_t *propval, 6099 const char *target, 6100 svn_boolean_t recurse, 6101 svn_boolean_t skip_checks, 6102 svn_client_ctx_t *ctx, 6103 apr_pool_t *pool); 6104 6105/** 6106 * Like svn_client_propset2(), but with @a skip_checks always FALSE and a 6107 * newly created @a ctx. 6108 * 6109 * @deprecated Provided for backward compatibility with the 1.1 API. 6110 */ 6111SVN_DEPRECATED 6112svn_error_t * 6113svn_client_propset(const char *propname, 6114 const svn_string_t *propval, 6115 const char *target, 6116 svn_boolean_t recurse, 6117 apr_pool_t *pool); 6118 6119/** Set @a propname to @a propval on revision @a revision in the repository 6120 * represented by @a URL. Use the authentication baton in @a ctx for 6121 * authentication, and @a pool for all memory allocation. Return the actual 6122 * rev affected in @a *set_rev. A @a propval of @c NULL will delete the 6123 * property. 6124 * 6125 * If @a original_propval is non-NULL, then just before setting the 6126 * new value, check that the old value matches @a original_propval; 6127 * if they do not match, return the error #SVN_ERR_RA_OUT_OF_DATE. 6128 * This is to help clients support interactive editing of revprops: 6129 * without this check, the window during which the property may change 6130 * underneath the user is as wide as the amount of time the user 6131 * spends editing the property. With this check, the window is 6132 * reduced to a small, constant amount of time right before we set the 6133 * new value. (To check that an old value is still non-existent, set 6134 * @a original_propval->data to NULL, and @a original_propval->len is 6135 * ignored.) 6136 * If the server advertises #SVN_RA_CAPABILITY_ATOMIC_REVPROPS, the 6137 * check of @a original_propval is done atomically. 6138 * 6139 * Note: the representation of "property is not set" in @a 6140 * original_propval differs from the representation in other APIs 6141 * (such as svn_fs_change_rev_prop2() and svn_ra_change_rev_prop2()). 6142 * 6143 * If @a force is TRUE, allow newlines in the author property. 6144 * 6145 * If @a propname is an svn-controlled property (i.e. prefixed with 6146 * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that 6147 * the value UTF8-encoded and uses LF line-endings. 6148 * 6149 * Note that unlike its cousin svn_client_propset3(), this routine 6150 * doesn't affect the working copy at all; it's a pure network 6151 * operation that changes an *unversioned* property attached to a 6152 * revision. This can be used to tweak log messages, dates, authors, 6153 * and the like. Be careful: it's a lossy operation. 6154 6155 * @a ctx->notify_func2 and @a ctx->notify_baton2 are the notification 6156 * functions and baton which are called upon successful setting of the 6157 * property. 6158 * 6159 * Also note that unless the administrator creates a 6160 * pre-revprop-change hook in the repository, this feature will fail. 6161 * 6162 * @since New in 1.6. 6163 */ 6164svn_error_t * 6165svn_client_revprop_set2(const char *propname, 6166 const svn_string_t *propval, 6167 const svn_string_t *original_propval, 6168 const char *URL, 6169 const svn_opt_revision_t *revision, 6170 svn_revnum_t *set_rev, 6171 svn_boolean_t force, 6172 svn_client_ctx_t *ctx, 6173 apr_pool_t *pool); 6174 6175/** 6176 * Similar to svn_client_revprop_set2(), but with @a original_propval 6177 * always @c NULL. 6178 * 6179 * @deprecated Provided for backward compatibility with the 1.5 API. 6180 */ 6181SVN_DEPRECATED 6182svn_error_t * 6183svn_client_revprop_set(const char *propname, 6184 const svn_string_t *propval, 6185 const char *URL, 6186 const svn_opt_revision_t *revision, 6187 svn_revnum_t *set_rev, 6188 svn_boolean_t force, 6189 svn_client_ctx_t *ctx, 6190 apr_pool_t *pool); 6191 6192/** 6193 * Set @a *props to a hash table whose keys are absolute paths or URLs 6194 * of items on which property @a propname is explicitly set, and whose 6195 * values are <tt>svn_string_t *</tt> representing the property value for 6196 * @a propname at that path. 6197 * 6198 * If @a inherited_props is not @c NULL, then set @a *inherited_props to a 6199 * depth-first ordered array of #svn_prop_inherited_item_t * structures 6200 * representing the properties inherited by @a target. If @a target is a 6201 * working copy path, then properties inherited by @a target as far as the 6202 * root of the working copy are obtained from the working copy's actual 6203 * property values. Properties inherited from above the working copy root 6204 * come from the inherited properties cache. If @a target is a URL, then 6205 * the inherited properties come from the repository. If @a inherited_props 6206 * is not @c NULL and no inheritable properties are found, then set 6207 * @a *inherited_props to an empty array. 6208 * 6209 * The #svn_prop_inherited_item_t->path_or_url members of the 6210 * #svn_prop_inherited_item_t * structures in @a *inherited_props are 6211 * URLs if @a target is a URL or if @a target is a working copy path but the 6212 * property represented by the structure is above the working copy root (i.e. 6213 * the inherited property is from the cache). In all other cases the 6214 * #svn_prop_inherited_item_t->path_or_url members are absolute working copy 6215 * paths. 6216 * 6217 * Allocate @a *props (including keys and values) and @a *inherited_props 6218 * (including its elements) in @a result_pool, use @a scratch_pool for 6219 * temporary allocations. 6220 * 6221 * @a target is a WC absolute path or a URL. 6222 * 6223 * Don't store any path, not even @a target, if it does not have a 6224 * property named @a propname. 6225 * 6226 * If @a revision->kind is #svn_opt_revision_unspecified, then: get 6227 * properties from the working copy if @a target is a working copy 6228 * path, or from the repository head if @a target is a URL. Else get 6229 * the properties as of @a revision. The actual node revision 6230 * selected is determined by the path as it exists in @a peg_revision. 6231 * If @a peg_revision->kind is #svn_opt_revision_unspecified, then 6232 * it defaults to #svn_opt_revision_head for URLs or 6233 * #svn_opt_revision_working for WC targets. Use the authentication 6234 * baton in @a ctx for authentication if contacting the repository. 6235 * If @a actual_revnum is not @c NULL, the actual revision number used 6236 * for the fetch is stored in @a *actual_revnum. 6237 * 6238 * If @a depth is #svn_depth_empty, fetch the property from 6239 * @a target only; if #svn_depth_files, fetch from @a target and its 6240 * file children (if any); if #svn_depth_immediates, from @a target 6241 * and all of its immediate children (both files and directories); if 6242 * #svn_depth_infinity, from @a target and everything beneath it. 6243 * 6244 * @a changelists is an array of <tt>const char *</tt> changelist 6245 * names, used as a restrictive filter on items whose properties are 6246 * gotten; that is, don't get @a propname on any item unless it's a member 6247 * of one of those changelists. If @a changelists is empty (or 6248 * altogether @c NULL), no changelist filtering occurs. 6249 * 6250 * If error, don't touch @a *props, otherwise @a *props is a hash table 6251 * even if empty. 6252 * 6253 * This function returns SVN_ERR_UNVERSIONED_RESOURCE when it is called on 6254 * unversioned nodes. 6255 * 6256 * @since New in 1.8. 6257 */ 6258svn_error_t * 6259svn_client_propget5(apr_hash_t **props, 6260 apr_array_header_t **inherited_props, 6261 const char *propname, 6262 const char *target, /* abspath or URL */ 6263 const svn_opt_revision_t *peg_revision, 6264 const svn_opt_revision_t *revision, 6265 svn_revnum_t *actual_revnum, 6266 svn_depth_t depth, 6267 const apr_array_header_t *changelists, 6268 svn_client_ctx_t *ctx, 6269 apr_pool_t *result_pool, 6270 apr_pool_t *scratch_pool); 6271 6272/** 6273 * Similar to svn_client_propget5 but with @a inherited_props always 6274 * passed as NULL. 6275 * 6276 * @since New in 1.7. 6277 * @deprecated Provided for backward compatibility with the 1.7 API. 6278 */ 6279SVN_DEPRECATED 6280svn_error_t * 6281svn_client_propget4(apr_hash_t **props, 6282 const char *propname, 6283 const char *target, /* abspath or URL */ 6284 const svn_opt_revision_t *peg_revision, 6285 const svn_opt_revision_t *revision, 6286 svn_revnum_t *actual_revnum, 6287 svn_depth_t depth, 6288 const apr_array_header_t *changelists, 6289 svn_client_ctx_t *ctx, 6290 apr_pool_t *result_pool, 6291 apr_pool_t *scratch_pool); 6292 6293/** 6294 * Similar to svn_client_propget4(), but with the following change to the 6295 * output hash keys: keys are `<tt>char *</tt>' paths, prefixed by 6296 * @a target, which is a working copy path or a URL. 6297 * 6298 * This function returns SVN_ERR_ENTRY_NOT_FOUND where svn_client_propget4 6299 * would return SVN_ERR_UNVERSIONED_RESOURCE. 6300 * 6301 * @since New in 1.5. 6302 * @deprecated Provided for backward compatibility with the 1.6 API. 6303 */ 6304SVN_DEPRECATED 6305svn_error_t * 6306svn_client_propget3(apr_hash_t **props, 6307 const char *propname, 6308 const char *target, 6309 const svn_opt_revision_t *peg_revision, 6310 const svn_opt_revision_t *revision, 6311 svn_revnum_t *actual_revnum, 6312 svn_depth_t depth, 6313 const apr_array_header_t *changelists, 6314 svn_client_ctx_t *ctx, 6315 apr_pool_t *pool); 6316 6317/** 6318 * Similar to svn_client_propget3(), except that @a actual_revnum and 6319 * @a changelists are always @c NULL, and @a depth is set according to 6320 * @a recurse: if @a recurse is TRUE, then @a depth is 6321 * #svn_depth_infinity, else #svn_depth_empty. 6322 * 6323 * @deprecated Provided for backward compatibility with the 1.4 API. 6324 */ 6325SVN_DEPRECATED 6326svn_error_t * 6327svn_client_propget2(apr_hash_t **props, 6328 const char *propname, 6329 const char *target, 6330 const svn_opt_revision_t *peg_revision, 6331 const svn_opt_revision_t *revision, 6332 svn_boolean_t recurse, 6333 svn_client_ctx_t *ctx, 6334 apr_pool_t *pool); 6335 6336/** 6337 * Similar to svn_client_propget2(), except that @a peg_revision is 6338 * always the same as @a revision. 6339 * 6340 * @deprecated Provided for backward compatibility with the 1.1 API. 6341 */ 6342SVN_DEPRECATED 6343svn_error_t * 6344svn_client_propget(apr_hash_t **props, 6345 const char *propname, 6346 const char *target, 6347 const svn_opt_revision_t *revision, 6348 svn_boolean_t recurse, 6349 svn_client_ctx_t *ctx, 6350 apr_pool_t *pool); 6351 6352/** Set @a *propval to the value of @a propname on revision @a revision 6353 * in the repository represented by @a URL. Use the authentication baton 6354 * in @a ctx for authentication, and @a pool for all memory allocation. 6355 * Return the actual rev queried in @a *set_rev. 6356 * 6357 * If @a propname does not exist on @a revision, set @a *propval to @c NULL. 6358 * 6359 * Note that unlike its cousin svn_client_propget(), this routine 6360 * doesn't affect the working copy at all; it's a pure network 6361 * operation that queries an *unversioned* property attached to a 6362 * revision. This can query log messages, dates, authors, and the 6363 * like. 6364 */ 6365svn_error_t * 6366svn_client_revprop_get(const char *propname, 6367 svn_string_t **propval, 6368 const char *URL, 6369 const svn_opt_revision_t *revision, 6370 svn_revnum_t *set_rev, 6371 svn_client_ctx_t *ctx, 6372 apr_pool_t *pool); 6373 6374/** 6375 * Invoke @a receiver with @a receiver_baton to return the regular explicit, and 6376 * possibly the inherited, properties of @a target, a URL or working copy path. 6377 * @a receiver will be called for each path encountered. 6378 * 6379 * @a target is a WC path or a URL. 6380 * 6381 * If @a revision->kind is #svn_opt_revision_unspecified, then get the 6382 * explicit (and possibly the inherited) properties from the working copy, 6383 * if @a target is a working copy path, or from the repository head if 6384 * @a target is a URL. Else get the properties as of @a revision. 6385 * The actual node revision selected is determined by the path as it exists 6386 * in @a peg_revision. If @a peg_revision->kind is 6387 * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head 6388 * for URLs or #svn_opt_revision_working for WC targets. Use the 6389 * authentication baton cached in @a ctx for authentication if contacting 6390 * the repository. 6391 * 6392 * If @a depth is #svn_depth_empty, list only the properties of 6393 * @a target itself. If @a depth is #svn_depth_files, and 6394 * @a target is a directory, list the properties of @a target 6395 * and its file entries. If #svn_depth_immediates, list the properties 6396 * of its immediate file and directory entries. If #svn_depth_infinity, 6397 * list the properties of its file entries and recurse (with 6398 * #svn_depth_infinity) on directory entries. #svn_depth_unknown is 6399 * equivalent to #svn_depth_empty. All other values produce undefined 6400 * results. 6401 * 6402 * @a changelists is an array of <tt>const char *</tt> changelist 6403 * names, used as a restrictive filter on items whose properties are 6404 * listed; that is, don't list properties on any item unless it's a member 6405 * of one of those changelists. If @a changelists is empty (or 6406 * altogether @c NULL), no changelist filtering occurs. 6407 * 6408 * If @a get_target_inherited_props is true, then also return any inherited 6409 * properties when @a receiver is called for @a target. If @a target is a 6410 * working copy path, then properties inherited by @a target as far as the 6411 * root of the working copy are obtained from the working copy's actual 6412 * property values. Properties inherited from above the working copy 6413 * root come from the inherited properties cache. If @a target is a URL, 6414 * then the inherited properties come from the repository. 6415 * If @a get_target_inherited_props is false, then no inherited properties 6416 * are returned to @a receiver. 6417 * 6418 * If @a target is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND. 6419 * 6420 * @since New in 1.8. 6421 */ 6422svn_error_t * 6423svn_client_proplist4(const char *target, 6424 const svn_opt_revision_t *peg_revision, 6425 const svn_opt_revision_t *revision, 6426 svn_depth_t depth, 6427 const apr_array_header_t *changelists, 6428 svn_boolean_t get_target_inherited_props, 6429 svn_proplist_receiver2_t receiver, 6430 void *receiver_baton, 6431 svn_client_ctx_t *ctx, 6432 apr_pool_t *scratch_pool); 6433 6434/** 6435 * Similar to svn_client_proplist4(), except that the @a receiver type 6436 * is a #svn_proplist_receiver_t, @a get_target_inherited_props is 6437 * always passed NULL, and there is no separate scratch pool. 6438 * 6439 * @since New in 1.5. 6440 * @deprecated Provided for backward compatibility with the 1.7 API. 6441 */ 6442SVN_DEPRECATED 6443svn_error_t * 6444svn_client_proplist3(const char *target, 6445 const svn_opt_revision_t *peg_revision, 6446 const svn_opt_revision_t *revision, 6447 svn_depth_t depth, 6448 const apr_array_header_t *changelists, 6449 svn_proplist_receiver_t receiver, 6450 void *receiver_baton, 6451 svn_client_ctx_t *ctx, 6452 apr_pool_t *pool); 6453 6454/** 6455 * Similar to svn_client_proplist3(), except the properties are 6456 * returned as an array of #svn_client_proplist_item_t * structures 6457 * instead of by invoking the receiver function, there's no support 6458 * for @a changelists filtering, and @a recurse is used instead of a 6459 * #svn_depth_t parameter (FALSE corresponds to #svn_depth_empty, 6460 * and TRUE to #svn_depth_infinity). 6461 * 6462 * @since New in 1.2. 6463 * 6464 * @deprecated Provided for backward compatibility with the 1.4 API. 6465 */ 6466SVN_DEPRECATED 6467svn_error_t * 6468svn_client_proplist2(apr_array_header_t **props, 6469 const char *target, 6470 const svn_opt_revision_t *peg_revision, 6471 const svn_opt_revision_t *revision, 6472 svn_boolean_t recurse, 6473 svn_client_ctx_t *ctx, 6474 apr_pool_t *pool); 6475 6476/** 6477 * Similar to svn_client_proplist2(), except that @a peg_revision is 6478 * always the same as @a revision. 6479 * 6480 * @deprecated Provided for backward compatibility with the 1.1 API. 6481 */ 6482SVN_DEPRECATED 6483svn_error_t * 6484svn_client_proplist(apr_array_header_t **props, 6485 const char *target, 6486 const svn_opt_revision_t *revision, 6487 svn_boolean_t recurse, 6488 svn_client_ctx_t *ctx, 6489 apr_pool_t *pool); 6490 6491/** Set @a *props to a hash of the revision props attached to @a revision in 6492 * the repository represented by @a URL. Use the authentication baton cached 6493 * in @a ctx for authentication, and @a pool for all memory allocation. 6494 * Return the actual rev queried in @a *set_rev. 6495 * 6496 * The allocated hash maps (<tt>const char *</tt>) property names to 6497 * (#svn_string_t *) property values. 6498 * 6499 * Note that unlike its cousin svn_client_proplist(), this routine 6500 * doesn't read a working copy at all; it's a pure network operation 6501 * that reads *unversioned* properties attached to a revision. 6502 */ 6503svn_error_t * 6504svn_client_revprop_list(apr_hash_t **props, 6505 const char *URL, 6506 const svn_opt_revision_t *revision, 6507 svn_revnum_t *set_rev, 6508 svn_client_ctx_t *ctx, 6509 apr_pool_t *pool); 6510/** @} */ 6511 6512 6513/** 6514 * @defgroup Export Export a tree from version control. 6515 * 6516 * @{ 6517 */ 6518 6519/** 6520 * Export the contents of either a subversion repository or a 6521 * subversion working copy into a 'clean' directory (meaning a 6522 * directory with no administrative directories). If @a result_rev 6523 * is not @c NULL and the path being exported is a repository URL, set 6524 * @a *result_rev to the value of the revision actually exported (set 6525 * it to #SVN_INVALID_REVNUM for local exports). 6526 * 6527 * @a from_path_or_url is either the path the working copy on disk, or 6528 * a URL to the repository you wish to export. 6529 * 6530 * When exporting a directory, @a to_path is the path to the directory 6531 * where you wish to create the exported tree; when exporting a file, it 6532 * is the path of the file that will be created. If @a to_path is the 6533 * empty path, then the basename of the export file/directory in the repository 6534 * will be used. If @a to_path represents an existing directory, and a 6535 * file is being exported, then a file with the that basename will be 6536 * created under that directory (as with 'copy' operations). 6537 * 6538 * @a peg_revision is the revision where the path is first looked up 6539 * when exporting from a repository. If @a peg_revision->kind is 6540 * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head 6541 * for URLs or #svn_opt_revision_working for WC targets. 6542 * 6543 * @a revision is the revision that should be exported. 6544 * 6545 * @a peg_revision and @a revision must not be @c NULL. 6546 * 6547 * @a ctx->notify_func2 and @a ctx->notify_baton2 are the notification 6548 * functions and baton which are passed to svn_client_checkout() when 6549 * exporting from a repository. 6550 * 6551 * @a ctx is a context used for authentication in the repository case. 6552 * 6553 * @a overwrite if TRUE will cause the export to overwrite files or 6554 * directories. 6555 * 6556 * If @a ignore_externals is set, don't process externals definitions 6557 * as part of this operation. 6558 * 6559 * If @a ignore_keywords is set, don't expand keywords as part of this 6560 * operation. 6561 * 6562 * @a native_eol allows you to override the standard eol marker on the 6563 * platform you are running on. Can be either "LF", "CR" or "CRLF" or 6564 * NULL. If NULL will use the standard eol marker. Any other value 6565 * will cause the #SVN_ERR_IO_UNKNOWN_EOL error to be returned. 6566 * 6567 * If @a depth is #svn_depth_infinity, export fully recursively. Else 6568 * if it is #svn_depth_immediates, export @a from_path_or_url and its 6569 * immediate children (if any), but with subdirectories empty and at 6570 * #svn_depth_empty. Else if #svn_depth_files, export @a 6571 * from_path_or_url and its immediate file children (if any) only. If 6572 * @a depth is #svn_depth_empty, then export exactly @a 6573 * from_path_or_url and none of its children. 6574 * 6575 * All allocations are done in @a pool. 6576 * 6577 * @since New in 1.7. 6578 */ 6579svn_error_t * 6580svn_client_export5(svn_revnum_t *result_rev, 6581 const char *from_path_or_url, 6582 const char *to_path, 6583 const svn_opt_revision_t *peg_revision, 6584 const svn_opt_revision_t *revision, 6585 svn_boolean_t overwrite, 6586 svn_boolean_t ignore_externals, 6587 svn_boolean_t ignore_keywords, 6588 svn_depth_t depth, 6589 const char *native_eol, 6590 svn_client_ctx_t *ctx, 6591 apr_pool_t *pool); 6592 6593/** 6594 * Similar to svn_client_export5(), but with @a ignore_keywords set 6595 * to FALSE. 6596 * 6597 * @deprecated Provided for backward compatibility with the 1.6 API. 6598 * @since New in 1.5. 6599 */ 6600SVN_DEPRECATED 6601svn_error_t * 6602svn_client_export4(svn_revnum_t *result_rev, 6603 const char *from_path_or_url, 6604 const char *to_path, 6605 const svn_opt_revision_t *peg_revision, 6606 const svn_opt_revision_t *revision, 6607 svn_boolean_t overwrite, 6608 svn_boolean_t ignore_externals, 6609 svn_depth_t depth, 6610 const char *native_eol, 6611 svn_client_ctx_t *ctx, 6612 apr_pool_t *pool); 6613 6614 6615/** 6616 * Similar to svn_client_export4(), but with @a depth set according to 6617 * @a recurse: if @a recurse is TRUE, set @a depth to 6618 * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to 6619 * #svn_depth_files. 6620 * 6621 * @deprecated Provided for backward compatibility with the 1.4 API. 6622 * 6623 * @since New in 1.2. 6624 */ 6625SVN_DEPRECATED 6626svn_error_t * 6627svn_client_export3(svn_revnum_t *result_rev, 6628 const char *from_path_or_url, 6629 const char *to_path, 6630 const svn_opt_revision_t *peg_revision, 6631 const svn_opt_revision_t *revision, 6632 svn_boolean_t overwrite, 6633 svn_boolean_t ignore_externals, 6634 svn_boolean_t recurse, 6635 const char *native_eol, 6636 svn_client_ctx_t *ctx, 6637 apr_pool_t *pool); 6638 6639 6640/** 6641 * Similar to svn_client_export3(), but with @a peg_revision 6642 * always set to #svn_opt_revision_unspecified, @a overwrite set to 6643 * the value of @a force, @a ignore_externals always FALSE, and 6644 * @a recurse always TRUE. 6645 * 6646 * @since New in 1.1. 6647 * @deprecated Provided for backward compatibility with the 1.1 API. 6648 */ 6649SVN_DEPRECATED 6650svn_error_t * 6651svn_client_export2(svn_revnum_t *result_rev, 6652 const char *from_path_or_url, 6653 const char *to_path, 6654 svn_opt_revision_t *revision, 6655 svn_boolean_t force, 6656 const char *native_eol, 6657 svn_client_ctx_t *ctx, 6658 apr_pool_t *pool); 6659 6660 6661/** 6662 * Similar to svn_client_export2(), but with @a native_eol always set 6663 * to NULL. 6664 * 6665 * @deprecated Provided for backward compatibility with the 1.0 API. 6666 */ 6667SVN_DEPRECATED 6668svn_error_t * 6669svn_client_export(svn_revnum_t *result_rev, 6670 const char *from_path_or_url, 6671 const char *to_path, 6672 svn_opt_revision_t *revision, 6673 svn_boolean_t force, 6674 svn_client_ctx_t *ctx, 6675 apr_pool_t *pool); 6676 6677/** @} */ 6678 6679/** 6680 * @defgroup List List / ls 6681 * 6682 * @{ 6683 */ 6684 6685/** The type of function invoked by svn_client_list3() to report the details 6686 * of each directory entry being listed. 6687 * 6688 * @a baton is the baton that was passed to the caller. @a path is the 6689 * entry's path relative to @a abs_path; it is the empty path when reporting 6690 * the top node of the list operation. @a dirent contains some or all of 6691 * the directory entry's details, as determined by the caller. @a lock is 6692 * the entry's lock, if it is locked and if lock information is being 6693 * reported by the caller; otherwise @a lock is NULL. @a abs_path is the 6694 * repository path of the top node of the list operation; it is relative to 6695 * the repository root and begins with "/". 6696 * 6697 * If svn_client_list3() was called with @a include_externals set to TRUE, 6698 * @a external_parent_url and @a external_target will be set. 6699 * @a external_parent_url is url of the directory which has the 6700 * externals definitions. @a external_target is the target subdirectory of 6701 * externals definitions which is relative to the parent directory that holds 6702 * the external item. 6703 * 6704 * If external_parent_url and external_target are defined, the item being 6705 * listed is part of the external described by external_parent_url and 6706 * external_target. Else, the item is not part of any external. 6707 * Moreover, we will never mix items which are part of separate 6708 * externals, and will always finish listing an external before listing 6709 * the next one. 6710 * 6711 * @a scratch_pool may be used for temporary allocations. 6712 * 6713 * @since New in 1.8. 6714 */ 6715typedef svn_error_t *(*svn_client_list_func2_t)( 6716 void *baton, 6717 const char *path, 6718 const svn_dirent_t *dirent, 6719 const svn_lock_t *lock, 6720 const char *abs_path, 6721 const char *external_parent_url, 6722 const char *external_target, 6723 apr_pool_t *scratch_pool); 6724 6725/** 6726 * Similar to #svn_client_list_func2_t, but without any information about 6727 * externals definitions. 6728 * 6729 * @deprecated Provided for backward compatibility with the 1.7 API. 6730 * 6731 * @since New in 1.4 6732 * 6733 * */ 6734typedef svn_error_t *(*svn_client_list_func_t)(void *baton, 6735 const char *path, 6736 const svn_dirent_t *dirent, 6737 const svn_lock_t *lock, 6738 const char *abs_path, 6739 apr_pool_t *pool); 6740 6741/** 6742 * Report the directory entry, and possibly children, for @a 6743 * path_or_url at @a revision. The actual node revision selected is 6744 * determined by the path as it exists in @a peg_revision. If @a 6745 * peg_revision->kind is #svn_opt_revision_unspecified, then it defaults 6746 * to #svn_opt_revision_head for URLs or #svn_opt_revision_working 6747 * for WC targets. 6748 * 6749 * Report directory entries by invoking @a list_func/@a baton with @a path 6750 * relative to @a path_or_url. The dirent for @a path_or_url is reported 6751 * using an empty @a path. If @a path_or_url is a directory, also report 6752 * its children. If @a path_or_url is non-existent, return 6753 * #SVN_ERR_FS_NOT_FOUND. 6754 * 6755 * If the @a patterns array of <tt>const char *</tt> is not @c NULL, only 6756 * report paths whose last segment matches one of the specified glob 6757 * patterns. This does not affect the size of the tree nor the number of 6758 * externals being covered. 6759 * 6760 * If @a fetch_locks is TRUE, include locks when reporting directory entries. 6761 * 6762 * If @a include_externals is TRUE, also list all external items 6763 * reached by recursion. @a depth value passed to the original list target 6764 * applies for the externals also. 6765 * 6766 * Use @a scratch_pool for temporary allocations. 6767 * 6768 * Use authentication baton cached in @a ctx to authenticate against the 6769 * repository. 6770 * 6771 * If @a depth is #svn_depth_empty, list just @a path_or_url itself. 6772 * If @a depth is #svn_depth_files, list @a path_or_url and its file 6773 * entries. If #svn_depth_immediates, list its immediate file and 6774 * directory entries. If #svn_depth_infinity, list file entries and 6775 * recurse (with #svn_depth_infinity) on directory entries. 6776 * 6777 * @a dirent_fields controls which fields in the #svn_dirent_t's are 6778 * filled in. To have them totally filled in use #SVN_DIRENT_ALL, 6779 * otherwise simply bitwise OR together the combination of @c SVN_DIRENT_ 6780 * fields you care about. 6781 * 6782 * @since New in 1.10. 6783 */ 6784svn_error_t * 6785svn_client_list4(const char *path_or_url, 6786 const svn_opt_revision_t *peg_revision, 6787 const svn_opt_revision_t *revision, 6788 const apr_array_header_t *patterns, 6789 svn_depth_t depth, 6790 apr_uint32_t dirent_fields, 6791 svn_boolean_t fetch_locks, 6792 svn_boolean_t include_externals, 6793 svn_client_list_func2_t list_func, 6794 void *baton, 6795 svn_client_ctx_t *ctx, 6796 apr_pool_t *scratch_pool); 6797 6798/** Similar to svn_client_list4(), but with @a patterns set to @c NULL. 6799 * 6800 * @since New in 1.8. 6801 * 6802 * @deprecated Provided for backwards compatibility with the 1.9 API. 6803 */ 6804SVN_DEPRECATED 6805svn_error_t * 6806svn_client_list3(const char *path_or_url, 6807 const svn_opt_revision_t *peg_revision, 6808 const svn_opt_revision_t *revision, 6809 svn_depth_t depth, 6810 apr_uint32_t dirent_fields, 6811 svn_boolean_t fetch_locks, 6812 svn_boolean_t include_externals, 6813 svn_client_list_func2_t list_func, 6814 void *baton, 6815 svn_client_ctx_t *ctx, 6816 apr_pool_t *pool); 6817 6818 6819/** Similar to svn_client_list3(), but with @a include_externals set 6820 * to FALSE, and using a #svn_client_list_func_t as callback. 6821 * 6822 * @since New in 1.5. 6823 * 6824 * @deprecated Provided for backwards compatibility with the 1.7 API. 6825 */ 6826SVN_DEPRECATED 6827svn_error_t * 6828svn_client_list2(const char *path_or_url, 6829 const svn_opt_revision_t *peg_revision, 6830 const svn_opt_revision_t *revision, 6831 svn_depth_t depth, 6832 apr_uint32_t dirent_fields, 6833 svn_boolean_t fetch_locks, 6834 svn_client_list_func_t list_func, 6835 void *baton, 6836 svn_client_ctx_t *ctx, 6837 apr_pool_t *pool); 6838 6839/** 6840 * Similar to svn_client_list2(), but with @a recurse instead of @a depth. 6841 * If @a recurse is FALSE, pass #svn_depth_immediates for @a depth; else 6842 * pass #svn_depth_infinity. 6843 * 6844 * @since New in 1.4. 6845 * 6846 * @deprecated Provided for backward compatibility with the 1.4 API. 6847 */ 6848SVN_DEPRECATED 6849svn_error_t * 6850svn_client_list(const char *path_or_url, 6851 const svn_opt_revision_t *peg_revision, 6852 const svn_opt_revision_t *revision, 6853 svn_boolean_t recurse, 6854 apr_uint32_t dirent_fields, 6855 svn_boolean_t fetch_locks, 6856 svn_client_list_func_t list_func, 6857 void *baton, 6858 svn_client_ctx_t *ctx, 6859 apr_pool_t *pool); 6860 6861/** 6862 * Same as svn_client_list(), but always passes #SVN_DIRENT_ALL for 6863 * the @a dirent_fields argument and returns all information in two 6864 * hash tables instead of invoking a callback. 6865 * 6866 * Set @a *dirents to a newly allocated hash of directory entries. 6867 * The @a dirents hash maps entry names (<tt>const char *</tt>) to 6868 * #svn_dirent_t *'s. 6869 * 6870 * If @a locks is not @c NULL, set @a *locks to a hash table mapping 6871 * entry names (<tt>const char *</tt>) to #svn_lock_t *'s. 6872 * 6873 * @since New in 1.3. 6874 * 6875 * @deprecated Provided for backward compatibility with the 1.3 API. 6876 * Use svn_client_list2() instead. 6877 */ 6878SVN_DEPRECATED 6879svn_error_t * 6880svn_client_ls3(apr_hash_t **dirents, 6881 apr_hash_t **locks, 6882 const char *path_or_url, 6883 const svn_opt_revision_t *peg_revision, 6884 const svn_opt_revision_t *revision, 6885 svn_boolean_t recurse, 6886 svn_client_ctx_t *ctx, 6887 apr_pool_t *pool); 6888 6889/** 6890 * Same as svn_client_ls3(), but without the ability to get locks. 6891 * 6892 * @since New in 1.2. 6893 * 6894 * @deprecated Provided for backward compatibility with the 1.2 API. 6895 * Use svn_client_list2() instead. 6896 */ 6897SVN_DEPRECATED 6898svn_error_t * 6899svn_client_ls2(apr_hash_t **dirents, 6900 const char *path_or_url, 6901 const svn_opt_revision_t *peg_revision, 6902 const svn_opt_revision_t *revision, 6903 svn_boolean_t recurse, 6904 svn_client_ctx_t *ctx, 6905 apr_pool_t *pool); 6906 6907/** 6908 * Similar to svn_client_ls2() except that @a peg_revision is always 6909 * the same as @a revision. 6910 * 6911 * @deprecated Provided for backward compatibility with the 1.1 API. 6912 * Use svn_client_list2() instead. 6913 */ 6914SVN_DEPRECATED 6915svn_error_t * 6916svn_client_ls(apr_hash_t **dirents, 6917 const char *path_or_url, 6918 svn_opt_revision_t *revision, 6919 svn_boolean_t recurse, 6920 svn_client_ctx_t *ctx, 6921 apr_pool_t *pool); 6922 6923 6924/** @} */ 6925 6926/** 6927 * @defgroup Cat View the contents of a file in the repository. 6928 * 6929 * @{ 6930 */ 6931 6932/** 6933 * Output the content of a file. 6934 * 6935 * @param[out] props Optional output argument to obtain properties. 6936 * @param[in] out The stream to which the content will be written. 6937 * @param[in] path_or_url The path or URL of the file. 6938 * @param[in] peg_revision The peg revision. 6939 * @param[in] revision The operative revision. 6940 * @param[in] expand_keywords When true, keywords (when set) are expanded. 6941 * @param[in] ctx The standard client context, used for possible 6942 * authentication. 6943 * 6944 * @return A pointer to an #svn_error_t of the type (this list is not 6945 * exhaustive): <br> 6946 * An unspecified error if @a revision is of kind 6947 * #svn_opt_revision_previous (or some other kind that requires 6948 * a local path), because the desired revision cannot be 6949 * determined. <br> 6950 * If no error occurred, return #SVN_NO_ERROR. 6951 * 6952 * If @a *props is not NULL it is set to a hash of all the file's 6953 * non-inherited properties. If it is NULL, the properties are only 6954 * used for determining how and if the file should be translated. 6955 * 6956 * @see #svn_client_ctx_t <br> @ref clnt_revisions for 6957 * a discussion of operative and peg revisions. 6958 * 6959 * @since New in 1.9. 6960 */ 6961svn_error_t * 6962svn_client_cat3(apr_hash_t **props, 6963 svn_stream_t *out, 6964 const char *path_or_url, 6965 const svn_opt_revision_t *peg_revision, 6966 const svn_opt_revision_t *revision, 6967 svn_boolean_t expand_keywords, 6968 svn_client_ctx_t *ctx, 6969 apr_pool_t *result_pool, 6970 apr_pool_t *scratch_pool); 6971 6972/** 6973 * Similar to svn_client_cat3() except without the option of directly 6974 * reading the properties, and with @a expand_keywords always TRUE. 6975 * 6976 * @since New in 1.2. 6977 * @deprecated Provided for backward compatibility with the 1.8 API. 6978 */ 6979SVN_DEPRECATED 6980svn_error_t * 6981svn_client_cat2(svn_stream_t *out, 6982 const char *path_or_url, 6983 const svn_opt_revision_t *peg_revision, 6984 const svn_opt_revision_t *revision, 6985 svn_client_ctx_t *ctx, 6986 apr_pool_t *pool); 6987 6988 6989/** 6990 * Similar to svn_client_cat2() except that the peg revision is always 6991 * the same as @a revision. 6992 * 6993 * @deprecated Provided for backward compatibility with the 1.1 API. 6994 */ 6995SVN_DEPRECATED 6996svn_error_t * 6997svn_client_cat(svn_stream_t *out, 6998 const char *path_or_url, 6999 const svn_opt_revision_t *revision, 7000 svn_client_ctx_t *ctx, 7001 apr_pool_t *pool); 7002 7003/** @} end group: cat */ 7004 7005 7006/** Changelist commands 7007 * 7008 * @defgroup svn_client_changelist_funcs Client Changelist Functions 7009 * @{ 7010 */ 7011 7012/** 7013 * Add each path in @a paths (recursing to @a depth as necessary) to 7014 * @a changelist. If a path is already a member of another 7015 * changelist, then remove it from the other changelist and add it to 7016 * @a changelist. (For now, a path cannot belong to two changelists 7017 * at once.) 7018 * 7019 * @a paths is an array of (const char *) local WC paths. 7020 * 7021 * @a changelists is an array of <tt>const char *</tt> changelist 7022 * names, used as a restrictive filter on items whose changelist 7023 * assignments are adjusted; that is, don't tweak the changeset of any 7024 * item unless it's currently a member of one of those changelists. 7025 * If @a changelists is empty (or altogether @c NULL), no changelist 7026 * filtering occurs. 7027 * 7028 * @note This metadata is purely a client-side "bookkeeping" 7029 * convenience, and is entirely managed by the working copy. 7030 * 7031 * @since New in 1.5. 7032 */ 7033svn_error_t * 7034svn_client_add_to_changelist(const apr_array_header_t *paths, 7035 const char *changelist, 7036 svn_depth_t depth, 7037 const apr_array_header_t *changelists, 7038 svn_client_ctx_t *ctx, 7039 apr_pool_t *pool); 7040 7041/** 7042 * Remove each path in @a paths (recursing to @a depth as necessary) 7043 * from changelists to which they are currently assigned. 7044 * 7045 * @a paths is an array of (const char *) local WC paths. 7046 * 7047 * @a changelists is an array of <tt>const char *</tt> changelist 7048 * names, used as a restrictive filter on items whose changelist 7049 * assignments are removed; that is, don't remove from a changeset any 7050 * item unless it's currently a member of one of those changelists. 7051 * If @a changelists is empty (or altogether @c NULL), all changelist 7052 * assignments in and under each path in @a paths (to @a depth) will 7053 * be removed. 7054 * 7055 * @note This metadata is purely a client-side "bookkeeping" 7056 * convenience, and is entirely managed by the working copy. 7057 * 7058 * @since New in 1.5. 7059 */ 7060svn_error_t * 7061svn_client_remove_from_changelists(const apr_array_header_t *paths, 7062 svn_depth_t depth, 7063 const apr_array_header_t *changelists, 7064 svn_client_ctx_t *ctx, 7065 apr_pool_t *pool); 7066 7067 7068/** 7069 * Beginning at @a path, crawl to @a depth to discover every path in 7070 * or under @a path which belongs to one of the changelists in @a 7071 * changelists (an array of <tt>const char *</tt> changelist names). 7072 * If @a changelists is @c NULL, discover paths with any changelist. 7073 * Call @a callback_func (with @a callback_baton) each time a 7074 * changelist-having path is discovered. 7075 * 7076 * @a path is a local WC path. 7077 * 7078 * If @a ctx->cancel_func is not @c NULL, invoke it passing @a 7079 * ctx->cancel_baton during the recursive walk. 7080 * 7081 * @since New in 1.5. 7082 */ 7083svn_error_t * 7084svn_client_get_changelists(const char *path, 7085 const apr_array_header_t *changelists, 7086 svn_depth_t depth, 7087 svn_changelist_receiver_t callback_func, 7088 void *callback_baton, 7089 svn_client_ctx_t *ctx, 7090 apr_pool_t *pool); 7091 7092/** @} */ 7093 7094 7095 7096/** Locking commands 7097 * 7098 * @defgroup svn_client_locking_funcs Client Locking Functions 7099 * @{ 7100 */ 7101 7102/** 7103 * Lock @a targets in the repository. @a targets is an array of 7104 * <tt>const char *</tt> paths - either all working copy paths or all URLs. 7105 * All targets must be in the same repository. 7106 * 7107 * If a target is already locked in the repository, no lock will be 7108 * acquired unless @a steal_lock is TRUE, in which case the locks are 7109 * stolen. @a comment, if non-NULL, is an xml-escapable description 7110 * stored with each lock in the repository. Each acquired lock will 7111 * be stored in the working copy if the targets are WC paths. 7112 * 7113 * For each target @a ctx->notify_func2/notify_baton2 will be used to indicate 7114 * whether it was locked. An action of #svn_wc_notify_locked 7115 * means that the path was locked. If the path was not locked because 7116 * it was out of date or there was already a lock in the repository, 7117 * the notification function will be called with 7118 * #svn_wc_notify_failed_lock, and the error passed in the notification 7119 * structure. 7120 * 7121 * Use @a pool for temporary allocations. 7122 * 7123 * @since New in 1.2. 7124 */ 7125svn_error_t * 7126svn_client_lock(const apr_array_header_t *targets, 7127 const char *comment, 7128 svn_boolean_t steal_lock, 7129 svn_client_ctx_t *ctx, 7130 apr_pool_t *pool); 7131 7132/** 7133 * Unlock @a targets in the repository. @a targets is an array of 7134 * <tt>const char *</tt> paths - either all working copy paths or all URLs. 7135 * All targets must be in the same repository. 7136 * 7137 * If the targets are WC paths, and @a break_lock is FALSE, the working 7138 * copy must contain a lock for each target. 7139 * If this is not the case, or the working copy lock doesn't match the 7140 * lock token in the repository, an error will be signaled. 7141 * 7142 * If the targets are URLs, the locks may be broken even if @a break_lock 7143 * is FALSE, but only if the lock owner is the same as the 7144 * authenticated user. 7145 * 7146 * If @a break_lock is TRUE, the locks will be broken in the 7147 * repository. In both cases, the locks, if any, will be removed from 7148 * the working copy if the targets are WC paths. 7149 * 7150 * The notification functions in @a ctx will be called for each 7151 * target. If the target was successfully unlocked, 7152 * #svn_wc_notify_unlocked will be used. Else, if the error is 7153 * directly related to unlocking the path (see 7154 * #SVN_ERR_IS_UNLOCK_ERROR), #svn_wc_notify_failed_unlock will be 7155 * used and the error will be passed in the notification structure. 7156 7157 * Use @a pool for temporary allocations. 7158 * 7159 * @since New in 1.2. 7160 */ 7161svn_error_t * 7162svn_client_unlock(const apr_array_header_t *targets, 7163 svn_boolean_t break_lock, 7164 svn_client_ctx_t *ctx, 7165 apr_pool_t *pool); 7166 7167/** @} */ 7168 7169/** 7170 * @defgroup Info Show repository information about a working copy. 7171 * 7172 * @{ 7173 */ 7174 7175/** The size of the file is unknown. 7176 * Used as value in fields of type @c apr_size_t in #svn_info_t. 7177 * 7178 * @since New in 1.5 7179 * @deprecated Provided for backward compatibility with the 1.6 API. 7180 */ 7181#define SVN_INFO_SIZE_UNKNOWN ((apr_size_t) -1) 7182 7183/** 7184 * A structure which describes various system-generated metadata about 7185 * a working-copy path or URL. 7186 * 7187 * @note Fields may be added to the end of this structure in future 7188 * versions. Therefore, users shouldn't allocate structures of this 7189 * type, to preserve binary compatibility. 7190 * 7191 * @since New in 1.2. 7192 * @deprecated Provided for backward compatibility with the 1.6 API. The new 7193 * API is #svn_client_info2_t. 7194 */ 7195typedef struct svn_info_t 7196{ 7197 /** Where the item lives in the repository. */ 7198 const char *URL; 7199 7200 /** The revision of the object. If path_or_url is a working-copy 7201 * path, then this is its current working revnum. If path_or_url 7202 * is a URL, then this is the repos revision that path_or_url lives in. */ 7203 svn_revnum_t rev; 7204 7205 /** The node's kind. */ 7206 svn_node_kind_t kind; 7207 7208 /** The root URL of the repository. */ 7209 const char *repos_root_URL; 7210 7211 /** The repository's UUID. */ 7212 const char *repos_UUID; 7213 7214 /** The last revision in which this object changed. */ 7215 svn_revnum_t last_changed_rev; 7216 7217 /** The date of the last_changed_rev. */ 7218 apr_time_t last_changed_date; 7219 7220 /** The author of the last_changed_rev. */ 7221 const char *last_changed_author; 7222 7223 /** An exclusive lock, if present. Could be either local or remote. */ 7224 svn_lock_t *lock; 7225 7226 /** Whether or not to ignore the next 10 wc-specific fields. */ 7227 svn_boolean_t has_wc_info; 7228 7229 /** 7230 * @name Working-copy path fields 7231 * These things only apply to a working-copy path. 7232 * See svn_wc_entry_t for explanations. 7233 * @{ 7234 */ 7235 svn_wc_schedule_t schedule; 7236 const char *copyfrom_url; 7237 svn_revnum_t copyfrom_rev; 7238 apr_time_t text_time; 7239 apr_time_t prop_time; /* will always be 0 for svn 1.4 and later */ 7240 const char *checksum; 7241 const char *conflict_old; 7242 const char *conflict_new; 7243 const char *conflict_wrk; 7244 const char *prejfile; 7245 /** @since New in 1.5. */ 7246 const char *changelist; 7247 /** @since New in 1.5. */ 7248 svn_depth_t depth; 7249 7250 /** 7251 * Similar to working_size64, but will be #SVN_INFO_SIZE_UNKNOWN when 7252 * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte). 7253 * 7254 * @deprecated Provided for backward compatibility with the 1.5 API. 7255 */ 7256 apr_size_t working_size; 7257 7258 /** @} */ 7259 7260 /** 7261 * Similar to size64, but size will be #SVN_INFO_SIZE_UNKNOWN when 7262 * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte). 7263 * 7264 * @deprecated Provided for backward compatibility with the 1.5 API. 7265 */ 7266 apr_size_t size; 7267 7268 /** 7269 * The size of the file in the repository (untranslated, 7270 * e.g. without adjustment of line endings and keyword 7271 * expansion). Only applicable for file -- not directory -- URLs. 7272 * For working copy paths, size64 will be #SVN_INVALID_FILESIZE. 7273 * @since New in 1.6. 7274 */ 7275 svn_filesize_t size64; 7276 7277 /** 7278 * The size of the file after being translated into its local 7279 * representation, or #SVN_INVALID_FILESIZE if unknown. 7280 * Not applicable for directories. 7281 * @since New in 1.6. 7282 * @name Working-copy path fields 7283 * @{ 7284 */ 7285 svn_filesize_t working_size64; 7286 7287 /** 7288 * Info on any tree conflict of which this node is a victim. Otherwise NULL. 7289 * @since New in 1.6. 7290 */ 7291 svn_wc_conflict_description_t *tree_conflict; 7292 7293 /** @} */ 7294 7295} svn_info_t; 7296 7297 7298/** 7299 * The callback invoked by svn_client_info2(). Each invocation 7300 * describes @a path with the information present in @a info. Note 7301 * that any fields within @a info may be NULL if information is 7302 * unavailable. Use @a pool for all temporary allocation. 7303 * 7304 * @since New in 1.2. 7305 * @deprecated Provided for backward compatibility with the 1.6 API. The new 7306 * API is #svn_client_info_receiver2_t. 7307 */ 7308typedef svn_error_t *(*svn_info_receiver_t)( 7309 void *baton, 7310 const char *path, 7311 const svn_info_t *info, 7312 apr_pool_t *pool); 7313 7314/** 7315 * Return a duplicate of @a info, allocated in @a pool. No part of the new 7316 * structure will be shared with @a info. 7317 * 7318 * @since New in 1.3. 7319 * @deprecated Provided for backward compatibility with the 1.6 API. The new 7320 * API is #svn_client_info2_dup(). 7321 */ 7322SVN_DEPRECATED 7323svn_info_t * 7324svn_info_dup(const svn_info_t *info, 7325 apr_pool_t *pool); 7326 7327/** 7328 * A structure which describes various system-generated metadata about 7329 * a working-copy path or URL. 7330 * 7331 * @note Fields may be added to the end of this structure in future 7332 * versions. Therefore, users shouldn't allocate structures of this 7333 * type, to preserve binary compatibility. 7334 * 7335 * @since New in 1.7. 7336 */ 7337typedef struct svn_client_info2_t 7338{ 7339 /** Where the item lives in the repository. */ 7340 const char *URL; 7341 7342 /** The revision of the object. If the target is a working-copy 7343 * path, then this is its current working revnum. If the target 7344 * is a URL, then this is the repos revision that it lives in. */ 7345 svn_revnum_t rev; 7346 7347 /** The root URL of the repository. */ 7348 const char *repos_root_URL; 7349 7350 /** The repository's UUID. */ 7351 const char *repos_UUID; 7352 7353 /** The node's kind. */ 7354 svn_node_kind_t kind; 7355 7356 /** The size of the file in the repository (untranslated, 7357 * e.g. without adjustment of line endings and keyword 7358 * expansion). Only applicable for file -- not directory -- URLs. 7359 * For working copy paths, @a size will be #SVN_INVALID_FILESIZE. */ 7360 svn_filesize_t size; 7361 7362 /** The last revision in which this object changed. */ 7363 svn_revnum_t last_changed_rev; 7364 7365 /** The date of the last_changed_rev. */ 7366 apr_time_t last_changed_date; 7367 7368 /** The author of the last_changed_rev. */ 7369 const char *last_changed_author; 7370 7371 /** An exclusive lock, if present. Could be either local or remote. */ 7372 const svn_lock_t *lock; 7373 7374 /** Possible information about the working copy, NULL if not valid. */ 7375 const svn_wc_info_t *wc_info; 7376 7377} svn_client_info2_t; 7378 7379/** 7380 * Return a duplicate of @a info, allocated in @a pool. No part of the new 7381 * structure will be shared with @a info. 7382 * 7383 * @since New in 1.7. 7384 */ 7385svn_client_info2_t * 7386svn_client_info2_dup(const svn_client_info2_t *info, 7387 apr_pool_t *pool); 7388 7389/** 7390 * The callback invoked by info retrievers. Each invocation 7391 * describes @a abspath_or_url with the information present in @a info. 7392 * Use @a scratch_pool for all temporary allocation. 7393 * 7394 * @since New in 1.7. 7395 */ 7396typedef svn_error_t *(*svn_client_info_receiver2_t)( 7397 void *baton, 7398 const char *abspath_or_url, 7399 const svn_client_info2_t *info, 7400 apr_pool_t *scratch_pool); 7401 7402/** 7403 * Invoke @a receiver with @a receiver_baton to return information 7404 * about @a abspath_or_url in @a revision. The information returned is 7405 * system-generated metadata, not the sort of "property" metadata 7406 * created by users. See #svn_client_info2_t. 7407 * 7408 * If both revision arguments are either #svn_opt_revision_unspecified 7409 * or @c NULL, then information will be pulled solely from the working copy; 7410 * no network connections will be made. 7411 * 7412 * Otherwise, information will be pulled from a repository. The 7413 * actual node revision selected is determined by the @a abspath_or_url 7414 * as it exists in @a peg_revision. If @a peg_revision->kind is 7415 * #svn_opt_revision_unspecified, then it defaults to 7416 * #svn_opt_revision_head for URLs or #svn_opt_revision_working for 7417 * WC targets. 7418 * 7419 * If @a abspath_or_url is not a local path, then if @a revision is of 7420 * kind #svn_opt_revision_previous (or some other kind that requires 7421 * a local path), an error will be returned, because the desired 7422 * revision cannot be determined. 7423 * 7424 * Use the authentication baton cached in @a ctx to authenticate 7425 * against the repository. 7426 * 7427 * If @a abspath_or_url is a file, just invoke @a receiver on it. If it 7428 * is a directory, then descend according to @a depth. If @a depth is 7429 * #svn_depth_empty, invoke @a receiver on @a abspath_or_url and 7430 * nothing else; if #svn_depth_files, on @a abspath_or_url and its 7431 * immediate file children; if #svn_depth_immediates, the preceding 7432 * plus on each immediate subdirectory; if #svn_depth_infinity, then 7433 * recurse fully, invoking @a receiver on @a abspath_or_url and 7434 * everything beneath it. 7435 * 7436 * If @a fetch_excluded is TRUE, also also send excluded nodes in the working 7437 * copy to @a receiver, otherwise these are skipped. If @a fetch_actual_only 7438 * is TRUE also send nodes that don't exist as versioned but are still 7439 * tree conflicted. 7440 * 7441 * If @a include_externals is @c TRUE, recurse into externals and report about 7442 * them as well. 7443 * 7444 * @a changelists is an array of <tt>const char *</tt> changelist 7445 * names, used as a restrictive filter on items whose info is 7446 * reported; that is, don't report info about any item unless 7447 * it's a member of one of those changelists. If @a changelists is 7448 * empty (or altogether @c NULL), no changelist filtering occurs. 7449 * 7450 * @since New in 1.9. 7451 */ 7452svn_error_t * 7453svn_client_info4(const char *abspath_or_url, 7454 const svn_opt_revision_t *peg_revision, 7455 const svn_opt_revision_t *revision, 7456 svn_depth_t depth, 7457 svn_boolean_t fetch_excluded, 7458 svn_boolean_t fetch_actual_only, 7459 svn_boolean_t include_externals, 7460 const apr_array_header_t *changelists, 7461 svn_client_info_receiver2_t receiver, 7462 void *receiver_baton, 7463 svn_client_ctx_t *ctx, 7464 apr_pool_t *scratch_pool); 7465 7466 7467/** Similar to svn_client_info4, but doesn't support walking externals. 7468 * 7469 * @since New in 1.7. 7470 * @deprecated Provided for backward compatibility with the 1.8 API. 7471 */ 7472SVN_DEPRECATED 7473svn_error_t * 7474svn_client_info3(const char *abspath_or_url, 7475 const svn_opt_revision_t *peg_revision, 7476 const svn_opt_revision_t *revision, 7477 svn_depth_t depth, 7478 svn_boolean_t fetch_excluded, 7479 svn_boolean_t fetch_actual_only, 7480 const apr_array_header_t *changelists, 7481 svn_client_info_receiver2_t receiver, 7482 void *receiver_baton, 7483 svn_client_ctx_t *ctx, 7484 apr_pool_t *scratch_pool); 7485 7486/** Similar to svn_client_info3, but uses an svn_info_receiver_t instead of 7487 * a #svn_client_info_receiver2_t, and @a path_or_url may be a relative path. 7488 * 7489 * @since New in 1.5. 7490 * @deprecated Provided for backward compatibility with the 1.6 API. 7491 */ 7492SVN_DEPRECATED 7493svn_error_t * 7494svn_client_info2(const char *path_or_url, 7495 const svn_opt_revision_t *peg_revision, 7496 const svn_opt_revision_t *revision, 7497 svn_info_receiver_t receiver, 7498 void *receiver_baton, 7499 svn_depth_t depth, 7500 const apr_array_header_t *changelists, 7501 svn_client_ctx_t *ctx, 7502 apr_pool_t *pool); 7503 7504/** 7505 * Similar to svn_client_info2() but with @a changelists passed as @c 7506 * NULL, and @a depth set according to @a recurse: if @a recurse is 7507 * TRUE, @a depth is #svn_depth_infinity, else #svn_depth_empty. 7508 * 7509 * @deprecated Provided for backward compatibility with the 1.4 API. 7510 */ 7511SVN_DEPRECATED 7512svn_error_t * 7513svn_client_info(const char *path_or_url, 7514 const svn_opt_revision_t *peg_revision, 7515 const svn_opt_revision_t *revision, 7516 svn_info_receiver_t receiver, 7517 void *receiver_baton, 7518 svn_boolean_t recurse, 7519 svn_client_ctx_t *ctx, 7520 apr_pool_t *pool); 7521 7522/** 7523 * Set @a *wcroot_abspath to the local abspath of the root of the 7524 * working copy in which @a local_abspath resides. 7525 * 7526 * @since New in 1.7. 7527 */ 7528svn_error_t * 7529svn_client_get_wc_root(const char **wcroot_abspath, 7530 const char *local_abspath, 7531 svn_client_ctx_t *ctx, 7532 apr_pool_t *result_pool, 7533 apr_pool_t *scratch_pool); 7534 7535/** 7536 * Set @a *min_revision and @a *max_revision to the lowest and highest 7537 * revision numbers found within @a local_abspath. If @a committed is 7538 * TRUE, set @a *min_revision and @a *max_revision to the lowest and 7539 * highest comitted (i.e. "last changed") revision numbers, 7540 * respectively. NULL may be passed for either of @a min_revision and 7541 * @a max_revision to indicate the caller's lack of interest in the 7542 * value. Use @a scratch_pool for temporary allocations. 7543 * 7544 * @since New in 1.7. 7545 */ 7546svn_error_t * 7547svn_client_min_max_revisions(svn_revnum_t *min_revision, 7548 svn_revnum_t *max_revision, 7549 const char *local_abspath, 7550 svn_boolean_t committed, 7551 svn_client_ctx_t *ctx, 7552 apr_pool_t *scratch_pool); 7553 7554/** @} */ 7555 7556 7557/** 7558 * @defgroup Patch Apply a patch to the working copy 7559 * 7560 * @{ 7561 */ 7562 7563/** 7564 * The callback invoked by svn_client_patch() before attempting to patch 7565 * the target file at @a canon_path_from_patchfile (the path as parsed from 7566 * the patch file, but in canonicalized form). The callback can set 7567 * @a *filtered to @c TRUE to prevent the file from being patched, or else 7568 * must set it to @c FALSE. 7569 * 7570 * The callback is also provided with @a patch_abspath, the path of a 7571 * temporary file containing the patched result, and with @a reject_abspath, 7572 * the path to a temporary file containing the diff text of any hunks 7573 * which were rejected during patching. 7574 * 7575 * Because the callback is invoked before the patching attempt is made, 7576 * there is no guarantee that the target file will actually be patched 7577 * successfully. Client implementations must pay attention to notification 7578 * feedback provided by svn_client_patch() to find out which paths were 7579 * patched successfully. 7580 * 7581 * Note also that the files at @a patch_abspath and @a reject_abspath are 7582 * guaranteed to remain on disk after patching only if the 7583 * @a remove_tempfiles parameter for svn_client_patch() is @c FALSE. 7584 * 7585 * The const char * parameters may be allocated in @a scratch_pool which 7586 * will be cleared after each invocation. 7587 * 7588 * @since New in 1.7. 7589 */ 7590typedef svn_error_t *(*svn_client_patch_func_t)( 7591 void *baton, 7592 svn_boolean_t *filtered, 7593 const char *canon_path_from_patchfile, 7594 const char *patch_abspath, 7595 const char *reject_abspath, 7596 apr_pool_t *scratch_pool); 7597 7598/** 7599 * Apply a unidiff patch that's located at absolute path 7600 * @a patch_abspath to the working copy directory at @a wc_dir_abspath. 7601 * 7602 * This function makes a best-effort attempt at applying the patch. 7603 * It might skip patch targets which cannot be patched (e.g. targets 7604 * that are outside of the working copy). It will also reject hunks 7605 * which cannot be applied to a target in case the hunk's context 7606 * does not match anywhere in the patch target. 7607 * 7608 * If @a dry_run is TRUE, the patching process is carried out, and full 7609 * notification feedback is provided, but the working copy is not modified. 7610 * 7611 * @a strip_count specifies how many leading path components should be 7612 * stripped from paths obtained from the patch. It is an error if a 7613 * negative strip count is passed. 7614 * 7615 * If @a reverse is @c TRUE, apply patches in reverse, deleting lines 7616 * the patch would add and adding lines the patch would delete. 7617 * 7618 * If @a ignore_whitespace is TRUE, allow patches to be applied if they 7619 * only differ from the target by whitespace. 7620 * 7621 * If @a remove_tempfiles is TRUE, lifetimes of temporary files created 7622 * during patching will be managed internally. Otherwise, the caller should 7623 * take ownership of these files, the names of which can be obtained by 7624 * passing a @a patch_func callback. 7625 * 7626 * If @a patch_func is non-NULL, invoke @a patch_func with @a patch_baton 7627 * for each patch target processed. 7628 * 7629 * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with 7630 * @a ctx->notify_baton2 as patching progresses. 7631 * 7632 * If @a ctx->cancel_func is non-NULL, invoke it passing @a 7633 * ctx->cancel_baton at various places during the operation. 7634 * 7635 * Use @a scratch_pool for temporary allocations. 7636 * 7637 * @since New in 1.7. 7638 */ 7639svn_error_t * 7640svn_client_patch(const char *patch_abspath, 7641 const char *wc_dir_abspath, 7642 svn_boolean_t dry_run, 7643 int strip_count, 7644 svn_boolean_t reverse, 7645 svn_boolean_t ignore_whitespace, 7646 svn_boolean_t remove_tempfiles, 7647 svn_client_patch_func_t patch_func, 7648 void *patch_baton, 7649 svn_client_ctx_t *ctx, 7650 apr_pool_t *scratch_pool); 7651 7652/** @} */ 7653 7654/** @} end group: Client working copy management */ 7655 7656/** 7657 * 7658 * @defgroup clnt_sessions Client session related functions 7659 * 7660 * @{ 7661 * 7662 */ 7663 7664 7665/* Converting paths to URLs. */ 7666 7667/** Set @a *url to the URL for @a path_or_url allocated in result_pool. 7668 * 7669 * If @a path_or_url is already a URL, set @a *url to @a path_or_url. 7670 * 7671 * If @a path_or_url is a versioned item, set @a *url to @a 7672 * path_or_url's entry URL. If @a path_or_url is unversioned (has 7673 * no entry), set @a *url to NULL. 7674 * 7675 * Use @a ctx->wc_ctx to retrieve the information. Use 7676 ** @a scratch_pool for temporary allocations. 7677 * 7678 * @since New in 1.7. 7679 */ 7680svn_error_t * 7681svn_client_url_from_path2(const char **url, 7682 const char *path_or_url, 7683 svn_client_ctx_t *ctx, 7684 apr_pool_t *result_pool, 7685 apr_pool_t *scratch_pool); 7686 7687/** Similar to svn_client_url_from_path2(), but without a context argument. 7688 * 7689 * @since New in 1.5. 7690 * @deprecated Provided for backward compatibility with the 1.6 API. 7691 */ 7692SVN_DEPRECATED 7693svn_error_t * 7694svn_client_url_from_path(const char **url, 7695 const char *path_or_url, 7696 apr_pool_t *pool); 7697 7698 7699 7700/* Fetching a repository's root URL and UUID. */ 7701 7702/** Set @a *repos_root_url and @a *repos_uuid, to the root URL and UUID of 7703 * the repository in which @a abspath_or_url is versioned. Use the 7704 * authentication baton and working copy context cached in @a ctx as 7705 * necessary. @a repos_root_url and/or @a repos_uuid may be NULL if not 7706 * wanted. 7707 * 7708 * This function will open a temporary RA session to the repository if 7709 * necessary to get the information. 7710 * 7711 * Allocate @a *repos_root_url and @a *repos_uuid in @a result_pool. 7712 * Use @a scratch_pool for temporary allocations. 7713 * 7714 * @since New in 1.8. 7715 */ 7716svn_error_t * 7717svn_client_get_repos_root(const char **repos_root_url, 7718 const char **repos_uuid, 7719 const char *abspath_or_url, 7720 svn_client_ctx_t *ctx, 7721 apr_pool_t *result_pool, 7722 apr_pool_t *scratch_pool); 7723 7724/** Set @a *url to the repository root URL of the repository in which 7725 * @a path_or_url is versioned (or scheduled to be versioned), 7726 * allocated in @a pool. @a ctx is required for possible repository 7727 * authentication. 7728 * 7729 * @since New in 1.5. 7730 * @deprecated Provided for backward compatibility with the 1.7 API. Use 7731 * svn_client_get_repos_root() instead, with an absolute path. 7732 */ 7733SVN_DEPRECATED 7734svn_error_t * 7735svn_client_root_url_from_path(const char **url, 7736 const char *path_or_url, 7737 svn_client_ctx_t *ctx, 7738 apr_pool_t *pool); 7739 7740/** Get repository @a uuid for @a url. 7741 * 7742 * Use a @a pool to open a temporary RA session to @a url, discover the 7743 * repository uuid, and free the session. Return the uuid in @a uuid, 7744 * allocated in @a pool. @a ctx is required for possible repository 7745 * authentication. 7746 * 7747 * @deprecated Provided for backward compatibility with the 1.7 API. Use 7748 * svn_client_get_repos_root() instead. 7749 */ 7750SVN_DEPRECATED 7751svn_error_t * 7752svn_client_uuid_from_url(const char **uuid, 7753 const char *url, 7754 svn_client_ctx_t *ctx, 7755 apr_pool_t *pool); 7756 7757 7758/** Return the repository @a uuid for working-copy @a local_abspath, 7759 * allocated in @a result_pool. Use @a ctx->wc_ctx to retrieve the 7760 * information. 7761 * 7762 * Use @a scratch_pool for temporary allocations. 7763 * 7764 * @since New in 1.7. 7765 * @deprecated Provided for backward compatibility with the 1.7 API. Use 7766 * svn_client_get_repos_root() instead. 7767 */ 7768SVN_DEPRECATED 7769svn_error_t * 7770svn_client_uuid_from_path2(const char **uuid, 7771 const char *local_abspath, 7772 svn_client_ctx_t *ctx, 7773 apr_pool_t *result_pool, 7774 apr_pool_t *scratch_pool); 7775 7776/** Similar to svn_client_uuid_from_path2(), but with a relative path and 7777 * an access baton. 7778 * 7779 * @deprecated Provided for backward compatibility with the 1.6 API. 7780 */ 7781SVN_DEPRECATED 7782svn_error_t * 7783svn_client_uuid_from_path(const char **uuid, 7784 const char *path, 7785 svn_wc_adm_access_t *adm_access, 7786 svn_client_ctx_t *ctx, 7787 apr_pool_t *pool); 7788 7789 7790/* Opening RA sessions. */ 7791 7792/** Open an RA session rooted at @a url, and return it in @a *session. 7793 * 7794 * Use the authentication baton stored in @a ctx for authentication. 7795 * @a *session is allocated in @a result_pool. 7796 * 7797 * If @a wri_abspath is not NULL, use the working copy identified by @a 7798 * wri_abspath to potentially avoid transferring unneeded data. 7799 * 7800 * @note This function is similar to svn_ra_open4(), but the caller avoids 7801 * having to providing its own callback functions. 7802 * @since New in 1.8. 7803 */ 7804svn_error_t * 7805svn_client_open_ra_session2(svn_ra_session_t **session, 7806 const char *url, 7807 const char *wri_abspath, 7808 svn_client_ctx_t *ctx, 7809 apr_pool_t *result_pool, 7810 apr_pool_t *scratch_pool); 7811 7812/** Similar to svn_client_open_ra_session2(), but with @ wri_abspath 7813 * always passed as NULL, and with the same pool used as both @a 7814 * result_pool and @a scratch_pool. 7815 * 7816 * @since New in 1.3. 7817 * @deprecated Provided for backward compatibility with the 1.7 API. 7818 */ 7819SVN_DEPRECATED 7820svn_error_t * 7821svn_client_open_ra_session(svn_ra_session_t **session, 7822 const char *url, 7823 svn_client_ctx_t *ctx, 7824 apr_pool_t *pool); 7825 7826 7827/** @} end group: Client session related functions */ 7828 7829/** @} */ 7830 7831#ifdef __cplusplus 7832} 7833#endif /* __cplusplus */ 7834 7835#endif /* SVN_CLIENT_H */ 7836