1/* 2 * wc.h : shared stuff internal to the svn_wc library. 3 * 4 * ==================================================================== 5 * Licensed to the Apache Software Foundation (ASF) under one 6 * or more contributor license agreements. See the NOTICE file 7 * distributed with this work for additional information 8 * regarding copyright ownership. The ASF licenses this file 9 * to you under the Apache License, Version 2.0 (the 10 * "License"); you may not use this file except in compliance 11 * with the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, 16 * software distributed under the License is distributed on an 17 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18 * KIND, either express or implied. See the License for the 19 * specific language governing permissions and limitations 20 * under the License. 21 * ==================================================================== 22 */ 23 24 25#ifndef SVN_LIBSVN_WC_H 26#define SVN_LIBSVN_WC_H 27 28#include <apr_pools.h> 29#include <apr_hash.h> 30 31#include "svn_types.h" 32#include "svn_error.h" 33#include "svn_wc.h" 34 35#include "private/svn_sqlite.h" 36#include "private/svn_wc_private.h" 37#include "private/svn_skel.h" 38 39#include "wc_db.h" 40 41#ifdef __cplusplus 42extern "C" { 43#endif /* __cplusplus */ 44 45 46#define SVN_WC__PROP_REJ_EXT ".prej" 47 48/* We can handle this format or anything lower, and we (should) error 49 * on anything higher. 50 * 51 * There is no format version 0; we started with 1. 52 * 53 * The bump to 2 introduced the ".svn-work" extension. For example, 54 * ".svn/props/foo" became ".svn/props/foo.svn-work". 55 * 56 * The bump to 3 introduced the entry attribute 57 * old-and-busted.c::ENTRIES_ATTR_ABSENT. 58 * 59 * The bump to 4 renamed the magic "svn:this_dir" entry name to "". 60 * 61 * == 1.0.x shipped with format 4 62 * == 1.1.x shipped with format 4 63 * == 1.2.x shipped with format 4 64 * == 1.3.x shipped with format 4 65 * 66 * The bump to 5 added support for replacing files with history (the 67 * "revert base"). This was introduced in 1.4.0, but buggy until 1.4.6. 68 * 69 * The bump to 6 introduced caching of property modification state and 70 * certain properties in the entries file. 71 * 72 * The bump to 7 changed the entries file format from XML to a custom 73 * text-based format. 74 * 75 * The bump to 8 placed wcprops in one file per directory (named 76 * upgrade.c::WCPROPS_ALL_DATA) 77 * 78 * == 1.4.x shipped with format 8 79 * 80 * The bump to 9 added changelists, keep-local, and sticky depth (for 81 * selective/sparse checkouts) to each entry. 82 * 83 * == 1.5.x shipped with format 9 84 * 85 * The bump to 10 added tree-conflicts, file externals and a different 86 * canonicalization of urls. 87 * 88 * == 1.6.x shipped with format 10 89 * 90 * The bump to 11 cleared the has_props, has_prop_mods, cachable_props, 91 * and present_props values in the entries file. Older clients expect 92 * proper values for these fields. 93 * 94 * The bump to 12 switched from 'entries' to the SQLite database 'wc.db'. 95 * 96 * The bump to 13 added the WORK_QUEUE table into 'wc.db', moved the 97 * wcprops into the 'dav_cache' column in BASE_NODE, and stopped using 98 * the 'incomplete_children' column of BASE_NODE. 99 * 100 * The bump to 14 added the WCLOCKS table (and migrated locks from the 101 * filesystem into wc.db), and some columns to ACTUAL_NODE for future 102 * use. 103 * 104 * The bump to 15 switched from depth='exclude' on directories to using 105 * presence='exclude' within the BASE_NODE and WORKING_NODE tables. 106 * This change also enabled exclude support on files and symlinks. 107 * 108 * The bump to 16 added 'locked_levels' to WC_LOCK, setting any existing 109 * locks to a level of 0. The 'md5_checksum' column was added to PRISTINE 110 * for future use. 111 * 112 * The bump to 17 added a '.svn/pristine' dir and moved the text bases into 113 * the Pristine Store (the PRISTINE table and '.svn/pristine' dir), and 114 * removed the '/.svn/text-base' dir. 115 * 116 * The bump to 18 moved the properties from separate files in the props and 117 * prop-base directory (and .svn for the dir itself) into the wc.db file, 118 * and then removed the props and prop-base dir. 119 * 120 * The bump to 19 introduced the 'single DB' per working copy. All metadata 121 * is held in a single '.svn/wc.db' in the root directory of the working 122 * copy. Bumped in r991236. 123 * 124 * The bump to 20 introduced NODES and drops BASE_NODE and WORKING_NODE, 125 * op_depth is always 0 or 2. Bumped in r1005388. 126 * 127 * The bump to 21 moved tree conflict storage from the parent to the 128 * conflicted node. Bumped in r1034436. 129 * 130 * The bump to 22 moved tree conflict storage from conflict_data column 131 * to the tree_conflict_data column. Bumped in r1040255. 132 * 133 * The bump to 23 introduced multi-layer op_depth processing for NODES. 134 * Bumped in r1044384. 135 * 136 * The bump to 24 started using the 'refcount' column of the PRISTINE table 137 * correctly, instead of always setting it to '1'. Bumped in r1058523. 138 * 139 * The bump to 25 introduced the NODES_CURRENT view. Bumped in r1071283. 140 * 141 * The bump to 26 introduced the NODES_BASE view. Bumped in r1076617. 142 * 143 * The bump to 27 stored conflict files as relpaths rather than basenames. 144 * Bumped in r1089593. 145 * 146 * The bump to 28 converted any remaining references to MD5 checksums 147 * to SHA1 checksums. Bumped in r1095214. 148 * 149 * The bump to 29 renamed the pristine files from '<SHA1>' to '<SHA1>.svn-base' 150 * and introduced the EXTERNALS store. Bumped in r1129286. 151 * 152 * == 1.7.x shipped with format 29 153 * 154 * The bump to 30 switched the conflict storage to a skel inside conflict_data. 155 * Also clears some known invalid state. Bumped in r1387742. 156 * 157 * The bump to 31 added the inherited_props column in the NODES table. 158 * Bumped in r1395109. 159 * 160 * == 1.8.x shipped with format 31 161 * == 1.9.x shipped with format 31 162 * == 1.10.x shipped with format 31 163 * 164 * Please document any further format changes here. 165 */ 166 167#define SVN_WC__VERSION 31 168 169 170/* Formats <= this have no concept of "revert text-base/props". */ 171#define SVN_WC__NO_REVERT_FILES 4 172 173/* A version <= this has wcprops stored in one file per entry. */ 174#define SVN_WC__WCPROPS_MANY_FILES_VERSION 7 175 176/* A version < this can have urls that aren't canonical according to the new 177 rules. See issue #2475. */ 178#define SVN_WC__CHANGED_CANONICAL_URLS 10 179 180/* The format number written to wc-ng working copies so that old clients 181 can recognize them as "newer Subversion"'s working copies. */ 182#define SVN_WC__NON_ENTRIES 12 183#define SVN_WC__NON_ENTRIES_STRING "12\n" 184 185/* A version < this uses the old 'entries' file mechanism. */ 186#define SVN_WC__WC_NG_VERSION 12 187 188/* In this version, the wcprops are "lost" between files and wc.db. We want 189 to ignore them in upgrades. */ 190#define SVN_WC__WCPROPS_LOST 12 191 192/* A version < this has no work queue (see workqueue.h). */ 193#define SVN_WC__HAS_WORK_QUEUE 13 194 195/* While we still have this DB version we should verify if there is 196 sqlite_stat1 table on opening */ 197#define SVN_WC__ENSURE_STAT1_TABLE 31 198 199/* Return a string indicating the released version (or versions) of 200 * Subversion that used WC format number WC_FORMAT, or some other 201 * suitable string if no released version used WC_FORMAT. 202 * 203 * ### It's not ideal to encode this sort of knowledge in this low-level 204 * library. On the other hand, it doesn't need to be updated often and 205 * should be easily found when it does need to be updated. */ 206const char * 207svn_wc__version_string_from_format(int wc_format); 208 209/* Return true iff error E indicates an "is not a working copy" type 210 of error, either because something wasn't a working copy at all, or 211 because it's a working copy from a previous version (in need of 212 upgrade). */ 213#define SVN_WC__ERR_IS_NOT_CURRENT_WC(e) \ 214 ((e->apr_err == SVN_ERR_WC_NOT_WORKING_COPY) || \ 215 (e->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)) 216 217 218 219/*** Context handling ***/ 220struct svn_wc_context_t 221{ 222 /* The wc_db handle for this working copy. */ 223 svn_wc__db_t *db; 224 225 /* Close the DB when we destroy this context? 226 (This is used inside backward compat wrappers, and should only be 227 modified by the proper create() functions. */ 228 svn_boolean_t close_db_on_destroy; 229 230 /* The state pool for this context. */ 231 apr_pool_t *state_pool; 232}; 233 234/** 235 * Just like svn_wc_context_create(), only use the provided DB to construct 236 * the context. 237 * 238 * Even though DB is not allocated from the same pool at *WC_CTX, it is 239 * expected to remain open throughout the life of *WC_CTX. 240 */ 241svn_error_t * 242svn_wc__context_create_with_db(svn_wc_context_t **wc_ctx, 243 svn_config_t *config, 244 svn_wc__db_t *db, 245 apr_pool_t *result_pool); 246 247 248/*** Committed Queue ***/ 249 250/** 251 * Return the pool associated with QUEUE. (This so we can keep some 252 * deprecated functions that need to peek inside the QUEUE struct in 253 * deprecated.c). 254 */ 255apr_pool_t * 256svn_wc__get_committed_queue_pool(const struct svn_wc_committed_queue_t *queue); 257 258 259/*** Update traversals. ***/ 260 261struct svn_wc_traversal_info_t 262{ 263 /* The pool in which this structure and everything inside it is 264 allocated. */ 265 apr_pool_t *pool; 266 267 /* The before and after values of the SVN_PROP_EXTERNALS property, 268 * for each directory on which that property changed. These have 269 * the same layout as those returned by svn_wc_edited_externals(). 270 * 271 * The hashes, their keys, and their values are allocated in the 272 * above pool. 273 */ 274 apr_hash_t *externals_old; 275 apr_hash_t *externals_new; 276 277 /* The ambient depths of the working copy directories. The keys are 278 working copy paths (as for svn_wc_edited_externals()), the values 279 are the result of svn_depth_to_word(depth_of_each_dir). */ 280 apr_hash_t *depths; 281}; 282 283 284/*** Names and file/dir operations in the administrative area. ***/ 285 286/** The files within the administrative subdir. **/ 287#define SVN_WC__ADM_FORMAT "format" 288#define SVN_WC__ADM_ENTRIES "entries" 289#define SVN_WC__ADM_TMP "tmp" 290#define SVN_WC__ADM_PRISTINE "pristine" 291#define SVN_WC__ADM_NONEXISTENT_PATH "nonexistent-path" 292#define SVN_WC__ADM_EXPERIMENTAL "experimental" 293 294/* The basename of the ".prej" file, if a directory ever has property 295 conflicts. This .prej file will appear *within* the conflicted 296 directory. */ 297#define SVN_WC__THIS_DIR_PREJ "dir_conflicts" 298 299 300/* A few declarations for stuff in util.c. 301 * If this section gets big, move it all out into a new util.h file. */ 302 303/* Ensure that DIR exists. */ 304svn_error_t *svn_wc__ensure_directory(const char *path, apr_pool_t *pool); 305 306 307/* Return a hash keyed by 'const char *' property names and with 308 'svn_string_t *' values built from PROPS (which is an array of 309 pointers to svn_prop_t's) or to NULL if PROPS is NULL or empty. 310 PROPS items which lack a value will be ignored. If PROPS contains 311 multiple properties with the same name, each successive such item 312 reached in a walk from the beginning to the end of the array will 313 overwrite the previous in the returned hash. 314 315 NOTE: While the returned hash will be allocated in RESULT_POOL, the 316 items it holds will share storage with those in PROPS. 317 318 ### This is rather the reverse of svn_prop_hash_to_array(), except 319 ### that function's arrays contains svn_prop_t's, whereas this 320 ### one's contains *pointers* to svn_prop_t's. So much for 321 ### consistency. */ 322apr_hash_t * 323svn_wc__prop_array_to_hash(const apr_array_header_t *props, 324 apr_pool_t *result_pool); 325 326 327/* Set *MODIFIED_P to non-zero if LOCAL_ABSPATH's text is modified with 328 * regard to the base revision, else set *MODIFIED_P to zero. 329 * 330 * If EXACT_COMPARISON is FALSE, translate LOCAL_ABSPATH's EOL 331 * style and keywords to repository-normal form according to its properties, 332 * and compare the result with the text base. 333 * Usually, EXACT_COMPARISON should be FALSE. 334 * 335 * If LOCAL_ABSPATH does not exist, consider it unmodified. If it exists 336 * but is not under revision control (not even scheduled for 337 * addition), return the error SVN_WC_PATH_NOT_FOUND. 338 * 339 * If the text is unmodified and a write-lock is held this function 340 * will ensure that the last-known-unmodified timestamp and 341 * filesize of the file as recorded in DB matches the corresponding 342 * attributes of the actual file. (This is often referred to as 343 * "timestamp repair", and serves to help future unforced is-modified 344 * checks return quickly if the file remains untouched.) 345 */ 346svn_error_t * 347svn_wc__internal_file_modified_p(svn_boolean_t *modified_p, 348 svn_wc__db_t *db, 349 const char *local_abspath, 350 svn_boolean_t exact_comparison, 351 apr_pool_t *scratch_pool); 352 353 354/* Prepare to merge a file content change into the working copy. 355 356 This does not merge properties; see svn_wc__merge_props() for that. 357 This does not necessarily change the file TARGET_ABSPATH on disk; it 358 may instead return work items that will replace the file on disk when 359 they are run. ### Can we be more consistent about this? 360 361 Merge the difference between LEFT_ABSPATH and RIGHT_ABSPATH into 362 TARGET_ABSPATH. 363 364 Set *WORK_ITEMS to the appropriate work queue operations. 365 366 If there are any conflicts, append a conflict description to 367 *CONFLICT_SKEL. (First allocate *CONFLICT_SKEL from RESULT_POOL if 368 it is initially NULL. CONFLICT_SKEL itself must not be NULL.) 369 Also, unless it is considered to be a 'binary' file, mark any 370 conflicts in the text of the file TARGET_ABSPATH using LEFT_LABEL, 371 RIGHT_LABEL and TARGET_LABEL. 372 373 Set *MERGE_OUTCOME to indicate the result. 374 375 When DRY_RUN is true, no actual changes are made to the working copy. 376 377 If DIFF3_CMD is specified, the given external diff3 tool will 378 be used instead of our built in diff3 routines. 379 380 When MERGE_OPTIONS are specified, they are used by the internal 381 diff3 routines, or passed to the external diff3 tool. 382 383 WRI_ABSPATH describes in which working copy information should be 384 retrieved. (Interesting for merging file externals). 385 386 OLD_ACTUAL_PROPS is the set of actual properties before merging; used for 387 detranslating the file before merging. This is necessary because, in 388 the case of updating, the update can have sent new properties, so we 389 cannot simply fetch and use the current actual properties. 390 391 ### Is OLD_ACTUAL_PROPS still necessary, now that we first prepare the 392 content change and property change and then apply them both to 393 the WC together? 394 395 Property changes sent by the update are provided in PROP_DIFF. 396 397 For a complete description, see svn_wc_merge5() for which this is 398 the (loggy) implementation. 399 400 *WORK_ITEMS will be allocated in RESULT_POOL. All temporary allocations 401 will be performed in SCRATCH_POOL. 402*/ 403svn_error_t * 404svn_wc__internal_merge(svn_skel_t **work_items, 405 svn_skel_t **conflict_skel, 406 enum svn_wc_merge_outcome_t *merge_outcome, 407 svn_wc__db_t *db, 408 const char *left_abspath, 409 const char *right_abspath, 410 const char *target_abspath, 411 const char *wri_abspath, 412 const char *left_label, 413 const char *right_label, 414 const char *target_label, 415 apr_hash_t *old_actual_props, 416 svn_boolean_t dry_run, 417 const char *diff3_cmd, 418 const apr_array_header_t *merge_options, 419 const apr_array_header_t *prop_diff, 420 svn_cancel_func_t cancel_func, 421 void *cancel_baton, 422 apr_pool_t *result_pool, 423 apr_pool_t *scratch_pool); 424 425/* A default error handler for svn_wc_walk_entries3(). Returns ERR in 426 all cases. */ 427svn_error_t * 428svn_wc__walker_default_error_handler(const char *path, 429 svn_error_t *err, 430 void *walk_baton, 431 apr_pool_t *pool); 432 433/* Set *EDITOR and *EDIT_BATON to an ambient-depth-based filtering 434 * editor that wraps WRAPPED_EDITOR and WRAPPED_BATON. This is only 435 * required for operations where the requested depth is @c 436 * svn_depth_unknown and the server's editor driver doesn't understand 437 * depth. It is safe for *EDITOR and *EDIT_BATON to start as 438 * WRAPPED_EDITOR and WRAPPED_BATON. 439 * 440 * ANCHOR, TARGET, and DB are as in svn_wc_get_update_editor3. 441 * 442 * @a requested_depth must be one of the following depth values: 443 * @c svn_depth_infinity, @c svn_depth_empty, @c svn_depth_files, 444 * @c svn_depth_immediates, or @c svn_depth_unknown. 445 * 446 * Allocations are done in POOL. 447 */ 448svn_error_t * 449svn_wc__ambient_depth_filter_editor(const svn_delta_editor_t **editor, 450 void **edit_baton, 451 svn_wc__db_t *db, 452 const char *anchor_abspath, 453 const char *target, 454 const svn_delta_editor_t *wrapped_editor, 455 void *wrapped_edit_baton, 456 apr_pool_t *result_pool); 457 458 459/* Similar to svn_wc_conflicted_p3(), but with a wc_db parameter in place of 460 * a wc_context. */ 461svn_error_t * 462svn_wc__internal_conflicted_p(svn_boolean_t *text_conflicted_p, 463 svn_boolean_t *prop_conflicted_p, 464 svn_boolean_t *tree_conflicted_p, 465 svn_wc__db_t *db, 466 const char *local_abspath, 467 apr_pool_t *scratch_pool); 468 469/* Similar to svn_wc__internal_conflicted_p(), but ignores 470 * moved-away-edit tree conflicts. If CONFLICT_IGNORED_P is not NULL 471 * then sets *CONFLICT_IGNORED_P TRUE if a tree-conflict is ignored 472 * and FALSE otherwise. Also ignores text and property conflicts if 473 * TREE_ONLY is TRUE */ 474svn_error_t * 475svn_wc__conflicted_for_update_p(svn_boolean_t *conflicted_p, 476 svn_boolean_t *conflict_ignored_p, 477 svn_wc__db_t *db, 478 const char *local_abspath, 479 svn_boolean_t tree_only, 480 apr_pool_t *scratch_pool); 481 482 483/* Internal version of svn_wc_transmit_text_deltas3(). */ 484svn_error_t * 485svn_wc__internal_transmit_text_deltas(svn_stream_t *tempstream, 486 const svn_checksum_t **new_text_base_md5_checksum, 487 const svn_checksum_t **new_text_base_sha1_checksum, 488 svn_wc__db_t *db, 489 const char *local_abspath, 490 svn_boolean_t fulltext, 491 const svn_delta_editor_t *editor, 492 void *file_baton, 493 apr_pool_t *result_pool, 494 apr_pool_t *scratch_pool); 495 496/* Internal version of svn_wc_transmit_prop_deltas2(). */ 497svn_error_t * 498svn_wc__internal_transmit_prop_deltas(svn_wc__db_t *db, 499 const char *local_abspath, 500 const svn_delta_editor_t *editor, 501 void *baton, 502 apr_pool_t *scratch_pool); 503 504/* Library-internal version of svn_wc_ensure_adm4(). */ 505svn_error_t * 506svn_wc__internal_ensure_adm(svn_wc__db_t *db, 507 const char *local_abspath, 508 const char *url, 509 const char *repos_root_url, 510 const char *repos_uuid, 511 svn_revnum_t revision, 512 svn_depth_t depth, 513 apr_pool_t *scratch_pool); 514 515 516/* Library-internal version of svn_wc__changelist_match(). */ 517svn_boolean_t 518svn_wc__internal_changelist_match(svn_wc__db_t *db, 519 const char *local_abspath, 520 const apr_hash_t *clhash, 521 apr_pool_t *scratch_pool); 522 523/* Library-internal version of svn_wc_walk_status(), which see. */ 524svn_error_t * 525svn_wc__internal_walk_status(svn_wc__db_t *db, 526 const char *local_abspath, 527 svn_depth_t depth, 528 svn_boolean_t get_all, 529 svn_boolean_t no_ignore, 530 svn_boolean_t ignore_text_mods, 531 const apr_array_header_t *ignore_patterns, 532 svn_wc_status_func4_t status_func, 533 void *status_baton, 534 svn_cancel_func_t cancel_func, 535 void *cancel_baton, 536 apr_pool_t *scratch_pool); 537 538/** A callback invoked by the generic node-walker function. */ 539typedef svn_error_t *(*svn_wc__node_found_func_t)(const char *local_abspath, 540 svn_node_kind_t kind, 541 void *walk_baton, 542 apr_pool_t *scratch_pool); 543 544/* Call @a walk_callback with @a walk_baton for @a local_abspath and all 545 nodes underneath it, restricted by @a walk_depth, and possibly 546 @a changelists. 547 548 If @a show_hidden is true, include hidden nodes, else ignore them. 549 If CHANGELISTS is non-NULL and non-empty, filter thereon. */ 550svn_error_t * 551svn_wc__internal_walk_children(svn_wc__db_t *db, 552 const char *local_abspath, 553 svn_boolean_t show_hidden, 554 const apr_array_header_t *changelists, 555 svn_wc__node_found_func_t walk_callback, 556 void *walk_baton, 557 svn_depth_t walk_depth, 558 svn_cancel_func_t cancel_func, 559 void *cancel_baton, 560 apr_pool_t *scratch_pool); 561 562/* Library-internal version of svn_wc_remove_from_revision_control2, 563 which see.*/ 564svn_error_t * 565svn_wc__internal_remove_from_revision_control(svn_wc__db_t *db, 566 const char *local_abspath, 567 svn_boolean_t destroy_wf, 568 svn_cancel_func_t cancel_func, 569 void *cancel_baton, 570 apr_pool_t *scratch_pool); 571 572/* Internal version of svn_wc__node_get_origin() */ 573svn_error_t * 574svn_wc__internal_get_origin(svn_boolean_t *is_copy, 575 svn_revnum_t *revision, 576 const char **repos_relpath, 577 const char **repos_root_url, 578 const char **repos_uuid, 579 svn_depth_t *depth, 580 const char **copy_root_abspath, 581 svn_wc__db_t *db, 582 const char *local_abspath, 583 svn_boolean_t scan_deleted, 584 apr_pool_t *result_pool, 585 apr_pool_t *scratch_pool); 586 587/* Upgrade the wc sqlite database given in SDB for the wc located at 588 WCROOT_ABSPATH. It's current/starting format is given by START_FORMAT. 589 After the upgrade is complete (to as far as the automatic upgrade will 590 perform), the resulting format is RESULT_FORMAT. All allocations are 591 performed in SCRATCH_POOL. */ 592svn_error_t * 593svn_wc__upgrade_sdb(int *result_format, 594 const char *wcroot_abspath, 595 svn_sqlite__db_t *sdb, 596 int start_format, 597 apr_pool_t *scratch_pool); 598 599/* Create a conflict skel from the old separated data */ 600svn_error_t * 601svn_wc__upgrade_conflict_skel_from_raw(svn_skel_t **conflicts, 602 svn_wc__db_t *db, 603 const char *wri_abspath, 604 const char *local_relpath, 605 const char *conflict_old, 606 const char *conflict_wrk, 607 const char *conflict_new, 608 const char *prej_file, 609 const char *tree_conflict_data, 610 apr_size_t tree_conflict_len, 611 apr_pool_t *result_pool, 612 apr_pool_t *scratch_pool); 613 614svn_error_t * 615svn_wc__wipe_postupgrade(const char *dir_abspath, 616 svn_boolean_t whole_admin, 617 svn_cancel_func_t cancel_func, 618 void *cancel_baton, 619 apr_pool_t *scratch_pool); 620 621/* Ensure LOCAL_ABSPATH is still locked in DB. Returns the error 622 * SVN_ERR_WC_NOT_LOCKED if this is not the case. 623 */ 624svn_error_t * 625svn_wc__write_check(svn_wc__db_t *db, 626 const char *local_abspath, 627 apr_pool_t *scratch_pool); 628 629/* Read into CONFLICTS svn_wc_conflict_description2_t* structs 630 * for all conflicts that have LOCAL_ABSPATH as victim. 631 * 632 * Victim must be versioned or be part of a tree conflict. 633 * 634 * If CREATE_TEMPFILES is TRUE, create temporary files for property conflicts. 635 * 636 * Allocate *CONFLICTS in RESULT_POOL and do temporary allocations in 637 * SCRATCH_POOL 638 */ 639svn_error_t * 640svn_wc__read_conflicts(const apr_array_header_t **conflicts, 641 svn_skel_t **conflict_skel, 642 svn_wc__db_t *db, 643 const char *local_abspath, 644 svn_boolean_t create_tempfiles, 645 svn_boolean_t only_tree_conflict, 646 apr_pool_t *result_pool, 647 apr_pool_t *scratch_pool); 648 649 650/* Perform the actual merge of file changes between an original file, 651 identified by ORIGINAL_CHECKSUM (an empty file if NULL) to a new file 652 identified by NEW_CHECKSUM in the working copy identified by WRI_ABSPATH. 653 654 Merge the result into LOCAL_ABSPATH, which is part of the working copy 655 identified by WRI_ABSPATH. Use OLD_REVISION and TARGET_REVISION for naming 656 the intermediate files. 657 658 Set *FOUND_TEXT_CONFLICT to TRUE when the merge encountered a conflict, 659 otherwise to FALSE. 660 661 The rest of the arguments are passed to svn_wc__internal_merge. 662 */ 663svn_error_t * 664svn_wc__perform_file_merge(svn_skel_t **work_items, 665 svn_skel_t **conflict_skel, 666 svn_boolean_t *found_conflict, 667 svn_wc__db_t *db, 668 const char *local_abspath, 669 const char *wri_abspath, 670 const svn_checksum_t *new_checksum, 671 const svn_checksum_t *original_checksum, 672 apr_hash_t *old_actual_props, 673 const apr_array_header_t *ext_patterns, 674 svn_revnum_t old_revision, 675 svn_revnum_t target_revision, 676 const apr_array_header_t *propchanges, 677 const char *diff3_cmd, 678 svn_cancel_func_t cancel_func, 679 void *cancel_baton, 680 apr_pool_t *result_pool, 681 apr_pool_t *scratch_pool); 682 683 684/* Couple of random helpers for the Ev2 shims. 685 ### These will eventually be obsoleted and removed. */ 686struct svn_wc__shim_fetch_baton_t 687{ 688 svn_wc__db_t *db; 689 const char *base_abspath; 690 svn_boolean_t fetch_base; 691}; 692 693/* Using a BATON of struct shim_fetch_baton, return KIND for PATH. */ 694svn_error_t * 695svn_wc__fetch_kind_func(svn_node_kind_t *kind, 696 void *baton, 697 const char *path, 698 svn_revnum_t base_revision, 699 apr_pool_t *scratch_pool); 700 701/* Using a BATON of struct shim_fetch_baton, return PROPS for PATH. */ 702svn_error_t * 703svn_wc__fetch_props_func(apr_hash_t **props, 704 void *baton, 705 const char *path, 706 svn_revnum_t base_revision, 707 apr_pool_t *result_pool, 708 apr_pool_t *scratch_pool); 709 710/* Using a BATON of struct shim_fetch_baton, return a delta base for PATH. */ 711svn_error_t * 712svn_wc__fetch_base_func(const char **filename, 713 void *baton, 714 const char *path, 715 svn_revnum_t base_revision, 716 apr_pool_t *result_pool, 717 apr_pool_t *scratch_pool); 718 719/* Find duplicate targets in *EXTERNALS, a list of svn_wc_external_item2_t* 720 * elements, and store each target string in *DUPLICATE_TARGETS as const 721 * char * elements. *DUPLICATE_TARGETS will be NULL if no duplicates were 722 * found. */ 723svn_error_t * 724svn_wc__externals_find_target_dups(apr_array_header_t **duplicate_targets, 725 apr_array_header_t *externals, 726 apr_pool_t *pool, 727 apr_pool_t *scratch_pool); 728 729svn_error_t * 730svn_wc__node_has_local_mods(svn_boolean_t *modified, 731 svn_boolean_t *all_edits_are_deletes, 732 svn_wc__db_t *db, 733 const char *local_abspath, 734 svn_boolean_t ignore_unversioned, 735 svn_cancel_func_t cancel_func, 736 void *cancel_baton, 737 apr_pool_t *scratch_pool); 738 739#ifdef __cplusplus 740} 741#endif /* __cplusplus */ 742 743#endif /* SVN_LIBSVN_WC_H */ 744