svn_client.h revision 262253
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 */ 469 const char *path; 470 471 /** node kind (dir, file) */ 472 svn_node_kind_t kind; 473 474 /** commit URL for this item */ 475 const char *url; 476 477 /** revision of textbase */ 478 svn_revnum_t revision; 479 480 /** copyfrom-url or NULL if not a copied item */ 481 const char *copyfrom_url; 482 483 /** copyfrom-rev, valid when copyfrom_url != NULL */ 484 svn_revnum_t copyfrom_rev; 485 486 /** state flags */ 487 apr_byte_t state_flags; 488 489 /** An array of #svn_prop_t *'s, which are incoming changes from 490 * the repository to WC properties. These changes are applied 491 * post-commit. 492 * 493 * When adding to this array, allocate the #svn_prop_t and its 494 * contents in @c incoming_prop_changes->pool, so that it has the 495 * same lifetime as this data structure. 496 * 497 * See http://subversion.tigris.org/issues/show_bug.cgi?id=806 for a 498 * description of what would happen if the post-commit process 499 * didn't group these changes together with all other changes to the 500 * item. 501 */ 502 apr_array_header_t *incoming_prop_changes; 503 504 /** An array of #svn_prop_t *'s, which are outgoing changes to 505 * make to properties in the repository. These extra property 506 * changes are declared pre-commit, and applied to the repository as 507 * part of a commit. 508 * 509 * When adding to this array, allocate the #svn_prop_t and its 510 * contents in @c outgoing_prop_changes->pool, so that it has the 511 * same lifetime as this data structure. 512 */ 513 apr_array_header_t *outgoing_prop_changes; 514 515 /** 516 * When processing the commit this contains the relative path for 517 * the commit session. #NULL until the commit item is preprocessed. 518 * @since New in 1.7. 519 */ 520 const char *session_relpath; 521 522 /** 523 * When committing a move, this contains the absolute path where 524 * the node was directly moved from. (If an ancestor at the original 525 * location was moved then it points to where the node itself was 526 * moved from; not the original location.) 527 * @since New in 1.8. 528 */ 529 const char *moved_from_abspath; 530 531} svn_client_commit_item3_t; 532 533/** The commit candidate structure. 534 * 535 * @deprecated Provided for backward compatibility with the 1.4 API. 536 */ 537typedef struct svn_client_commit_item2_t 538{ 539 /** absolute working-copy path of item */ 540 const char *path; 541 542 /** node kind (dir, file) */ 543 svn_node_kind_t kind; 544 545 /** commit URL for this item */ 546 const char *url; 547 548 /** revision of textbase */ 549 svn_revnum_t revision; 550 551 /** copyfrom-url or NULL if not a copied item */ 552 const char *copyfrom_url; 553 554 /** copyfrom-rev, valid when copyfrom_url != NULL */ 555 svn_revnum_t copyfrom_rev; 556 557 /** state flags */ 558 apr_byte_t state_flags; 559 560 /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes 561 * field. 562 */ 563 apr_array_header_t *wcprop_changes; 564} svn_client_commit_item2_t; 565 566/** The commit candidate structure. 567 * 568 * @deprecated Provided for backward compatibility with the 1.2 API. 569 */ 570typedef struct svn_client_commit_item_t 571{ 572 /** absolute working-copy path of item */ 573 const char *path; 574 575 /** node kind (dir, file) */ 576 svn_node_kind_t kind; 577 578 /** commit URL for this item */ 579 const char *url; 580 581 /** revision (copyfrom-rev if _IS_COPY) */ 582 svn_revnum_t revision; 583 584 /** copyfrom-url */ 585 const char *copyfrom_url; 586 587 /** state flags */ 588 apr_byte_t state_flags; 589 590 /** Analogous to the #svn_client_commit_item3_t.incoming_prop_changes 591 * field. 592 */ 593 apr_array_header_t *wcprop_changes; 594 595} svn_client_commit_item_t; 596 597/** Return a new commit item object, allocated in @a pool. 598 * 599 * In order to avoid backwards compatibility problems, this function 600 * is used to initialize and allocate the #svn_client_commit_item3_t 601 * structure rather than doing so explicitly, as the size of this 602 * structure may change in the future. 603 * 604 * @since New in 1.6. 605 */ 606svn_client_commit_item3_t * 607svn_client_commit_item3_create(apr_pool_t *pool); 608 609/** Like svn_client_commit_item3_create() but with a stupid "const" 610 * qualifier on the returned structure, and it returns an error that 611 * will never happen. 612 * 613 * @deprecated Provided for backward compatibility with the 1.5 API. 614 */ 615SVN_DEPRECATED 616svn_error_t * 617svn_client_commit_item_create(const svn_client_commit_item3_t **item, 618 apr_pool_t *pool); 619 620/** 621 * Return a duplicate of @a item, allocated in @a pool. No part of the 622 * new structure will be shared with @a item, except for the adm_access 623 * member. 624 * 625 * @since New in 1.5. 626 */ 627svn_client_commit_item3_t * 628svn_client_commit_item3_dup(const svn_client_commit_item3_t *item, 629 apr_pool_t *pool); 630 631/** 632 * Return a duplicate of @a item, allocated in @a pool. No part of the new 633 * structure will be shared with @a item. 634 * 635 * @deprecated Provided for backward compatibility with the 1.4 API. 636 */ 637SVN_DEPRECATED 638svn_client_commit_item2_t * 639svn_client_commit_item2_dup(const svn_client_commit_item2_t *item, 640 apr_pool_t *pool); 641 642/** Callback type used by commit-y operations to get a commit log message 643 * from the caller. 644 * 645 * Set @a *log_msg to the log message for the commit, allocated in @a 646 * pool, or @c NULL if wish to abort the commit process. Set @a *tmp_file 647 * to the path of any temporary file which might be holding that log 648 * message, or @c NULL if no such file exists (though, if @a *log_msg is 649 * @c NULL, this value is undefined). The log message MUST be a UTF8 650 * string with LF line separators. 651 * 652 * @a commit_items is a read-only array of #svn_client_commit_item3_t 653 * structures, which may be fully or only partially filled-in, 654 * depending on the type of commit operation. 655 * 656 * @a baton is provided along with the callback for use by the handler. 657 * 658 * All allocations should be performed in @a pool. 659 * 660 * @since New in 1.5. 661 */ 662typedef svn_error_t *(*svn_client_get_commit_log3_t)( 663 const char **log_msg, 664 const char **tmp_file, 665 const apr_array_header_t *commit_items, 666 void *baton, 667 apr_pool_t *pool); 668 669/** Callback type used by commit-y operations to get a commit log message 670 * from the caller. 671 * 672 * Set @a *log_msg to the log message for the commit, allocated in @a 673 * pool, or @c NULL if wish to abort the commit process. Set @a *tmp_file 674 * to the path of any temporary file which might be holding that log 675 * message, or @c NULL if no such file exists (though, if @a *log_msg is 676 * @c NULL, this value is undefined). The log message MUST be a UTF8 677 * string with LF line separators. 678 * 679 * @a commit_items is a read-only array of #svn_client_commit_item2_t 680 * structures, which may be fully or only partially filled-in, 681 * depending on the type of commit operation. 682 * 683 * @a baton is provided along with the callback for use by the handler. 684 * 685 * All allocations should be performed in @a pool. 686 * 687 * @deprecated Provided for backward compatibility with the 1.3 API. 688 */ 689typedef svn_error_t *(*svn_client_get_commit_log2_t)( 690 const char **log_msg, 691 const char **tmp_file, 692 const apr_array_header_t *commit_items, 693 void *baton, 694 apr_pool_t *pool); 695 696/** Callback type used by commit-y operations to get a commit log message 697 * from the caller. 698 * 699 * Set @a *log_msg to the log message for the commit, allocated in @a 700 * pool, or @c NULL if wish to abort the commit process. Set @a *tmp_file 701 * to the path of any temporary file which might be holding that log 702 * message, or @c NULL if no such file exists (though, if @a *log_msg is 703 * @c NULL, this value is undefined). The log message MUST be a UTF8 704 * string with LF line separators. 705 * 706 * @a commit_items is a read-only array of #svn_client_commit_item_t 707 * structures, which may be fully or only partially filled-in, 708 * depending on the type of commit operation. 709 * 710 * @a baton is provided along with the callback for use by the handler. 711 * 712 * All allocations should be performed in @a pool. 713 * 714 * @deprecated Provided for backward compatibility with the 1.2 API. 715 */ 716typedef svn_error_t *(*svn_client_get_commit_log_t)( 717 const char **log_msg, 718 const char **tmp_file, 719 apr_array_header_t *commit_items, 720 void *baton, 721 apr_pool_t *pool); 722 723/** @} */ 724 725/** 726 * Client blame 727 * 728 * @defgroup clnt_blame Client blame functionality 729 * 730 * @{ 731 */ 732 733/** Callback type used by svn_client_blame5() to notify the caller 734 * that line @a line_no of the blamed file was last changed in @a revision 735 * which has the revision properties @a rev_props, and that the contents were 736 * @a line. 737 * 738 * @a start_revnum and @a end_revnum contain the start and end revision 739 * number of the entire blame operation, as determined from the repository 740 * inside svn_client_blame5(). This can be useful for the blame receiver 741 * to format the blame output. 742 * 743 * If svn_client_blame5() was called with @a include_merged_revisions set to 744 * TRUE, @a merged_revision, @a merged_rev_props and @a merged_path will be 745 * set, otherwise they will be NULL. @a merged_path will be set to the 746 * absolute repository path. 747 * 748 * All allocations should be performed in @a pool. 749 * 750 * @note If there is no blame information for this line, @a revision will be 751 * invalid and @a rev_props will be NULL. In this case @a local_change 752 * will be true if the reason there is no blame information is that the line 753 * was modified locally. In all other cases @a local_change will be false. 754 * 755 * @since New in 1.7. 756 */ 757typedef svn_error_t *(*svn_client_blame_receiver3_t)( 758 void *baton, 759 svn_revnum_t start_revnum, 760 svn_revnum_t end_revnum, 761 apr_int64_t line_no, 762 svn_revnum_t revision, 763 apr_hash_t *rev_props, 764 svn_revnum_t merged_revision, 765 apr_hash_t *merged_rev_props, 766 const char *merged_path, 767 const char *line, 768 svn_boolean_t local_change, 769 apr_pool_t *pool); 770 771/** 772 * Similar to #svn_client_blame_receiver3_t, but with separate author and 773 * date revision properties instead of all revision properties, and without 774 * information about local changes. 775 * 776 * @deprecated Provided for backward compatibility with the 1.6 API. 777 * 778 * @since New in 1.5. 779 */ 780typedef svn_error_t *(*svn_client_blame_receiver2_t)( 781 void *baton, 782 apr_int64_t line_no, 783 svn_revnum_t revision, 784 const char *author, 785 const char *date, 786 svn_revnum_t merged_revision, 787 const char *merged_author, 788 const char *merged_date, 789 const char *merged_path, 790 const char *line, 791 apr_pool_t *pool); 792 793/** 794 * Similar to #svn_client_blame_receiver2_t, but without @a merged_revision, 795 * @a merged_author, @a merged_date, or @a merged_path members. 796 * 797 * @note New in 1.4 is that the line is defined to contain only the line 798 * content (and no [partial] EOLs; which was undefined in older versions). 799 * Using this callback with svn_client_blame() or svn_client_blame2() 800 * will still give you the old behaviour. 801 * 802 * @deprecated Provided for backward compatibility with the 1.4 API. 803 */ 804typedef svn_error_t *(*svn_client_blame_receiver_t)( 805 void *baton, 806 apr_int64_t line_no, 807 svn_revnum_t revision, 808 const char *author, 809 const char *date, 810 const char *line, 811 apr_pool_t *pool); 812 813 814/** @} */ 815 816/** 817 * Client diff 818 * 819 * @defgroup clnt_diff Client diff functionality 820 * 821 * @{ 822 */ 823/** The difference type in an svn_diff_summarize_t structure. 824 * 825 * @since New in 1.4. 826 */ 827typedef enum svn_client_diff_summarize_kind_t 828{ 829 /** An item with no text modifications */ 830 svn_client_diff_summarize_kind_normal, 831 832 /** An added item */ 833 svn_client_diff_summarize_kind_added, 834 835 /** An item with text modifications */ 836 svn_client_diff_summarize_kind_modified, 837 838 /** A deleted item */ 839 svn_client_diff_summarize_kind_deleted 840} svn_client_diff_summarize_kind_t; 841 842 843/** A struct that describes the diff of an item. Passed to 844 * #svn_client_diff_summarize_func_t. 845 * 846 * @note Fields may be added to the end of this structure in future 847 * versions. Therefore, users shouldn't allocate structures of this 848 * type, to preserve binary compatibility. 849 * 850 * @since New in 1.4. 851 */ 852typedef struct svn_client_diff_summarize_t 853{ 854 /** Path relative to the target. If the target is a file, path is 855 * the empty string. */ 856 const char *path; 857 858 /** Change kind */ 859 svn_client_diff_summarize_kind_t summarize_kind; 860 861 /** Properties changed? For consistency with 'svn status' output, 862 * this should be false if summarize_kind is _added or _deleted. */ 863 svn_boolean_t prop_changed; 864 865 /** File or dir */ 866 svn_node_kind_t node_kind; 867} svn_client_diff_summarize_t; 868 869/** 870 * Return a duplicate of @a diff, allocated in @a pool. No part of the new 871 * structure will be shared with @a diff. 872 * 873 * @since New in 1.4. 874 */ 875svn_client_diff_summarize_t * 876svn_client_diff_summarize_dup(const svn_client_diff_summarize_t *diff, 877 apr_pool_t *pool); 878 879 880/** A callback used in svn_client_diff_summarize2() and 881 * svn_client_diff_summarize_peg2() for reporting a @a diff summary. 882 * 883 * All allocations should be performed in @a pool. 884 * 885 * @a baton is a closure object; it should be provided by the implementation, 886 * and passed by the caller. 887 * 888 * @since New in 1.4. 889 */ 890typedef svn_error_t *(*svn_client_diff_summarize_func_t)( 891 const svn_client_diff_summarize_t *diff, 892 void *baton, 893 apr_pool_t *pool); 894 895 896 897/** @} */ 898 899 900/** 901 * Client context 902 * 903 * @defgroup clnt_ctx Client context management 904 * 905 * @{ 906 */ 907 908/** A client context structure, which holds client specific callbacks, 909 * batons, serves as a cache for configuration options, and other various 910 * and sundry things. In order to avoid backwards compatibility problems 911 * clients should use svn_client_create_context() to allocate and 912 * initialize this structure instead of doing so themselves. 913 */ 914typedef struct svn_client_ctx_t 915{ 916 /** main authentication baton. */ 917 svn_auth_baton_t *auth_baton; 918 919 /** notification callback function. 920 * This will be called by notify_func2() by default. 921 * @deprecated Provided for backward compatibility with the 1.1 API. 922 * Use @c notify_func2 instead. */ 923 svn_wc_notify_func_t notify_func; 924 925 /** notification callback baton for notify_func() 926 * @deprecated Provided for backward compatibility with the 1.1 API. 927 * Use @c notify_baton2 instead */ 928 void *notify_baton; 929 930 /** Log message callback function. NULL means that Subversion 931 * should try not attempt to fetch a log message. 932 * @deprecated Provided for backward compatibility with the 1.2 API. 933 * Use @c log_msg_func2 instead. */ 934 svn_client_get_commit_log_t log_msg_func; 935 936 /** log message callback baton 937 * @deprecated Provided for backward compatibility with the 1.2 API. 938 * Use @c log_msg_baton2 instead. */ 939 void *log_msg_baton; 940 941 /** a hash mapping of <tt>const char *</tt> configuration file names to 942 * #svn_config_t *'s. For example, the '~/.subversion/config' file's 943 * contents should have the key "config". May be left unset (or set to 944 * NULL) to use the built-in default settings and not use any configuration. 945 */ 946 apr_hash_t *config; 947 948 /** a callback to be used to see if the client wishes to cancel the running 949 * operation. */ 950 svn_cancel_func_t cancel_func; 951 952 /** a baton to pass to the cancellation callback. */ 953 void *cancel_baton; 954 955 /** notification function, defaulting to a function that forwards 956 * to notify_func(). If @c NULL, it will not be invoked. 957 * @since New in 1.2. */ 958 svn_wc_notify_func2_t notify_func2; 959 960 /** notification baton for notify_func2(). 961 * @since New in 1.2. */ 962 void *notify_baton2; 963 964 /** Log message callback function. NULL means that Subversion 965 * should try log_msg_func. 966 * @since New in 1.3. */ 967 svn_client_get_commit_log2_t log_msg_func2; 968 969 /** callback baton for log_msg_func2 970 * @since New in 1.3. */ 971 void *log_msg_baton2; 972 973 /** Notification callback for network progress information. 974 * May be NULL if not used. 975 * @since New in 1.3. */ 976 svn_ra_progress_notify_func_t progress_func; 977 978 /** Callback baton for progress_func. 979 * @since New in 1.3. */ 980 void *progress_baton; 981 982 /** Log message callback function. NULL means that Subversion 983 * should try @c log_msg_func2, then @c log_msg_func. 984 * @since New in 1.5. */ 985 svn_client_get_commit_log3_t log_msg_func3; 986 987 /** The callback baton for @c log_msg_func3. 988 * @since New in 1.5. */ 989 void *log_msg_baton3; 990 991 /** MIME types map. 992 * @since New in 1.5. */ 993 apr_hash_t *mimetypes_map; 994 995 /** Conflict resolution callback and baton, if available. 996 * @since New in 1.5. */ 997 svn_wc_conflict_resolver_func_t conflict_func; 998 void *conflict_baton; 999 1000 /** Custom client name string, or @c NULL. 1001 * @since New in 1.5. */ 1002 const char *client_name; 1003 1004 /** Conflict resolution callback and baton, if available. NULL means that 1005 * subversion should try @c conflict_func. 1006 * @since New in 1.7. */ 1007 svn_wc_conflict_resolver_func2_t conflict_func2; 1008 void *conflict_baton2; 1009 1010 /** A working copy context for the client operation to use. 1011 * This is initialized by svn_client_create_context() and should never 1012 * be @c NULL. 1013 * 1014 * @since New in 1.7. */ 1015 svn_wc_context_t *wc_ctx; 1016 1017} svn_client_ctx_t; 1018 1019/** Initialize a client context. 1020 * Set @a *ctx to a client context object, allocated in @a pool, that 1021 * represents a particular instance of an svn client. @a cfg_hash is used 1022 * to initialise the config member of the returned context object and should 1023 * remain valid for the lifetime of the object. @a cfg_hash may be @c NULL, 1024 * in which case it is ignored. 1025 * 1026 * In order to avoid backwards compatibility problems, clients must 1027 * use this function to initialize and allocate the 1028 * #svn_client_ctx_t structure rather than doing so themselves, as 1029 * the size of this structure may change in the future. 1030 * 1031 * The current implementation never returns error, but callers should 1032 * still check for error, for compatibility with future versions. 1033 * 1034 * @since New in 1.8. 1035 */ 1036svn_error_t * 1037svn_client_create_context2(svn_client_ctx_t **ctx, 1038 apr_hash_t *cfg_hash, 1039 apr_pool_t *pool); 1040 1041 1042/** Similar to svn_client_create_context2 but passes a NULL @a cfg_hash. 1043 * 1044 * @deprecated Provided for backward compatibility with the 1.7 API. 1045 */ 1046SVN_DEPRECATED 1047svn_error_t * 1048svn_client_create_context(svn_client_ctx_t **ctx, 1049 apr_pool_t *pool); 1050 1051/** @} end group: Client context management */ 1052 1053/** 1054 * @name Authentication information file names 1055 * 1056 * Names of files that contain authentication information. 1057 * 1058 * These filenames are decided by libsvn_client, since this library 1059 * implements all the auth-protocols; libsvn_wc does nothing but 1060 * blindly store and retrieve these files from protected areas. 1061 * 1062 * @defgroup clnt_auth_filenames Client authentication file names 1063 * @{ 1064 */ 1065#define SVN_CLIENT_AUTH_USERNAME "username" 1066#define SVN_CLIENT_AUTH_PASSWORD "password" 1067/** @} group end: Authentication information file names */ 1068 1069/** Client argument processing 1070 * 1071 * @defgroup clnt_cmdline Client command-line processing 1072 * 1073 * @{ 1074 */ 1075 1076/** 1077 * Pull remaining target arguments from @a os into @a *targets_p, 1078 * converting them to UTF-8, followed by targets from @a known_targets 1079 * (which might come from, for example, the "--targets" command line option). 1080 * 1081 * Process each target in one of the following ways. For a repository- 1082 * relative URL: resolve to a full URL, contacting the repository if 1083 * necessary to do so, and then treat as a full URL. For a URL: do some 1084 * IRI-to-URI encoding and some auto-escaping, and canonicalize. For a 1085 * local path: canonicalize case and path separators. 1086 * 1087 * If @a keep_last_origpath_on_truepath_collision is TRUE, and there are 1088 * exactly two targets which both case-canonicalize to the same path, the last 1089 * target will be returned in the original non-case-canonicalized form. 1090 * 1091 * Allocate @a *targets_p and its elements in @a pool. 1092 * 1093 * @a ctx is required for possible repository authentication. 1094 * 1095 * If a path has the same name as a Subversion working copy 1096 * administrative directory, return #SVN_ERR_RESERVED_FILENAME_SPECIFIED; 1097 * if multiple reserved paths are encountered, return a chain of 1098 * errors, all of which are #SVN_ERR_RESERVED_FILENAME_SPECIFIED. Do 1099 * not return this type of error in a chain with any other type of 1100 * error, and if this is the only type of error encountered, complete 1101 * the operation before returning the error(s). 1102 * 1103 * @since New in 1.7 1104 */ 1105svn_error_t * 1106svn_client_args_to_target_array2(apr_array_header_t **targets_p, 1107 apr_getopt_t *os, 1108 const apr_array_header_t *known_targets, 1109 svn_client_ctx_t *ctx, 1110 svn_boolean_t keep_last_origpath_on_truepath_collision, 1111 apr_pool_t *pool); 1112 1113/** 1114 * Similar to svn_client_args_to_target_array2() but with 1115 * @a keep_last_origpath_on_truepath_collision always set to FALSE. 1116 * 1117 * @deprecated Provided for backward compatibility with the 1.6 API. 1118 */ 1119SVN_DEPRECATED 1120svn_error_t * 1121svn_client_args_to_target_array(apr_array_header_t **targets_p, 1122 apr_getopt_t *os, 1123 const apr_array_header_t *known_targets, 1124 svn_client_ctx_t *ctx, 1125 apr_pool_t *pool); 1126 1127/** @} group end: Client command-line processing */ 1128 1129/** @} */ 1130 1131/** 1132 * Client working copy management functions 1133 * 1134 * @defgroup clnt_wc Client working copy management 1135 * 1136 * @{ 1137 */ 1138 1139/** 1140 * @defgroup clnt_wc_checkout Checkout 1141 * 1142 * @{ 1143 */ 1144 1145 1146/** 1147 * Checkout a working copy from a repository. 1148 * 1149 * @param[out] result_rev If non-NULL, the value of the revision checked 1150 * out from the repository. 1151 * @param[in] URL The repository URL of the checkout source. 1152 * @param[in] path The root of the new working copy. 1153 * @param[in] peg_revision The peg revision. 1154 * @param[in] revision The operative revision. 1155 * @param[in] depth The depth of the operation. If #svn_depth_unknown, 1156 * then behave as if for #svn_depth_infinity, except in the case 1157 * of resuming a previous checkout of @a path (i.e., updating), 1158 * in which case use the depth of the existing working copy. 1159 * @param[in] ignore_externals If @c TRUE, don't process externals 1160 * definitions as part of this operation. 1161 * @param[in] allow_unver_obstructions If @c TRUE, then tolerate existing 1162 * unversioned items that obstruct incoming paths. Only 1163 * obstructions of the same type (file or dir) as the added 1164 * item are tolerated. The text of obstructing files is left 1165 * as-is, effectively treating it as a user modification after 1166 * the checkout. Working properties of obstructing items are 1167 * set equal to the base properties. <br> 1168 * If @c FALSE, then abort if there are any unversioned 1169 * obstructing items. 1170 * @param[in] ctx The standard client context, used for authentication and 1171 * notification. 1172 * @param[in] pool Used for any temporary allocation. 1173 * 1174 * @return A pointer to an #svn_error_t of the type (this list is not 1175 * exhaustive): <br> 1176 * #SVN_ERR_UNSUPPORTED_FEATURE if @a URL refers to a file rather 1177 * than a directory; <br> 1178 * #SVN_ERR_RA_ILLEGAL_URL if @a URL does not exist; <br> 1179 * #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of 1180 * #svn_opt_revision_number, #svn_opt_revision_head, or 1181 * #svn_opt_revision_date. <br> 1182 * If no error occurred, return #SVN_NO_ERROR. 1183 * 1184 * @since New in 1.5. 1185 * 1186 * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for 1187 * a discussion of operative and peg revisions. 1188 */ 1189svn_error_t * 1190svn_client_checkout3(svn_revnum_t *result_rev, 1191 const char *URL, 1192 const char *path, 1193 const svn_opt_revision_t *peg_revision, 1194 const svn_opt_revision_t *revision, 1195 svn_depth_t depth, 1196 svn_boolean_t ignore_externals, 1197 svn_boolean_t allow_unver_obstructions, 1198 svn_client_ctx_t *ctx, 1199 apr_pool_t *pool); 1200 1201 1202/** 1203 * Similar to svn_client_checkout3() but with @a allow_unver_obstructions 1204 * always set to FALSE, and @a depth set according to @a recurse: if 1205 * @a recurse is TRUE, @a depth is #svn_depth_infinity, if @a recurse 1206 * is FALSE, @a depth is #svn_depth_files. 1207 * 1208 * @deprecated Provided for backward compatibility with the 1.4 API. 1209 */ 1210SVN_DEPRECATED 1211svn_error_t * 1212svn_client_checkout2(svn_revnum_t *result_rev, 1213 const char *URL, 1214 const char *path, 1215 const svn_opt_revision_t *peg_revision, 1216 const svn_opt_revision_t *revision, 1217 svn_boolean_t recurse, 1218 svn_boolean_t ignore_externals, 1219 svn_client_ctx_t *ctx, 1220 apr_pool_t *pool); 1221 1222 1223/** 1224 * Similar to svn_client_checkout2(), but with @a peg_revision 1225 * always set to #svn_opt_revision_unspecified and 1226 * @a ignore_externals always set to FALSE. 1227 * 1228 * @deprecated Provided for backward compatibility with the 1.1 API. 1229 */ 1230SVN_DEPRECATED 1231svn_error_t * 1232svn_client_checkout(svn_revnum_t *result_rev, 1233 const char *URL, 1234 const char *path, 1235 const svn_opt_revision_t *revision, 1236 svn_boolean_t recurse, 1237 svn_client_ctx_t *ctx, 1238 apr_pool_t *pool); 1239/** @} */ 1240 1241/** 1242 * @defgroup Update Bring a working copy up-to-date with a repository 1243 * 1244 * @{ 1245 * 1246 */ 1247 1248/** 1249 * Update working trees @a paths to @a revision, authenticating with the 1250 * authentication baton cached in @a ctx. @a paths is an array of const 1251 * char * paths to be updated. Unversioned paths that are direct children 1252 * of a versioned path will cause an update that attempts to add that path; 1253 * other unversioned paths are skipped. If @a result_revs is not NULL, 1254 * @a *result_revs will be set to an array of svn_revnum_t with each 1255 * element set to the revision to which @a revision was resolved for the 1256 * corresponding element of @a paths. 1257 * 1258 * @a revision must be of kind #svn_opt_revision_number, 1259 * #svn_opt_revision_head, or #svn_opt_revision_date. If @a 1260 * revision does not meet these requirements, return the error 1261 * #SVN_ERR_CLIENT_BAD_REVISION. 1262 * 1263 * The paths in @a paths can be from multiple working copies from multiple 1264 * repositories, but even if they all come from the same repository there 1265 * is no guarantee that revision represented by #svn_opt_revision_head 1266 * will remain the same as each path is updated. 1267 * 1268 * If @a ignore_externals is set, don't process externals definitions 1269 * as part of this operation. 1270 * 1271 * If @a depth is #svn_depth_infinity, update fully recursively. 1272 * Else if it is #svn_depth_immediates or #svn_depth_files, update 1273 * each target and its file entries, but not its subdirectories. Else 1274 * if #svn_depth_empty, update exactly each target, nonrecursively 1275 * (essentially, update the target's properties). 1276 * 1277 * If @a depth is #svn_depth_unknown, take the working depth from 1278 * @a paths and then behave as described above. 1279 * 1280 * If @a depth_is_sticky is set and @a depth is not 1281 * #svn_depth_unknown, then in addition to updating PATHS, also set 1282 * their sticky ambient depth value to @a depth. 1283 * 1284 * If @a allow_unver_obstructions is TRUE then the update tolerates 1285 * existing unversioned items that obstruct added paths. Only 1286 * obstructions of the same type (file or dir) as the added item are 1287 * tolerated. The text of obstructing files is left as-is, effectively 1288 * treating it as a user modification after the update. Working 1289 * properties of obstructing items are set equal to the base properties. 1290 * If @a allow_unver_obstructions is FALSE then the update will abort 1291 * if there are any unversioned obstructing items. 1292 * 1293 * If @a adds_as_modification is TRUE, a local addition at the same path 1294 * as an incoming addition of the same node kind results in a normal node 1295 * with a possible local modification, instead of a tree conflict. 1296 * 1297 * If @a make_parents is TRUE, create any non-existent parent 1298 * directories also by checking them out at depth=empty. 1299 * 1300 * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with 1301 * @a ctx->notify_baton2 for each item handled by the update, and also for 1302 * files restored from text-base. If @a ctx->cancel_func is non-NULL, invoke 1303 * it passing @a ctx->cancel_baton at various places during the update. 1304 * 1305 * Use @a pool for any temporary allocation. 1306 * 1307 * @todo Multiple Targets 1308 * - Up for debate: an update on multiple targets is *not* atomic. 1309 * Right now, svn_client_update only takes one path. What's 1310 * debatable is whether this should ever change. On the one hand, 1311 * it's kind of losing to have the client application loop over 1312 * targets and call svn_client_update() on each one; each call to 1313 * update initializes a whole new repository session (network 1314 * overhead, etc.) On the other hand, it's a very simple 1315 * implementation, and allows for the possibility that different 1316 * targets may come from different repositories. 1317 * 1318 * @since New in 1.7. 1319 */ 1320svn_error_t * 1321svn_client_update4(apr_array_header_t **result_revs, 1322 const apr_array_header_t *paths, 1323 const svn_opt_revision_t *revision, 1324 svn_depth_t depth, 1325 svn_boolean_t depth_is_sticky, 1326 svn_boolean_t ignore_externals, 1327 svn_boolean_t allow_unver_obstructions, 1328 svn_boolean_t adds_as_modification, 1329 svn_boolean_t make_parents, 1330 svn_client_ctx_t *ctx, 1331 apr_pool_t *pool); 1332 1333/** 1334 * Similar to svn_client_update4() but with @a make_parents always set 1335 * to FALSE and @a adds_as_modification set to TRUE. 1336 * 1337 * @deprecated Provided for backward compatibility with the 1.6 API. 1338 * @since New in 1.5. 1339 */ 1340SVN_DEPRECATED 1341svn_error_t * 1342svn_client_update3(apr_array_header_t **result_revs, 1343 const apr_array_header_t *paths, 1344 const svn_opt_revision_t *revision, 1345 svn_depth_t depth, 1346 svn_boolean_t depth_is_sticky, 1347 svn_boolean_t ignore_externals, 1348 svn_boolean_t allow_unver_obstructions, 1349 svn_client_ctx_t *ctx, 1350 apr_pool_t *pool); 1351 1352/** 1353 * Similar to svn_client_update3() but with @a allow_unver_obstructions 1354 * always set to FALSE, @a depth_is_sticky to FALSE, and @a depth set 1355 * according to @a recurse: if @a recurse is TRUE, set @a depth to 1356 * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to 1357 * #svn_depth_files. 1358 * 1359 * @deprecated Provided for backward compatibility with the 1.4 API. 1360 */ 1361SVN_DEPRECATED 1362svn_error_t * 1363svn_client_update2(apr_array_header_t **result_revs, 1364 const apr_array_header_t *paths, 1365 const svn_opt_revision_t *revision, 1366 svn_boolean_t recurse, 1367 svn_boolean_t ignore_externals, 1368 svn_client_ctx_t *ctx, 1369 apr_pool_t *pool); 1370 1371/** 1372 * Similar to svn_client_update2() except that it accepts only a single 1373 * target in @a path, returns a single revision if @a result_rev is 1374 * not NULL, and @a ignore_externals is always set to FALSE. 1375 * 1376 * @deprecated Provided for backward compatibility with the 1.1 API. 1377 */ 1378SVN_DEPRECATED 1379svn_error_t * 1380svn_client_update(svn_revnum_t *result_rev, 1381 const char *path, 1382 const svn_opt_revision_t *revision, 1383 svn_boolean_t recurse, 1384 svn_client_ctx_t *ctx, 1385 apr_pool_t *pool); 1386/** @} */ 1387 1388/** 1389 * @defgroup Switch Switch a working copy to another location. 1390 * 1391 * @{ 1392 */ 1393 1394/** 1395 * Switch an existing working copy directory to a different repository 1396 * location. 1397 * 1398 * This is normally used to switch a working copy directory over to another 1399 * line of development, such as a branch or a tag. Switching an existing 1400 * working copy directory is more efficient than checking out @a url from 1401 * scratch. 1402 * 1403 * @param[out] result_rev If non-NULL, the value of the revision to which 1404 * the working copy was actually switched. 1405 * @param[in] path The directory to be switched. This need not be the 1406 * root of a working copy. 1407 * @param[in] url The repository URL to switch to. 1408 * @param[in] peg_revision The peg revision. 1409 * @param[in] revision The operative revision. 1410 * @param[in] depth The depth of the operation. If #svn_depth_infinity, 1411 * switch fully recursively. Else if #svn_depth_immediates, 1412 * switch @a path and its file children (if any), and 1413 * switch subdirectories but do not update them. Else if 1414 * #svn_depth_files, switch just file children, ignoring 1415 * subdirectories completely. Else if #svn_depth_empty, 1416 * switch just @a path and touch nothing underneath it. 1417 * @param[in] depth_is_sticky If @c TRUE, and @a depth is not 1418 * #svn_depth_unknown, then in addition to switching @a path, also 1419 * set its sticky ambient depth value to @a depth. 1420 * @param[in] ignore_externals If @c TRUE, don't process externals 1421 * definitions as part of this operation. 1422 * @param[in] allow_unver_obstructions If @c TRUE, then tolerate existing 1423 * unversioned items that obstruct incoming paths. Only 1424 * obstructions of the same type (file or dir) as the added 1425 * item are tolerated. The text of obstructing files is left 1426 * as-is, effectively treating it as a user modification after 1427 * the checkout. Working properties of obstructing items are 1428 * set equal to the base properties. <br> 1429 * If @c FALSE, then abort if there are any unversioned 1430 * obstructing items. 1431 * @param[in] ignore_ancestry If @c FALSE, then verify that the file 1432 * or directory at @a path shares some common version control 1433 * ancestry with the switch URL location (represented by the 1434 * combination of @a url, @a peg_revision, and @a revision), 1435 * and returning #SVN_ERR_CLIENT_UNRELATED_RESOURCES if they 1436 * do not. If @c TRUE, no such sanity checks are performed. 1437 * 1438 * @param[in] ctx The standard client context, used for authentication and 1439 * notification. The notifier is invoked for paths affected by 1440 * the switch, and also for files which may be restored from the 1441 * pristine store after being previously removed from the working 1442 * copy. 1443 * @param[in] pool Used for any temporary allocation. 1444 * 1445 * @return A pointer to an #svn_error_t of the type (this list is not 1446 * exhaustive): <br> 1447 * #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of 1448 * #svn_opt_revision_number, #svn_opt_revision_head, or 1449 * #svn_opt_revision_date. <br> 1450 * If no error occurred, return #SVN_NO_ERROR. 1451 * 1452 * @since New in 1.7. 1453 * 1454 * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for 1455 * a discussion of operative and peg revisions. 1456 */ 1457svn_error_t * 1458svn_client_switch3(svn_revnum_t *result_rev, 1459 const char *path, 1460 const char *url, 1461 const svn_opt_revision_t *peg_revision, 1462 const svn_opt_revision_t *revision, 1463 svn_depth_t depth, 1464 svn_boolean_t depth_is_sticky, 1465 svn_boolean_t ignore_externals, 1466 svn_boolean_t allow_unver_obstructions, 1467 svn_boolean_t ignore_ancestry, 1468 svn_client_ctx_t *ctx, 1469 apr_pool_t *pool); 1470 1471 1472/** 1473 * Similar to svn_client_switch3() but with @a ignore_ancestry always 1474 * set to TRUE. 1475 * 1476 * @since New in 1.5. 1477 * @deprecated Provided for backward compatibility with the 1.4 API. 1478 */ 1479SVN_DEPRECATED 1480svn_error_t * 1481svn_client_switch2(svn_revnum_t *result_rev, 1482 const char *path, 1483 const char *url, 1484 const svn_opt_revision_t *peg_revision, 1485 const svn_opt_revision_t *revision, 1486 svn_depth_t depth, 1487 svn_boolean_t depth_is_sticky, 1488 svn_boolean_t ignore_externals, 1489 svn_boolean_t allow_unver_obstructions, 1490 svn_client_ctx_t *ctx, 1491 apr_pool_t *pool); 1492 1493 1494/** 1495 * Similar to svn_client_switch2() but with @a allow_unver_obstructions, 1496 * @a ignore_externals, and @a depth_is_sticky always set to FALSE, 1497 * and @a depth set according to @a recurse: if @a recurse is TRUE, 1498 * set @a depth to #svn_depth_infinity, if @a recurse is FALSE, set 1499 * @a depth to #svn_depth_files. 1500 * 1501 * @deprecated Provided for backward compatibility with the 1.4 API. 1502 */ 1503SVN_DEPRECATED 1504svn_error_t * 1505svn_client_switch(svn_revnum_t *result_rev, 1506 const char *path, 1507 const char *url, 1508 const svn_opt_revision_t *revision, 1509 svn_boolean_t recurse, 1510 svn_client_ctx_t *ctx, 1511 apr_pool_t *pool); 1512 1513/** @} */ 1514 1515/** 1516 * @defgroup Add Begin versioning files/directories in a working copy. 1517 * 1518 * @{ 1519 */ 1520 1521/** 1522 * Schedule a working copy @a path for addition to the repository. 1523 * 1524 * If @a depth is #svn_depth_empty, add just @a path and nothing 1525 * below it. If #svn_depth_files, add @a path and any file 1526 * children of @a path. If #svn_depth_immediates, add @a path, any 1527 * file children, and any immediate subdirectories (but nothing 1528 * underneath those subdirectories). If #svn_depth_infinity, add 1529 * @a path and everything under it fully recursively. 1530 * 1531 * @a path's parent must be under revision control already (unless 1532 * @a add_parents is TRUE), but @a path is not. 1533 * 1534 * If @a force is not set and @a path is already under version 1535 * control, return the error #SVN_ERR_ENTRY_EXISTS. If @a force is 1536 * set, do not error on already-versioned items. When used on a 1537 * directory in conjunction with a @a depth value greater than 1538 * #svn_depth_empty, this has the effect of scheduling for addition 1539 * any unversioned files and directories scattered within even a 1540 * versioned tree (up to @a depth). 1541 * 1542 * If @a ctx->notify_func2 is non-NULL, then for each added item, call 1543 * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the 1544 * added item. 1545 * 1546 * If @a no_ignore is FALSE, don't add any file or directory (or recurse 1547 * into any directory) that is unversioned and found by recursion (as 1548 * opposed to being the explicit target @a path) and whose name matches the 1549 * svn:ignore property on its parent directory or the global-ignores list in 1550 * @a ctx->config. If @a no_ignore is TRUE, do include such files and 1551 * directories. (Note that an svn:ignore property can influence this 1552 * behaviour only when recursing into an already versioned directory with @a 1553 * force.) 1554 * 1555 * If @a no_autoprops is TRUE, don't set any autoprops on added files. If 1556 * @a no_autoprops is FALSE then all added files have autprops set as per 1557 * the auto-props list in @a ctx->config and the value of any 1558 * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by the nearest 1559 * parents of @a path which are already under version control. 1560 * 1561 * If @a add_parents is TRUE, recurse up @a path's directory and look for 1562 * a versioned directory. If found, add all intermediate paths between it 1563 * and @a path. If not found, return #SVN_ERR_CLIENT_NO_VERSIONED_PARENT. 1564 * 1565 * @a scratch_pool is used for temporary allocations only. 1566 * 1567 * @par Important: 1568 * This is a *scheduling* operation. No changes will 1569 * happen to the repository until a commit occurs. This scheduling 1570 * can be removed with svn_client_revert2(). 1571 * 1572 * @since New in 1.8. 1573 */ 1574svn_error_t * 1575svn_client_add5(const char *path, 1576 svn_depth_t depth, 1577 svn_boolean_t force, 1578 svn_boolean_t no_ignore, 1579 svn_boolean_t no_autoprops, 1580 svn_boolean_t add_parents, 1581 svn_client_ctx_t *ctx, 1582 apr_pool_t *scratch_pool); 1583 1584/** 1585 * Similar to svn_client_add5(), but with @a no_autoprops always set to 1586 * FALSE. 1587 * 1588 * @deprecated Provided for backward compatibility with the 1.7 API. 1589 */ 1590SVN_DEPRECATED 1591svn_error_t * 1592svn_client_add4(const char *path, 1593 svn_depth_t depth, 1594 svn_boolean_t force, 1595 svn_boolean_t no_ignore, 1596 svn_boolean_t add_parents, 1597 svn_client_ctx_t *ctx, 1598 apr_pool_t *pool); 1599 1600/** 1601 * Similar to svn_client_add4(), but with @a add_parents always set to 1602 * FALSE and @a depth set according to @a recursive: if TRUE, then 1603 * @a depth is #svn_depth_infinity, if FALSE, then #svn_depth_empty. 1604 * 1605 * @deprecated Provided for backward compatibility with the 1.4 API. 1606 */ 1607SVN_DEPRECATED 1608svn_error_t * 1609svn_client_add3(const char *path, 1610 svn_boolean_t recursive, 1611 svn_boolean_t force, 1612 svn_boolean_t no_ignore, 1613 svn_client_ctx_t *ctx, 1614 apr_pool_t *pool); 1615 1616/** 1617 * Similar to svn_client_add3(), but with @a no_ignore always set to 1618 * FALSE. 1619 * 1620 * @deprecated Provided for backward compatibility with the 1.2 API. 1621 */ 1622SVN_DEPRECATED 1623svn_error_t * 1624svn_client_add2(const char *path, 1625 svn_boolean_t recursive, 1626 svn_boolean_t force, 1627 svn_client_ctx_t *ctx, 1628 apr_pool_t *pool); 1629 1630/** 1631 * Similar to svn_client_add2(), but with @a force always set to FALSE. 1632 * 1633 * @deprecated Provided for backward compatibility with the 1.0 API. 1634 */ 1635SVN_DEPRECATED 1636svn_error_t * 1637svn_client_add(const char *path, 1638 svn_boolean_t recursive, 1639 svn_client_ctx_t *ctx, 1640 apr_pool_t *pool); 1641 1642/** @} */ 1643 1644/** 1645 * @defgroup Mkdir Create directories in a working copy or repository. 1646 * 1647 * @{ 1648 */ 1649 1650/** Create a directory, either in a repository or a working copy. 1651 * 1652 * @a paths is an array of (const char *) paths, either all local WC paths 1653 * or all URLs. 1654 * 1655 * If @a paths contains URLs, use the authentication baton in @a ctx 1656 * and @a message to immediately attempt to commit the creation of the 1657 * directories in @a paths in the repository. 1658 * 1659 * Else, create the directories on disk, and attempt to schedule them 1660 * for addition (using svn_client_add(), whose docstring you should 1661 * read). 1662 * 1663 * If @a make_parents is TRUE, create any non-existent parent directories 1664 * also. 1665 * 1666 * If non-NULL, @a revprop_table is a hash table holding additional, 1667 * custom revision properties (<tt>const char *</tt> names mapped to 1668 * <tt>svn_string_t *</tt> values) to be set on the new revision in 1669 * the event that this is a committing operation. This table cannot 1670 * contain any standard Subversion properties. 1671 * 1672 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton 1673 * combo that this function can use to query for a commit log message 1674 * when one is needed. 1675 * 1676 * If @a ctx->notify_func2 is non-NULL, when the directory has been created 1677 * (successfully) in the working copy, call @a ctx->notify_func2 with 1678 * @a ctx->notify_baton2 and the path of the new directory. Note that this is 1679 * only called for items added to the working copy. 1680 * 1681 * If @a commit_callback is non-NULL, then for each successful commit, call 1682 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 1683 * the commit. 1684 * 1685 * @since New in 1.7. 1686 */ 1687svn_error_t * 1688svn_client_mkdir4(const apr_array_header_t *paths, 1689 svn_boolean_t make_parents, 1690 const apr_hash_t *revprop_table, 1691 svn_commit_callback2_t commit_callback, 1692 void *commit_baton, 1693 svn_client_ctx_t *ctx, 1694 apr_pool_t *pool); 1695 1696/** 1697 * Similar to svn_client_mkdir4(), but returns the commit info in 1698 * @a *commit_info_p rather than through a callback function. 1699 * 1700 * @since New in 1.5. 1701 * @deprecated Provided for backward compatibility with the 1.6 API. 1702 */ 1703SVN_DEPRECATED 1704svn_error_t * 1705svn_client_mkdir3(svn_commit_info_t **commit_info_p, 1706 const apr_array_header_t *paths, 1707 svn_boolean_t make_parents, 1708 const apr_hash_t *revprop_table, 1709 svn_client_ctx_t *ctx, 1710 apr_pool_t *pool); 1711 1712 1713/** 1714 * Same as svn_client_mkdir3(), but with @a make_parents always FALSE, 1715 * and @a revprop_table always NULL. 1716 * 1717 * @since New in 1.3. 1718 * @deprecated Provided for backward compatibility with the 1.4 API. 1719 */ 1720SVN_DEPRECATED 1721svn_error_t * 1722svn_client_mkdir2(svn_commit_info_t **commit_info_p, 1723 const apr_array_header_t *paths, 1724 svn_client_ctx_t *ctx, 1725 apr_pool_t *pool); 1726 1727/** 1728 * Same as svn_client_mkdir2(), but takes the #svn_client_commit_info_t 1729 * type for @a commit_info_p. 1730 * 1731 * @deprecated Provided for backward compatibility with the 1.2 API. 1732 */ 1733SVN_DEPRECATED 1734svn_error_t * 1735svn_client_mkdir(svn_client_commit_info_t **commit_info_p, 1736 const apr_array_header_t *paths, 1737 svn_client_ctx_t *ctx, 1738 apr_pool_t *pool); 1739 1740/** @} */ 1741 1742/** 1743 * @defgroup Delete Remove files/directories from a working copy or repository. 1744 * 1745 * @{ 1746 */ 1747 1748/** Delete items from a repository or working copy. 1749 * 1750 * @a paths is an array of (const char *) paths, either all local WC paths 1751 * or all URLs. 1752 * 1753 * If the paths in @a paths are URLs, use the authentication baton in 1754 * @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to 1755 * immediately attempt to commit a deletion of the URLs from the 1756 * repository. Every path must belong to the same repository. 1757 * 1758 * Else, schedule the working copy paths in @a paths for removal from 1759 * the repository. Each path's parent must be under revision control. 1760 * This is just a *scheduling* operation. No changes will happen to 1761 * the repository until a commit occurs. This scheduling can be 1762 * removed with svn_client_revert2(). If a path is a file it is 1763 * immediately removed from the working copy. If the path is a 1764 * directory it will remain in the working copy but all the files, and 1765 * all unversioned items, it contains will be removed. If @a force is 1766 * not set then this operation will fail if any path contains locally 1767 * modified and/or unversioned items. If @a force is set such items 1768 * will be deleted. 1769 * 1770 * If the paths are working copy paths and @a keep_local is TRUE then 1771 * the paths will not be removed from the working copy, only scheduled 1772 * for removal from the repository. Once the scheduled deletion is 1773 * committed, they will appear as unversioned paths in the working copy. 1774 * 1775 * If non-NULL, @a revprop_table is a hash table holding additional, 1776 * custom revision properties (<tt>const char *</tt> names mapped to 1777 * <tt>svn_string_t *</tt> values) to be set on the new revision in 1778 * the event that this is a committing operation. This table cannot 1779 * contain any standard Subversion properties. 1780 * 1781 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton 1782 * combo that this function can use to query for a commit log message 1783 * when one is needed. 1784 * 1785 * If @a ctx->notify_func2 is non-NULL, then for each item deleted, call 1786 * @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of the deleted 1787 * item. 1788 * 1789 * If @a commit_callback is non-NULL, then for each successful commit, call 1790 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 1791 * the commit. 1792 * 1793 * @since New in 1.7. 1794 */ 1795svn_error_t * 1796svn_client_delete4(const apr_array_header_t *paths, 1797 svn_boolean_t force, 1798 svn_boolean_t keep_local, 1799 const apr_hash_t *revprop_table, 1800 svn_commit_callback2_t commit_callback, 1801 void *commit_baton, 1802 svn_client_ctx_t *ctx, 1803 apr_pool_t *pool); 1804 1805/** 1806 * Similar to svn_client_delete4(), but returns the commit info in 1807 * @a *commit_info_p rather than through a callback function. 1808 * 1809 * @since New in 1.5. 1810 * @deprecated Provided for backward compatibility with the 1.6 API. 1811 */ 1812SVN_DEPRECATED 1813svn_error_t * 1814svn_client_delete3(svn_commit_info_t **commit_info_p, 1815 const apr_array_header_t *paths, 1816 svn_boolean_t force, 1817 svn_boolean_t keep_local, 1818 const apr_hash_t *revprop_table, 1819 svn_client_ctx_t *ctx, 1820 apr_pool_t *pool); 1821 1822/** 1823 * Similar to svn_client_delete3(), but with @a keep_local always set 1824 * to FALSE, and @a revprop_table passed as NULL. 1825 * 1826 * @deprecated Provided for backward compatibility with the 1.4 API. 1827 */ 1828SVN_DEPRECATED 1829svn_error_t * 1830svn_client_delete2(svn_commit_info_t **commit_info_p, 1831 const apr_array_header_t *paths, 1832 svn_boolean_t force, 1833 svn_client_ctx_t *ctx, 1834 apr_pool_t *pool); 1835 1836/** 1837 * Similar to svn_client_delete2(), but takes the #svn_client_commit_info_t 1838 * type for @a commit_info_p. 1839 * 1840 * @deprecated Provided for backward compatibility with the 1.2 API. 1841 */ 1842SVN_DEPRECATED 1843svn_error_t * 1844svn_client_delete(svn_client_commit_info_t **commit_info_p, 1845 const apr_array_header_t *paths, 1846 svn_boolean_t force, 1847 svn_client_ctx_t *ctx, 1848 apr_pool_t *pool); 1849 1850 1851/** @} */ 1852 1853/** 1854 * @defgroup Import Import files into the repository. 1855 * 1856 * @{ 1857 */ 1858 1859/** 1860 * The callback invoked by svn_client_import5() before adding a node to the 1861 * list of nodes to be imported. 1862 * 1863 * @a baton is the value passed to @a svn_client_import5 as filter_baton. 1864 * 1865 * The callback receives the @a local_abspath for each node and the @a dirent 1866 * for it when walking the directory tree. Only the kind of node, including 1867 * special status is available in @a dirent. 1868 * 1869 * Implementations can set @a *filtered to TRUE, to make the import 1870 * process omit the node and (if the node is a directory) all its 1871 * descendants. 1872 * 1873 * @a scratch_pool can be used for temporary allocations. 1874 * 1875 * @since New in 1.8. 1876 */ 1877typedef svn_error_t *(*svn_client_import_filter_func_t)( 1878 void *baton, 1879 svn_boolean_t *filtered, 1880 const char *local_abspath, 1881 const svn_io_dirent2_t *dirent, 1882 apr_pool_t *scratch_pool); 1883 1884/** Import file or directory @a path into repository directory @a url at 1885 * head, authenticating with the authentication baton cached in @a ctx, 1886 * and using @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to get a log message 1887 * for the (implied) commit. If some components of @a url do not exist 1888 * then create parent directories as necessary. 1889 * 1890 * This function reads an unversioned tree from disk and skips any ".svn" 1891 * directories. Even if a file or directory being imported is part of an 1892 * existing WC, this function sees it as unversioned and does not notice any 1893 * existing Subversion properties in it. 1894 * 1895 * If @a path is a directory, the contents of that directory are 1896 * imported directly into the directory identified by @a url. Note that the 1897 * directory @a path itself is not imported -- that is, the basename of 1898 * @a path is not part of the import. 1899 * 1900 * If @a path is a file, then the dirname of @a url is the directory 1901 * receiving the import. The basename of @a url is the filename in the 1902 * repository. In this case if @a url already exists, return error. 1903 * 1904 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with 1905 * @a ctx->notify_baton2 as the import progresses, with any of the following 1906 * actions: #svn_wc_notify_commit_added, 1907 * #svn_wc_notify_commit_postfix_txdelta. 1908 * 1909 * Use @a scratch_pool for any temporary allocation. 1910 * 1911 * If non-NULL, @a revprop_table is a hash table holding additional, 1912 * custom revision properties (<tt>const char *</tt> names mapped to 1913 * <tt>svn_string_t *</tt> values) to be set on the new revision. 1914 * This table cannot contain any standard Subversion properties. 1915 * 1916 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton 1917 * combo that this function can use to query for a commit log message 1918 * when one is needed. 1919 * 1920 * If @a depth is #svn_depth_empty, import just @a path and nothing 1921 * below it. If #svn_depth_files, import @a path and any file 1922 * children of @a path. If #svn_depth_immediates, import @a path, any 1923 * file children, and any immediate subdirectories (but nothing 1924 * underneath those subdirectories). If #svn_depth_infinity, import 1925 * @a path and everything under it fully recursively. 1926 * 1927 * If @a no_ignore is @c FALSE, don't import any file or directory (or 1928 * recurse into any directory) that is found by recursion (as opposed to 1929 * being the explicit target @a path) and whose name matches the 1930 * global-ignores list in @a ctx->config. If @a no_ignore is @c TRUE, do 1931 * include such files and directories. (Note that svn:ignore properties are 1932 * not involved, as auto-props cannot set properties on directories and even 1933 * if the target is part of a WC the import ignores any existing 1934 * properties.) 1935 * 1936 * If @a no_autoprops is TRUE, don't set any autoprops on imported files. If 1937 * @a no_autoprops is FALSE then all imported files have autprops set as per 1938 * the auto-props list in @a ctx->config and the value of any 1939 * @c SVN_PROP_INHERITABLE_AUTO_PROPS properties inherited by and explicitly set 1940 * on @a url if @a url is already under versioned control, or the nearest parents 1941 * of @a path which are already under version control if not. 1942 * 1943 * If @a ignore_unknown_node_types is @c FALSE, ignore files of which the 1944 * node type is unknown, such as device files and pipes. 1945 * 1946 * If @a filter_callback is non-NULL, call it for each node that isn't ignored 1947 * for other reasons with @a filter_baton, to allow third party to ignore 1948 * specific nodes during importing. 1949 * 1950 * If @a commit_callback is non-NULL, then for each successful commit, call 1951 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 1952 * the commit. 1953 * 1954 * @since New in 1.8. 1955 */ 1956svn_error_t * 1957svn_client_import5(const char *path, 1958 const char *url, 1959 svn_depth_t depth, 1960 svn_boolean_t no_ignore, 1961 svn_boolean_t no_autoprops, 1962 svn_boolean_t ignore_unknown_node_types, 1963 const apr_hash_t *revprop_table, 1964 svn_client_import_filter_func_t filter_callback, 1965 void *filter_baton, 1966 svn_commit_callback2_t commit_callback, 1967 void *commit_baton, 1968 svn_client_ctx_t *ctx, 1969 apr_pool_t *scratch_pool); 1970 1971/** 1972 * Similar to svn_client_import5(), but without support for an optional 1973 * @a filter_callback and @a no_autoprops always set to FALSE. 1974 * 1975 * @since New in 1.7. 1976 * @deprecated Provided for backward compatibility with the 1.7 API. 1977 */ 1978SVN_DEPRECATED 1979svn_error_t * 1980svn_client_import4(const char *path, 1981 const char *url, 1982 svn_depth_t depth, 1983 svn_boolean_t no_ignore, 1984 svn_boolean_t ignore_unknown_node_types, 1985 const apr_hash_t *revprop_table, 1986 svn_commit_callback2_t commit_callback, 1987 void *commit_baton, 1988 svn_client_ctx_t *ctx, 1989 apr_pool_t *pool); 1990 1991/** 1992 * Similar to svn_client_import4(), but returns the commit info in 1993 * @a *commit_info_p rather than through a callback function. 1994 * 1995 * @since New in 1.5. 1996 * @deprecated Provided for backward compatibility with the 1.6 API. 1997 */ 1998SVN_DEPRECATED 1999svn_error_t * 2000svn_client_import3(svn_commit_info_t **commit_info_p, 2001 const char *path, 2002 const char *url, 2003 svn_depth_t depth, 2004 svn_boolean_t no_ignore, 2005 svn_boolean_t ignore_unknown_node_types, 2006 const apr_hash_t *revprop_table, 2007 svn_client_ctx_t *ctx, 2008 apr_pool_t *pool); 2009 2010/** 2011 * Similar to svn_client_import3(), but with @a ignore_unknown_node_types 2012 * always set to @c FALSE, @a revprop_table passed as NULL, and @a 2013 * depth set according to @a nonrecursive: if TRUE, then @a depth is 2014 * #svn_depth_files, else #svn_depth_infinity. 2015 * 2016 * @since New in 1.3. 2017 * 2018 * @deprecated Provided for backward compatibility with the 1.4 API 2019 */ 2020SVN_DEPRECATED 2021svn_error_t * 2022svn_client_import2(svn_commit_info_t **commit_info_p, 2023 const char *path, 2024 const char *url, 2025 svn_boolean_t nonrecursive, 2026 svn_boolean_t no_ignore, 2027 svn_client_ctx_t *ctx, 2028 apr_pool_t *pool); 2029 2030/** 2031 * Similar to svn_client_import2(), but with @a no_ignore always set 2032 * to FALSE and using the #svn_client_commit_info_t type for 2033 * @a commit_info_p. 2034 * 2035 * @deprecated Provided for backward compatibility with the 1.2 API. 2036 */ 2037SVN_DEPRECATED 2038svn_error_t * 2039svn_client_import(svn_client_commit_info_t **commit_info_p, 2040 const char *path, 2041 const char *url, 2042 svn_boolean_t nonrecursive, 2043 svn_client_ctx_t *ctx, 2044 apr_pool_t *pool); 2045 2046/** @} */ 2047 2048/** 2049 * @defgroup Commit Commit local modifications to the repository. 2050 * 2051 * @{ 2052 */ 2053 2054/** 2055 * Commit files or directories into repository, authenticating with 2056 * the authentication baton cached in @a ctx, and using 2057 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to obtain the log message. 2058 * Set @a *commit_info_p to the results of the commit, allocated in @a pool. 2059 * 2060 * @a targets is an array of <tt>const char *</tt> paths to commit. They 2061 * need not be canonicalized nor condensed; this function will take care of 2062 * that. If @a targets has zero elements, then do nothing and return 2063 * immediately without error. 2064 * 2065 * If non-NULL, @a revprop_table is a hash table holding additional, 2066 * custom revision properties (<tt>const char *</tt> names mapped to 2067 * <tt>svn_string_t *</tt> values) to be set on the new revision. 2068 * This table cannot contain any standard Subversion properties. 2069 * 2070 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with 2071 * @a ctx->notify_baton2 as the commit progresses, with any of the following 2072 * actions: #svn_wc_notify_commit_modified, #svn_wc_notify_commit_added, 2073 * #svn_wc_notify_commit_deleted, #svn_wc_notify_commit_replaced, 2074 * #svn_wc_notify_commit_copied, #svn_wc_notify_commit_copied_replaced, 2075 * #svn_wc_notify_commit_postfix_txdelta. 2076 * 2077 * If @a depth is #svn_depth_infinity, commit all changes to and 2078 * below named targets. If @a depth is #svn_depth_empty, commit 2079 * only named targets (that is, only property changes on named 2080 * directory targets, and property and content changes for named file 2081 * targets). If @a depth is #svn_depth_files, behave as above for 2082 * named file targets, and for named directory targets, commit 2083 * property changes on a named directory and all changes to files 2084 * directly inside that directory. If #svn_depth_immediates, behave 2085 * as for #svn_depth_files, and for subdirectories of any named 2086 * directory target commit as though for #svn_depth_empty. 2087 * 2088 * Unlock paths in the repository, unless @a keep_locks is TRUE. 2089 * 2090 * @a changelists is an array of <tt>const char *</tt> changelist 2091 * names, used as a restrictive filter on items that are committed; 2092 * that is, don't commit anything unless it's a member of one of those 2093 * changelists. After the commit completes successfully, remove 2094 * changelist associations from the targets, unless @a 2095 * keep_changelists is set. If @a changelists is 2096 * empty (or altogether @c NULL), no changelist filtering occurs. 2097 * 2098 * If @a commit_as_operations is set to FALSE, when a copy is committed 2099 * all changes below the copy are always committed at the same time 2100 * (independent of the value of @a depth). If @a commit_as_operations is 2101 * #TRUE, changes to descendants are only committed if they are itself 2102 * included via @a depth and targets. 2103 * 2104 * If @a include_file_externals and/or @a include_dir_externals are #TRUE, 2105 * also commit all file and/or dir externals (respectively) that are reached 2106 * by recursion, except for those externals which: 2107 * - have a fixed revision, or 2108 * - come from a different repository root URL (dir externals). 2109 * These flags affect only recursion; externals that directly appear in @a 2110 * targets are always included in the commit. 2111 * 2112 * ### TODO: currently, file externals hidden inside an unversioned dir are 2113 * skipped deliberately, because we can't commit those yet. 2114 * See STMT_SELECT_COMMITTABLE_EXTERNALS_BELOW. 2115 * 2116 * ### TODO: With @c depth_immediates, this function acts as if 2117 * @a include_dir_externals was passed #FALSE, but caller expects 2118 * immediate child dir externals to be included @c depth_empty. 2119 * 2120 * When @a commit_as_operations is #TRUE it is possible to delete a node and 2121 * all its descendants by selecting just the root of the deletion. If it is 2122 * set to #FALSE this will raise an error. 2123 * 2124 * If @a commit_callback is non-NULL, then for each successful commit, call 2125 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 2126 * the commit. 2127 * 2128 * @note #svn_depth_unknown and #svn_depth_exclude must not be passed 2129 * for @a depth. 2130 * 2131 * Use @a pool for any temporary allocations. 2132 * 2133 * @since New in 1.8. 2134 */ 2135svn_error_t * 2136svn_client_commit6(const apr_array_header_t *targets, 2137 svn_depth_t depth, 2138 svn_boolean_t keep_locks, 2139 svn_boolean_t keep_changelists, 2140 svn_boolean_t commit_as_operations, 2141 svn_boolean_t include_file_externals, 2142 svn_boolean_t include_dir_externals, 2143 const apr_array_header_t *changelists, 2144 const apr_hash_t *revprop_table, 2145 svn_commit_callback2_t commit_callback, 2146 void *commit_baton, 2147 svn_client_ctx_t *ctx, 2148 apr_pool_t *pool); 2149 2150/** 2151 * Similar to svn_client_commit6(), but passes @a include_file_externals as 2152 * FALSE and @a include_dir_externals as FALSE. 2153 * 2154 * @since New in 1.7. 2155 * @deprecated Provided for backward compatibility with the 1.7 API. 2156 */ 2157SVN_DEPRECATED 2158svn_error_t * 2159svn_client_commit5(const apr_array_header_t *targets, 2160 svn_depth_t depth, 2161 svn_boolean_t keep_locks, 2162 svn_boolean_t keep_changelists, 2163 svn_boolean_t commit_as_operations, 2164 const apr_array_header_t *changelists, 2165 const apr_hash_t *revprop_table, 2166 svn_commit_callback2_t commit_callback, 2167 void *commit_baton, 2168 svn_client_ctx_t *ctx, 2169 apr_pool_t *pool); 2170 2171/** 2172 * Similar to svn_client_commit5(), but returns the commit info in 2173 * @a *commit_info_p rather than through a callback function. Does not use 2174 * #svn_wc_notify_commit_copied or #svn_wc_notify_commit_copied_replaced 2175 * (preferring #svn_wc_notify_commit_added and 2176 * #svn_wc_notify_commit_replaced, respectively, instead). 2177 * 2178 * Also, if no error is returned and @a (*commit_info_p)->revision is set to 2179 * #SVN_INVALID_REVNUM, then the commit was a no-op; nothing needed to 2180 * be committed. 2181 * 2182 * Sets @a commit_as_operations to FALSE to match Subversion 1.6's behavior. 2183 * 2184 * @since New in 1.5. 2185 * @deprecated Provided for backward compatibility with the 1.6 API. 2186 */ 2187SVN_DEPRECATED 2188svn_error_t * 2189svn_client_commit4(svn_commit_info_t **commit_info_p, 2190 const apr_array_header_t *targets, 2191 svn_depth_t depth, 2192 svn_boolean_t keep_locks, 2193 svn_boolean_t keep_changelists, 2194 const apr_array_header_t *changelists, 2195 const apr_hash_t *revprop_table, 2196 svn_client_ctx_t *ctx, 2197 apr_pool_t *pool); 2198 2199/** 2200 * Similar to svn_client_commit4(), but always with NULL for 2201 * @a changelist_name, FALSE for @a keep_changelist, NULL for @a 2202 * revprop_table, and @a depth set according to @a recurse: if @a 2203 * recurse is TRUE, use #svn_depth_infinity, else #svn_depth_empty. 2204 * 2205 * @deprecated Provided for backward compatibility with the 1.4 API. 2206 * 2207 * @since New in 1.3. 2208 */ 2209SVN_DEPRECATED 2210svn_error_t * 2211svn_client_commit3(svn_commit_info_t **commit_info_p, 2212 const apr_array_header_t *targets, 2213 svn_boolean_t recurse, 2214 svn_boolean_t keep_locks, 2215 svn_client_ctx_t *ctx, 2216 apr_pool_t *pool); 2217 2218/** 2219 * Similar to svn_client_commit3(), but uses #svn_client_commit_info_t 2220 * for @a commit_info_p. 2221 * 2222 * @deprecated Provided for backward compatibility with the 1.2 API. 2223 * 2224 * @since New in 1.2. 2225 */ 2226SVN_DEPRECATED 2227svn_error_t * 2228svn_client_commit2(svn_client_commit_info_t **commit_info_p, 2229 const apr_array_header_t *targets, 2230 svn_boolean_t recurse, 2231 svn_boolean_t keep_locks, 2232 svn_client_ctx_t *ctx, 2233 apr_pool_t *pool); 2234 2235/** 2236 * Similar to svn_client_commit2(), but with @a keep_locks set to 2237 * TRUE and @a nonrecursive instead of @a recurse. 2238 * 2239 * @deprecated Provided for backward compatibility with the 1.1 API. 2240 */ 2241SVN_DEPRECATED 2242svn_error_t * 2243svn_client_commit(svn_client_commit_info_t **commit_info_p, 2244 const apr_array_header_t *targets, 2245 svn_boolean_t nonrecursive, 2246 svn_client_ctx_t *ctx, 2247 apr_pool_t *pool); 2248 2249/** @} */ 2250 2251/** 2252 * @defgroup Status Report interesting information about paths in the \ 2253 * working copy. 2254 * 2255 * @{ 2256 */ 2257 2258/** 2259 * Structure for holding the "status" of a working copy item. 2260 * 2261 * @note Fields may be added to the end of this structure in future 2262 * versions. Therefore, to preserve binary compatibility, users 2263 * should not directly allocate structures of this type. 2264 * 2265 * @since New in 1.7. 2266 */ 2267typedef struct svn_client_status_t 2268{ 2269 /** The kind of node as recorded in the working copy */ 2270 svn_node_kind_t kind; 2271 2272 /** The absolute path to the node */ 2273 const char *local_abspath; 2274 2275 /** The actual size of the working file on disk, or SVN_INVALID_FILESIZE 2276 * if unknown (or if the item isn't a file at all). */ 2277 svn_filesize_t filesize; 2278 2279 /** If the path is under version control, versioned is TRUE, otherwise 2280 * FALSE. */ 2281 svn_boolean_t versioned; 2282 2283 /** Set to TRUE if the node is the victim of some kind of conflict. */ 2284 svn_boolean_t conflicted; 2285 2286 /** The status of the node, based on the restructuring changes and if the 2287 * node has no restructuring changes the text and prop status. */ 2288 enum svn_wc_status_kind node_status; 2289 2290 /** The status of the text of the node, not including restructuring changes. 2291 * Valid values are: svn_wc_status_none, svn_wc_status_normal, 2292 * svn_wc_status_modified and svn_wc_status_conflicted. */ 2293 enum svn_wc_status_kind text_status; 2294 2295 /** The status of the node's properties. 2296 * Valid values are: svn_wc_status_none, svn_wc_status_normal, 2297 * svn_wc_status_modified and svn_wc_status_conflicted. */ 2298 enum svn_wc_status_kind prop_status; 2299 2300 /** A node can be 'locked' if a working copy update is in progress or 2301 * was interrupted. */ 2302 svn_boolean_t wc_is_locked; 2303 2304 /** A file or directory can be 'copied' if it's scheduled for 2305 * addition-with-history (or part of a subtree that is scheduled as such.). 2306 */ 2307 svn_boolean_t copied; 2308 2309 /** The URL of the repository root. */ 2310 const char *repos_root_url; 2311 2312 /** The UUID of the repository */ 2313 const char *repos_uuid; 2314 2315 /** The in-repository path relative to the repository root. */ 2316 const char *repos_relpath; 2317 2318 /** Base revision. */ 2319 svn_revnum_t revision; 2320 2321 /** Last revision this was changed */ 2322 svn_revnum_t changed_rev; 2323 2324 /** Date of last commit. */ 2325 apr_time_t changed_date; 2326 2327 /** Last commit author of this item */ 2328 const char *changed_author; 2329 2330 /** A file or directory can be 'switched' if the switch command has been 2331 * used. If this is TRUE, then file_external will be FALSE. 2332 */ 2333 svn_boolean_t switched; 2334 2335 /** If the item is a file that was added to the working copy with an 2336 * svn:externals; if file_external is TRUE, then switched is always 2337 * FALSE. 2338 */ 2339 svn_boolean_t file_external; 2340 2341 /** The locally present lock. (Values of path, token, owner, comment and 2342 * are available if a lock is present) */ 2343 const svn_lock_t *lock; 2344 2345 /** Which changelist this item is part of, or NULL if not part of any. */ 2346 const char *changelist; 2347 2348 /** The depth of the node as recorded in the working copy 2349 * (#svn_depth_unknown for files or when no depth is recorded) */ 2350 svn_depth_t depth; 2351 2352 /** 2353 * @defgroup svn_wc_status_ood WC out-of-date info from the repository 2354 * @{ 2355 * 2356 * When the working copy item is out-of-date compared to the 2357 * repository, the following fields represent the state of the 2358 * youngest revision of the item in the repository. If the working 2359 * copy is not out of date, the fields are initialized as described 2360 * below. 2361 */ 2362 2363 /** Set to the node kind of the youngest commit, or #svn_node_none 2364 * if not out of date. */ 2365 svn_node_kind_t ood_kind; 2366 2367 /** The status of the node, based on the text status if the node has no 2368 * restructuring changes */ 2369 enum svn_wc_status_kind repos_node_status; 2370 2371 /** The node's text status in the repository. */ 2372 enum svn_wc_status_kind repos_text_status; 2373 2374 /** The node's property status in the repository. */ 2375 enum svn_wc_status_kind repos_prop_status; 2376 2377 /** The node's lock in the repository, if any. */ 2378 const svn_lock_t *repos_lock; 2379 2380 /** Set to the youngest committed revision, or #SVN_INVALID_REVNUM 2381 * if not out of date. */ 2382 svn_revnum_t ood_changed_rev; 2383 2384 /** Set to the most recent commit date, or @c 0 if not out of date. */ 2385 apr_time_t ood_changed_date; 2386 2387 /** Set to the user name of the youngest commit, or @c NULL if not 2388 * out of date or non-existent. Because a non-existent @c 2389 * svn:author property has the same behavior as an out-of-date 2390 * working copy, examine @c ood_changed_rev to determine whether 2391 * the working copy is out of date. */ 2392 const char *ood_changed_author; 2393 2394 /** @} */ 2395 2396 /** Reserved for libsvn_client's internal use; this value is only to be used 2397 * for libsvn_client backwards compatibility wrappers. This value may be NULL 2398 * or to other data in future versions. */ 2399 const void *backwards_compatibility_baton; 2400 2401 /** Set to the local absolute path that this node was moved from, if this 2402 * file or directory has been moved here locally and is the root of that 2403 * move. Otherwise set to NULL. 2404 * 2405 * This will be NULL for moved-here nodes that are just part of a subtree 2406 * that was moved along (and are not themselves a root of a different move 2407 * operation). 2408 * 2409 * @since New in 1.8. */ 2410 const char *moved_from_abspath; 2411 2412 /** Set to the local absolute path that this node was moved to, if this file 2413 * or directory has been moved away locally and corresponds to the root 2414 * of the destination side of the move. Otherwise set to NULL. 2415 * 2416 * Note: Saying just "root" here could be misleading. For example: 2417 * svn mv A AA; 2418 * svn mv AA/B BB; 2419 * creates a situation where A/B is moved-to BB, but one could argue that 2420 * the move source's root actually was AA/B. Note that, as far as the 2421 * working copy is concerned, above case is exactly identical to: 2422 * svn mv A/B BB; 2423 * svn mv A AA; 2424 * In both situations, @a moved_to_abspath would be set for nodes A (moved 2425 * to AA) and A/B (moved to BB), only. 2426 * 2427 * This will be NULL for moved-away nodes that were just part of a subtree 2428 * that was moved along (and are not themselves a root of a different move 2429 * operation). 2430 * 2431 * @since New in 1.8. */ 2432 const char *moved_to_abspath; 2433 2434 /* NOTE! Please update svn_client_status_dup() when adding new fields here. */ 2435} svn_client_status_t; 2436 2437/** 2438 * Return a duplicate of @a status, allocated in @a result_pool. No part of the new 2439 * structure will be shared with @a status. 2440 * 2441 * @since New in 1.7. 2442 */ 2443svn_client_status_t * 2444svn_client_status_dup(const svn_client_status_t *status, 2445 apr_pool_t *result_pool); 2446 2447/** 2448 * A callback for reporting a @a status about @a path (which may be an 2449 * absolute or relative path). 2450 * 2451 * @a baton is a closure object; it should be provided by the 2452 * implementation, and passed by the caller. 2453 * 2454 * @a scratch_pool will be cleared between invocations to the callback. 2455 * 2456 * @since New in 1.7. 2457 */ 2458typedef svn_error_t *(*svn_client_status_func_t)( 2459 void *baton, 2460 const char *path, 2461 const svn_client_status_t *status, 2462 apr_pool_t *scratch_pool); 2463 2464/** 2465 * Given @a path to a working copy directory (or single file), call 2466 * @a status_func/status_baton with a set of #svn_wc_status_t * 2467 * structures which describe the status of @a path, and its children 2468 * (recursing according to @a depth). 2469 * 2470 * - If @a get_all is set, retrieve all entries; otherwise, 2471 * retrieve only "interesting" entries (local mods and/or 2472 * out of date). 2473 * 2474 * - If @a update is set, contact the repository and augment the 2475 * status structures with information about out-of-dateness (with 2476 * respect to @a revision). Also, if @a result_rev is not @c NULL, 2477 * set @a *result_rev to the actual revision against which the 2478 * working copy was compared (@a *result_rev is not meaningful unless 2479 * @a update is set). 2480 * 2481 * If @a no_ignore is @c FALSE, don't report any file or directory (or 2482 * recurse into any directory) that is found by recursion (as opposed to 2483 * being the explicit target @a path) and whose name matches the 2484 * svn:ignore property on its parent directory or the global-ignores 2485 * list in @a ctx->config. If @a no_ignore is @c TRUE, report each such 2486 * file or directory with the status code #svn_wc_status_ignored. 2487 * 2488 * If @a ignore_externals is not set, then recurse into externals 2489 * definitions (if any exist) after handling the main target. This 2490 * calls the client notification function (in @a ctx) with the 2491 * #svn_wc_notify_status_external action before handling each externals 2492 * definition, and with #svn_wc_notify_status_completed 2493 * after each. 2494 * 2495 * If @a depth_as_sticky is set and @a depth is not 2496 * #svn_depth_unknown, then the status is calculated as if depth_is_sticky 2497 * was passed to an equivalent update command. 2498 * 2499 * @a changelists is an array of <tt>const char *</tt> changelist 2500 * names, used as a restrictive filter on items whose statuses are 2501 * reported; that is, don't report status about any item unless 2502 * it's a member of one of those changelists. If @a changelists is 2503 * empty (or altogether @c NULL), no changelist filtering occurs. 2504 * 2505 * If @a path is an absolute path then the @c path parameter passed in each 2506 * call to @a status_func will be an absolute path. 2507 * 2508 * All temporary allocations are performed in @a scratch_pool. 2509 * 2510 * @since New in 1.7. 2511 */ 2512svn_error_t * 2513svn_client_status5(svn_revnum_t *result_rev, 2514 svn_client_ctx_t *ctx, 2515 const char *path, 2516 const svn_opt_revision_t *revision, 2517 svn_depth_t depth, 2518 svn_boolean_t get_all, 2519 svn_boolean_t update, 2520 svn_boolean_t no_ignore, 2521 svn_boolean_t ignore_externals, 2522 svn_boolean_t depth_as_sticky, 2523 const apr_array_header_t *changelists, 2524 svn_client_status_func_t status_func, 2525 void *status_baton, 2526 apr_pool_t *scratch_pool); 2527 2528/** 2529 * Same as svn_client_status5(), but using #svn_wc_status_func3_t 2530 * instead of #svn_client_status_func_t and depth_as_sticky set to TRUE. 2531 * 2532 * @since New in 1.6. 2533 * @deprecated Provided for backward compatibility with the 1.6 API. 2534 */ 2535SVN_DEPRECATED 2536svn_error_t * 2537svn_client_status4(svn_revnum_t *result_rev, 2538 const char *path, 2539 const svn_opt_revision_t *revision, 2540 svn_wc_status_func3_t status_func, 2541 void *status_baton, 2542 svn_depth_t depth, 2543 svn_boolean_t get_all, 2544 svn_boolean_t update, 2545 svn_boolean_t no_ignore, 2546 svn_boolean_t ignore_externals, 2547 const apr_array_header_t *changelists, 2548 svn_client_ctx_t *ctx, 2549 apr_pool_t *pool); 2550 2551/** 2552 * Same as svn_client_status4(), but using an #svn_wc_status_func2_t 2553 * instead of an #svn_wc_status_func3_t. 2554 * 2555 * @since New in 1.5. 2556 * @deprecated Provided for backward compatibility with the 1.5 API. 2557 */ 2558SVN_DEPRECATED 2559svn_error_t * 2560svn_client_status3(svn_revnum_t *result_rev, 2561 const char *path, 2562 const svn_opt_revision_t *revision, 2563 svn_wc_status_func2_t status_func, 2564 void *status_baton, 2565 svn_depth_t depth, 2566 svn_boolean_t get_all, 2567 svn_boolean_t update, 2568 svn_boolean_t no_ignore, 2569 svn_boolean_t ignore_externals, 2570 const apr_array_header_t *changelists, 2571 svn_client_ctx_t *ctx, 2572 apr_pool_t *pool); 2573 2574/** 2575 * Like svn_client_status3(), except with @a changelists passed as @c 2576 * NULL, and with @a recurse instead of @a depth. If @a recurse is 2577 * TRUE, behave as if for #svn_depth_infinity; else if @a recurse is 2578 * FALSE, behave as if for #svn_depth_immediates. 2579 * 2580 * @since New in 1.2. 2581 * @deprecated Provided for backward compatibility with the 1.4 API. 2582 */ 2583SVN_DEPRECATED 2584svn_error_t * 2585svn_client_status2(svn_revnum_t *result_rev, 2586 const char *path, 2587 const svn_opt_revision_t *revision, 2588 svn_wc_status_func2_t status_func, 2589 void *status_baton, 2590 svn_boolean_t recurse, 2591 svn_boolean_t get_all, 2592 svn_boolean_t update, 2593 svn_boolean_t no_ignore, 2594 svn_boolean_t ignore_externals, 2595 svn_client_ctx_t *ctx, 2596 apr_pool_t *pool); 2597 2598 2599/** 2600 * Similar to svn_client_status2(), but with @a ignore_externals 2601 * always set to FALSE, taking the #svn_wc_status_func_t type 2602 * instead of the #svn_wc_status_func2_t type for @a status_func, 2603 * and requiring @a *revision to be non-const even though it is 2604 * treated as constant. 2605 * 2606 * @deprecated Provided for backward compatibility with the 1.1 API. 2607 */ 2608SVN_DEPRECATED 2609svn_error_t * 2610svn_client_status(svn_revnum_t *result_rev, 2611 const char *path, 2612 svn_opt_revision_t *revision, 2613 svn_wc_status_func_t status_func, 2614 void *status_baton, 2615 svn_boolean_t recurse, 2616 svn_boolean_t get_all, 2617 svn_boolean_t update, 2618 svn_boolean_t no_ignore, 2619 svn_client_ctx_t *ctx, 2620 apr_pool_t *pool); 2621 2622/** @} */ 2623 2624/** 2625 * @defgroup Log View information about previous revisions of an object. 2626 * 2627 * @{ 2628 */ 2629 2630/** 2631 * Invoke @a receiver with @a receiver_baton on each log message from 2632 * each (#svn_opt_revision_range_t *) range in @a revision_ranges in turn, 2633 * inclusive (but never invoke @a receiver on a given log message more 2634 * than once). 2635 * 2636 * @a targets contains either a URL followed by zero or more relative 2637 * paths, or 1 working copy path, as <tt>const char *</tt>, for which log 2638 * messages are desired. @a receiver is invoked only on messages whose 2639 * revisions involved a change to some path in @a targets. @a peg_revision 2640 * indicates in which revision @a targets are valid. If @a peg_revision is 2641 * #svn_opt_revision_unspecified, it defaults to #svn_opt_revision_head 2642 * for URLs or #svn_opt_revision_working for WC paths. 2643 * 2644 * If @a limit is non-zero only invoke @a receiver on the first @a limit 2645 * logs. 2646 * 2647 * If @a discover_changed_paths is set, then the @c changed_paths and @c 2648 * changed_paths2 fields in the @c log_entry argument to @a receiver will be 2649 * populated on each invocation. @note The @c text_modified and @c 2650 * props_modified fields of the changed paths structure may have the value 2651 * #svn_tristate_unknown if the repository does not report that information. 2652 * 2653 * If @a strict_node_history is set, copy history (if any exists) will 2654 * not be traversed while harvesting revision logs for each target. 2655 * 2656 * If @a include_merged_revisions is set, log information for revisions 2657 * which have been merged to @a targets will also be returned. 2658 * 2659 * If @a revprops is NULL, retrieve all revision properties; else, retrieve 2660 * only the revision properties named by the (const char *) array elements 2661 * (i.e. retrieve none if the array is empty). 2662 * 2663 * Use @a pool for any temporary allocation. 2664 * 2665 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2/baton2 2666 * with a 'skip' signal on any unversioned targets. 2667 * 2668 * @since New in 1.6. 2669 */ 2670svn_error_t * 2671svn_client_log5(const apr_array_header_t *targets, 2672 const svn_opt_revision_t *peg_revision, 2673 const apr_array_header_t *revision_ranges, 2674 int limit, 2675 svn_boolean_t discover_changed_paths, 2676 svn_boolean_t strict_node_history, 2677 svn_boolean_t include_merged_revisions, 2678 const apr_array_header_t *revprops, 2679 svn_log_entry_receiver_t receiver, 2680 void *receiver_baton, 2681 svn_client_ctx_t *ctx, 2682 apr_pool_t *pool); 2683 2684/** 2685 * Similar to svn_client_log5(), but takes explicit start and end parameters 2686 * instead of an array of revision ranges. 2687 * 2688 * @deprecated Provided for compatibility with the 1.5 API. 2689 * @since New in 1.5. 2690 */ 2691SVN_DEPRECATED 2692svn_error_t * 2693svn_client_log4(const apr_array_header_t *targets, 2694 const svn_opt_revision_t *peg_revision, 2695 const svn_opt_revision_t *start, 2696 const svn_opt_revision_t *end, 2697 int limit, 2698 svn_boolean_t discover_changed_paths, 2699 svn_boolean_t strict_node_history, 2700 svn_boolean_t include_merged_revisions, 2701 const apr_array_header_t *revprops, 2702 svn_log_entry_receiver_t receiver, 2703 void *receiver_baton, 2704 svn_client_ctx_t *ctx, 2705 apr_pool_t *pool); 2706 2707/** 2708 * Similar to svn_client_log4(), but using #svn_log_message_receiver_t 2709 * instead of #svn_log_entry_receiver_t. Also, @a 2710 * include_merged_revisions is set to @c FALSE and @a revprops is 2711 * svn:author, svn:date, and svn:log. 2712 * 2713 * @deprecated Provided for compatibility with the 1.4 API. 2714 * @since New in 1.4. 2715 */ 2716SVN_DEPRECATED 2717svn_error_t * 2718svn_client_log3(const apr_array_header_t *targets, 2719 const svn_opt_revision_t *peg_revision, 2720 const svn_opt_revision_t *start, 2721 const svn_opt_revision_t *end, 2722 int limit, 2723 svn_boolean_t discover_changed_paths, 2724 svn_boolean_t strict_node_history, 2725 svn_log_message_receiver_t receiver, 2726 void *receiver_baton, 2727 svn_client_ctx_t *ctx, 2728 apr_pool_t *pool); 2729 2730 2731/** 2732 * Similar to svn_client_log3(), but with the @c kind field of 2733 * @a peg_revision set to #svn_opt_revision_unspecified. 2734 * 2735 * @par Important: 2736 * A special case for the revision range HEAD:1, which was present 2737 * in svn_client_log(), has been removed from svn_client_log2(). Instead, it 2738 * is expected that callers will specify the range HEAD:0, to avoid a 2739 * #SVN_ERR_FS_NO_SUCH_REVISION error when invoked against an empty repository 2740 * (i.e. one not containing a revision 1). 2741 * 2742 * @deprecated Provided for compatibility with the 1.3 API. 2743 * @since New in 1.2. 2744 */ 2745SVN_DEPRECATED 2746svn_error_t * 2747svn_client_log2(const apr_array_header_t *targets, 2748 const svn_opt_revision_t *start, 2749 const svn_opt_revision_t *end, 2750 int limit, 2751 svn_boolean_t discover_changed_paths, 2752 svn_boolean_t strict_node_history, 2753 svn_log_message_receiver_t receiver, 2754 void *receiver_baton, 2755 svn_client_ctx_t *ctx, 2756 apr_pool_t *pool); 2757 2758 2759/** 2760 * Similar to svn_client_log2(), but with @a limit set to 0, and the 2761 * following special case: 2762 * 2763 * Special case for repositories at revision 0: 2764 * 2765 * If @a start->kind is #svn_opt_revision_head, and @a end->kind is 2766 * #svn_opt_revision_number && @a end->number is @c 1, then handle an 2767 * empty (no revisions) repository specially: instead of erroring 2768 * because requested revision 1 when the highest revision is 0, just 2769 * invoke @a receiver on revision 0, passing @c NULL for changed paths and 2770 * empty strings for the author and date. This is because that 2771 * particular combination of @a start and @a end usually indicates the 2772 * common case of log invocation -- the user wants to see all log 2773 * messages from youngest to oldest, where the oldest commit is 2774 * revision 1. That works fine, except when there are no commits in 2775 * the repository, hence this special case. 2776 * 2777 * @deprecated Provided for backward compatibility with the 1.1 API. 2778 */ 2779SVN_DEPRECATED 2780svn_error_t * 2781svn_client_log(const apr_array_header_t *targets, 2782 const svn_opt_revision_t *start, 2783 const svn_opt_revision_t *end, 2784 svn_boolean_t discover_changed_paths, 2785 svn_boolean_t strict_node_history, 2786 svn_log_message_receiver_t receiver, 2787 void *receiver_baton, 2788 svn_client_ctx_t *ctx, 2789 apr_pool_t *pool); 2790 2791/** @} */ 2792 2793/** 2794 * @defgroup Blame Show modification information about lines in a file. 2795 * 2796 * @{ 2797 */ 2798 2799/** 2800 * Invoke @a receiver with @a receiver_baton on each line-blame item 2801 * associated with revision @a end of @a path_or_url, using @a start 2802 * as the default source of all blame. @a peg_revision indicates in 2803 * which revision @a path_or_url is valid. If @a peg_revision->kind 2804 * is #svn_opt_revision_unspecified, then it defaults to 2805 * #svn_opt_revision_head for URLs or #svn_opt_revision_working for 2806 * WC targets. 2807 * 2808 * If @a start->kind or @a end->kind is #svn_opt_revision_unspecified, 2809 * return the error #SVN_ERR_CLIENT_BAD_REVISION. If either are 2810 * #svn_opt_revision_working, return the error 2811 * #SVN_ERR_UNSUPPORTED_FEATURE. If any of the revisions of @a 2812 * path_or_url have a binary mime-type, return the error 2813 * #SVN_ERR_CLIENT_IS_BINARY_FILE, unless @a ignore_mime_type is TRUE, 2814 * in which case blame information will be generated regardless of the 2815 * MIME types of the revisions. 2816 * 2817 * Use @a diff_options to determine how to compare different revisions of the 2818 * target. 2819 * 2820 * If @a include_merged_revisions is TRUE, also return data based upon 2821 * revisions which have been merged to @a path_or_url. 2822 * 2823 * Use @a pool for any temporary allocation. 2824 * 2825 * @since New in 1.7. 2826 */ 2827svn_error_t * 2828svn_client_blame5(const char *path_or_url, 2829 const svn_opt_revision_t *peg_revision, 2830 const svn_opt_revision_t *start, 2831 const svn_opt_revision_t *end, 2832 const svn_diff_file_options_t *diff_options, 2833 svn_boolean_t ignore_mime_type, 2834 svn_boolean_t include_merged_revisions, 2835 svn_client_blame_receiver3_t receiver, 2836 void *receiver_baton, 2837 svn_client_ctx_t *ctx, 2838 apr_pool_t *pool); 2839 2840 2841/** 2842 * Similar to svn_client_blame5(), but with #svn_client_blame_receiver3_t 2843 * as the receiver. 2844 * 2845 * @deprecated Provided for backwards compatibility with the 1.6 API. 2846 * 2847 * @since New in 1.5. 2848 */ 2849SVN_DEPRECATED 2850svn_error_t * 2851svn_client_blame4(const char *path_or_url, 2852 const svn_opt_revision_t *peg_revision, 2853 const svn_opt_revision_t *start, 2854 const svn_opt_revision_t *end, 2855 const svn_diff_file_options_t *diff_options, 2856 svn_boolean_t ignore_mime_type, 2857 svn_boolean_t include_merged_revisions, 2858 svn_client_blame_receiver2_t receiver, 2859 void *receiver_baton, 2860 svn_client_ctx_t *ctx, 2861 apr_pool_t *pool); 2862 2863/** 2864 * Similar to svn_client_blame4(), but with @a include_merged_revisions set 2865 * to FALSE, and using a #svn_client_blame_receiver2_t as the receiver. 2866 * 2867 * @deprecated Provided for backwards compatibility with the 1.4 API. 2868 * 2869 * @since New in 1.4. 2870 */ 2871SVN_DEPRECATED 2872svn_error_t * 2873svn_client_blame3(const char *path_or_url, 2874 const svn_opt_revision_t *peg_revision, 2875 const svn_opt_revision_t *start, 2876 const svn_opt_revision_t *end, 2877 const svn_diff_file_options_t *diff_options, 2878 svn_boolean_t ignore_mime_type, 2879 svn_client_blame_receiver_t receiver, 2880 void *receiver_baton, 2881 svn_client_ctx_t *ctx, 2882 apr_pool_t *pool); 2883 2884/** 2885 * Similar to svn_client_blame3(), but with @a diff_options set to 2886 * default options as returned by svn_diff_file_options_parse() and 2887 * @a ignore_mime_type set to FALSE. 2888 * 2889 * @deprecated Provided for backwards compatibility with the 1.3 API. 2890 * 2891 * @since New in 1.2. 2892 */ 2893SVN_DEPRECATED 2894svn_error_t * 2895svn_client_blame2(const char *path_or_url, 2896 const svn_opt_revision_t *peg_revision, 2897 const svn_opt_revision_t *start, 2898 const svn_opt_revision_t *end, 2899 svn_client_blame_receiver_t receiver, 2900 void *receiver_baton, 2901 svn_client_ctx_t *ctx, 2902 apr_pool_t *pool); 2903 2904/** 2905 * Similar to svn_client_blame2() except that @a peg_revision is always 2906 * the same as @a end. 2907 * 2908 * @deprecated Provided for backward compatibility with the 1.1 API. 2909 */ 2910SVN_DEPRECATED 2911svn_error_t * 2912svn_client_blame(const char *path_or_url, 2913 const svn_opt_revision_t *start, 2914 const svn_opt_revision_t *end, 2915 svn_client_blame_receiver_t receiver, 2916 void *receiver_baton, 2917 svn_client_ctx_t *ctx, 2918 apr_pool_t *pool); 2919 2920/** @} */ 2921 2922/** 2923 * @defgroup Diff Generate differences between paths. 2924 * 2925 * @{ 2926 */ 2927 2928/** 2929 * Produce diff output which describes the delta between 2930 * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2. Print 2931 * the output of the diff to @a outstream, and any errors to @a 2932 * errstream. @a path_or_url1 and @a path_or_url2 can be either 2933 * working-copy paths or URLs. 2934 * 2935 * If @a relative_to_dir is not @c NULL, the original path and 2936 * modified path will have the @a relative_to_dir stripped from the 2937 * front of the respective paths. If @a relative_to_dir is @c NULL, 2938 * paths will not be modified. If @a relative_to_dir is not 2939 * @c NULL but @a relative_to_dir is not a parent path of the target, 2940 * an error is returned. Finally, if @a relative_to_dir is a URL, an 2941 * error will be returned. 2942 * 2943 * If either @a revision1 or @a revision2 has an `unspecified' or 2944 * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION. 2945 * 2946 * @a path_or_url1 and @a path_or_url2 must both represent the same node 2947 * kind -- that is, if @a path_or_url1 is a directory, @a path_or_url2 2948 * must also be, and if @a path_or_url1 is a file, @a path_or_url2 must 2949 * also be. 2950 * 2951 * If @a depth is #svn_depth_infinity, diff fully recursively. 2952 * Else if it is #svn_depth_immediates, diff the named paths and 2953 * their file children (if any), and diff properties of 2954 * subdirectories, but do not descend further into the subdirectories. 2955 * Else if #svn_depth_files, behave as if for #svn_depth_immediates 2956 * except don't diff properties of subdirectories. If 2957 * #svn_depth_empty, diff exactly the named paths but nothing 2958 * underneath them. 2959 * 2960 * Use @a ignore_ancestry to control whether or not items being 2961 * diffed will be checked for relatedness first. Unrelated items 2962 * are typically transmitted to the editor as a deletion of one thing 2963 * and the addition of another, but if this flag is TRUE, unrelated 2964 * items will be diffed as if they were related. 2965 * 2966 * If @a no_diff_added is TRUE, then no diff output will be generated 2967 * on added files. 2968 * 2969 * If @a no_diff_deleted is TRUE, then no diff output will be 2970 * generated on deleted files. 2971 * 2972 * If @a show_copies_as_adds is TRUE, then copied files will not be diffed 2973 * against their copyfrom source, and will appear in the diff output 2974 * in their entirety, as if they were newly added. 2975 * ### BUGS: For a repos-repos diff, this is ignored. Instead, a file is 2976 * diffed against its copyfrom source iff the file is the diff target 2977 * and not if some parent directory is the diff target. For a repos-WC 2978 * diff, this is ignored if the file is the diff target. 2979 * 2980 * If @a use_git_diff_format is TRUE, then the git's extended diff format 2981 * will be used. 2982 * ### Do we need to say more about the format? A reference perhaps? 2983 * 2984 * If @a ignore_properties is TRUE, do not show property differences. 2985 * If @a properties_only is TRUE, show only property changes. 2986 * The above two options are mutually exclusive. It is an error to set 2987 * both to TRUE. 2988 * 2989 * Generated headers are encoded using @a header_encoding. 2990 * 2991 * Diff output will not be generated for binary files, unless @a 2992 * ignore_content_type is TRUE, in which case diffs will be shown 2993 * regardless of the content types. 2994 * 2995 * @a diff_options (an array of <tt>const char *</tt>) is used to pass 2996 * additional command line options to the diff processes invoked to compare 2997 * files. @a diff_options is allowed to be @c NULL, in which case a value 2998 * for this option might still be obtained from the Subversion configuration 2999 * file via client context @a ctx. 3000 * 3001 * The authentication baton cached in @a ctx is used to communicate with 3002 * the repository. 3003 * 3004 * @a changelists is an array of <tt>const char *</tt> changelist 3005 * names, used as a restrictive filter on items whose differences are 3006 * reported; that is, don't generate diffs about any item unless 3007 * it's a member of one of those changelists. If @a changelists is 3008 * empty (or altogether @c NULL), no changelist filtering occurs. 3009 * 3010 * @note Changelist filtering only applies to diffs in which at least 3011 * one side of the diff represents working copy data. 3012 * 3013 * @note @a header_encoding doesn't affect headers generated by external 3014 * diff programs. 3015 * 3016 * @note @a relative_to_dir doesn't affect the path index generated by 3017 * external diff programs. 3018 * 3019 * @since New in 1.8. 3020 */ 3021svn_error_t * 3022svn_client_diff6(const apr_array_header_t *diff_options, 3023 const char *path_or_url1, 3024 const svn_opt_revision_t *revision1, 3025 const char *path_or_url2, 3026 const svn_opt_revision_t *revision2, 3027 const char *relative_to_dir, 3028 svn_depth_t depth, 3029 svn_boolean_t ignore_ancestry, 3030 svn_boolean_t no_diff_added, 3031 svn_boolean_t no_diff_deleted, 3032 svn_boolean_t show_copies_as_adds, 3033 svn_boolean_t ignore_content_type, 3034 svn_boolean_t ignore_properties, 3035 svn_boolean_t properties_only, 3036 svn_boolean_t use_git_diff_format, 3037 const char *header_encoding, 3038 svn_stream_t *outstream, 3039 svn_stream_t *errstream, 3040 const apr_array_header_t *changelists, 3041 svn_client_ctx_t *ctx, 3042 apr_pool_t *pool); 3043 3044/** Similar to svn_client_diff6(), but with @a outfile and @a errfile, 3045 * instead of @a outstream and @a errstream, and with @a 3046 * no_diff_added, @a ignore_properties, and @a properties_only always 3047 * passed as @c FALSE (which means that additions and property changes 3048 * are always transmitted). 3049 * 3050 * @deprecated Provided for backward compatibility with the 1.7 API. 3051 * @since New in 1.7. 3052 */ 3053SVN_DEPRECATED 3054svn_error_t * 3055svn_client_diff5(const apr_array_header_t *diff_options, 3056 const char *path1, 3057 const svn_opt_revision_t *revision1, 3058 const char *path2, 3059 const svn_opt_revision_t *revision2, 3060 const char *relative_to_dir, 3061 svn_depth_t depth, 3062 svn_boolean_t ignore_ancestry, 3063 svn_boolean_t no_diff_deleted, 3064 svn_boolean_t show_copies_as_adds, 3065 svn_boolean_t ignore_content_type, 3066 svn_boolean_t use_git_diff_format, 3067 const char *header_encoding, 3068 apr_file_t *outfile, 3069 apr_file_t *errfile, 3070 const apr_array_header_t *changelists, 3071 svn_client_ctx_t *ctx, 3072 apr_pool_t *pool); 3073 3074/** 3075 * Similar to svn_client_diff5(), but with @a show_copies_as_adds set to 3076 * @c FALSE and @a use_git_diff_format set to @c FALSE. 3077 * 3078 * @deprecated Provided for backward compatibility with the 1.6 API. 3079 * @since New in 1.5. 3080 */ 3081SVN_DEPRECATED 3082svn_error_t * 3083svn_client_diff4(const apr_array_header_t *diff_options, 3084 const char *path1, 3085 const svn_opt_revision_t *revision1, 3086 const char *path2, 3087 const svn_opt_revision_t *revision2, 3088 const char *relative_to_dir, 3089 svn_depth_t depth, 3090 svn_boolean_t ignore_ancestry, 3091 svn_boolean_t no_diff_deleted, 3092 svn_boolean_t ignore_content_type, 3093 const char *header_encoding, 3094 apr_file_t *outfile, 3095 apr_file_t *errfile, 3096 const apr_array_header_t *changelists, 3097 svn_client_ctx_t *ctx, 3098 apr_pool_t *pool); 3099 3100/** 3101 * Similar to svn_client_diff4(), but with @a changelists passed as @c 3102 * NULL, and @a depth set according to @a recurse: if @a recurse is 3103 * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 3104 * FALSE, set @a depth to #svn_depth_empty. 3105 * 3106 * @deprecated Provided for backward compatibility with the 1.4 API. 3107 * @since New in 1.3. 3108 */ 3109SVN_DEPRECATED 3110svn_error_t * 3111svn_client_diff3(const apr_array_header_t *diff_options, 3112 const char *path1, 3113 const svn_opt_revision_t *revision1, 3114 const char *path2, 3115 const svn_opt_revision_t *revision2, 3116 svn_boolean_t recurse, 3117 svn_boolean_t ignore_ancestry, 3118 svn_boolean_t no_diff_deleted, 3119 svn_boolean_t ignore_content_type, 3120 const char *header_encoding, 3121 apr_file_t *outfile, 3122 apr_file_t *errfile, 3123 svn_client_ctx_t *ctx, 3124 apr_pool_t *pool); 3125 3126 3127/** 3128 * Similar to svn_client_diff3(), but with @a header_encoding set to 3129 * @c APR_LOCALE_CHARSET. 3130 * 3131 * @deprecated Provided for backward compatibility with the 1.2 API. 3132 * @since New in 1.2. 3133 */ 3134SVN_DEPRECATED 3135svn_error_t * 3136svn_client_diff2(const apr_array_header_t *diff_options, 3137 const char *path1, 3138 const svn_opt_revision_t *revision1, 3139 const char *path2, 3140 const svn_opt_revision_t *revision2, 3141 svn_boolean_t recurse, 3142 svn_boolean_t ignore_ancestry, 3143 svn_boolean_t no_diff_deleted, 3144 svn_boolean_t ignore_content_type, 3145 apr_file_t *outfile, 3146 apr_file_t *errfile, 3147 svn_client_ctx_t *ctx, 3148 apr_pool_t *pool); 3149 3150/** 3151 * Similar to svn_client_diff2(), but with @a ignore_content_type 3152 * always set to FALSE. 3153 * 3154 * @deprecated Provided for backward compatibility with the 1.1 API. 3155 */ 3156SVN_DEPRECATED 3157svn_error_t * 3158svn_client_diff(const apr_array_header_t *diff_options, 3159 const char *path1, 3160 const svn_opt_revision_t *revision1, 3161 const char *path2, 3162 const svn_opt_revision_t *revision2, 3163 svn_boolean_t recurse, 3164 svn_boolean_t ignore_ancestry, 3165 svn_boolean_t no_diff_deleted, 3166 apr_file_t *outfile, 3167 apr_file_t *errfile, 3168 svn_client_ctx_t *ctx, 3169 apr_pool_t *pool); 3170 3171/** 3172 * Produce diff output which describes the delta between the filesystem 3173 * object @a path_or_url in peg revision @a peg_revision, as it changed 3174 * between @a start_revision and @a end_revision. @a path_or_url can 3175 * be either a working-copy path or URL. 3176 * 3177 * If @a peg_revision is #svn_opt_revision_unspecified, behave 3178 * identically to svn_client_diff6(), using @a path_or_url for both of that 3179 * function's @a path_or_url1 and @a path_or_url2 arguments. 3180 * 3181 * All other options are handled identically to svn_client_diff6(). 3182 * 3183 * @since New in 1.8. 3184 */ 3185svn_error_t * 3186svn_client_diff_peg6(const apr_array_header_t *diff_options, 3187 const char *path_or_url, 3188 const svn_opt_revision_t *peg_revision, 3189 const svn_opt_revision_t *start_revision, 3190 const svn_opt_revision_t *end_revision, 3191 const char *relative_to_dir, 3192 svn_depth_t depth, 3193 svn_boolean_t ignore_ancestry, 3194 svn_boolean_t no_diff_added, 3195 svn_boolean_t no_diff_deleted, 3196 svn_boolean_t show_copies_as_adds, 3197 svn_boolean_t ignore_content_type, 3198 svn_boolean_t ignore_properties, 3199 svn_boolean_t properties_only, 3200 svn_boolean_t use_git_diff_format, 3201 const char *header_encoding, 3202 svn_stream_t *outstream, 3203 svn_stream_t *errstream, 3204 const apr_array_header_t *changelists, 3205 svn_client_ctx_t *ctx, 3206 apr_pool_t *pool); 3207 3208/** Similar to svn_client_diff6_peg6(), but with @a outfile and @a errfile, 3209 * instead of @a outstream and @a errstream, and with @a 3210 * no_diff_added, @a ignore_properties, and @a properties_only always 3211 * passed as @c FALSE (which means that additions and property changes 3212 * are always transmitted). 3213 * 3214 * @deprecated Provided for backward compatibility with the 1.7 API. 3215 * @since New in 1.7. 3216 */ 3217SVN_DEPRECATED 3218svn_error_t * 3219svn_client_diff_peg5(const apr_array_header_t *diff_options, 3220 const char *path, 3221 const svn_opt_revision_t *peg_revision, 3222 const svn_opt_revision_t *start_revision, 3223 const svn_opt_revision_t *end_revision, 3224 const char *relative_to_dir, 3225 svn_depth_t depth, 3226 svn_boolean_t ignore_ancestry, 3227 svn_boolean_t no_diff_deleted, 3228 svn_boolean_t show_copies_as_adds, 3229 svn_boolean_t ignore_content_type, 3230 svn_boolean_t use_git_diff_format, 3231 const char *header_encoding, 3232 apr_file_t *outfile, 3233 apr_file_t *errfile, 3234 const apr_array_header_t *changelists, 3235 svn_client_ctx_t *ctx, 3236 apr_pool_t *pool); 3237 3238/** 3239 * Similar to svn_client_diff_peg5(), but with @a show_copies_as_adds set to 3240 * @c FALSE and @a use_git_diff_format set to @c FALSE. 3241 * 3242 * @since New in 1.5. 3243 * @deprecated Provided for backward compatibility with the 1.6 API. 3244 */ 3245SVN_DEPRECATED 3246svn_error_t * 3247svn_client_diff_peg4(const apr_array_header_t *diff_options, 3248 const char *path, 3249 const svn_opt_revision_t *peg_revision, 3250 const svn_opt_revision_t *start_revision, 3251 const svn_opt_revision_t *end_revision, 3252 const char *relative_to_dir, 3253 svn_depth_t depth, 3254 svn_boolean_t ignore_ancestry, 3255 svn_boolean_t no_diff_deleted, 3256 svn_boolean_t ignore_content_type, 3257 const char *header_encoding, 3258 apr_file_t *outfile, 3259 apr_file_t *errfile, 3260 const apr_array_header_t *changelists, 3261 svn_client_ctx_t *ctx, 3262 apr_pool_t *pool); 3263 3264/** 3265 * Similar to svn_client_diff_peg4(), but with @a changelists passed 3266 * as @c NULL, and @a depth set according to @a recurse: if @a recurse 3267 * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 3268 * FALSE, set @a depth to #svn_depth_files. 3269 * 3270 * @deprecated Provided for backward compatibility with the 1.4 API. 3271 * @since New in 1.3. 3272 */ 3273SVN_DEPRECATED 3274svn_error_t * 3275svn_client_diff_peg3(const apr_array_header_t *diff_options, 3276 const char *path, 3277 const svn_opt_revision_t *peg_revision, 3278 const svn_opt_revision_t *start_revision, 3279 const svn_opt_revision_t *end_revision, 3280 svn_boolean_t recurse, 3281 svn_boolean_t ignore_ancestry, 3282 svn_boolean_t no_diff_deleted, 3283 svn_boolean_t ignore_content_type, 3284 const char *header_encoding, 3285 apr_file_t *outfile, 3286 apr_file_t *errfile, 3287 svn_client_ctx_t *ctx, 3288 apr_pool_t *pool); 3289 3290/** 3291 * Similar to svn_client_diff_peg3(), but with @a header_encoding set to 3292 * @c APR_LOCALE_CHARSET. 3293 * 3294 * @deprecated Provided for backward compatibility with the 1.2 API. 3295 * @since New in 1.2. 3296 */ 3297SVN_DEPRECATED 3298svn_error_t * 3299svn_client_diff_peg2(const apr_array_header_t *diff_options, 3300 const char *path, 3301 const svn_opt_revision_t *peg_revision, 3302 const svn_opt_revision_t *start_revision, 3303 const svn_opt_revision_t *end_revision, 3304 svn_boolean_t recurse, 3305 svn_boolean_t ignore_ancestry, 3306 svn_boolean_t no_diff_deleted, 3307 svn_boolean_t ignore_content_type, 3308 apr_file_t *outfile, 3309 apr_file_t *errfile, 3310 svn_client_ctx_t *ctx, 3311 apr_pool_t *pool); 3312 3313/** 3314 * Similar to svn_client_diff_peg2(), but with @a ignore_content_type 3315 * always set to FALSE. 3316 * 3317 * @since New in 1.1. 3318 * @deprecated Provided for backward compatibility with the 1.1 API. 3319 */ 3320SVN_DEPRECATED 3321svn_error_t * 3322svn_client_diff_peg(const apr_array_header_t *diff_options, 3323 const char *path, 3324 const svn_opt_revision_t *peg_revision, 3325 const svn_opt_revision_t *start_revision, 3326 const svn_opt_revision_t *end_revision, 3327 svn_boolean_t recurse, 3328 svn_boolean_t ignore_ancestry, 3329 svn_boolean_t no_diff_deleted, 3330 apr_file_t *outfile, 3331 apr_file_t *errfile, 3332 svn_client_ctx_t *ctx, 3333 apr_pool_t *pool); 3334 3335/** 3336 * Produce a diff summary which lists the changed items between 3337 * @a path_or_url1/@a revision1 and @a path_or_url2/@a revision2 without 3338 * creating text deltas. @a path_or_url1 and @a path_or_url2 can be 3339 * either working-copy paths or URLs. 3340 * 3341 * The function may report false positives if @a ignore_ancestry is false, 3342 * since a file might have been modified between two revisions, but still 3343 * have the same contents. 3344 * 3345 * Calls @a summarize_func with @a summarize_baton for each difference 3346 * with a #svn_client_diff_summarize_t structure describing the difference. 3347 * 3348 * See svn_client_diff6() for a description of the other parameters. 3349 * 3350 * @since New in 1.5. 3351 */ 3352svn_error_t * 3353svn_client_diff_summarize2(const char *path_or_url1, 3354 const svn_opt_revision_t *revision1, 3355 const char *path_or_url2, 3356 const svn_opt_revision_t *revision2, 3357 svn_depth_t depth, 3358 svn_boolean_t ignore_ancestry, 3359 const apr_array_header_t *changelists, 3360 svn_client_diff_summarize_func_t summarize_func, 3361 void *summarize_baton, 3362 svn_client_ctx_t *ctx, 3363 apr_pool_t *pool); 3364 3365/** 3366 * Similar to svn_client_diff_summarize2(), but with @a changelists 3367 * passed as @c NULL, and @a depth set according to @a recurse: if @a 3368 * recurse is TRUE, set @a depth to #svn_depth_infinity, if @a 3369 * recurse is FALSE, set @a depth to #svn_depth_files. 3370 * 3371 * @deprecated Provided for backward compatibility with the 1.4 API. 3372 * 3373 * @since New in 1.4. 3374 */ 3375SVN_DEPRECATED 3376svn_error_t * 3377svn_client_diff_summarize(const char *path1, 3378 const svn_opt_revision_t *revision1, 3379 const char *path2, 3380 const svn_opt_revision_t *revision2, 3381 svn_boolean_t recurse, 3382 svn_boolean_t ignore_ancestry, 3383 svn_client_diff_summarize_func_t summarize_func, 3384 void *summarize_baton, 3385 svn_client_ctx_t *ctx, 3386 apr_pool_t *pool); 3387 3388/** 3389 * Produce a diff summary which lists the changed items between the 3390 * filesystem object @a path_or_url in peg revision @a peg_revision, as it 3391 * changed between @a start_revision and @a end_revision. @a path_or_url can 3392 * be either a working-copy path or URL. 3393 * 3394 * If @a peg_revision is #svn_opt_revision_unspecified, behave 3395 * identically to svn_client_diff_summarize2(), using @a path_or_url for 3396 * both of that function's @a path_or_url1 and @a path_or_url2 arguments. 3397 * 3398 * The function may report false positives if @a ignore_ancestry is false, 3399 * as described in the documentation for svn_client_diff_summarize2(). 3400 * 3401 * Call @a summarize_func with @a summarize_baton for each difference 3402 * with a #svn_client_diff_summarize_t structure describing the difference. 3403 * 3404 * See svn_client_diff_peg5() for a description of the other parameters. 3405 * 3406 * @since New in 1.5. 3407 */ 3408svn_error_t * 3409svn_client_diff_summarize_peg2(const char *path_or_url, 3410 const svn_opt_revision_t *peg_revision, 3411 const svn_opt_revision_t *start_revision, 3412 const svn_opt_revision_t *end_revision, 3413 svn_depth_t depth, 3414 svn_boolean_t ignore_ancestry, 3415 const apr_array_header_t *changelists, 3416 svn_client_diff_summarize_func_t summarize_func, 3417 void *summarize_baton, 3418 svn_client_ctx_t *ctx, 3419 apr_pool_t *pool); 3420 3421/** 3422 * Similar to svn_client_diff_summarize_peg2(), but with @a 3423 * changelists passed as @c NULL, and @a depth set according to @a 3424 * recurse: if @a recurse is TRUE, set @a depth to 3425 * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to 3426 * #svn_depth_files. 3427 * 3428 * @deprecated Provided for backward compatibility with the 1.4 API. 3429 * 3430 * @since New in 1.4. 3431 */ 3432SVN_DEPRECATED 3433svn_error_t * 3434svn_client_diff_summarize_peg(const char *path, 3435 const svn_opt_revision_t *peg_revision, 3436 const svn_opt_revision_t *start_revision, 3437 const svn_opt_revision_t *end_revision, 3438 svn_boolean_t recurse, 3439 svn_boolean_t ignore_ancestry, 3440 svn_client_diff_summarize_func_t summarize_func, 3441 void *summarize_baton, 3442 svn_client_ctx_t *ctx, 3443 apr_pool_t *pool); 3444 3445/** @} */ 3446 3447/** 3448 * @defgroup Merge Merge changes between branches. 3449 * 3450 * @{ 3451 */ 3452 3453/** Get information about the state of merging between two branches. 3454 * 3455 * The source is specified by @a source_path_or_url at @a source_revision. 3456 * The target is specified by @a target_path_or_url at @a target_revision, 3457 * which refers to either a WC or a repository location. 3458 * 3459 * Set @a *needs_reintegration to true if an automatic merge from source 3460 * to target would be a reintegration merge: that is, if the last automatic 3461 * merge was in the opposite direction; or to false otherwise. 3462 * 3463 * Set @a *yca_url, @a *yca_rev, @a *base_url, @a *base_rev, @a *right_url, 3464 * @a *right_rev, @a *target_url, @a *target_rev to the repository locations 3465 * of, respectively: the youngest common ancestor of the branches, the base 3466 * chosen for 3-way merge, the right-hand side of the source diff, and the 3467 * target. 3468 * 3469 * Set @a repos_root_url to the URL of the repository root. This is a 3470 * common prefix of all four URL outputs. 3471 * 3472 * Allocate the results in @a result_pool. Any of the output pointers may 3473 * be NULL if not wanted. 3474 * 3475 * @since New in 1.8. 3476 */ 3477svn_error_t * 3478svn_client_get_merging_summary(svn_boolean_t *needs_reintegration, 3479 const char **yca_url, svn_revnum_t *yca_rev, 3480 const char **base_url, svn_revnum_t *base_rev, 3481 const char **right_url, svn_revnum_t *right_rev, 3482 const char **target_url, svn_revnum_t *target_rev, 3483 const char **repos_root_url, 3484 const char *source_path_or_url, 3485 const svn_opt_revision_t *source_revision, 3486 const char *target_path_or_url, 3487 const svn_opt_revision_t *target_revision, 3488 svn_client_ctx_t *ctx, 3489 apr_pool_t *result_pool, 3490 apr_pool_t *scratch_pool); 3491 3492 3493/** Merge changes from @a source1/@a revision1 to @a source2/@a revision2 into 3494 * the working-copy path @a target_wcpath. 3495 * 3496 * @a source1 and @a source2 are either URLs that refer to entries in the 3497 * repository, or paths to entries in the working copy. 3498 * 3499 * By "merging", we mean: apply file differences using 3500 * svn_wc_merge(), and schedule additions & deletions when appropriate. 3501 * 3502 * @a source1 and @a source2 must both represent the same node kind -- that 3503 * is, if @a source1 is a directory, @a source2 must also be, and if @a source1 3504 * is a file, @a source2 must also be. 3505 * 3506 * If either @a revision1 or @a revision2 has an `unspecified' or 3507 * unrecognized `kind', return #SVN_ERR_CLIENT_BAD_REVISION. 3508 * 3509 * If @a depth is #svn_depth_infinity, merge fully recursively. 3510 * Else if #svn_depth_immediates, merge changes at most to files 3511 * that are immediate children of @a target_wcpath and to directory 3512 * properties of @a target_wcpath and its immediate subdirectory children. 3513 * Else if #svn_depth_files, merge at most to immediate file 3514 * children of @a target_wcpath and to @a target_wcpath itself. 3515 * Else if #svn_depth_empty, apply changes only to @a target_wcpath 3516 * (i.e., directory property changes only) 3517 * 3518 * If @a depth is #svn_depth_unknown, use the depth of @a target_wcpath. 3519 * 3520 * If @a ignore_mergeinfo is true, disable merge tracking, by treating the 3521 * two sources as unrelated even if they actually have a common ancestor. 3522 * 3523 * If @a diff_ignore_ancestry is true, diff unrelated nodes as if related: 3524 * that is, diff the 'left' and 'right' versions of a node as if they were 3525 * related (if they are the same kind) even if they are not related. 3526 * Otherwise, diff unrelated items as a deletion of one thing and the 3527 * addition of another. 3528 * 3529 * If @a force_delete is false and the merge involves deleting a file whose 3530 * content differs from the source-left version, or a locally modified 3531 * directory, or an unversioned item, then the operation will fail. If 3532 * @a force_delete is true then all such items will be deleted. 3533 * 3534 * @a merge_options (an array of <tt>const char *</tt>), if non-NULL, 3535 * is used to pass additional command line arguments to the merge 3536 * processes (internal or external). @see 3537 * svn_diff_file_options_parse(). 3538 * 3539 * If @a ctx->notify_func2 is non-NULL, then call @a ctx->notify_func2 with @a 3540 * ctx->notify_baton2 once for each merged target, passing the target's local 3541 * path. 3542 * 3543 * If @a record_only is TRUE, the merge is performed, but is limited only to 3544 * mergeinfo property changes on existing paths in @a target_wcpath. 3545 * 3546 * If @a dry_run is TRUE, the merge is carried out, and full notification 3547 * feedback is provided, but the working copy is not modified. 3548 * 3549 * If allow_mixed_rev is @c FALSE, and @a merge_target is a mixed-revision 3550 * working copy, raise @c SVN_ERR_CLIENT_MERGE_UPDATE_REQUIRED. 3551 * Because users rarely intend to merge into mixed-revision working copies, 3552 * it is recommended to set this parameter to FALSE by default unless the 3553 * user has explicitly requested a merge into a mixed-revision working copy. 3554 * 3555 * The authentication baton cached in @a ctx is used to communicate with the 3556 * repository. 3557 * 3558 * @since New in 1.8. 3559 */ 3560svn_error_t * 3561svn_client_merge5(const char *source1, 3562 const svn_opt_revision_t *revision1, 3563 const char *source2, 3564 const svn_opt_revision_t *revision2, 3565 const char *target_wcpath, 3566 svn_depth_t depth, 3567 svn_boolean_t ignore_mergeinfo, 3568 svn_boolean_t diff_ignore_ancestry, 3569 svn_boolean_t force_delete, 3570 svn_boolean_t record_only, 3571 svn_boolean_t dry_run, 3572 svn_boolean_t allow_mixed_rev, 3573 const apr_array_header_t *merge_options, 3574 svn_client_ctx_t *ctx, 3575 apr_pool_t *pool); 3576 3577/** 3578 * Similar to svn_client_merge5(), but the single @a ignore_ancestry 3579 * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry. 3580 * 3581 * @deprecated Provided for backward compatibility with the 1.7 API. 3582 * @since New in 1.7. 3583 */ 3584SVN_DEPRECATED 3585svn_error_t * 3586svn_client_merge4(const char *source1, 3587 const svn_opt_revision_t *revision1, 3588 const char *source2, 3589 const svn_opt_revision_t *revision2, 3590 const char *target_wcpath, 3591 svn_depth_t depth, 3592 svn_boolean_t ignore_ancestry, 3593 svn_boolean_t force_delete, 3594 svn_boolean_t record_only, 3595 svn_boolean_t dry_run, 3596 svn_boolean_t allow_mixed_rev, 3597 const apr_array_header_t *merge_options, 3598 svn_client_ctx_t *ctx, 3599 apr_pool_t *pool); 3600 3601/** 3602 * Similar to svn_client_merge4(), but with @a allow_mixed_rev set to 3603 * @c TRUE. The @a force parameter maps to the @c force_delete parameter 3604 * of svn_client_merge4(). 3605 * 3606 * @deprecated Provided for backward compatibility with the 1.6 API. 3607 * 3608 * @since New in 1.5. 3609 */ 3610SVN_DEPRECATED 3611svn_error_t * 3612svn_client_merge3(const char *source1, 3613 const svn_opt_revision_t *revision1, 3614 const char *source2, 3615 const svn_opt_revision_t *revision2, 3616 const char *target_wcpath, 3617 svn_depth_t depth, 3618 svn_boolean_t ignore_ancestry, 3619 svn_boolean_t force, 3620 svn_boolean_t record_only, 3621 svn_boolean_t dry_run, 3622 const apr_array_header_t *merge_options, 3623 svn_client_ctx_t *ctx, 3624 apr_pool_t *pool); 3625 3626/** 3627 * Similar to svn_client_merge3(), but with @a record_only set to @c 3628 * FALSE, and @a depth set according to @a recurse: if @a recurse is 3629 * TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 3630 * FALSE, set @a depth to #svn_depth_files. 3631 * 3632 * @deprecated Provided for backward compatibility with the 1.4 API. 3633 * 3634 * @since New in 1.4. 3635 */ 3636SVN_DEPRECATED 3637svn_error_t * 3638svn_client_merge2(const char *source1, 3639 const svn_opt_revision_t *revision1, 3640 const char *source2, 3641 const svn_opt_revision_t *revision2, 3642 const char *target_wcpath, 3643 svn_boolean_t recurse, 3644 svn_boolean_t ignore_ancestry, 3645 svn_boolean_t force, 3646 svn_boolean_t dry_run, 3647 const apr_array_header_t *merge_options, 3648 svn_client_ctx_t *ctx, 3649 apr_pool_t *pool); 3650 3651 3652/** 3653 * Similar to svn_client_merge2(), but with @a merge_options set to NULL. 3654 * 3655 * @deprecated Provided for backwards compatibility with the 1.3 API. 3656 */ 3657SVN_DEPRECATED 3658svn_error_t * 3659svn_client_merge(const char *source1, 3660 const svn_opt_revision_t *revision1, 3661 const char *source2, 3662 const svn_opt_revision_t *revision2, 3663 const char *target_wcpath, 3664 svn_boolean_t recurse, 3665 svn_boolean_t ignore_ancestry, 3666 svn_boolean_t force, 3667 svn_boolean_t dry_run, 3668 svn_client_ctx_t *ctx, 3669 apr_pool_t *pool); 3670 3671 3672/** 3673 * Perform a reintegration merge of @a source_path_or_url at @a source_peg_revision 3674 * into @a target_wcpath. 3675 * @a target_wcpath must be a single-revision, #svn_depth_infinity, 3676 * pristine, unswitched working copy -- in other words, it must 3677 * reflect a single revision tree, the "target". The mergeinfo on @a 3678 * source_path_or_url must reflect that all of the target has been merged into it. 3679 * Then this behaves like a merge with svn_client_merge5() from the 3680 * target's URL to the source. 3681 * 3682 * All other options are handled identically to svn_client_merge5(). 3683 * The depth of the merge is always #svn_depth_infinity. 3684 * 3685 * @since New in 1.5. 3686 * @deprecated Provided for backwards compatibility with the 1.7 API. 3687 */ 3688SVN_DEPRECATED 3689svn_error_t * 3690svn_client_merge_reintegrate(const char *source_path_or_url, 3691 const svn_opt_revision_t *source_peg_revision, 3692 const char *target_wcpath, 3693 svn_boolean_t dry_run, 3694 const apr_array_header_t *merge_options, 3695 svn_client_ctx_t *ctx, 3696 apr_pool_t *pool); 3697 3698/** 3699 * Merge changes from the source branch identified by 3700 * @a source_path_or_url in peg revision @a source_peg_revision, 3701 * into the target branch working copy at @a target_wcpath. 3702 * 3703 * If @a ranges_to_merge is NULL then perform an automatic merge of 3704 * all the eligible changes up to @a source_peg_revision. If the merge 3705 * required is a reintegrate merge, then return an error if the WC has 3706 * mixed revisions, local modifications and/or switched subtrees; if 3707 * the merge is determined to be of the non-reintegrate kind, then 3708 * return an error if @a allow_mixed_rev is false and the WC contains 3709 * mixed revisions. 3710 * 3711 * If @a ranges_to_merge is not NULL then merge the changes specified 3712 * by the revision ranges in @a ranges_to_merge, or, when honouring 3713 * mergeinfo, only the eligible parts of those revision ranges. 3714 * @a ranges_to_merge is an array of <tt>svn_opt_revision_range_t 3715 * *</tt> ranges. These ranges may describe additive and/or 3716 * subtractive merge ranges, they may overlap fully or partially, 3717 * and/or they may partially or fully negate each other. This 3718 * rangelist is not required to be sorted. If any revision in the 3719 * list of provided ranges has an `unspecified' or unrecognized 3720 * `kind', return #SVN_ERR_CLIENT_BAD_REVISION. 3721 * 3722 * If @a ranges_to_merge is an empty array, then do nothing. 3723 * 3724 * All other options are handled identically to svn_client_merge5(). 3725 * 3726 * @since New in 1.8. 3727 */ 3728svn_error_t * 3729svn_client_merge_peg5(const char *source_path_or_url, 3730 const apr_array_header_t *ranges_to_merge, 3731 const svn_opt_revision_t *source_peg_revision, 3732 const char *target_wcpath, 3733 svn_depth_t depth, 3734 svn_boolean_t ignore_mergeinfo, 3735 svn_boolean_t diff_ignore_ancestry, 3736 svn_boolean_t force_delete, 3737 svn_boolean_t record_only, 3738 svn_boolean_t dry_run, 3739 svn_boolean_t allow_mixed_rev, 3740 const apr_array_header_t *merge_options, 3741 svn_client_ctx_t *ctx, 3742 apr_pool_t *pool); 3743 3744/** 3745 * Similar to svn_client_merge_peg5(), but automatic merge is not available 3746 * (@a ranges_to_merge must not be NULL), and the single @a ignore_ancestry 3747 * parameter maps to both @c ignore_mergeinfo and @c diff_ignore_ancestry. 3748 * 3749 * @deprecated Provided for backward compatibility with the 1.7 API. 3750 * @since New in 1.7. 3751 */ 3752SVN_DEPRECATED 3753svn_error_t * 3754svn_client_merge_peg4(const char *source_path_or_url, 3755 const apr_array_header_t *ranges_to_merge, 3756 const svn_opt_revision_t *source_peg_revision, 3757 const char *target_wcpath, 3758 svn_depth_t depth, 3759 svn_boolean_t ignore_ancestry, 3760 svn_boolean_t force_delete, 3761 svn_boolean_t record_only, 3762 svn_boolean_t dry_run, 3763 svn_boolean_t allow_mixed_rev, 3764 const apr_array_header_t *merge_options, 3765 svn_client_ctx_t *ctx, 3766 apr_pool_t *pool); 3767 3768/** 3769 * Similar to svn_client_merge_peg4(), but with @a allow_mixed_rev set to 3770 * @c TRUE. The @a force parameter maps to the @c force_delete parameter 3771 * of svn_client_merge_peg4(). 3772 * 3773 * @deprecated Provided for backward compatibility with the 1.6 API. 3774 * 3775 * @since New in 1.5. 3776 */ 3777SVN_DEPRECATED 3778svn_error_t * 3779svn_client_merge_peg3(const char *source, 3780 const apr_array_header_t *ranges_to_merge, 3781 const svn_opt_revision_t *peg_revision, 3782 const char *target_wcpath, 3783 svn_depth_t depth, 3784 svn_boolean_t ignore_ancestry, 3785 svn_boolean_t force, 3786 svn_boolean_t record_only, 3787 svn_boolean_t dry_run, 3788 const apr_array_header_t *merge_options, 3789 svn_client_ctx_t *ctx, 3790 apr_pool_t *pool); 3791 3792/** 3793 * Similar to svn_client_merge_peg3(), but with @a record_only set to 3794 * @c FALSE, and @a depth set according to @a recurse: if @a recurse 3795 * is TRUE, set @a depth to #svn_depth_infinity, if @a recurse is 3796 * FALSE, set @a depth to #svn_depth_files. 3797 * 3798 * @deprecated Provided for backwards compatibility with the 1.4 API. 3799 * 3800 * @since New in 1.4. 3801 */ 3802SVN_DEPRECATED 3803svn_error_t * 3804svn_client_merge_peg2(const char *source, 3805 const svn_opt_revision_t *revision1, 3806 const svn_opt_revision_t *revision2, 3807 const svn_opt_revision_t *peg_revision, 3808 const char *target_wcpath, 3809 svn_boolean_t recurse, 3810 svn_boolean_t ignore_ancestry, 3811 svn_boolean_t force, 3812 svn_boolean_t dry_run, 3813 const apr_array_header_t *merge_options, 3814 svn_client_ctx_t *ctx, 3815 apr_pool_t *pool); 3816 3817/** 3818 * Similar to svn_client_merge_peg2(), but with @a merge_options set to 3819 * NULL. 3820 * 3821 * @deprecated Provided for backwards compatibility with the 1.3 API. 3822 * 3823 * @since New in 1.1. 3824 */ 3825SVN_DEPRECATED 3826svn_error_t * 3827svn_client_merge_peg(const char *source, 3828 const svn_opt_revision_t *revision1, 3829 const svn_opt_revision_t *revision2, 3830 const svn_opt_revision_t *peg_revision, 3831 const char *target_wcpath, 3832 svn_boolean_t recurse, 3833 svn_boolean_t ignore_ancestry, 3834 svn_boolean_t force, 3835 svn_boolean_t dry_run, 3836 svn_client_ctx_t *ctx, 3837 apr_pool_t *pool); 3838 3839 3840/** Set @a suggestions to an ordered array of @c const char * 3841 * potential merge sources (expressed as full repository URLs) for @a 3842 * path_or_url at @a peg_revision. @a path_or_url is a working copy 3843 * path or repository URL. @a ctx is a context used for 3844 * authentication in the repository case. Use @a pool for all 3845 * allocations. 3846 * 3847 * @since New in 1.5. 3848 */ 3849svn_error_t * 3850svn_client_suggest_merge_sources(apr_array_header_t **suggestions, 3851 const char *path_or_url, 3852 const svn_opt_revision_t *peg_revision, 3853 svn_client_ctx_t *ctx, 3854 apr_pool_t *pool); 3855 3856 3857/** 3858 * Get the mergeinfo for a single target node (ignoring any subtrees). 3859 * 3860 * Set @a *mergeinfo to a hash mapping <tt>const char *</tt> merge source 3861 * URLs to <tt>svn_rangelist_t *</tt> rangelists describing the ranges which 3862 * have been merged into @a path_or_url as of @a peg_revision, per 3863 * @a path_or_url's explicit mergeinfo or inherited mergeinfo if no 3864 * explicit mergeinfo if found. If no explicit or inherited mergeinfo 3865 * is found, then set @a *mergeinfo to NULL. 3866 * 3867 * Use @a pool for all necessary allocations. 3868 * 3869 * If the server doesn't support retrieval of mergeinfo (which will 3870 * never happen for file:// URLs), return an 3871 * #SVN_ERR_UNSUPPORTED_FEATURE error. 3872 * 3873 * @note Unlike most APIs which deal with mergeinfo, this one returns 3874 * data where the keys of the hash are absolute repository URLs rather 3875 * than repository filesystem paths. 3876 * 3877 * @since New in 1.5. 3878 */ 3879svn_error_t * 3880svn_client_mergeinfo_get_merged(apr_hash_t **mergeinfo, 3881 const char *path_or_url, 3882 const svn_opt_revision_t *peg_revision, 3883 svn_client_ctx_t *ctx, 3884 apr_pool_t *pool); 3885 3886 3887/** 3888 * Describe the revisions that either have or have not been merged from 3889 * one source branch (or subtree) into another. 3890 * 3891 * If @a finding_merged is TRUE, then drive log entry callbacks 3892 * @a receiver / @a receiver_baton with the revisions merged from 3893 * @a source_path_or_url (as of @a source_peg_revision) into 3894 * @a target_path_or_url (as of @a target_peg_revision). If @a 3895 * finding_merged is FALSE then find the revisions eligible for merging. 3896 * 3897 * If both @a source_start_revision and @a source_end_revision are 3898 * unspecified (that is, of kind @c svn_opt_revision_unspecified), 3899 * @a receiver will be called the requested revisions from 0 to 3900 * @a source_peg_revision and in that order (that is, oldest to 3901 * youngest). Otherwise, both @a source_start_revision and 3902 * @a source_end_revision must be specified, which has two effects: 3903 * 3904 * - @a receiver will be called only with revisions which fall 3905 * within range of @a source_start_revision to 3906 * @a source_end_revision, inclusive, and 3907 * 3908 * - those revisions will be ordered in the same "direction" as the 3909 * walk from @a source_start_revision to @a source_end_revision. 3910 * (If @a source_start_revision is the younger of the two, @a 3911 * receiver will be called with revisions in youngest-to-oldest 3912 * order; otherwise, the reverse occurs.) 3913 * 3914 * If @a depth is #svn_depth_empty consider only the explicit or 3915 * inherited mergeinfo on @a target_path_or_url when calculating merged 3916 * revisions from @a source_path_or_url. If @a depth is #svn_depth_infinity 3917 * then also consider the explicit subtree mergeinfo under @a 3918 * target_path_or_url. 3919 * If a depth other than #svn_depth_empty or #svn_depth_infinity is 3920 * requested then return a #SVN_ERR_UNSUPPORTED_FEATURE error. 3921 * 3922 * @a discover_changed_paths and @a revprops are the same as for 3923 * svn_client_log5(). Use @a scratch_pool for all temporary allocations. 3924 * 3925 * @a ctx is a context used for authentication. 3926 * 3927 * If the server doesn't support retrieval of mergeinfo, return an 3928 * #SVN_ERR_UNSUPPORTED_FEATURE error. 3929 * 3930 * @since New in 1.8. 3931 */ 3932svn_error_t * 3933svn_client_mergeinfo_log2(svn_boolean_t finding_merged, 3934 const char *target_path_or_url, 3935 const svn_opt_revision_t *target_peg_revision, 3936 const char *source_path_or_url, 3937 const svn_opt_revision_t *source_peg_revision, 3938 const svn_opt_revision_t *source_start_revision, 3939 const svn_opt_revision_t *source_end_revision, 3940 svn_log_entry_receiver_t receiver, 3941 void *receiver_baton, 3942 svn_boolean_t discover_changed_paths, 3943 svn_depth_t depth, 3944 const apr_array_header_t *revprops, 3945 svn_client_ctx_t *ctx, 3946 apr_pool_t *scratch_pool); 3947 3948/** 3949 * Similar to svn_client_mergeinfo_log2(), but with @a source_start_revision 3950 * and @a source_end_revision always of kind @c svn_opt_revision_unspecified; 3951 * 3952 * @deprecated Provided for backwards compatibility with the 1.7 API. 3953 * @since New in 1.7. 3954 */ 3955SVN_DEPRECATED 3956svn_error_t * 3957svn_client_mergeinfo_log(svn_boolean_t finding_merged, 3958 const char *target_path_or_url, 3959 const svn_opt_revision_t *target_peg_revision, 3960 const char *source_path_or_url, 3961 const svn_opt_revision_t *source_peg_revision, 3962 svn_log_entry_receiver_t receiver, 3963 void *receiver_baton, 3964 svn_boolean_t discover_changed_paths, 3965 svn_depth_t depth, 3966 const apr_array_header_t *revprops, 3967 svn_client_ctx_t *ctx, 3968 apr_pool_t *scratch_pool); 3969 3970/** 3971 * Similar to svn_client_mergeinfo_log(), but finds only merged revisions 3972 * and always operates at @a depth #svn_depth_empty. 3973 * 3974 * @deprecated Provided for backwards compatibility with the 1.6 API. Use 3975 * svn_client_mergeinfo_log() instead. 3976 * @since New in 1.5. 3977 */ 3978SVN_DEPRECATED 3979svn_error_t * 3980svn_client_mergeinfo_log_merged(const char *path_or_url, 3981 const svn_opt_revision_t *peg_revision, 3982 const char *merge_source_path_or_url, 3983 const svn_opt_revision_t *src_peg_revision, 3984 svn_log_entry_receiver_t receiver, 3985 void *receiver_baton, 3986 svn_boolean_t discover_changed_paths, 3987 const apr_array_header_t *revprops, 3988 svn_client_ctx_t *ctx, 3989 apr_pool_t *pool); 3990 3991/** 3992 * Similar to svn_client_mergeinfo_log(), but finds only eligible revisions 3993 * and always operates at @a depth #svn_depth_empty. 3994 * 3995 * @deprecated Provided for backwards compatibility with the 1.6 API. Use 3996 * svn_client_mergeinfo_log() instead. 3997 * @since New in 1.5. 3998 */ 3999SVN_DEPRECATED 4000svn_error_t * 4001svn_client_mergeinfo_log_eligible(const char *path_or_url, 4002 const svn_opt_revision_t *peg_revision, 4003 const char *merge_source_path_or_url, 4004 const svn_opt_revision_t *src_peg_revision, 4005 svn_log_entry_receiver_t receiver, 4006 void *receiver_baton, 4007 svn_boolean_t discover_changed_paths, 4008 const apr_array_header_t *revprops, 4009 svn_client_ctx_t *ctx, 4010 apr_pool_t *pool); 4011 4012/** @} */ 4013 4014/** 4015 * @defgroup Cleanup Cleanup an abnormally terminated working copy. 4016 * 4017 * @{ 4018 */ 4019 4020/** Recursively cleanup a working copy directory @a dir, finishing any 4021 * incomplete operations, removing lockfiles, etc. 4022 * 4023 * If @a ctx->cancel_func is non-NULL, invoke it with @a 4024 * ctx->cancel_baton at various points during the operation. If it 4025 * returns an error (typically #SVN_ERR_CANCELLED), return that error 4026 * immediately. 4027 * 4028 * Use @a scratch_pool for any temporary allocations. 4029 */ 4030svn_error_t * 4031svn_client_cleanup(const char *dir, 4032 svn_client_ctx_t *ctx, 4033 apr_pool_t *scratch_pool); 4034 4035 4036/** @} */ 4037 4038/** 4039 * @defgroup Upgrade Upgrade a working copy. 4040 * 4041 * @{ 4042 */ 4043 4044/** Recursively upgrade a working copy from any older format to the current 4045 * WC metadata storage format. @a wcroot_dir is the path to the WC root. 4046 * 4047 * Use @a scratch_pool for any temporary allocations. 4048 * 4049 * @since New in 1.7. 4050 */ 4051svn_error_t * 4052svn_client_upgrade(const char *wcroot_dir, 4053 svn_client_ctx_t *ctx, 4054 apr_pool_t *scratch_pool); 4055 4056 4057/** @} */ 4058 4059/** 4060 * @defgroup Relocate Switch a working copy to a different repository. 4061 * 4062 * @{ 4063 */ 4064 4065/** 4066 * Recursively modify a working copy rooted at @a wcroot_dir, changing 4067 * any repository URLs that begin with @a from_prefix to begin with @a 4068 * to_prefix instead. 4069 * 4070 * @param wcroot_dir Working copy root directory 4071 * @param from_prefix Original URL 4072 * @param to_prefix New URL 4073 * @param ignore_externals If not set, recurse into external working 4074 * copies after relocating the primary working copy 4075 * @param ctx svn_client_ctx_t 4076 * @param pool The pool from which to perform memory allocations 4077 * 4078 * @since New in 1.7 4079 */ 4080svn_error_t * 4081svn_client_relocate2(const char *wcroot_dir, 4082 const char *from_prefix, 4083 const char *to_prefix, 4084 svn_boolean_t ignore_externals, 4085 svn_client_ctx_t *ctx, 4086 apr_pool_t *pool); 4087 4088/** 4089 * Similar to svn_client_relocate2(), but with @a ignore_externals 4090 * always TRUE. 4091 * 4092 * @note As of the 1.7 API, @a dir is required to be a working copy 4093 * root directory, and @a recurse is required to be TRUE. 4094 * 4095 * @deprecated Provided for limited backwards compatibility with the 4096 * 1.6 API. 4097 */ 4098SVN_DEPRECATED 4099svn_error_t * 4100svn_client_relocate(const char *dir, 4101 const char *from_prefix, 4102 const char *to_prefix, 4103 svn_boolean_t recurse, 4104 svn_client_ctx_t *ctx, 4105 apr_pool_t *pool); 4106 4107/** @} */ 4108 4109/** 4110 * @defgroup Revert Remove local changes in a repository. 4111 * 4112 * @{ 4113 */ 4114 4115/** 4116 * Restore the pristine version of working copy @a paths, 4117 * effectively undoing any local mods. For each path in @a paths, 4118 * revert it if it is a file. Else if it is a directory, revert 4119 * according to @a depth: 4120 * 4121 * @a paths is an array of (const char *) local WC paths. 4122 * 4123 * If @a depth is #svn_depth_empty, revert just the properties on 4124 * the directory; else if #svn_depth_files, revert the properties 4125 * and any files immediately under the directory; else if 4126 * #svn_depth_immediates, revert all of the preceding plus 4127 * properties on immediate subdirectories; else if #svn_depth_infinity, 4128 * revert path and everything under it fully recursively. 4129 * 4130 * @a changelists is an array of <tt>const char *</tt> changelist 4131 * names, used as a restrictive filter on items reverted; that is, 4132 * don't revert any item unless it's a member of one of those 4133 * changelists. If @a changelists is empty (or altogether @c NULL), 4134 * no changelist filtering occurs. 4135 * 4136 * If @a ctx->notify_func2 is non-NULL, then for each item reverted, 4137 * call @a ctx->notify_func2 with @a ctx->notify_baton2 and the path of 4138 * the reverted item. 4139 * 4140 * If an item specified for reversion is not under version control, 4141 * then do not error, just invoke @a ctx->notify_func2 with @a 4142 * ctx->notify_baton2, using notification code #svn_wc_notify_skip. 4143 * 4144 * @since New in 1.5. 4145 */ 4146svn_error_t * 4147svn_client_revert2(const apr_array_header_t *paths, 4148 svn_depth_t depth, 4149 const apr_array_header_t *changelists, 4150 svn_client_ctx_t *ctx, 4151 apr_pool_t *pool); 4152 4153 4154/** 4155 * Similar to svn_client_revert2(), but with @a changelists passed as 4156 * @c NULL, and @a depth set according to @a recurse: if @a recurse is 4157 * TRUE, @a depth is #svn_depth_infinity, else if @a recurse is 4158 * FALSE, @a depth is #svn_depth_empty. 4159 * 4160 * @note Most APIs map @a recurse==FALSE to @a depth==svn_depth_files; 4161 * revert is deliberately different. 4162 * 4163 * @deprecated Provided for backwards compatibility with the 1.0 API. 4164 */ 4165SVN_DEPRECATED 4166svn_error_t * 4167svn_client_revert(const apr_array_header_t *paths, 4168 svn_boolean_t recursive, 4169 svn_client_ctx_t *ctx, 4170 apr_pool_t *pool); 4171 4172 4173/** @} */ 4174 4175/** 4176 * @defgroup Resolved Mark conflicted paths as resolved. 4177 * 4178 * @{ 4179 */ 4180 4181/** 4182 * Similar to svn_client_resolve(), but without automatic conflict 4183 * resolution support. 4184 * 4185 * @deprecated Provided for backward compatibility with the 1.4 API. 4186 * Use svn_client_resolve() with @a conflict_choice == @c 4187 * svn_wc_conflict_choose_merged instead. 4188 */ 4189SVN_DEPRECATED 4190svn_error_t * 4191svn_client_resolved(const char *path, 4192 svn_boolean_t recursive, 4193 svn_client_ctx_t *ctx, 4194 apr_pool_t *pool); 4195 4196/** Perform automatic conflict resolution on a working copy @a path. 4197 * 4198 * If @a conflict_choice is 4199 * 4200 * - #svn_wc_conflict_choose_base: 4201 * resolve the conflict with the old file contents 4202 * 4203 * - #svn_wc_conflict_choose_mine_full: 4204 * use the original working contents 4205 * 4206 * - #svn_wc_conflict_choose_theirs_full: 4207 * use the new contents 4208 * 4209 * - #svn_wc_conflict_choose_merged: 4210 * don't change the contents at all, just remove the conflict 4211 * status, which is the pre-1.5 behavior. 4212 * 4213 * - #svn_wc_conflict_choose_theirs_conflict 4214 * ###... 4215 * 4216 * - #svn_wc_conflict_choose_mine_conflict 4217 * ###... 4218 * 4219 * - svn_wc_conflict_choose_unspecified 4220 * invoke @a ctx->conflict_func2 with @a ctx->conflict_baton2 to obtain 4221 * a resolution decision for each conflict. This can be used to 4222 * implement interactive conflict resolution. 4223 * 4224 * #svn_wc_conflict_choose_theirs_conflict and 4225 * #svn_wc_conflict_choose_mine_conflict are not legal for binary 4226 * files or properties. 4227 * 4228 * If @a path is not in a state of conflict to begin with, do nothing. 4229 * If @a path's conflict state is removed and @a ctx->notify_func2 is non-NULL, 4230 * call @a ctx->notify_func2 with @a ctx->notify_baton2 and @a path. 4231 * ### with what notification parameters? 4232 * 4233 * If @a depth is #svn_depth_empty, act only on @a path; if 4234 * #svn_depth_files, resolve @a path and its conflicted file 4235 * children (if any); if #svn_depth_immediates, resolve @a path and 4236 * all its immediate conflicted children (both files and directories, 4237 * if any); if #svn_depth_infinity, resolve @a path and every 4238 * conflicted file or directory anywhere beneath it. 4239 * 4240 * Note that this operation will try to lock the parent directory of 4241 * @a path in order to be able to resolve tree-conflicts on @a path. 4242 * 4243 * @since New in 1.5. 4244 */ 4245svn_error_t * 4246svn_client_resolve(const char *path, 4247 svn_depth_t depth, 4248 svn_wc_conflict_choice_t conflict_choice, 4249 svn_client_ctx_t *ctx, 4250 apr_pool_t *pool); 4251 4252 4253/** @} */ 4254 4255/** 4256 * @defgroup Copy Copy paths in the working copy and repository. 4257 * 4258 * @{ 4259 */ 4260 4261/** 4262 * A structure which describes the source of a copy operation--its path, 4263 * revision, and peg revision. 4264 * 4265 * @since New in 1.5. 4266 */ 4267typedef struct svn_client_copy_source_t 4268{ 4269 /** The source path or URL. */ 4270 const char *path; 4271 4272 /** The source operational revision. */ 4273 const svn_opt_revision_t *revision; 4274 4275 /** The source peg revision. */ 4276 const svn_opt_revision_t *peg_revision; 4277} svn_client_copy_source_t; 4278 4279/** Copy each source in @a sources to @a dst_path. 4280 * 4281 * If multiple @a sources are given, @a dst_path must be a directory, 4282 * and @a sources will be copied as children of @a dst_path. 4283 * 4284 * @a sources is an array of <tt>svn_client_copy_source_t *</tt> elements, 4285 * either all referring to local WC items or all referring to versioned 4286 * items in the repository. 4287 * 4288 * If @a sources has only one item, attempt to copy it to @a dst_path. If 4289 * @a copy_as_child is TRUE and @a dst_path already exists, attempt to copy the 4290 * item as a child of @a dst_path. If @a copy_as_child is FALSE and 4291 * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path 4292 * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a 4293 * URL. 4294 * 4295 * If @a sources has multiple items, and @a copy_as_child is TRUE, all 4296 * @a sources are copied as children of @a dst_path. If any child of 4297 * @a dst_path already exists with the same name any item in @a sources, 4298 * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and 4299 * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL. 4300 * 4301 * If @a sources has multiple items, and @a copy_as_child is FALSE, fail 4302 * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED. 4303 * 4304 * If @a dst_path is a URL, use the authentication baton 4305 * in @a ctx and @a ctx->log_msg_func3/@a ctx->log_msg_baton3 to immediately 4306 * attempt to commit the copy action in the repository. 4307 * 4308 * If @a dst_path is not a URL, then this is just a variant of 4309 * svn_client_add(), where the @a sources are scheduled for addition 4310 * as copies. No changes will happen to the repository until a commit occurs. 4311 * This scheduling can be removed with svn_client_revert2(). 4312 * 4313 * If @a make_parents is TRUE, create any non-existent parent directories 4314 * also. Otherwise the parent of @a dst_path must already exist. 4315 * 4316 * If @a ignore_externals is set, don't process externals definitions 4317 * as part of this operation. 4318 * 4319 * If non-NULL, @a revprop_table is a hash table holding additional, 4320 * custom revision properties (<tt>const char *</tt> names mapped to 4321 * <tt>svn_string_t *</tt> values) to be set on the new revision in 4322 * the event that this is a committing operation. This table cannot 4323 * contain any standard Subversion properties. 4324 * 4325 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton combo 4326 * that this function can use to query for a commit log message when one is 4327 * needed. 4328 * 4329 * If @a ctx->notify_func2 is non-NULL, invoke it with @a ctx->notify_baton2 4330 * for each item added at the new location, passing the new, relative path of 4331 * the added item. 4332 * 4333 * If @a commit_callback is non-NULL, then for each successful commit, call 4334 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 4335 * the commit. 4336 * 4337 * @since New in 1.7. 4338 */ 4339svn_error_t * 4340svn_client_copy6(const apr_array_header_t *sources, 4341 const char *dst_path, 4342 svn_boolean_t copy_as_child, 4343 svn_boolean_t make_parents, 4344 svn_boolean_t ignore_externals, 4345 const apr_hash_t *revprop_table, 4346 svn_commit_callback2_t commit_callback, 4347 void *commit_baton, 4348 svn_client_ctx_t *ctx, 4349 apr_pool_t *pool); 4350 4351/** 4352 * Similar to svn_client_copy6(), but returns the commit info in 4353 * @a *commit_info_p rather than through a callback function. 4354 * 4355 * @since New in 1.6. 4356 * @deprecated Provided for backward compatibility with the 1.6 API. 4357 */ 4358SVN_DEPRECATED 4359svn_error_t * 4360svn_client_copy5(svn_commit_info_t **commit_info_p, 4361 const apr_array_header_t *sources, 4362 const char *dst_path, 4363 svn_boolean_t copy_as_child, 4364 svn_boolean_t make_parents, 4365 svn_boolean_t ignore_externals, 4366 const apr_hash_t *revprop_table, 4367 svn_client_ctx_t *ctx, 4368 apr_pool_t *pool); 4369 4370/** 4371 * Similar to svn_client_copy5(), with @a ignore_externals set to @c FALSE. 4372 * 4373 * @since New in 1.5. 4374 * 4375 * @deprecated Provided for backward compatibility with the 1.5 API. 4376 */ 4377SVN_DEPRECATED 4378svn_error_t * 4379svn_client_copy4(svn_commit_info_t **commit_info_p, 4380 const apr_array_header_t *sources, 4381 const char *dst_path, 4382 svn_boolean_t copy_as_child, 4383 svn_boolean_t make_parents, 4384 const apr_hash_t *revprop_table, 4385 svn_client_ctx_t *ctx, 4386 apr_pool_t *pool); 4387 4388/** 4389 * Similar to svn_client_copy4(), with only one @a src_path, @a 4390 * copy_as_child set to @c FALSE, @a revprop_table passed as NULL, and 4391 * @a make_parents set to @c FALSE. Also, use @a src_revision as both 4392 * the operational and peg revision. 4393 * 4394 * @since New in 1.4. 4395 * 4396 * @deprecated Provided for backward compatibility with the 1.4 API. 4397 */ 4398SVN_DEPRECATED 4399svn_error_t * 4400svn_client_copy3(svn_commit_info_t **commit_info_p, 4401 const char *src_path, 4402 const svn_opt_revision_t *src_revision, 4403 const char *dst_path, 4404 svn_client_ctx_t *ctx, 4405 apr_pool_t *pool); 4406 4407 4408/** 4409 * Similar to svn_client_copy3(), with the difference that if @a dst_path 4410 * already exists and is a directory, copy the item into that directory, 4411 * keeping its name (the last component of @a src_path). 4412 * 4413 * @since New in 1.3. 4414 * 4415 * @deprecated Provided for backward compatibility with the 1.3 API. 4416 */ 4417SVN_DEPRECATED 4418svn_error_t * 4419svn_client_copy2(svn_commit_info_t **commit_info_p, 4420 const char *src_path, 4421 const svn_opt_revision_t *src_revision, 4422 const char *dst_path, 4423 svn_client_ctx_t *ctx, 4424 apr_pool_t *pool); 4425 4426 4427/** 4428 * Similar to svn_client_copy2(), but uses #svn_client_commit_info_t 4429 * for @a commit_info_p. 4430 * 4431 * @deprecated Provided for backward compatibility with the 1.2 API. 4432 */ 4433SVN_DEPRECATED 4434svn_error_t * 4435svn_client_copy(svn_client_commit_info_t **commit_info_p, 4436 const char *src_path, 4437 const svn_opt_revision_t *src_revision, 4438 const char *dst_path, 4439 svn_client_ctx_t *ctx, 4440 apr_pool_t *pool); 4441 4442 4443/** @} */ 4444 4445/** 4446 * @defgroup Move Move paths in the working copy or repository. 4447 * 4448 * @{ 4449 */ 4450 4451/** 4452 * Move @a src_paths to @a dst_path. 4453 * 4454 * @a src_paths is an array of (const char *) paths -- either all WC paths 4455 * or all URLs -- of versioned items. If multiple @a src_paths are given, 4456 * @a dst_path must be a directory and @a src_paths will be moved as 4457 * children of @a dst_path. 4458 * 4459 * If @a src_paths are repository URLs: 4460 * 4461 * - @a dst_path must also be a repository URL. 4462 * 4463 * - The authentication baton in @a ctx and @a ctx->log_msg_func/@a 4464 * ctx->log_msg_baton are used to commit the move. 4465 * 4466 * - The move operation will be immediately committed. 4467 * 4468 * If @a src_paths are working copy paths: 4469 * 4470 * - @a dst_path must also be a working copy path. 4471 * 4472 * - @a ctx->log_msg_func3 and @a ctx->log_msg_baton3 are ignored. 4473 * 4474 * - This is a scheduling operation. No changes will happen to the 4475 * repository until a commit occurs. This scheduling can be removed 4476 * with svn_client_revert2(). If one of @a src_paths is a file it is 4477 * removed from the working copy immediately. If one of @a src_path 4478 * is a directory it will remain in the working copy but all the files, 4479 * and unversioned items, it contains will be removed. 4480 * 4481 * If @a src_paths has only one item, attempt to move it to @a dst_path. If 4482 * @a move_as_child is TRUE and @a dst_path already exists, attempt to move the 4483 * item as a child of @a dst_path. If @a move_as_child is FALSE and 4484 * @a dst_path already exists, fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path 4485 * is a working copy path and #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a 4486 * URL. 4487 * 4488 * If @a src_paths has multiple items, and @a move_as_child is TRUE, all 4489 * @a src_paths are moved as children of @a dst_path. If any child of 4490 * @a dst_path already exists with the same name any item in @a src_paths, 4491 * fail with #SVN_ERR_ENTRY_EXISTS if @a dst_path is a working copy path and 4492 * #SVN_ERR_FS_ALREADY_EXISTS if @a dst_path is a URL. 4493 * 4494 * If @a src_paths has multiple items, and @a move_as_child is FALSE, fail 4495 * with #SVN_ERR_CLIENT_MULTIPLE_SOURCES_DISALLOWED. 4496 * 4497 * If @a make_parents is TRUE, create any non-existent parent directories 4498 * also. Otherwise, the parent of @a dst_path must already exist. 4499 * 4500 * If @a allow_mixed_revisions is @c FALSE, #SVN_ERR_WC_MIXED_REVISIONS 4501 * will be raised if the move source is a mixed-revision subtree. 4502 * If @a allow_mixed_revisions is TRUE, a mixed-revision move source is 4503 * allowed but the move will degrade to a copy and a delete without local 4504 * move tracking. This parameter should be set to FALSE except where backwards 4505 * compatibility to svn_client_move6() is required. 4506 * 4507 * If @a metadata_only is @c TRUE and moving a file in a working copy, 4508 * everything in the metadata is updated as if the node is moved, but the 4509 * actual disk move operation is not performed. This feature is useful for 4510 * clients that want to keep the working copy in sync while the actual working 4511 * copy is updated by some other task. 4512 * 4513 * If non-NULL, @a revprop_table is a hash table holding additional, 4514 * custom revision properties (<tt>const char *</tt> names mapped to 4515 * <tt>svn_string_t *</tt> values) to be set on the new revision in 4516 * the event that this is a committing operation. This table cannot 4517 * contain any standard Subversion properties. 4518 * 4519 * @a ctx->log_msg_func3/@a ctx->log_msg_baton3 are a callback/baton combo that 4520 * this function can use to query for a commit log message when one is needed. 4521 * 4522 * If @a ctx->notify_func2 is non-NULL, then for each item moved, call 4523 * @a ctx->notify_func2 with the @a ctx->notify_baton2 twice, once to indicate 4524 * the deletion of the moved thing, and once to indicate the addition of 4525 * the new location of the thing. 4526 * 4527 * ### Is this really true? What about svn_wc_notify_commit_replaced()? ### 4528 * 4529 * If @a commit_callback is non-NULL, then for each successful commit, call 4530 * @a commit_callback with @a commit_baton and a #svn_commit_info_t for 4531 * the commit. 4532 * 4533 * @since New in 1.8. 4534 */ 4535svn_error_t * 4536svn_client_move7(const apr_array_header_t *src_paths, 4537 const char *dst_path, 4538 svn_boolean_t move_as_child, 4539 svn_boolean_t make_parents, 4540 svn_boolean_t allow_mixed_revisions, 4541 svn_boolean_t metadata_only, 4542 const apr_hash_t *revprop_table, 4543 svn_commit_callback2_t commit_callback, 4544 void *commit_baton, 4545 svn_client_ctx_t *ctx, 4546 apr_pool_t *pool); 4547 4548/** 4549 * Similar to svn_client_move7(), but with @a allow_mixed_revisions always 4550 * set to @c TRUE and @a metadata_only always to @c FALSE. 4551 * 4552 * @since New in 1.7. 4553 * @deprecated Provided for backward compatibility with the 1.7 API. 4554 */ 4555SVN_DEPRECATED 4556svn_error_t * 4557svn_client_move6(const apr_array_header_t *src_paths, 4558 const char *dst_path, 4559 svn_boolean_t move_as_child, 4560 svn_boolean_t make_parents, 4561 const apr_hash_t *revprop_table, 4562 svn_commit_callback2_t commit_callback, 4563 void *commit_baton, 4564 svn_client_ctx_t *ctx, 4565 apr_pool_t *pool); 4566 4567/** 4568 * Similar to svn_client_move6(), but returns the commit info in 4569 * @a *commit_info_p rather than through a callback function. 4570 * 4571 * A WC-to-WC move will include any modified and/or unversioned children. 4572 * @a force is ignored. 4573 * 4574 * @since New in 1.5. 4575 * @deprecated Provided for backward compatibility with the 1.6 API. 4576 */ 4577SVN_DEPRECATED 4578svn_error_t * 4579svn_client_move5(svn_commit_info_t **commit_info_p, 4580 const apr_array_header_t *src_paths, 4581 const char *dst_path, 4582 svn_boolean_t force, 4583 svn_boolean_t move_as_child, 4584 svn_boolean_t make_parents, 4585 const apr_hash_t *revprop_table, 4586 svn_client_ctx_t *ctx, 4587 apr_pool_t *pool); 4588 4589/** 4590 * Similar to svn_client_move5(), with only one @a src_path, @a 4591 * move_as_child set to @c FALSE, @a revprop_table passed as NULL, and 4592 * @a make_parents set to @c FALSE. 4593 * 4594 * Note: The behaviour of @a force changed in 1.5 (r860885 and r861421), when 4595 * the 'move' semantics were improved to just move the source including any 4596 * modified and/or unversioned items in it. Before that, @a force 4597 * controlled what happened to such items, but now @a force is ignored. 4598 * 4599 * @since New in 1.4. 4600 * 4601 * @deprecated Provided for backward compatibility with the 1.4 API. 4602 */ 4603SVN_DEPRECATED 4604svn_error_t * 4605svn_client_move4(svn_commit_info_t **commit_info_p, 4606 const char *src_path, 4607 const char *dst_path, 4608 svn_boolean_t force, 4609 svn_client_ctx_t *ctx, 4610 apr_pool_t *pool); 4611 4612/** 4613 * Similar to svn_client_move4(), with the difference that if @a dst_path 4614 * already exists and is a directory, move the item into that directory, 4615 * keeping its name (the last component of @a src_path). 4616 * 4617 * @since New in 1.3. 4618 * 4619 * @deprecated Provided for backward compatibility with the 1.3 API. 4620 */ 4621SVN_DEPRECATED 4622svn_error_t * 4623svn_client_move3(svn_commit_info_t **commit_info_p, 4624 const char *src_path, 4625 const char *dst_path, 4626 svn_boolean_t force, 4627 svn_client_ctx_t *ctx, 4628 apr_pool_t *pool); 4629 4630/** 4631 * Similar to svn_client_move3(), but uses #svn_client_commit_info_t 4632 * for @a commit_info_p. 4633 * 4634 * @deprecated Provided for backward compatibility with the 1.2 API. 4635 * 4636 * @since New in 1.2. 4637 */ 4638SVN_DEPRECATED 4639svn_error_t * 4640svn_client_move2(svn_client_commit_info_t **commit_info_p, 4641 const char *src_path, 4642 const char *dst_path, 4643 svn_boolean_t force, 4644 svn_client_ctx_t *ctx, 4645 apr_pool_t *pool); 4646 4647/** 4648 * Similar to svn_client_move2(), but an extra argument @a src_revision 4649 * must be passed. This has no effect, but must be of kind 4650 * #svn_opt_revision_unspecified or #svn_opt_revision_head, 4651 * otherwise error #SVN_ERR_UNSUPPORTED_FEATURE is returned. 4652 * 4653 * @deprecated Provided for backward compatibility with the 1.1 API. 4654 */ 4655SVN_DEPRECATED 4656svn_error_t * 4657svn_client_move(svn_client_commit_info_t **commit_info_p, 4658 const char *src_path, 4659 const svn_opt_revision_t *src_revision, 4660 const char *dst_path, 4661 svn_boolean_t force, 4662 svn_client_ctx_t *ctx, 4663 apr_pool_t *pool); 4664 4665/** @} */ 4666 4667 4668/** Properties 4669 * 4670 * Note that certain svn-controlled properties must always have their 4671 * values set and stored in UTF8 with LF line endings. When 4672 * retrieving these properties, callers must convert the values back 4673 * to native locale and native line-endings before displaying them to 4674 * the user. For help with this task, see 4675 * svn_prop_needs_translation(), svn_subst_translate_string(), and 4676 * svn_subst_detranslate_string(). 4677 * 4678 * @defgroup svn_client_prop_funcs Property functions 4679 * @{ 4680 */ 4681 4682 4683/** 4684 * Set @a propname to @a propval on @a url. A @a propval of @c NULL will 4685 * delete the property. 4686 * 4687 * Immediately attempt to commit the property change in the repository, 4688 * using the authentication baton in @a ctx and @a 4689 * ctx->log_msg_func3/@a ctx->log_msg_baton3. 4690 * 4691 * If the property has changed on @a url since revision 4692 * @a base_revision_for_url (which must not be #SVN_INVALID_REVNUM), no 4693 * change will be made and an error will be returned. 4694 * 4695 * If non-NULL, @a revprop_table is a hash table holding additional, 4696 * custom revision properties (<tt>const char *</tt> names mapped to 4697 * <tt>svn_string_t *</tt> values) to be set on the new revision. This 4698 * table cannot contain any standard Subversion properties. 4699 * 4700 * If @a commit_callback is non-NULL, then call @a commit_callback with 4701 * @a commit_baton and a #svn_commit_info_t for the commit. 4702 * 4703 * If @a propname is an svn-controlled property (i.e. prefixed with 4704 * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that 4705 * the value is UTF8-encoded and uses LF line-endings. 4706 * 4707 * If @a skip_checks is TRUE, do no validity checking. But if @a 4708 * skip_checks is FALSE, and @a propname is not a valid property for @a 4709 * url, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the property is 4710 * not appropriate for @a url), or * #SVN_ERR_BAD_MIME_TYPE (if @a propname 4711 * is "svn:mime-type", but @a propval is not a valid mime-type). 4712 * 4713 * Use @a scratch_pool for all memory allocation. 4714 * 4715 * @since New in 1.7. 4716 */ 4717svn_error_t * 4718svn_client_propset_remote(const char *propname, 4719 const svn_string_t *propval, 4720 const char *url, 4721 svn_boolean_t skip_checks, 4722 svn_revnum_t base_revision_for_url, 4723 const apr_hash_t *revprop_table, 4724 svn_commit_callback2_t commit_callback, 4725 void *commit_baton, 4726 svn_client_ctx_t *ctx, 4727 apr_pool_t *scratch_pool); 4728 4729/** 4730 * Set @a propname to @a propval on each (const char *) target in @a 4731 * targets. The targets must be all working copy paths. A @a propval 4732 * of @c NULL will delete the property. 4733 * 4734 * If @a depth is #svn_depth_empty, set the property on each member of 4735 * @a targets only; if #svn_depth_files, set it on @a targets and their 4736 * file children (if any); if #svn_depth_immediates, on @a targets and all 4737 * of their immediate children (both files and directories); if 4738 * #svn_depth_infinity, on @a targets and everything beneath them. 4739 * 4740 * @a changelists is an array of <tt>const char *</tt> changelist 4741 * names, used as a restrictive filter on items whose properties are 4742 * set; that is, don't set properties on any item unless it's a member 4743 * of one of those changelists. If @a changelists is empty (or 4744 * altogether @c NULL), no changelist filtering occurs. 4745 * 4746 * If @a propname is an svn-controlled property (i.e. prefixed with 4747 * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that 4748 * the value is UTF8-encoded and uses LF line-endings. 4749 * 4750 * If @a skip_checks is TRUE, do no validity checking. But if @a 4751 * skip_checks is FALSE, and @a propname is not a valid property for @a 4752 * targets, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the 4753 * property is not appropriate for @a targets), or 4754 * #SVN_ERR_BAD_MIME_TYPE (if @a propname is "svn:mime-type", but @a 4755 * propval is not a valid mime-type). 4756 * 4757 * If @a ctx->cancel_func is non-NULL, invoke it passing @a 4758 * ctx->cancel_baton at various places during the operation. 4759 * 4760 * Use @a scratch_pool for all memory allocation. 4761 * 4762 * @since New in 1.7. 4763 */ 4764svn_error_t * 4765svn_client_propset_local(const char *propname, 4766 const svn_string_t *propval, 4767 const apr_array_header_t *targets, 4768 svn_depth_t depth, 4769 svn_boolean_t skip_checks, 4770 const apr_array_header_t *changelists, 4771 svn_client_ctx_t *ctx, 4772 apr_pool_t *scratch_pool); 4773 4774/** 4775 * An amalgamation of svn_client_propset_local() and 4776 * svn_client_propset_remote() that takes only a single target, and 4777 * returns the commit info in @a *commit_info_p rather than through a 4778 * callback function. 4779 * 4780 * @since New in 1.5. 4781 * @deprecated Provided for backward compatibility with the 1.6 API. 4782 */ 4783SVN_DEPRECATED 4784svn_error_t * 4785svn_client_propset3(svn_commit_info_t **commit_info_p, 4786 const char *propname, 4787 const svn_string_t *propval, 4788 const char *target, 4789 svn_depth_t depth, 4790 svn_boolean_t skip_checks, 4791 svn_revnum_t base_revision_for_url, 4792 const apr_array_header_t *changelists, 4793 const apr_hash_t *revprop_table, 4794 svn_client_ctx_t *ctx, 4795 apr_pool_t *pool); 4796 4797/** 4798 * Like svn_client_propset3(), but with @a base_revision_for_url 4799 * always #SVN_INVALID_REVNUM; @a commit_info_p always @c NULL; @a 4800 * changelists always @c NULL; @a revprop_table always @c NULL; and @a 4801 * depth set according to @a recurse: if @a recurse is TRUE, @a depth 4802 * is #svn_depth_infinity, else #svn_depth_empty. 4803 * 4804 * @deprecated Provided for backward compatibility with the 1.4 API. 4805 */ 4806SVN_DEPRECATED 4807svn_error_t * 4808svn_client_propset2(const char *propname, 4809 const svn_string_t *propval, 4810 const char *target, 4811 svn_boolean_t recurse, 4812 svn_boolean_t skip_checks, 4813 svn_client_ctx_t *ctx, 4814 apr_pool_t *pool); 4815 4816/** 4817 * Like svn_client_propset2(), but with @a skip_checks always FALSE and a 4818 * newly created @a ctx. 4819 * 4820 * @deprecated Provided for backward compatibility with the 1.1 API. 4821 */ 4822SVN_DEPRECATED 4823svn_error_t * 4824svn_client_propset(const char *propname, 4825 const svn_string_t *propval, 4826 const char *target, 4827 svn_boolean_t recurse, 4828 apr_pool_t *pool); 4829 4830/** Set @a propname to @a propval on revision @a revision in the repository 4831 * represented by @a URL. Use the authentication baton in @a ctx for 4832 * authentication, and @a pool for all memory allocation. Return the actual 4833 * rev affected in @a *set_rev. A @a propval of @c NULL will delete the 4834 * property. 4835 * 4836 * If @a original_propval is non-NULL, then just before setting the 4837 * new value, check that the old value matches @a original_propval; 4838 * if they do not match, return the error #SVN_ERR_RA_OUT_OF_DATE. 4839 * This is to help clients support interactive editing of revprops: 4840 * without this check, the window during which the property may change 4841 * underneath the user is as wide as the amount of time the user 4842 * spends editing the property. With this check, the window is 4843 * reduced to a small, constant amount of time right before we set the 4844 * new value. (To check that an old value is still non-existent, set 4845 * @a original_propval->data to NULL, and @a original_propval->len is 4846 * ignored.) 4847 * If the server advertises #SVN_RA_CAPABILITY_ATOMIC_REVPROPS, the 4848 * check of @a original_propval is done atomically. 4849 * 4850 * Note: the representation of "property is not set" in @a 4851 * original_propval differs from the representation in other APIs 4852 * (such as svn_fs_change_rev_prop2() and svn_ra_change_rev_prop2()). 4853 * 4854 * If @a force is TRUE, allow newlines in the author property. 4855 * 4856 * If @a propname is an svn-controlled property (i.e. prefixed with 4857 * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that 4858 * the value UTF8-encoded and uses LF line-endings. 4859 * 4860 * Note that unlike its cousin svn_client_propset3(), this routine 4861 * doesn't affect the working copy at all; it's a pure network 4862 * operation that changes an *unversioned* property attached to a 4863 * revision. This can be used to tweak log messages, dates, authors, 4864 * and the like. Be careful: it's a lossy operation. 4865 4866 * @a ctx->notify_func2 and @a ctx->notify_baton2 are the notification 4867 * functions and baton which are called upon successful setting of the 4868 * property. 4869 * 4870 * Also note that unless the administrator creates a 4871 * pre-revprop-change hook in the repository, this feature will fail. 4872 * 4873 * @since New in 1.6. 4874 */ 4875svn_error_t * 4876svn_client_revprop_set2(const char *propname, 4877 const svn_string_t *propval, 4878 const svn_string_t *original_propval, 4879 const char *URL, 4880 const svn_opt_revision_t *revision, 4881 svn_revnum_t *set_rev, 4882 svn_boolean_t force, 4883 svn_client_ctx_t *ctx, 4884 apr_pool_t *pool); 4885 4886/** 4887 * Similar to svn_client_revprop_set2(), but with @a original_propval 4888 * always @c NULL. 4889 * 4890 * @deprecated Provided for backward compatibility with the 1.5 API. 4891 */ 4892SVN_DEPRECATED 4893svn_error_t * 4894svn_client_revprop_set(const char *propname, 4895 const svn_string_t *propval, 4896 const char *URL, 4897 const svn_opt_revision_t *revision, 4898 svn_revnum_t *set_rev, 4899 svn_boolean_t force, 4900 svn_client_ctx_t *ctx, 4901 apr_pool_t *pool); 4902 4903/** 4904 * Set @a *props to a hash table whose keys are absolute paths or URLs 4905 * of items on which property @a propname is explicitly set, and whose 4906 * values are <tt>svn_string_t *</tt> representing the property value for 4907 * @a propname at that path. 4908 * 4909 * If @a inherited_props is not @c NULL, then set @a *inherited_props to a 4910 * depth-first ordered array of #svn_prop_inherited_item_t * structures 4911 * representing the properties inherited by @a target. If @a target is a 4912 * working copy path, then properties inherited by @a target as far as the 4913 * root of the working copy are obtained from the working copy's actual 4914 * property values. Properties inherited from above the working copy root 4915 * come from the inherited properties cache. If @a target is a URL, then 4916 * the inherited properties come from the repository. If @a inherited_props 4917 * is not @c NULL and no inheritable properties are found, then set 4918 * @a *inherited_props to an empty array. 4919 * 4920 * The #svn_prop_inherited_item_t->path_or_url members of the 4921 * #svn_prop_inherited_item_t * structures in @a *inherited_props are 4922 * URLs if @a target is a URL or if @a target is a working copy path but the 4923 * property represented by the structure is above the working copy root (i.e. 4924 * the inherited property is from the cache). In all other cases the 4925 * #svn_prop_inherited_item_t->path_or_url members are absolute working copy 4926 * paths. 4927 * 4928 * Allocate @a *props (including keys and values) and @a *inherited_props 4929 * (including its elements) in @a result_pool, use @a scratch_pool for 4930 * temporary allocations. 4931 * 4932 * @a target is a WC absolute path or a URL. 4933 * 4934 * Don't store any path, not even @a target, if it does not have a 4935 * property named @a propname. 4936 * 4937 * If @a revision->kind is #svn_opt_revision_unspecified, then: get 4938 * properties from the working copy if @a target is a working copy 4939 * path, or from the repository head if @a target is a URL. Else get 4940 * the properties as of @a revision. The actual node revision 4941 * selected is determined by the path as it exists in @a peg_revision. 4942 * If @a peg_revision->kind is #svn_opt_revision_unspecified, then 4943 * it defaults to #svn_opt_revision_head for URLs or 4944 * #svn_opt_revision_working for WC targets. Use the authentication 4945 * baton in @a ctx for authentication if contacting the repository. 4946 * If @a actual_revnum is not @c NULL, the actual revision number used 4947 * for the fetch is stored in @a *actual_revnum. 4948 * 4949 * If @a depth is #svn_depth_empty, fetch the property from 4950 * @a target only; if #svn_depth_files, fetch from @a target and its 4951 * file children (if any); if #svn_depth_immediates, from @a target 4952 * and all of its immediate children (both files and directories); if 4953 * #svn_depth_infinity, from @a target and everything beneath it. 4954 * 4955 * @a changelists is an array of <tt>const char *</tt> changelist 4956 * names, used as a restrictive filter on items whose properties are 4957 * gotten; that is, don't get @a propname on any item unless it's a member 4958 * of one of those changelists. If @a changelists is empty (or 4959 * altogether @c NULL), no changelist filtering occurs. 4960 * 4961 * If error, don't touch @a *props, otherwise @a *props is a hash table 4962 * even if empty. 4963 * 4964 * This function returns SVN_ERR_UNVERSIONED_RESOURCE when it is called on 4965 * unversioned nodes. 4966 * 4967 * @since New in 1.8. 4968 */ 4969svn_error_t * 4970svn_client_propget5(apr_hash_t **props, 4971 apr_array_header_t **inherited_props, 4972 const char *propname, 4973 const char *target, /* abspath or URL */ 4974 const svn_opt_revision_t *peg_revision, 4975 const svn_opt_revision_t *revision, 4976 svn_revnum_t *actual_revnum, 4977 svn_depth_t depth, 4978 const apr_array_header_t *changelists, 4979 svn_client_ctx_t *ctx, 4980 apr_pool_t *result_pool, 4981 apr_pool_t *scratch_pool); 4982 4983/** 4984 * Similar to svn_client_propget5 but with @a inherited_props always 4985 * passed as NULL. 4986 * 4987 * @since New in 1.7. 4988 * @deprecated Provided for backward compatibility with the 1.7 API. 4989 */ 4990SVN_DEPRECATED 4991svn_error_t * 4992svn_client_propget4(apr_hash_t **props, 4993 const char *propname, 4994 const char *target, /* abspath or URL */ 4995 const svn_opt_revision_t *peg_revision, 4996 const svn_opt_revision_t *revision, 4997 svn_revnum_t *actual_revnum, 4998 svn_depth_t depth, 4999 const apr_array_header_t *changelists, 5000 svn_client_ctx_t *ctx, 5001 apr_pool_t *result_pool, 5002 apr_pool_t *scratch_pool); 5003 5004/** 5005 * Similar to svn_client_propget4(), but with the following change to the 5006 * output hash keys: keys are `<tt>char *</tt>' paths, prefixed by 5007 * @a target, which is a working copy path or a URL. 5008 * 5009 * This function returns SVN_ERR_ENTRY_NOT_FOUND where svn_client_propget4 5010 * would return SVN_ERR_UNVERSIONED_RESOURCE. 5011 * 5012 * @since New in 1.5. 5013 * @deprecated Provided for backward compatibility with the 1.6 API. 5014 */ 5015SVN_DEPRECATED 5016svn_error_t * 5017svn_client_propget3(apr_hash_t **props, 5018 const char *propname, 5019 const char *target, 5020 const svn_opt_revision_t *peg_revision, 5021 const svn_opt_revision_t *revision, 5022 svn_revnum_t *actual_revnum, 5023 svn_depth_t depth, 5024 const apr_array_header_t *changelists, 5025 svn_client_ctx_t *ctx, 5026 apr_pool_t *pool); 5027 5028/** 5029 * Similar to svn_client_propget3(), except that @a actual_revnum and 5030 * @a changelists are always @c NULL, and @a depth is set according to 5031 * @a recurse: if @a recurse is TRUE, then @a depth is 5032 * #svn_depth_infinity, else #svn_depth_empty. 5033 * 5034 * @deprecated Provided for backward compatibility with the 1.4 API. 5035 */ 5036SVN_DEPRECATED 5037svn_error_t * 5038svn_client_propget2(apr_hash_t **props, 5039 const char *propname, 5040 const char *target, 5041 const svn_opt_revision_t *peg_revision, 5042 const svn_opt_revision_t *revision, 5043 svn_boolean_t recurse, 5044 svn_client_ctx_t *ctx, 5045 apr_pool_t *pool); 5046 5047/** 5048 * Similar to svn_client_propget2(), except that @a peg_revision is 5049 * always the same as @a revision. 5050 * 5051 * @deprecated Provided for backward compatibility with the 1.1 API. 5052 */ 5053SVN_DEPRECATED 5054svn_error_t * 5055svn_client_propget(apr_hash_t **props, 5056 const char *propname, 5057 const char *target, 5058 const svn_opt_revision_t *revision, 5059 svn_boolean_t recurse, 5060 svn_client_ctx_t *ctx, 5061 apr_pool_t *pool); 5062 5063/** Set @a *propval to the value of @a propname on revision @a revision 5064 * in the repository represented by @a URL. Use the authentication baton 5065 * in @a ctx for authentication, and @a pool for all memory allocation. 5066 * Return the actual rev queried in @a *set_rev. 5067 * 5068 * Note that unlike its cousin svn_client_propget(), this routine 5069 * doesn't affect the working copy at all; it's a pure network 5070 * operation that queries an *unversioned* property attached to a 5071 * revision. This can query log messages, dates, authors, and the 5072 * like. 5073 */ 5074svn_error_t * 5075svn_client_revprop_get(const char *propname, 5076 svn_string_t **propval, 5077 const char *URL, 5078 const svn_opt_revision_t *revision, 5079 svn_revnum_t *set_rev, 5080 svn_client_ctx_t *ctx, 5081 apr_pool_t *pool); 5082 5083/** 5084 * Invoke @a receiver with @a receiver_baton to return the regular explicit, and 5085 * possibly the inherited, properties of @a target, a URL or working copy path. 5086 * @a receiver will be called for each path encountered. 5087 * 5088 * @a target is a WC path or a URL. 5089 * 5090 * If @a revision->kind is #svn_opt_revision_unspecified, then get the 5091 * explicit (and possibly the inherited) properties from the working copy, 5092 * if @a target is a working copy path, or from the repository head if 5093 * @a target is a URL. Else get the properties as of @a revision. 5094 * The actual node revision selected is determined by the path as it exists 5095 * in @a peg_revision. If @a peg_revision->kind is 5096 * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head 5097 * for URLs or #svn_opt_revision_working for WC targets. Use the 5098 * authentication baton cached in @a ctx for authentication if contacting 5099 * the repository. 5100 * 5101 * If @a depth is #svn_depth_empty, list only the properties of 5102 * @a target itself. If @a depth is #svn_depth_files, and 5103 * @a target is a directory, list the properties of @a target 5104 * and its file entries. If #svn_depth_immediates, list the properties 5105 * of its immediate file and directory entries. If #svn_depth_infinity, 5106 * list the properties of its file entries and recurse (with 5107 * #svn_depth_infinity) on directory entries. #svn_depth_unknown is 5108 * equivalent to #svn_depth_empty. All other values produce undefined 5109 * results. 5110 * 5111 * @a changelists is an array of <tt>const char *</tt> changelist 5112 * names, used as a restrictive filter on items whose properties are 5113 * listed; that is, don't list properties on any item unless it's a member 5114 * of one of those changelists. If @a changelists is empty (or 5115 * altogether @c NULL), no changelist filtering occurs. 5116 * 5117 * If @a get_target_inherited_props is true, then also return any inherited 5118 * properties when @a receiver is called for @a target. If @a target is a 5119 * working copy path, then properties inherited by @a target as far as the 5120 * root of the working copy are obtained from the working copy's actual 5121 * property values. Properties inherited from above the working copy 5122 * root come from the inherited properties cache. If @a target is a URL, 5123 * then the inherited properties come from the repository. 5124 * If @a get_target_inherited_props is false, then no inherited properties 5125 * are returned to @a receiver. 5126 * 5127 * If @a target is not found, return the error #SVN_ERR_ENTRY_NOT_FOUND. 5128 * 5129 * @since New in 1.8. 5130 */ 5131svn_error_t * 5132svn_client_proplist4(const char *target, 5133 const svn_opt_revision_t *peg_revision, 5134 const svn_opt_revision_t *revision, 5135 svn_depth_t depth, 5136 const apr_array_header_t *changelists, 5137 svn_boolean_t get_target_inherited_props, 5138 svn_proplist_receiver2_t receiver, 5139 void *receiver_baton, 5140 svn_client_ctx_t *ctx, 5141 apr_pool_t *scratch_pool); 5142 5143/** 5144 * Similar to svn_client_proplist4(), except that the @a receiver type 5145 * is a #svn_proplist_receiver_t, @a get_target_inherited_props is 5146 * always passed NULL, and there is no separate scratch pool. 5147 * 5148 * @since New in 1.5. 5149 * @deprecated Provided for backward compatibility with the 1.7 API. 5150 */ 5151SVN_DEPRECATED 5152svn_error_t * 5153svn_client_proplist3(const char *target, 5154 const svn_opt_revision_t *peg_revision, 5155 const svn_opt_revision_t *revision, 5156 svn_depth_t depth, 5157 const apr_array_header_t *changelists, 5158 svn_proplist_receiver_t receiver, 5159 void *receiver_baton, 5160 svn_client_ctx_t *ctx, 5161 apr_pool_t *pool); 5162 5163/** 5164 * Similar to svn_client_proplist3(), except the properties are 5165 * returned as an array of #svn_client_proplist_item_t * structures 5166 * instead of by invoking the receiver function, there's no support 5167 * for @a changelists filtering, and @a recurse is used instead of a 5168 * #svn_depth_t parameter (FALSE corresponds to #svn_depth_empty, 5169 * and TRUE to #svn_depth_infinity). 5170 * 5171 * @since New in 1.2. 5172 * 5173 * @deprecated Provided for backward compatibility with the 1.4 API. 5174 */ 5175SVN_DEPRECATED 5176svn_error_t * 5177svn_client_proplist2(apr_array_header_t **props, 5178 const char *target, 5179 const svn_opt_revision_t *peg_revision, 5180 const svn_opt_revision_t *revision, 5181 svn_boolean_t recurse, 5182 svn_client_ctx_t *ctx, 5183 apr_pool_t *pool); 5184 5185/** 5186 * Similar to svn_client_proplist2(), except that @a peg_revision is 5187 * always the same as @a revision. 5188 * 5189 * @deprecated Provided for backward compatibility with the 1.1 API. 5190 */ 5191SVN_DEPRECATED 5192svn_error_t * 5193svn_client_proplist(apr_array_header_t **props, 5194 const char *target, 5195 const svn_opt_revision_t *revision, 5196 svn_boolean_t recurse, 5197 svn_client_ctx_t *ctx, 5198 apr_pool_t *pool); 5199 5200/** Set @a *props to a hash of the revision props attached to @a revision in 5201 * the repository represented by @a URL. Use the authentication baton cached 5202 * in @a ctx for authentication, and @a pool for all memory allocation. 5203 * Return the actual rev queried in @a *set_rev. 5204 * 5205 * The allocated hash maps (<tt>const char *</tt>) property names to 5206 * (#svn_string_t *) property values. 5207 * 5208 * Note that unlike its cousin svn_client_proplist(), this routine 5209 * doesn't read a working copy at all; it's a pure network operation 5210 * that reads *unversioned* properties attached to a revision. 5211 */ 5212svn_error_t * 5213svn_client_revprop_list(apr_hash_t **props, 5214 const char *URL, 5215 const svn_opt_revision_t *revision, 5216 svn_revnum_t *set_rev, 5217 svn_client_ctx_t *ctx, 5218 apr_pool_t *pool); 5219/** @} */ 5220 5221 5222/** 5223 * @defgroup Export Export a tree from version control. 5224 * 5225 * @{ 5226 */ 5227 5228/** 5229 * Export the contents of either a subversion repository or a 5230 * subversion working copy into a 'clean' directory (meaning a 5231 * directory with no administrative directories). If @a result_rev 5232 * is not @c NULL and the path being exported is a repository URL, set 5233 * @a *result_rev to the value of the revision actually exported (set 5234 * it to #SVN_INVALID_REVNUM for local exports). 5235 * 5236 * @a from_path_or_url is either the path the working copy on disk, or 5237 * a URL to the repository you wish to export. 5238 * 5239 * When exporting a directory, @a to_path is the path to the directory 5240 * where you wish to create the exported tree; when exporting a file, it 5241 * is the path of the file that will be created. If @a to_path is the 5242 * empty path, then the basename of the export file/directory in the repository 5243 * will be used. If @a to_path represents an existing directory, and a 5244 * file is being exported, then a file with the that basename will be 5245 * created under that directory (as with 'copy' operations). 5246 * 5247 * @a peg_revision is the revision where the path is first looked up 5248 * when exporting from a repository. If @a peg_revision->kind is 5249 * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head 5250 * for URLs or #svn_opt_revision_working for WC targets. 5251 * 5252 * @a revision is the revision that should be exported, which is only used 5253 * when exporting from a repository. 5254 * 5255 * @a peg_revision and @a revision must not be @c NULL. 5256 * 5257 * @a ctx->notify_func2 and @a ctx->notify_baton2 are the notification 5258 * functions and baton which are passed to svn_client_checkout() when 5259 * exporting from a repository. 5260 * 5261 * @a ctx is a context used for authentication in the repository case. 5262 * 5263 * @a overwrite if TRUE will cause the export to overwrite files or 5264 * directories. 5265 * 5266 * If @a ignore_externals is set, don't process externals definitions 5267 * as part of this operation. 5268 * 5269 * If @a ignore_keywords is set, don't expand keywords as part of this 5270 * operation. 5271 * 5272 * @a native_eol allows you to override the standard eol marker on the 5273 * platform you are running on. Can be either "LF", "CR" or "CRLF" or 5274 * NULL. If NULL will use the standard eol marker. Any other value 5275 * will cause the #SVN_ERR_IO_UNKNOWN_EOL error to be returned. 5276 * 5277 * If @a depth is #svn_depth_infinity, export fully recursively. Else 5278 * if it is #svn_depth_immediates, export @a from_path_or_url and its 5279 * immediate children (if any), but with subdirectories empty and at 5280 * #svn_depth_empty. Else if #svn_depth_files, export @a 5281 * from_path_or_url and its immediate file children (if any) only. If 5282 * @a depth is #svn_depth_empty, then export exactly @a 5283 * from_path_or_url and none of its children. 5284 * 5285 * All allocations are done in @a pool. 5286 * 5287 * @since New in 1.7. 5288 */ 5289svn_error_t * 5290svn_client_export5(svn_revnum_t *result_rev, 5291 const char *from_path_or_url, 5292 const char *to_path, 5293 const svn_opt_revision_t *peg_revision, 5294 const svn_opt_revision_t *revision, 5295 svn_boolean_t overwrite, 5296 svn_boolean_t ignore_externals, 5297 svn_boolean_t ignore_keywords, 5298 svn_depth_t depth, 5299 const char *native_eol, 5300 svn_client_ctx_t *ctx, 5301 apr_pool_t *pool); 5302 5303/** 5304 * Similar to svn_client_export5(), but with @a ignore_keywords set 5305 * to FALSE. 5306 * 5307 * @deprecated Provided for backward compatibility with the 1.6 API. 5308 * @since New in 1.5. 5309 */ 5310SVN_DEPRECATED 5311svn_error_t * 5312svn_client_export4(svn_revnum_t *result_rev, 5313 const char *from_path_or_url, 5314 const char *to_path, 5315 const svn_opt_revision_t *peg_revision, 5316 const svn_opt_revision_t *revision, 5317 svn_boolean_t overwrite, 5318 svn_boolean_t ignore_externals, 5319 svn_depth_t depth, 5320 const char *native_eol, 5321 svn_client_ctx_t *ctx, 5322 apr_pool_t *pool); 5323 5324 5325/** 5326 * Similar to svn_client_export4(), but with @a depth set according to 5327 * @a recurse: if @a recurse is TRUE, set @a depth to 5328 * #svn_depth_infinity, if @a recurse is FALSE, set @a depth to 5329 * #svn_depth_files. 5330 * 5331 * @deprecated Provided for backward compatibility with the 1.4 API. 5332 * 5333 * @since New in 1.2. 5334 */ 5335SVN_DEPRECATED 5336svn_error_t * 5337svn_client_export3(svn_revnum_t *result_rev, 5338 const char *from_path_or_url, 5339 const char *to_path, 5340 const svn_opt_revision_t *peg_revision, 5341 const svn_opt_revision_t *revision, 5342 svn_boolean_t overwrite, 5343 svn_boolean_t ignore_externals, 5344 svn_boolean_t recurse, 5345 const char *native_eol, 5346 svn_client_ctx_t *ctx, 5347 apr_pool_t *pool); 5348 5349 5350/** 5351 * Similar to svn_client_export3(), but with @a peg_revision 5352 * always set to #svn_opt_revision_unspecified, @a overwrite set to 5353 * the value of @a force, @a ignore_externals always FALSE, and 5354 * @a recurse always TRUE. 5355 * 5356 * @since New in 1.1. 5357 * @deprecated Provided for backward compatibility with the 1.1 API. 5358 */ 5359SVN_DEPRECATED 5360svn_error_t * 5361svn_client_export2(svn_revnum_t *result_rev, 5362 const char *from_path_or_url, 5363 const char *to_path, 5364 svn_opt_revision_t *revision, 5365 svn_boolean_t force, 5366 const char *native_eol, 5367 svn_client_ctx_t *ctx, 5368 apr_pool_t *pool); 5369 5370 5371/** 5372 * Similar to svn_client_export2(), but with @a native_eol always set 5373 * to NULL. 5374 * 5375 * @deprecated Provided for backward compatibility with the 1.0 API. 5376 */ 5377SVN_DEPRECATED 5378svn_error_t * 5379svn_client_export(svn_revnum_t *result_rev, 5380 const char *from_path_or_url, 5381 const char *to_path, 5382 svn_opt_revision_t *revision, 5383 svn_boolean_t force, 5384 svn_client_ctx_t *ctx, 5385 apr_pool_t *pool); 5386 5387/** @} */ 5388 5389/** 5390 * @defgroup List List / ls 5391 * 5392 * @{ 5393 */ 5394 5395/** The type of function invoked by svn_client_list3() to report the details 5396 * of each directory entry being listed. 5397 * 5398 * @a baton is the baton that was passed to the caller. @a path is the 5399 * entry's path relative to @a abs_path; it is the empty path when reporting 5400 * the top node of the list operation. @a dirent contains some or all of 5401 * the directory entry's details, as determined by the caller. @a lock is 5402 * the entry's lock, if it is locked and if lock information is being 5403 * reported by the caller; otherwise @a lock is NULL. @a abs_path is the 5404 * repository path of the top node of the list operation; it is relative to 5405 * the repository root and begins with "/". 5406 * 5407 * If svn_client_list3() was called with @a include_externals set to TRUE, 5408 * @a external_parent_url and @a external_target will be set. 5409 * @a external_parent_url is url of the directory which has the 5410 * externals definitions. @a external_target is the target subdirectory of 5411 * externals definitions which is relative to the parent directory that holds 5412 * the external item. 5413 * 5414 * If external_parent_url and external_target are defined, the item being 5415 * listed is part of the external described by external_parent_url and 5416 * external_target. Else, the item is not part of any external. 5417 * Moreover, we will never mix items which are part of separate 5418 * externals, and will always finish listing an external before listing 5419 * the next one. 5420 * 5421 * @a scratch_pool may be used for temporary allocations. 5422 * 5423 * @since New in 1.8. 5424 */ 5425typedef svn_error_t *(*svn_client_list_func2_t)( 5426 void *baton, 5427 const char *path, 5428 const svn_dirent_t *dirent, 5429 const svn_lock_t *lock, 5430 const char *abs_path, 5431 const char *external_parent_url, 5432 const char *external_target, 5433 apr_pool_t *scratch_pool); 5434 5435/** 5436 * Similar to #svn_client_list_func2_t, but without any information about 5437 * externals definitions. 5438 * 5439 * @deprecated Provided for backward compatibility with the 1.7 API. 5440 * 5441 * @since New in 1.4 5442 * 5443 * */ 5444typedef svn_error_t *(*svn_client_list_func_t)(void *baton, 5445 const char *path, 5446 const svn_dirent_t *dirent, 5447 const svn_lock_t *lock, 5448 const char *abs_path, 5449 apr_pool_t *pool); 5450 5451/** 5452 * Report the directory entry, and possibly children, for @a 5453 * path_or_url at @a revision. The actual node revision selected is 5454 * determined by the path as it exists in @a peg_revision. If @a 5455 * peg_revision->kind is #svn_opt_revision_unspecified, then it defaults 5456 * to #svn_opt_revision_head for URLs or #svn_opt_revision_working 5457 * for WC targets. 5458 * 5459 * Report directory entries by invoking @a list_func/@a baton with @a path 5460 * relative to @a path_or_url. The dirent for @a path_or_url is reported 5461 * using an empty @a path. If @a path_or_url is a directory, also report 5462 * its children. If @a path_or_url is non-existent, return 5463 * #SVN_ERR_FS_NOT_FOUND. 5464 * 5465 * If @a fetch_locks is TRUE, include locks when reporting directory entries. 5466 * 5467 * If @a include_externals is TRUE, also list all external items 5468 * reached by recursion. @a depth value passed to the original list target 5469 * applies for the externals also. 5470 * 5471 * Use @a pool for temporary allocations. 5472 * 5473 * Use authentication baton cached in @a ctx to authenticate against the 5474 * repository. 5475 * 5476 * If @a depth is #svn_depth_empty, list just @a path_or_url itself. 5477 * If @a depth is #svn_depth_files, list @a path_or_url and its file 5478 * entries. If #svn_depth_immediates, list its immediate file and 5479 * directory entries. If #svn_depth_infinity, list file entries and 5480 * recurse (with #svn_depth_infinity) on directory entries. 5481 * 5482 * @a dirent_fields controls which fields in the #svn_dirent_t's are 5483 * filled in. To have them totally filled in use #SVN_DIRENT_ALL, 5484 * otherwise simply bitwise OR together the combination of @c SVN_DIRENT_ 5485 * fields you care about. 5486 * 5487 * @since New in 1.8. 5488 */ 5489svn_error_t * 5490svn_client_list3(const char *path_or_url, 5491 const svn_opt_revision_t *peg_revision, 5492 const svn_opt_revision_t *revision, 5493 svn_depth_t depth, 5494 apr_uint32_t dirent_fields, 5495 svn_boolean_t fetch_locks, 5496 svn_boolean_t include_externals, 5497 svn_client_list_func2_t list_func, 5498 void *baton, 5499 svn_client_ctx_t *ctx, 5500 apr_pool_t *pool); 5501 5502 5503/** Similar to svn_client_list3(), but with @a include_externals set 5504 * to FALSE, and using a #svn_client_list_func_t as callback. 5505 * 5506 * @deprecated Provided for backwards compatibility with the 1.7 API. 5507 * 5508 * @since New in 1.5. 5509 */ 5510SVN_DEPRECATED 5511svn_error_t * 5512svn_client_list2(const char *path_or_url, 5513 const svn_opt_revision_t *peg_revision, 5514 const svn_opt_revision_t *revision, 5515 svn_depth_t depth, 5516 apr_uint32_t dirent_fields, 5517 svn_boolean_t fetch_locks, 5518 svn_client_list_func_t list_func, 5519 void *baton, 5520 svn_client_ctx_t *ctx, 5521 apr_pool_t *pool); 5522 5523/** 5524 * Similar to svn_client_list2(), but with @a recurse instead of @a depth. 5525 * If @a recurse is TRUE, pass #svn_depth_files for @a depth; else 5526 * pass #svn_depth_infinity. 5527 * 5528 * @since New in 1.4. 5529 * 5530 * @deprecated Provided for backward compatibility with the 1.4 API. 5531 */ 5532SVN_DEPRECATED 5533svn_error_t * 5534svn_client_list(const char *path_or_url, 5535 const svn_opt_revision_t *peg_revision, 5536 const svn_opt_revision_t *revision, 5537 svn_boolean_t recurse, 5538 apr_uint32_t dirent_fields, 5539 svn_boolean_t fetch_locks, 5540 svn_client_list_func_t list_func, 5541 void *baton, 5542 svn_client_ctx_t *ctx, 5543 apr_pool_t *pool); 5544 5545/** 5546 * Same as svn_client_list(), but always passes #SVN_DIRENT_ALL for 5547 * the @a dirent_fields argument and returns all information in two 5548 * hash tables instead of invoking a callback. 5549 * 5550 * Set @a *dirents to a newly allocated hash of directory entries. 5551 * The @a dirents hash maps entry names (<tt>const char *</tt>) to 5552 * #svn_dirent_t *'s. 5553 * 5554 * If @a locks is not @c NULL, set @a *locks to a hash table mapping 5555 * entry names (<tt>const char *</tt>) to #svn_lock_t *'s. 5556 * 5557 * @since New in 1.3. 5558 * 5559 * @deprecated Provided for backward compatibility with the 1.3 API. 5560 * Use svn_client_list2() instead. 5561 */ 5562SVN_DEPRECATED 5563svn_error_t * 5564svn_client_ls3(apr_hash_t **dirents, 5565 apr_hash_t **locks, 5566 const char *path_or_url, 5567 const svn_opt_revision_t *peg_revision, 5568 const svn_opt_revision_t *revision, 5569 svn_boolean_t recurse, 5570 svn_client_ctx_t *ctx, 5571 apr_pool_t *pool); 5572 5573/** 5574 * Same as svn_client_ls3(), but without the ability to get locks. 5575 * 5576 * @since New in 1.2. 5577 * 5578 * @deprecated Provided for backward compatibility with the 1.2 API. 5579 * Use svn_client_list2() instead. 5580 */ 5581SVN_DEPRECATED 5582svn_error_t * 5583svn_client_ls2(apr_hash_t **dirents, 5584 const char *path_or_url, 5585 const svn_opt_revision_t *peg_revision, 5586 const svn_opt_revision_t *revision, 5587 svn_boolean_t recurse, 5588 svn_client_ctx_t *ctx, 5589 apr_pool_t *pool); 5590 5591/** 5592 * Similar to svn_client_ls2() except that @a peg_revision is always 5593 * the same as @a revision. 5594 * 5595 * @deprecated Provided for backward compatibility with the 1.1 API. 5596 * Use svn_client_list2() instead. 5597 */ 5598SVN_DEPRECATED 5599svn_error_t * 5600svn_client_ls(apr_hash_t **dirents, 5601 const char *path_or_url, 5602 svn_opt_revision_t *revision, 5603 svn_boolean_t recurse, 5604 svn_client_ctx_t *ctx, 5605 apr_pool_t *pool); 5606 5607 5608/** @} */ 5609 5610/** 5611 * @defgroup Cat View the contents of a file in the repository. 5612 * 5613 * @{ 5614 */ 5615 5616/** 5617 * Output the content of a file. 5618 * 5619 * @param[in] out The stream to which the content will be written. 5620 * @param[in] path_or_url The path or URL of the file. 5621 * @param[in] peg_revision The peg revision. 5622 * @param[in] revision The operative revision. 5623 * @param[in] ctx The standard client context, used for possible 5624 * authentication. 5625 * @param[in] pool Used for any temporary allocation. 5626 * 5627 * @todo Add an expansion/translation flag? 5628 * 5629 * @return A pointer to an #svn_error_t of the type (this list is not 5630 * exhaustive): <br> 5631 * An unspecified error if @a revision is of kind 5632 * #svn_opt_revision_previous (or some other kind that requires 5633 * a local path), because the desired revision cannot be 5634 * determined. <br> 5635 * If no error occurred, return #SVN_NO_ERROR. 5636 * 5637 * @since New in 1.2. 5638 * 5639 * @see #svn_client_ctx_t <br> @ref clnt_revisions for 5640 * a discussion of operative and peg revisions. 5641 */ 5642svn_error_t * 5643svn_client_cat2(svn_stream_t *out, 5644 const char *path_or_url, 5645 const svn_opt_revision_t *peg_revision, 5646 const svn_opt_revision_t *revision, 5647 svn_client_ctx_t *ctx, 5648 apr_pool_t *pool); 5649 5650 5651/** 5652 * Similar to svn_client_cat2() except that the peg revision is always 5653 * the same as @a revision. 5654 * 5655 * @deprecated Provided for backward compatibility with the 1.1 API. 5656 */ 5657SVN_DEPRECATED 5658svn_error_t * 5659svn_client_cat(svn_stream_t *out, 5660 const char *path_or_url, 5661 const svn_opt_revision_t *revision, 5662 svn_client_ctx_t *ctx, 5663 apr_pool_t *pool); 5664 5665/** @} end group: cat */ 5666 5667 5668 5669/** Changelist commands 5670 * 5671 * @defgroup svn_client_changelist_funcs Client Changelist Functions 5672 * @{ 5673 */ 5674 5675/** Implementation note: 5676 * 5677 * For now, changelists are implemented by scattering the 5678 * associations across multiple .svn/entries files in a working copy. 5679 * However, this client API was written so that we have the option of 5680 * changing the underlying implementation -- we may someday want to 5681 * store changelist definitions in a centralized database. 5682 */ 5683 5684/** 5685 * Add each path in @a paths (recursing to @a depth as necessary) to 5686 * @a changelist. If a path is already a member of another 5687 * changelist, then remove it from the other changelist and add it to 5688 * @a changelist. (For now, a path cannot belong to two changelists 5689 * at once.) 5690 * 5691 * @a paths is an array of (const char *) local WC paths. 5692 * 5693 * @a changelists is an array of <tt>const char *</tt> changelist 5694 * names, used as a restrictive filter on items whose changelist 5695 * assignments are adjusted; that is, don't tweak the changeset of any 5696 * item unless it's currently a member of one of those changelists. 5697 * If @a changelists is empty (or altogether @c NULL), no changelist 5698 * filtering occurs. 5699 * 5700 * @note This metadata is purely a client-side "bookkeeping" 5701 * convenience, and is entirely managed by the working copy. 5702 * 5703 * @since New in 1.5. 5704 */ 5705svn_error_t * 5706svn_client_add_to_changelist(const apr_array_header_t *paths, 5707 const char *changelist, 5708 svn_depth_t depth, 5709 const apr_array_header_t *changelists, 5710 svn_client_ctx_t *ctx, 5711 apr_pool_t *pool); 5712 5713/** 5714 * Remove each path in @a paths (recursing to @a depth as necessary) 5715 * from changelists to which they are currently assigned. 5716 * 5717 * @a paths is an array of (const char *) local WC paths. 5718 * 5719 * @a changelists is an array of <tt>const char *</tt> changelist 5720 * names, used as a restrictive filter on items whose changelist 5721 * assignments are removed; that is, don't remove from a changeset any 5722 * item unless it's currently a member of one of those changelists. 5723 * If @a changelists is empty (or altogether @c NULL), all changelist 5724 * assignments in and under each path in @a paths (to @a depth) will 5725 * be removed. 5726 * 5727 * @note This metadata is purely a client-side "bookkeeping" 5728 * convenience, and is entirely managed by the working copy. 5729 * 5730 * @since New in 1.5. 5731 */ 5732svn_error_t * 5733svn_client_remove_from_changelists(const apr_array_header_t *paths, 5734 svn_depth_t depth, 5735 const apr_array_header_t *changelists, 5736 svn_client_ctx_t *ctx, 5737 apr_pool_t *pool); 5738 5739 5740/** 5741 * Beginning at @a path, crawl to @a depth to discover every path in 5742 * or under @a path which belongs to one of the changelists in @a 5743 * changelists (an array of <tt>const char *</tt> changelist names). 5744 * If @a changelists is @c NULL, discover paths with any changelist. 5745 * Call @a callback_func (with @a callback_baton) each time a 5746 * changelist-having path is discovered. 5747 * 5748 * @a path is a local WC path. 5749 * 5750 * If @a ctx->cancel_func is not @c NULL, invoke it passing @a 5751 * ctx->cancel_baton during the recursive walk. 5752 * 5753 * @since New in 1.5. 5754 */ 5755svn_error_t * 5756svn_client_get_changelists(const char *path, 5757 const apr_array_header_t *changelists, 5758 svn_depth_t depth, 5759 svn_changelist_receiver_t callback_func, 5760 void *callback_baton, 5761 svn_client_ctx_t *ctx, 5762 apr_pool_t *pool); 5763 5764/** @} */ 5765 5766 5767 5768/** Locking commands 5769 * 5770 * @defgroup svn_client_locking_funcs Client Locking Functions 5771 * @{ 5772 */ 5773 5774/** 5775 * Lock @a targets in the repository. @a targets is an array of 5776 * <tt>const char *</tt> paths - either all working copy paths or all URLs. 5777 * All targets must be in the same repository. 5778 * 5779 * If a target is already locked in the repository, no lock will be 5780 * acquired unless @a steal_lock is TRUE, in which case the locks are 5781 * stolen. @a comment, if non-NULL, is an xml-escapable description 5782 * stored with each lock in the repository. Each acquired lock will 5783 * be stored in the working copy if the targets are WC paths. 5784 * 5785 * For each target @a ctx->notify_func2/notify_baton2 will be used to indicate 5786 * whether it was locked. An action of #svn_wc_notify_locked 5787 * means that the path was locked. If the path was not locked because 5788 * it was out of date or there was already a lock in the repository, 5789 * the notification function will be called with 5790 * #svn_wc_notify_failed_lock, and the error passed in the notification 5791 * structure. 5792 * 5793 * Use @a pool for temporary allocations. 5794 * 5795 * @since New in 1.2. 5796 */ 5797svn_error_t * 5798svn_client_lock(const apr_array_header_t *targets, 5799 const char *comment, 5800 svn_boolean_t steal_lock, 5801 svn_client_ctx_t *ctx, 5802 apr_pool_t *pool); 5803 5804/** 5805 * Unlock @a targets in the repository. @a targets is an array of 5806 * <tt>const char *</tt> paths - either all working copy paths or all URLs. 5807 * All targets must be in the same repository. 5808 * 5809 * If the targets are WC paths, and @a break_lock is FALSE, the working 5810 * copy must contain a lock for each target. 5811 * If this is not the case, or the working copy lock doesn't match the 5812 * lock token in the repository, an error will be signaled. 5813 * 5814 * If the targets are URLs, the locks may be broken even if @a break_lock 5815 * is FALSE, but only if the lock owner is the same as the 5816 * authenticated user. 5817 * 5818 * If @a break_lock is TRUE, the locks will be broken in the 5819 * repository. In both cases, the locks, if any, will be removed from 5820 * the working copy if the targets are WC paths. 5821 * 5822 * The notification functions in @a ctx will be called for each 5823 * target. If the target was successfully unlocked, 5824 * #svn_wc_notify_unlocked will be used. Else, if the error is 5825 * directly related to unlocking the path (see 5826 * #SVN_ERR_IS_UNLOCK_ERROR), #svn_wc_notify_failed_unlock will be 5827 * used and the error will be passed in the notification structure. 5828 5829 * Use @a pool for temporary allocations. 5830 * 5831 * @since New in 1.2. 5832 */ 5833svn_error_t * 5834svn_client_unlock(const apr_array_header_t *targets, 5835 svn_boolean_t break_lock, 5836 svn_client_ctx_t *ctx, 5837 apr_pool_t *pool); 5838 5839/** @} */ 5840 5841/** 5842 * @defgroup Info Show repository information about a working copy. 5843 * 5844 * @{ 5845 */ 5846 5847/** The size of the file is unknown. 5848 * Used as value in fields of type @c apr_size_t in #svn_info_t. 5849 * 5850 * @since New in 1.5 5851 * @deprecated Provided for backward compatibility with the 1.6 API. 5852 */ 5853#define SVN_INFO_SIZE_UNKNOWN ((apr_size_t) -1) 5854 5855/** 5856 * A structure which describes various system-generated metadata about 5857 * a working-copy path or URL. 5858 * 5859 * @note Fields may be added to the end of this structure in future 5860 * versions. Therefore, users shouldn't allocate structures of this 5861 * type, to preserve binary compatibility. 5862 * 5863 * @since New in 1.2. 5864 * @deprecated Provided for backward compatibility with the 1.6 API. The new 5865 * API is #svn_client_info2_t. 5866 */ 5867typedef struct svn_info_t 5868{ 5869 /** Where the item lives in the repository. */ 5870 const char *URL; 5871 5872 /** The revision of the object. If path_or_url is a working-copy 5873 * path, then this is its current working revnum. If path_or_url 5874 * is a URL, then this is the repos revision that path_or_url lives in. */ 5875 svn_revnum_t rev; 5876 5877 /** The node's kind. */ 5878 svn_node_kind_t kind; 5879 5880 /** The root URL of the repository. */ 5881 const char *repos_root_URL; 5882 5883 /** The repository's UUID. */ 5884 const char *repos_UUID; 5885 5886 /** The last revision in which this object changed. */ 5887 svn_revnum_t last_changed_rev; 5888 5889 /** The date of the last_changed_rev. */ 5890 apr_time_t last_changed_date; 5891 5892 /** The author of the last_changed_rev. */ 5893 const char *last_changed_author; 5894 5895 /** An exclusive lock, if present. Could be either local or remote. */ 5896 svn_lock_t *lock; 5897 5898 /** Whether or not to ignore the next 10 wc-specific fields. */ 5899 svn_boolean_t has_wc_info; 5900 5901 /** 5902 * @name Working-copy path fields 5903 * These things only apply to a working-copy path. 5904 * See svn_wc_entry_t for explanations. 5905 * @{ 5906 */ 5907 svn_wc_schedule_t schedule; 5908 const char *copyfrom_url; 5909 svn_revnum_t copyfrom_rev; 5910 apr_time_t text_time; 5911 apr_time_t prop_time; /* will always be 0 for svn 1.4 and later */ 5912 const char *checksum; 5913 const char *conflict_old; 5914 const char *conflict_new; 5915 const char *conflict_wrk; 5916 const char *prejfile; 5917 /** @since New in 1.5. */ 5918 const char *changelist; 5919 /** @since New in 1.5. */ 5920 svn_depth_t depth; 5921 5922 /** 5923 * Similar to working_size64, but will be #SVN_INFO_SIZE_UNKNOWN when 5924 * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte). 5925 * 5926 * @deprecated Provided for backward compatibility with the 1.5 API. 5927 */ 5928 apr_size_t working_size; 5929 5930 /** @} */ 5931 5932 /** 5933 * Similar to size64, but size will be #SVN_INFO_SIZE_UNKNOWN when 5934 * its value would overflow apr_size_t (so when size >= 4 GB - 1 byte). 5935 * 5936 * @deprecated Provided for backward compatibility with the 1.5 API. 5937 */ 5938 apr_size_t size; 5939 5940 /** 5941 * The size of the file in the repository (untranslated, 5942 * e.g. without adjustment of line endings and keyword 5943 * expansion). Only applicable for file -- not directory -- URLs. 5944 * For working copy paths, size64 will be #SVN_INVALID_FILESIZE. 5945 * @since New in 1.6. 5946 */ 5947 svn_filesize_t size64; 5948 5949 /** 5950 * The size of the file after being translated into its local 5951 * representation, or #SVN_INVALID_FILESIZE if unknown. 5952 * Not applicable for directories. 5953 * @since New in 1.6. 5954 * @name Working-copy path fields 5955 * @{ 5956 */ 5957 svn_filesize_t working_size64; 5958 5959 /** 5960 * Info on any tree conflict of which this node is a victim. Otherwise NULL. 5961 * @since New in 1.6. 5962 */ 5963 svn_wc_conflict_description_t *tree_conflict; 5964 5965 /** @} */ 5966 5967} svn_info_t; 5968 5969 5970/** 5971 * The callback invoked by svn_client_info2(). Each invocation 5972 * describes @a path with the information present in @a info. Note 5973 * that any fields within @a info may be NULL if information is 5974 * unavailable. Use @a pool for all temporary allocation. 5975 * 5976 * @since New in 1.2. 5977 * @deprecated Provided for backward compatibility with the 1.6 API. The new 5978 * API is #svn_client_info_receiver2_t. 5979 */ 5980typedef svn_error_t *(*svn_info_receiver_t)( 5981 void *baton, 5982 const char *path, 5983 const svn_info_t *info, 5984 apr_pool_t *pool); 5985 5986/** 5987 * Return a duplicate of @a info, allocated in @a pool. No part of the new 5988 * structure will be shared with @a info. 5989 * 5990 * @since New in 1.3. 5991 * @deprecated Provided for backward compatibility with the 1.6 API. The new 5992 * API is #svn_client_info2_dup(). 5993 */ 5994SVN_DEPRECATED 5995svn_info_t * 5996svn_info_dup(const svn_info_t *info, 5997 apr_pool_t *pool); 5998 5999/** 6000 * A structure which describes various system-generated metadata about 6001 * a working-copy path or URL. 6002 * 6003 * @note Fields may be added to the end of this structure in future 6004 * versions. Therefore, users shouldn't allocate structures of this 6005 * type, to preserve binary compatibility. 6006 * 6007 * @since New in 1.7. 6008 */ 6009typedef struct svn_client_info2_t 6010{ 6011 /** Where the item lives in the repository. */ 6012 const char *URL; 6013 6014 /** The revision of the object. If the target is a working-copy 6015 * path, then this is its current working revnum. If the target 6016 * is a URL, then this is the repos revision that it lives in. */ 6017 svn_revnum_t rev; 6018 6019 /** The root URL of the repository. */ 6020 const char *repos_root_URL; 6021 6022 /** The repository's UUID. */ 6023 const char *repos_UUID; 6024 6025 /** The node's kind. */ 6026 svn_node_kind_t kind; 6027 6028 /** The size of the file in the repository (untranslated, 6029 * e.g. without adjustment of line endings and keyword 6030 * expansion). Only applicable for file -- not directory -- URLs. 6031 * For working copy paths, @a size will be #SVN_INVALID_FILESIZE. */ 6032 svn_filesize_t size; 6033 6034 /** The last revision in which this object changed. */ 6035 svn_revnum_t last_changed_rev; 6036 6037 /** The date of the last_changed_rev. */ 6038 apr_time_t last_changed_date; 6039 6040 /** The author of the last_changed_rev. */ 6041 const char *last_changed_author; 6042 6043 /** An exclusive lock, if present. Could be either local or remote. */ 6044 const svn_lock_t *lock; 6045 6046 /** Possible information about the working copy, NULL if not valid. */ 6047 const svn_wc_info_t *wc_info; 6048 6049} svn_client_info2_t; 6050 6051/** 6052 * Return a duplicate of @a info, allocated in @a pool. No part of the new 6053 * structure will be shared with @a info. 6054 * 6055 * @since New in 1.7. 6056 */ 6057svn_client_info2_t * 6058svn_client_info2_dup(const svn_client_info2_t *info, 6059 apr_pool_t *pool); 6060 6061/** 6062 * The callback invoked by info retrievers. Each invocation 6063 * describes @a abspath_or_url with the information present in @a info. 6064 * Use @a scratch_pool for all temporary allocation. 6065 * 6066 * @since New in 1.7. 6067 */ 6068typedef svn_error_t *(*svn_client_info_receiver2_t)( 6069 void *baton, 6070 const char *abspath_or_url, 6071 const svn_client_info2_t *info, 6072 apr_pool_t *scratch_pool); 6073 6074/** 6075 * Invoke @a receiver with @a receiver_baton to return information 6076 * about @a abspath_or_url in @a revision. The information returned is 6077 * system-generated metadata, not the sort of "property" metadata 6078 * created by users. See #svn_client_info2_t. 6079 * 6080 * If both revision arguments are either #svn_opt_revision_unspecified 6081 * or @c NULL, then information will be pulled solely from the working copy; 6082 * no network connections will be made. 6083 * 6084 * Otherwise, information will be pulled from a repository. The 6085 * actual node revision selected is determined by the @a abspath_or_url 6086 * as it exists in @a peg_revision. If @a peg_revision->kind is 6087 * #svn_opt_revision_unspecified, then it defaults to 6088 * #svn_opt_revision_head for URLs or #svn_opt_revision_working for 6089 * WC targets. 6090 * 6091 * If @a abspath_or_url is not a local path, then if @a revision is of 6092 * kind #svn_opt_revision_previous (or some other kind that requires 6093 * a local path), an error will be returned, because the desired 6094 * revision cannot be determined. 6095 * 6096 * Use the authentication baton cached in @a ctx to authenticate 6097 * against the repository. 6098 * 6099 * If @a abspath_or_url is a file, just invoke @a receiver on it. If it 6100 * is a directory, then descend according to @a depth. If @a depth is 6101 * #svn_depth_empty, invoke @a receiver on @a abspath_or_url and 6102 * nothing else; if #svn_depth_files, on @a abspath_or_url and its 6103 * immediate file children; if #svn_depth_immediates, the preceding 6104 * plus on each immediate subdirectory; if #svn_depth_infinity, then 6105 * recurse fully, invoking @a receiver on @a abspath_or_url and 6106 * everything beneath it. 6107 * 6108 * If @a fetch_excluded is TRUE, also also send excluded nodes in the working 6109 * copy to @a receiver, otherwise these are skipped. If @a fetch_actual_only 6110 * is TRUE also send nodes that don't exist as versioned but are still 6111 * tree conflicted. 6112 * 6113 * @a changelists is an array of <tt>const char *</tt> changelist 6114 * names, used as a restrictive filter on items whose info is 6115 * reported; that is, don't report info about any item unless 6116 * it's a member of one of those changelists. If @a changelists is 6117 * empty (or altogether @c NULL), no changelist filtering occurs. 6118 * 6119 * @since New in 1.7. 6120 */ 6121svn_error_t * 6122svn_client_info3(const char *abspath_or_url, 6123 const svn_opt_revision_t *peg_revision, 6124 const svn_opt_revision_t *revision, 6125 svn_depth_t depth, 6126 svn_boolean_t fetch_excluded, 6127 svn_boolean_t fetch_actual_only, 6128 const apr_array_header_t *changelists, 6129 svn_client_info_receiver2_t receiver, 6130 void *receiver_baton, 6131 svn_client_ctx_t *ctx, 6132 apr_pool_t *scratch_pool); 6133 6134/** Similar to svn_client_info3, but uses an svn_info_receiver_t instead of 6135 * a #svn_client_info_receiver2_t, and @a path_or_url may be a relative path. 6136 * 6137 * @since New in 1.5. 6138 * @deprecated Provided for backward compatibility with the 1.6 API. 6139 */ 6140SVN_DEPRECATED 6141svn_error_t * 6142svn_client_info2(const char *path_or_url, 6143 const svn_opt_revision_t *peg_revision, 6144 const svn_opt_revision_t *revision, 6145 svn_info_receiver_t receiver, 6146 void *receiver_baton, 6147 svn_depth_t depth, 6148 const apr_array_header_t *changelists, 6149 svn_client_ctx_t *ctx, 6150 apr_pool_t *pool); 6151 6152/** 6153 * Similar to svn_client_info2() but with @a changelists passed as @c 6154 * NULL, and @a depth set according to @a recurse: if @a recurse is 6155 * TRUE, @a depth is #svn_depth_infinity, else #svn_depth_empty. 6156 * 6157 * @deprecated Provided for backward compatibility with the 1.4 API. 6158 */ 6159SVN_DEPRECATED 6160svn_error_t * 6161svn_client_info(const char *path_or_url, 6162 const svn_opt_revision_t *peg_revision, 6163 const svn_opt_revision_t *revision, 6164 svn_info_receiver_t receiver, 6165 void *receiver_baton, 6166 svn_boolean_t recurse, 6167 svn_client_ctx_t *ctx, 6168 apr_pool_t *pool); 6169 6170/** 6171 * Set @a *wcroot_abspath to the local abspath of the root of the 6172 * working copy in which @a local_abspath resides. 6173 * 6174 * @since New in 1.7. 6175 */ 6176svn_error_t * 6177svn_client_get_wc_root(const char **wcroot_abspath, 6178 const char *local_abspath, 6179 svn_client_ctx_t *ctx, 6180 apr_pool_t *result_pool, 6181 apr_pool_t *scratch_pool); 6182 6183/** 6184 * Set @a *min_revision and @a *max_revision to the lowest and highest 6185 * revision numbers found within @a local_abspath. If @a committed is 6186 * TRUE, set @a *min_revision and @a *max_revision to the lowest and 6187 * highest comitted (i.e. "last changed") revision numbers, 6188 * respectively. NULL may be passed for either of @a min_revision and 6189 * @a max_revision to indicate the caller's lack of interest in the 6190 * value. Use @a scratch_pool for temporary allocations. 6191 * 6192 * @since New in 1.7. 6193 */ 6194svn_error_t * 6195svn_client_min_max_revisions(svn_revnum_t *min_revision, 6196 svn_revnum_t *max_revision, 6197 const char *local_abspath, 6198 svn_boolean_t committed, 6199 svn_client_ctx_t *ctx, 6200 apr_pool_t *scratch_pool); 6201 6202/** @} */ 6203 6204 6205/** 6206 * @defgroup Patch Apply a patch to the working copy 6207 * 6208 * @{ 6209 */ 6210 6211/** 6212 * The callback invoked by svn_client_patch() before attempting to patch 6213 * the target file at @a canon_path_from_patchfile (the path as parsed from 6214 * the patch file, but in canonicalized form). The callback can set 6215 * @a *filtered to @c TRUE to prevent the file from being patched, or else 6216 * must set it to @c FALSE. 6217 * 6218 * The callback is also provided with @a patch_abspath, the path of a 6219 * temporary file containing the patched result, and with @a reject_abspath, 6220 * the path to a temporary file containing the diff text of any hunks 6221 * which were rejected during patching. 6222 * 6223 * Because the callback is invoked before the patching attempt is made, 6224 * there is no guarantee that the target file will actually be patched 6225 * successfully. Client implementations must pay attention to notification 6226 * feedback provided by svn_client_patch() to find out which paths were 6227 * patched successfully. 6228 * 6229 * Note also that the files at @a patch_abspath and @a reject_abspath are 6230 * guaranteed to remain on disk after patching only if the 6231 * @a remove_tempfiles parameter for svn_client_patch() is @c FALSE. 6232 * 6233 * The const char * parameters may be allocated in @a scratch_pool which 6234 * will be cleared after each invocation. 6235 * 6236 * @since New in 1.7. 6237 */ 6238typedef svn_error_t *(*svn_client_patch_func_t)( 6239 void *baton, 6240 svn_boolean_t *filtered, 6241 const char *canon_path_from_patchfile, 6242 const char *patch_abspath, 6243 const char *reject_abspath, 6244 apr_pool_t *scratch_pool); 6245 6246/** 6247 * Apply a unidiff patch that's located at absolute path 6248 * @a patch_abspath to the working copy directory at @a wc_dir_abspath. 6249 * 6250 * This function makes a best-effort attempt at applying the patch. 6251 * It might skip patch targets which cannot be patched (e.g. targets 6252 * that are outside of the working copy). It will also reject hunks 6253 * which cannot be applied to a target in case the hunk's context 6254 * does not match anywhere in the patch target. 6255 * 6256 * If @a dry_run is TRUE, the patching process is carried out, and full 6257 * notification feedback is provided, but the working copy is not modified. 6258 * 6259 * @a strip_count specifies how many leading path components should be 6260 * stripped from paths obtained from the patch. It is an error if a 6261 * negative strip count is passed. 6262 * 6263 * If @a reverse is @c TRUE, apply patches in reverse, deleting lines 6264 * the patch would add and adding lines the patch would delete. 6265 * 6266 * If @a ignore_whitespace is TRUE, allow patches to be applied if they 6267 * only differ from the target by whitespace. 6268 * 6269 * If @a remove_tempfiles is TRUE, lifetimes of temporary files created 6270 * during patching will be managed internally. Otherwise, the caller should 6271 * take ownership of these files, the names of which can be obtained by 6272 * passing a @a patch_func callback. 6273 * 6274 * If @a patch_func is non-NULL, invoke @a patch_func with @a patch_baton 6275 * for each patch target processed. 6276 * 6277 * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with 6278 * @a ctx->notify_baton2 as patching progresses. 6279 * 6280 * If @a ctx->cancel_func is non-NULL, invoke it passing @a 6281 * ctx->cancel_baton at various places during the operation. 6282 * 6283 * Use @a scratch_pool for temporary allocations. 6284 * 6285 * @since New in 1.7. 6286 */ 6287svn_error_t * 6288svn_client_patch(const char *patch_abspath, 6289 const char *wc_dir_abspath, 6290 svn_boolean_t dry_run, 6291 int strip_count, 6292 svn_boolean_t reverse, 6293 svn_boolean_t ignore_whitespace, 6294 svn_boolean_t remove_tempfiles, 6295 svn_client_patch_func_t patch_func, 6296 void *patch_baton, 6297 svn_client_ctx_t *ctx, 6298 apr_pool_t *scratch_pool); 6299 6300/** @} */ 6301 6302/** @} end group: Client working copy management */ 6303 6304/** 6305 * 6306 * @defgroup clnt_sessions Client session related functions 6307 * 6308 * @{ 6309 * 6310 */ 6311 6312 6313/* Converting paths to URLs. */ 6314 6315/** Set @a *url to the URL for @a path_or_url allocated in result_pool. 6316 * 6317 * If @a path_or_url is already a URL, set @a *url to @a path_or_url. 6318 * 6319 * If @a path_or_url is a versioned item, set @a *url to @a 6320 * path_or_url's entry URL. If @a path_or_url is unversioned (has 6321 * no entry), set @a *url to NULL. 6322 * 6323 * Use @a ctx->wc_ctx to retrieve the information. Use 6324 ** @a scratch_pool for temporary allocations. 6325 * 6326 * @since New in 1.7. 6327 */ 6328svn_error_t * 6329svn_client_url_from_path2(const char **url, 6330 const char *path_or_url, 6331 svn_client_ctx_t *ctx, 6332 apr_pool_t *result_pool, 6333 apr_pool_t *scratch_pool); 6334 6335/** Similar to svn_client_url_from_path2(), but without a context argument. 6336 * 6337 * @since New in 1.5. 6338 * @deprecated Provided for backward compatibility with the 1.6 API. 6339 */ 6340SVN_DEPRECATED 6341svn_error_t * 6342svn_client_url_from_path(const char **url, 6343 const char *path_or_url, 6344 apr_pool_t *pool); 6345 6346 6347 6348/* Fetching a repository's root URL and UUID. */ 6349 6350/** Set @a *repos_root_url and @a *repos_uuid, to the root URL and UUID of 6351 * the repository in which @a abspath_or_url is versioned. Use the 6352 * authentication baton and working copy context cached in @a ctx as 6353 * necessary. @a repos_root_url and/or @a repos_uuid may be NULL if not 6354 * wanted. 6355 * 6356 * This function will open a temporary RA session to the repository if 6357 * necessary to get the information. 6358 * 6359 * Allocate @a *repos_root_url and @a *repos_uuid in @a result_pool. 6360 * Use @a scratch_pool for temporary allocations. 6361 * 6362 * @since New in 1.8. 6363 */ 6364svn_error_t * 6365svn_client_get_repos_root(const char **repos_root_url, 6366 const char **repos_uuid, 6367 const char *abspath_or_url, 6368 svn_client_ctx_t *ctx, 6369 apr_pool_t *result_pool, 6370 apr_pool_t *scratch_pool); 6371 6372/** Set @a *url to the repository root URL of the repository in which 6373 * @a path_or_url is versioned (or scheduled to be versioned), 6374 * allocated in @a pool. @a ctx is required for possible repository 6375 * authentication. 6376 * 6377 * @since New in 1.5. 6378 * @deprecated Provided for backward compatibility with the 1.7 API. Use 6379 * svn_client_get_repos_root() instead, with an absolute path. 6380 */ 6381SVN_DEPRECATED 6382svn_error_t * 6383svn_client_root_url_from_path(const char **url, 6384 const char *path_or_url, 6385 svn_client_ctx_t *ctx, 6386 apr_pool_t *pool); 6387 6388/** Get repository @a uuid for @a url. 6389 * 6390 * Use a @a pool to open a temporary RA session to @a url, discover the 6391 * repository uuid, and free the session. Return the uuid in @a uuid, 6392 * allocated in @a pool. @a ctx is required for possible repository 6393 * authentication. 6394 * 6395 * @deprecated Provided for backward compatibility with the 1.7 API. Use 6396 * svn_client_get_repos_root() instead. 6397 */ 6398SVN_DEPRECATED 6399svn_error_t * 6400svn_client_uuid_from_url(const char **uuid, 6401 const char *url, 6402 svn_client_ctx_t *ctx, 6403 apr_pool_t *pool); 6404 6405 6406/** Return the repository @a uuid for working-copy @a local_abspath, 6407 * allocated in @a result_pool. Use @a ctx->wc_ctx to retrieve the 6408 * information. 6409 * 6410 * Use @a scratch_pool for temporary allocations. 6411 * 6412 * @since New in 1.7. 6413 * @deprecated Provided for backward compatibility with the 1.7 API. Use 6414 * svn_client_get_repos_root() instead. 6415 */ 6416SVN_DEPRECATED 6417svn_error_t * 6418svn_client_uuid_from_path2(const char **uuid, 6419 const char *local_abspath, 6420 svn_client_ctx_t *ctx, 6421 apr_pool_t *result_pool, 6422 apr_pool_t *scratch_pool); 6423 6424/** Similar to svn_client_uuid_from_path2(), but with a relative path and 6425 * an access baton. 6426 * 6427 * @deprecated Provided for backward compatibility with the 1.6 API. 6428 */ 6429SVN_DEPRECATED 6430svn_error_t * 6431svn_client_uuid_from_path(const char **uuid, 6432 const char *path, 6433 svn_wc_adm_access_t *adm_access, 6434 svn_client_ctx_t *ctx, 6435 apr_pool_t *pool); 6436 6437 6438/* Opening RA sessions. */ 6439 6440/** Open an RA session rooted at @a url, and return it in @a *session. 6441 * 6442 * Use the authentication baton stored in @a ctx for authentication. 6443 * @a *session is allocated in @a result_pool. 6444 * 6445 * If @a wri_abspath is not NULL, use the working copy identified by @a 6446 * wri_abspath to potentially avoid transferring unneeded data. 6447 * 6448 * @note This function is similar to svn_ra_open4(), but the caller avoids 6449 * having to providing its own callback functions. 6450 * @since New in 1.8. 6451 */ 6452svn_error_t * 6453svn_client_open_ra_session2(svn_ra_session_t **session, 6454 const char *url, 6455 const char *wri_abspath, 6456 svn_client_ctx_t *ctx, 6457 apr_pool_t *result_pool, 6458 apr_pool_t *scratch_pool); 6459 6460/** Similar to svn_client_open_ra_session2(), but with @ wri_abspath 6461 * always passed as NULL, and with the same pool used as both @a 6462 * result_pool and @a scratch_pool. 6463 * 6464 * @since New in 1.3. 6465 * @deprecated Provided for backward compatibility with the 1.7 API. 6466 */ 6467SVN_DEPRECATED 6468svn_error_t * 6469svn_client_open_ra_session(svn_ra_session_t **session, 6470 const char *url, 6471 svn_client_ctx_t *ctx, 6472 apr_pool_t *pool); 6473 6474 6475/** @} end group: Client session related functions */ 6476 6477/** @} */ 6478 6479#ifdef __cplusplus 6480} 6481#endif /* __cplusplus */ 6482 6483#endif /* SVN_CLIENT_H */ 6484