Lines Matching refs:conflict

2  * conflicts.c:  conflict resolver implementation
58 /* Describe a tree conflict. */
61 svn_client_conflict_t *conflict,
66 /* Get more information about a tree conflict.
69 svn_client_conflict_t *conflict,
78 /* Indicate which options were chosen to resolve a text or tree conflict
89 /* Ask a tree conflict to describe itself. */
95 /* Ask a tree conflict to find out more information about itself
101 * when describing a tree conflict. */
105 /* The pool this conflict was allocated from. */
117 /* Resolves conflict to OPTION and sets CONFLICT->RESOLUTION accordingly.
119 * May raise an error in case the conflict could not be resolved. A common
120 * case would be a tree conflict the resolution of which depends on other
124 svn_client_conflict_t *conflict,
134 svn_client_conflict_t *conflict;
143 /* Indicates the property to resolve in case of a property conflict.
155 * Return a legacy conflict choice corresponding to OPTION_ID.
157 * legacy conflict choice exists.
202 svn_client_conflict_t *conflict,
208 conflict->legacy_text_conflict = desc;
212 if (conflict->prop_conflicts == NULL)
213 conflict->prop_conflicts = apr_hash_make(result_pool);
214 svn_hash_sets(conflict->prop_conflicts, desc->property_name, desc);
215 conflict->legacy_prop_conflict_propname = desc->property_name;
219 conflict->legacy_tree_conflict = desc;
223 SVN_ERR_ASSERT_NO_RETURN(FALSE); /* unknown kind of conflict */
1114 conflict on a file. */
1117 svn_client_conflict_t *conflict,
1125 local_change = svn_client_conflict_get_local_change(conflict);
1126 operation = svn_client_conflict_get_operation(conflict);
1180 conflict->local_abspath,
1201 "conflict was recorded.");
1209 conflict->local_abspath,
1233 "conflict was recorded.");
1242 conflict->local_abspath,
1264 conflict->local_abspath,
1275 "conflict was recorded.");
1283 conflict->local_abspath,
1307 "conflict was recorded.");
1315 conflict->local_abspath,
1338 conflict on a directory. */
1341 svn_client_conflict_t *conflict,
1349 local_change = svn_client_conflict_get_local_change(conflict);
1350 operation = svn_client_conflict_get_operation(conflict);
1405 conflict->local_abspath,
1427 "this conflict was recorded.");
1435 conflict->local_abspath,
1458 "at the time this conflict was "
1468 conflict->local_abspath,
1490 conflict->local_abspath,
1500 "the time this conflict was "
1509 conflict->local_abspath,
1532 "the time this conflict was "
1542 conflict->local_abspath,
2221 svn_client_conflict_t *conflict,
2247 conflict, scratch_pool,
2249 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
2363 /* Move information about the conflict victim. If not NULL, this is an
2378 * be chosen to find a suitable merge target when resolving a tree conflict.
2393 * a youngest common ancestor with the conflict victim. E.g. in case
2397 * point in history after siblings and conflict victim forked off
2416 svn_client_conflict_t *conflict,
2431 conflict,
2468 conflict, related_basename,
2472 ctx, conflict->pool, scratch_pool));
2494 * VICTIM_ABSPATH is the abspath of a conflict victim in the working copy and
2723 /* If the conflict victim and the move target candidate
2789 conflict_tree_get_details_local_missing(svn_client_conflict_t *conflict,
2819 &old_repos_relpath, &old_rev, &old_kind, conflict,
2822 &new_repos_relpath, &new_rev, &new_kind, conflict,
2825 /* Scan the conflict victim's parent's log to find a revision which
2827 deleted_basename = svn_dirent_basename(conflict->local_abspath,
2833 conflict->local_abspath,
2844 * pin-pointing the deleted conflict victim in history. */
2857 conflict, ctx, scratch_pool, scratch_pool));
2889 conflict, deleted_basename, parent_repos_relpath,
2891 ctx, conflict->pool, scratch_pool));
2905 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
2929 conflict->pool, scratch_pool));
2936 * conflict victim. This operation would obviously be quite expensive.
2942 * This approach solves the conflict case where an edit to a file which
3001 wc_siblings = apr_array_make(conflict->pool, 1,
3004 apr_pstrdup(conflict->pool, candidate_abspath);
3011 details = apr_pcalloc(conflict->pool, sizeof(*details));
3017 conflict->pool);
3024 details->wc_move_targets = apr_hash_make(conflict->pool);
3033 conflict->local_abspath,
3077 conflict->recommended_option_id =
3080 conflict->recommended_option_id =
3089 conflict->recommended_option_id =
3092 conflict->recommended_option_id =
3096 conflict->tree_conflict_local_details = details;
3102 conflict on a non-existent node. */
3105 svn_client_conflict_t *conflict,
3112 local_change = svn_client_conflict_get_local_change(conflict);
3113 operation = svn_client_conflict_get_operation(conflict);
3154 "away at the time this conflict was recorded.");
3158 "at the time this conflict was recorded.");
3181 * different move destination while resolving the conflict. */
3198 svn_client_conflict_t *conflict,
3205 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
3213 SVN_ERR(describe_local_file_node_change(description, conflict, ctx,
3217 SVN_ERR(describe_local_dir_node_change(description, conflict, ctx,
3222 SVN_ERR(describe_local_none_node_change(description, conflict,
3233 svn_client_conflict_t *conflict,
3240 details = conflict->tree_conflict_local_details;
3243 description, conflict, ctx,
3328 conflict; NULL for non-localised odd cases. */
3484 conflict. */
3501 svn_client_conflict_t *conflict,
3509 switch (svn_client_conflict_get_local_change(conflict))
3528 svn_client_conflict_get_local_change(conflict)));
3531 switch (svn_client_conflict_get_incoming_change(conflict))
3547 svn_client_conflict_get_incoming_change(conflict)));
3555 svn_client_conflict_get_operation(conflict)));
3564 svn_client_conflict_t *conflict,
3574 conflict_action = svn_client_conflict_get_incoming_change(conflict);
3575 conflict_operation = svn_client_conflict_get_operation(conflict);
3584 NULL, NULL, &incoming_kind, conflict, scratch_pool,
3595 NULL, NULL, &incoming_kind, conflict, scratch_pool,
3655 * be chosen to "follow" the incoming move when resolving a tree conflict.
4784 svn_client_conflict_t *conflict,
4798 if (conflict->tree_conflict_incoming_details == NULL)
4801 conflict, ctx, result_pool, scratch_pool));
4803 conflict_operation = svn_client_conflict_get_operation(conflict);
4804 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
4806 &old_repos_relpath, &old_rev, NULL, conflict, scratch_pool,
4809 &new_repos_relpath, &new_rev, NULL, conflict, scratch_pool,
4812 details = conflict->tree_conflict_incoming_details;
4930 /* Find conflict details in the case where a revision which added a node was
5006 svn_client_conflict_t *conflict,
5016 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
5017 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
5021 NULL, conflict,
5023 details->wc_move_targets = apr_hash_make(conflict->pool);
5034 conflict->pool, scratch_pool));
5054 /* Only one of these will be present for any given conflict. */
5065 &options, conflict, ctx, scratch_pool, scratch_pool));
5072 conflict->recommended_option_id = option_id;
5085 conflict_tree_get_details_incoming_delete(svn_client_conflict_t *conflict,
5100 &old_repos_relpath, &old_rev, &old_kind, conflict, scratch_pool,
5103 &new_repos_relpath, &new_rev, &new_kind, conflict, scratch_pool,
5106 conflict,
5108 operation = svn_client_conflict_get_operation(conflict);
5130 conflict->local_abspath,
5140 conflict, ctx,
5156 &moves, conflict,
5157 svn_dirent_basename(conflict->local_abspath, scratch_pool),
5160 ctx, conflict->pool, scratch_pool));
5169 details = apr_pcalloc(conflict->pool, sizeof(*details));
5172 details->repos_relpath = apr_pstrdup(conflict->pool,
5185 svn_client_conflict_get_local_abspath(conflict),
5186 conflict->pool, scratch_pool));
5206 &moves, conflict,
5210 conflict->pool, scratch_pool));
5219 details = apr_pcalloc(conflict->pool, sizeof(*details));
5222 details->repos_relpath = apr_pstrdup(conflict->pool,
5224 details->rev_author = apr_pstrdup(conflict->pool,
5237 svn_client_conflict_get_local_abspath(conflict),
5238 conflict->pool, scratch_pool));
5246 conflict->tree_conflict_incoming_details = details;
5249 SVN_ERR(init_wc_move_targets(details, conflict, ctx, scratch_pool));
5282 conflict_tree_get_details_incoming_add(svn_client_conflict_t *conflict,
5295 &old_repos_relpath, &old_rev, NULL, conflict, scratch_pool,
5298 &new_repos_relpath, &new_rev, NULL, conflict, scratch_pool,
5301 conflict,
5303 operation = svn_client_conflict_get_operation(conflict);
5315 * the addition or deletion caused the conflict. */
5335 details = apr_pcalloc(conflict->pool, sizeof(*details));
5337 b.victim_abspath = svn_client_conflict_get_local_abspath(conflict),
5352 details->repos_relpath = apr_pstrdup(conflict->pool, b.repos_relpath);
5355 details->added_rev_author = apr_pstrdup(conflict->pool,
5377 details->deleted_rev_author = apr_pstrdup(conflict->pool,
5409 details = apr_pcalloc(conflict->pool, sizeof(*details));
5410 b.victim_abspath = svn_client_conflict_get_local_abspath(conflict);
5426 details->repos_relpath = apr_pstrdup(conflict->pool, b.repos_relpath);
5429 details->added_rev_author = apr_pstrdup(conflict->pool,
5449 &moves, conflict,
5455 conflict->pool, scratch_pool));
5464 details = apr_pcalloc(conflict->pool, sizeof(*details));
5465 details->repos_relpath = apr_pstrdup(conflict->pool,
5468 details->deleted_rev_author = apr_pstrdup(conflict->pool,
5477 conflict->tree_conflict_incoming_details = details;
5767 svn_client_conflict_t *conflict,
5783 if (conflict->tree_conflict_incoming_details == NULL)
5785 incoming_change_description, conflict, ctx,
5788 conflict_operation = svn_client_conflict_get_operation(conflict);
5789 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
5792 &old_repos_relpath, &old_rev, &old_node_kind, conflict,
5795 &new_repos_relpath, &new_rev, &new_node_kind, conflict,
5798 details = conflict->tree_conflict_incoming_details;
5964 conflict_tree_get_details_incoming_edit(svn_client_conflict_t *conflict,
5984 &old_repos_relpath, &old_rev, &old_node_kind, conflict,
5987 &new_repos_relpath, &new_rev, &new_node_kind, conflict,
5990 conflict,
5992 operation = svn_client_conflict_get_operation(conflict);
6035 b.victim_abspath = svn_client_conflict_get_local_abspath(conflict);
6036 b.result_pool = conflict->pool;
6039 conflict->pool, 0,
6053 conflict->tree_conflict_incoming_details = b.edits;
6209 svn_client_conflict_t *conflict,
6224 if (conflict->tree_conflict_incoming_details == NULL)
6226 incoming_change_description, conflict, ctx,
6230 &old_repos_relpath, &old_rev, &old_node_kind, conflict,
6233 &new_repos_relpath, &new_rev, &new_node_kind, conflict,
6236 conflict_operation = svn_client_conflict_get_operation(conflict);
6238 edits = conflict->tree_conflict_incoming_details;
6367 svn_client_conflict_t *conflict,
6372 SVN_ERR(conflict->tree_conflict_get_incoming_description_func(
6374 conflict, ctx, result_pool, scratch_pool));
6376 SVN_ERR(conflict->tree_conflict_get_local_description_func(
6378 conflict, ctx, result_pool, scratch_pool));
6395 svn_client_conflict_t *conflict,
6405 svn_client_conflict_t *conflict,
6417 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6436 conflict->resolution_text = option_id;
6444 svn_client_conflict_t *conflict,
6458 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6485 for (hi = apr_hash_first(scratch_pool, conflict->prop_conflicts);
6491 svn_hash_sets(conflict->resolved_props,
6492 apr_pstrdup(apr_hash_pool_get(conflict->resolved_props),
6495 svn_hash_sets(conflict->prop_conflicts, this_propname, NULL);
6498 conflict->legacy_prop_conflict_propname = NULL;
6502 svn_hash_sets(conflict->resolved_props,
6503 apr_pstrdup(apr_hash_pool_get(conflict->resolved_props),
6506 svn_hash_sets(conflict->prop_conflicts, propname, NULL);
6508 if (apr_hash_count(conflict->prop_conflicts) > 0)
6509 conflict->legacy_prop_conflict_propname =
6511 conflict->prop_conflicts));
6513 conflict->legacy_prop_conflict_propname = NULL;
6522 svn_client_conflict_t *conflict,
6532 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6536 _("Tree conflict on '%s' can only be resolved "
6561 conflict->resolution_tree = option_id;
6569 svn_client_conflict_t *conflict,
6577 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6594 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
6602 svn_client_conflict_t *conflict,
6610 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6627 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
6635 svn_client_conflict_t *conflict,
6643 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6661 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
6667 * incoming add vs add tree conflict exists after an update operation.
6672 * such modifications without also clearing the conflict marker. */
6675 svn_client_conflict_t *conflict,
6694 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6699 operation = svn_client_conflict_get_operation(conflict);
6704 &incoming_new_kind, conflict, scratch_pool,
6720 _("Cannot resolve tree conflict on '%s' "
6726 _("Cannot resolve tree conflict on '%s' "
6740 _("Cannot resolve tree conflict on '%s' "
6749 _("Cannot resolve tree conflict on '%s' "
6765 _("Cannot resolve tree conflict on '%s' "
6775 _("Cannot resolve tree conflict on '%s' "
6793 _("Cannot resolve tree conflict on '%s' "
6801 _("Cannot resolve tree conflict on '%s' "
6817 svn_client_conflict_t *conflict,
6826 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6827 operation = svn_client_conflict_get_operation(conflict);
6835 err = verify_local_state_for_incoming_add_upon_update(conflict, option,
6841 /* All other options for this conflict actively fetch the incoming
6861 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
6887 svn_client_conflict_t *conflict,
6905 local_abspath = svn_client_conflict_get_local_abspath(conflict);
6906 local_change = svn_client_conflict_get_local_change(conflict);
6974 NULL, NULL, /* conflict versions */
6978 NULL, NULL, /* conflict func/baton */
7011 /* And also about the successfully resolved tree conflict. */
7017 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
7029 svn_client_conflict_t *conflict,
7052 local_abspath = svn_client_conflict_get_local_abspath(conflict);
7067 NULL, conflict, scratch_pool,
7070 conflict, scratch_pool,
7114 NULL, NULL, /* conflict versions */
7118 NULL, NULL, /* conflict func/baton */
7143 /* And also about the successfully resolved tree conflict. */
7149 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
7158 svn_client_conflict_t *conflict,
7185 local_abspath = svn_client_conflict_get_local_abspath(conflict);
7211 NULL, conflict, scratch_pool,
7214 conflict, scratch_pool,
7298 NULL, NULL, /* conflict versions */
7302 NULL, NULL, /* conflict func/baton */
7343 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
7365 svn_wc_conflict_description2_t *conflict;
7381 conflict = svn_wc_conflict_description_create_tree2(local_abspath,
7387 conflict->action = incoming_change;
7388 conflict->reason = local_change;
7390 SVN_ERR(svn_wc__add_tree_conflict(wc_ctx, conflict, scratch_pool));
7617 NULL, NULL, /* conflict versions */
7621 NULL, NULL, /* conflict func/baton */
7823 svn_client_conflict_t *conflict,
7842 local_abspath = svn_client_conflict_get_local_abspath(conflict);
7844 details = conflict->tree_conflict_incoming_details;
7848 "details for tree conflict at '%s' to be "
7856 conflict, scratch_pool,
7863 NULL, conflict, scratch_pool, scratch_pool));
7866 NULL, conflict, scratch_pool, scratch_pool));
7925 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
7933 svn_client_conflict_t *conflict,
7942 local_abspath = svn_client_conflict_get_local_abspath(conflict);
7943 local_change = svn_client_conflict_get_local_change(conflict);
7990 /* Resolve a dir/dir "incoming add vs local obstruction" tree conflict by
7995 svn_client_conflict_t *conflict,
8011 local_abspath = svn_client_conflict_get_local_abspath(conflict);
8016 NULL, conflict, scratch_pool,
8019 conflict, scratch_pool,
8143 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
8151 svn_client_conflict_t *conflict,
8156 conflict,
8166 svn_client_conflict_t *conflict,
8171 conflict,
8177 /* Ensure the conflict victim is a copy of itself from before it was deleted.
8178 * Update and switch are supposed to set this up when flagging the conflict. */
8184 svn_client_conflict_t *conflict,
8199 ctx->wc_ctx, conflict->local_abspath,
8203 _("Cannot resolve tree conflict on '%s' "
8209 conflict->local_abspath),
8214 _("Cannot resolve tree conflict on '%s' "
8220 wcroot_abspath, conflict->local_abspath),
8226 _("Cannot resolve tree conflict on '%s' "
8232 wcroot_abspath, conflict->local_abspath),
8240 &old_repos_relpath, NULL, NULL, conflict,
8245 _("Cannot resolve tree conflict on '%s' "
8251 wcroot_abspath, conflict->local_abspath),
8262 &old_repos_relpath, NULL, NULL, conflict,
8267 _("Cannot resolve tree conflict on '%s' "
8274 conflict->local_abspath),
8284 * incoming deletion tree conflict exists.
8289 * such modifications without also clearing the conflict marker. */
8291 verify_local_state_for_incoming_delete(svn_client_conflict_t *conflict,
8301 local_abspath = svn_client_conflict_get_local_abspath(conflict);
8305 operation = svn_client_conflict_get_operation(conflict);
8306 local_change = svn_client_conflict_get_local_change(conflict);
8313 details = conflict->tree_conflict_incoming_details;
8317 "details for tree conflict at '%s' to be "
8331 conflict->local_abspath),
8336 details, operation, wcroot_abspath, conflict, ctx,
8346 svn_client_conflict_tree_get_victim_node_kind(conflict);
8351 _("Cannot resolve tree conflict on '%s' "
8355 wcroot_abspath, conflict->local_abspath),
8367 svn_client_conflict_t *conflict,
8377 local_abspath = svn_client_conflict_get_local_abspath(conflict);
8383 err = verify_local_state_for_incoming_delete(conflict, option, ctx,
8405 conflict->resolution_tree = option_id;
8413 svn_client_conflict_t *conflict,
8424 local_abspath = svn_client_conflict_get_local_abspath(conflict);
8432 err = verify_local_state_for_incoming_delete(conflict, option, ctx,
8437 /* Delete the tree conflict victim. Marks the conflict resolved. */
8474 conflict->resolution_tree = option_id;
8482 svn_client_conflict_t *conflict,
8515 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
8516 local_change = svn_client_conflict_get_local_change(conflict);
8517 operation = svn_client_conflict_get_operation(conflict);
8518 details = conflict->tree_conflict_incoming_details;
8521 _("The specified conflict resolution option "
8522 "requires details for tree conflict at '%s' "
8529 "conflict at '%s'"), operation,
8540 conflict, scratch_pool,
8544 NULL, conflict, scratch_pool,
8548 NULL, conflict, scratch_pool,
8584 /* This is an incoming move vs local move conflict.
8590 local_details = conflict->tree_conflict_local_details;
8609 err = verify_local_state_for_incoming_delete(conflict, option, ctx,
8615 /* Get a copy of the conflict victim's properties. */
8663 /* Overwrite the moved file with the conflict victim's content.
8667 * the conflict victim ('mine'), and the moved file ('theirs') which
8727 NULL, NULL, /* conflict versions */
8732 NULL, NULL, /* conflict func/baton */
8767 /* Delete the tree conflict victim (clears the tree conflict marker). */
8777 /* Clear tree conflict marker. */
8793 conflict->resolution_tree = option_id;
8810 * Resolve an incoming move vs local move conflict by merging from the
8815 svn_client_conflict_t *conflict,
8848 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
8849 operation = svn_client_conflict_get_operation(conflict);
8850 incoming_details = conflict->tree_conflict_incoming_details;
8853 _("The specified conflict resolution option "
8854 "requires details for tree conflict at '%s' "
8861 "conflict at '%s'"), operation,
8869 conflict, scratch_pool,
8873 NULL, conflict, scratch_pool,
8877 NULL, conflict, scratch_pool,
8911 local_details = conflict->tree_conflict_local_details;
8950 NULL, NULL, /* conflict versions */
8955 NULL, NULL, /* conflict func/baton */
9003 conflict->resolution_tree = option_id;
9015 * Resolve an incoming move vs local move conflict by moving the locally moved
9019 svn_client_conflict_t *conflict,
9046 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
9047 operation = svn_client_conflict_get_operation(conflict);
9048 incoming_details = conflict->tree_conflict_incoming_details;
9051 _("The specified conflict resolution option "
9052 "requires details for tree conflict at '%s' "
9060 "conflict at '%s'"), operation,
9068 conflict, scratch_pool,
9072 NULL, conflict, scratch_pool,
9076 NULL, conflict, scratch_pool,
9086 local_details = conflict->tree_conflict_local_details;
9119 * since conflict victims can't be
9151 conflict->resolution_tree = option_id;
9163 * Resolve an incoming move vs local move conflict by merging from the
9168 svn_client_conflict_t *conflict,
9194 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
9195 operation = svn_client_conflict_get_operation(conflict);
9196 incoming_details = conflict->tree_conflict_incoming_details;
9199 _("The specified conflict resolution option "
9200 "requires details for tree conflict at '%s' "
9208 "conflict at '%s'"), operation,
9217 conflict, scratch_pool,
9221 NULL, conflict, scratch_pool,
9225 NULL, conflict, scratch_pool,
9235 local_details = conflict->tree_conflict_local_details;
9291 * since conflict victims can't be
9313 conflict->resolution_tree = option_id;
9327 svn_client_conflict_t *conflict,
9355 local_abspath = svn_client_conflict_get_local_abspath(conflict);
9356 operation = svn_client_conflict_get_operation(conflict);
9357 details = conflict->tree_conflict_incoming_details;
9360 _("The specified conflict resolution option "
9361 "requires details for tree conflict at '%s' "
9371 conflict, scratch_pool,
9375 NULL, conflict, scratch_pool,
9379 NULL, conflict, scratch_pool,
9382 /* Get repository location of the moved-away node (the conflict victim). */
9421 _("Cannot resolve tree conflict on '%s' "
9434 _("Cannot resolve tree conflict on '%s' "
9443 err = verify_local_state_for_incoming_delete(conflict, option, ctx,
9493 * since conflict victims can't be
9527 * Delete the tree conflict victim (clears the tree conflict marker). */
9545 conflict->resolution_tree = option_id;
9561 svn_client_conflict_t *conflict,
9590 conflict->local_abspath, scratch_pool,
9593 details = conflict->tree_conflict_local_details;
9596 conflict, scratch_pool,
9600 NULL, conflict, scratch_pool,
9604 NULL, conflict, scratch_pool,
9627 wcroot_abspath, conflict->local_abspath),
9675 svn_dirent_get_longest_ancestor(conflict->local_abspath,
9686 NULL, NULL, /* conflict versions */
9691 NULL, NULL, /* conflict func/baton */
9701 err = svn_wc__del_tree_conflict(ctx->wc_ctx, conflict->local_abspath,
9726 /* And also about the successfully resolved tree conflict. */
9727 notify = svn_wc_create_notify(conflict->local_abspath,
9733 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
9741 svn_client_conflict_t *conflict,
9760 details = conflict->tree_conflict_local_details;
9763 conflict, scratch_pool,
9767 NULL, conflict, scratch_pool,
9771 NULL, conflict, scratch_pool,
9791 svn_dirent_get_longest_ancestor(conflict->local_abspath,
9798 err = svn_wc__del_tree_conflict(ctx->wc_ctx, conflict->local_abspath,
9819 * since conflict victims can't be
9847 /* And also about the successfully resolved tree conflict. */
9848 notify = svn_wc_create_notify(conflict->local_abspath,
9854 conflict->resolution_tree = svn_client_conflict_option_get_id(option);
9860 assert_text_conflict(svn_client_conflict_t *conflict, apr_pool_t *scratch_pool)
9865 conflict, scratch_pool,
9874 assert_prop_conflict(svn_client_conflict_t *conflict, apr_pool_t *scratch_pool)
9879 conflict, scratch_pool,
9889 assert_tree_conflict(svn_client_conflict_t *conflict, apr_pool_t *scratch_pool)
9894 conflict, scratch_pool,
9902 /* Helper to add to conflict resolution option to array of OPTIONS.
9905 * Returns pointer to the created conflict resolution option. */
9908 svn_client_conflict_t *conflict,
9921 option->conflict = conflict;
9931 svn_client_conflict_t *conflict,
9938 SVN_ERR(assert_text_conflict(conflict, scratch_pool));
9943 add_resolution_option(*options, conflict,
9946 _("skip this conflict and leave it unresolved"),
9949 mime_type = svn_client_conflict_text_get_mime_type(conflict);
9952 /* Resolver options for a binary file conflict. */
9953 add_resolution_option(*options, conflict,
9959 add_resolution_option(*options, conflict,
9965 add_resolution_option(*options, conflict,
9973 /* Resolver options for a text file conflict. */
9974 add_resolution_option(*options, conflict,
9980 add_resolution_option(*options, conflict,
9986 add_resolution_option(*options, conflict,
9992 add_resolution_option(*options, conflict,
9995 _("accept incoming changes only where they conflict"),
9998 add_resolution_option(*options, conflict,
10001 _("reject incoming changes which conflict and accept the rest"),
10004 add_resolution_option(*options, conflict,
10016 svn_client_conflict_t *conflict,
10021 SVN_ERR(assert_prop_conflict(conflict, scratch_pool));
10026 add_resolution_option(*options, conflict,
10029 _("skip this conflict and leave it unresolved"),
10032 add_resolution_option(*options, conflict,
10038 add_resolution_option(*options, conflict,
10044 add_resolution_option(*options, conflict,
10050 add_resolution_option(*options, conflict,
10053 _("accept incoming changes only where they conflict"),
10056 add_resolution_option(*options, conflict,
10059 _("reject changes which conflict and accept the rest"),
10062 add_resolution_option(*options, conflict,
10071 /* Configure 'accept current wc state' resolution option for a tree conflict. */
10073 configure_option_accept_current_wc_state(svn_client_conflict_t *conflict,
10081 operation = svn_client_conflict_get_operation(conflict);
10082 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10083 local_change = svn_client_conflict_get_local_change(conflict);
10101 add_resolution_option(options, conflict,
10110 /* Configure 'update move destination' resolution option for a tree conflict. */
10112 configure_option_update_move_destination(svn_client_conflict_t *conflict,
10119 operation = svn_client_conflict_get_operation(conflict);
10120 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10121 local_change = svn_client_conflict_get_local_change(conflict);
10129 options, conflict,
10140 * conflict. */
10143 svn_client_conflict_t *conflict,
10151 operation = svn_client_conflict_get_operation(conflict);
10152 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10153 local_change = svn_client_conflict_get_local_change(conflict);
10154 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10164 options, conflict,
10174 /* Configure 'incoming add ignore' resolution option for a tree conflict. */
10176 configure_option_incoming_add_ignore(svn_client_conflict_t *conflict,
10188 operation = svn_client_conflict_get_operation(conflict);
10189 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10190 local_change = svn_client_conflict_get_local_change(conflict);
10191 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10194 NULL, conflict, scratch_pool,
10207 conflict->local_abspath, scratch_pool,
10239 options, conflict, svn_client_conflict_option_incoming_add_ignore,
10247 * conflict. */
10249 configure_option_incoming_added_file_text_merge(svn_client_conflict_t *conflict,
10262 operation = svn_client_conflict_get_operation(conflict);
10263 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10264 local_change = svn_client_conflict_get_local_change(conflict);
10265 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10268 &incoming_new_kind, conflict, scratch_pool,
10282 conflict->local_abspath, scratch_pool,
10291 conflict->local_abspath),
10298 conflict->local_abspath),
10303 options, conflict,
10315 * tree conflict. */
10318 svn_client_conflict_t *conflict,
10331 operation = svn_client_conflict_get_operation(conflict);
10332 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10333 local_change = svn_client_conflict_get_local_change(conflict);
10334 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10337 &incoming_new_kind, conflict, scratch_pool,
10350 conflict->local_abspath, scratch_pool,
10357 conflict->local_abspath),
10362 options, conflict,
10372 * conflict. */
10374 configure_option_incoming_added_dir_merge(svn_client_conflict_t *conflict,
10387 operation = svn_client_conflict_get_operation(conflict);
10388 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10389 local_change = svn_client_conflict_get_local_change(conflict);
10390 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10393 &incoming_new_kind, conflict, scratch_pool,
10409 conflict->local_abspath, scratch_pool,
10413 if (conflict->tree_conflict_incoming_details == NULL)
10421 conflict->local_abspath),
10429 conflict->local_abspath),
10433 add_resolution_option(options, conflict,
10445 * conflict. */
10447 configure_option_incoming_added_dir_replace(svn_client_conflict_t *conflict,
10460 operation = svn_client_conflict_get_operation(conflict);
10461 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10462 local_change = svn_client_conflict_get_local_change(conflict);
10463 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10466 &incoming_new_kind, conflict, scratch_pool,
10479 conflict->local_abspath, scratch_pool,
10485 conflict->local_abspath),
10489 options, conflict,
10499 * for a tree conflict. */
10502 svn_client_conflict_t *conflict,
10515 operation = svn_client_conflict_get_operation(conflict);
10516 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10517 local_change = svn_client_conflict_get_local_change(conflict);
10518 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10521 &incoming_new_kind, conflict, scratch_pool,
10534 conflict->local_abspath, scratch_pool,
10541 conflict->local_abspath),
10546 options, conflict,
10555 /* Configure 'incoming delete ignore' resolution option for a tree conflict. */
10557 configure_option_incoming_delete_ignore(svn_client_conflict_t *conflict,
10568 operation = svn_client_conflict_get_operation(conflict);
10569 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10570 local_change = svn_client_conflict_get_local_change(conflict);
10573 NULL, conflict, scratch_pool,
10582 incoming_details = conflict->tree_conflict_incoming_details;
10595 /* If the local item was deleted and conflict details were fetched
10609 local_details = conflict->tree_conflict_local_details;
10621 add_resolution_option(options, conflict,
10630 /* Configure 'incoming delete accept' resolution option for a tree conflict. */
10632 configure_option_incoming_delete_accept(svn_client_conflict_t *conflict,
10642 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10643 local_change = svn_client_conflict_get_local_change(conflict);
10646 NULL, conflict, scratch_pool,
10654 incoming_details = conflict->tree_conflict_incoming_details;
10673 conflict->local_abspath, scratch_pool,
10675 local_abspath = svn_client_conflict_get_local_abspath(conflict);
10682 options, conflict,
10695 svn_client_conflict_t *conflict,
10706 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
10707 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10712 operation = svn_client_conflict_get_operation(conflict);
10719 /* This is an incoming move vs local move conflict. */
10722 details = conflict->tree_conflict_incoming_details;
10781 * a tree conflict. */
10783 configure_option_incoming_move_file_merge(svn_client_conflict_t *conflict,
10798 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10799 local_change = svn_client_conflict_get_local_change(conflict);
10800 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10803 &incoming_old_kind, conflict, scratch_pool,
10807 &incoming_new_kind, conflict, scratch_pool,
10821 details = conflict->tree_conflict_incoming_details;
10835 conflict, ctx,
10840 options, conflict,
10850 * a tree conflict. */
10852 configure_option_incoming_dir_merge(svn_client_conflict_t *conflict,
10867 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10868 local_change = svn_client_conflict_get_local_change(conflict);
10869 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
10872 &incoming_old_kind, conflict, scratch_pool,
10876 &incoming_new_kind, conflict, scratch_pool,
10890 details = conflict->tree_conflict_incoming_details;
10904 conflict, ctx,
10908 add_resolution_option(options, conflict,
10918 * a tree conflict. */
10921 svn_client_conflict_t *conflict,
10936 operation = svn_client_conflict_get_operation(conflict);
10937 incoming_change = svn_client_conflict_get_incoming_change(conflict);
10938 local_change = svn_client_conflict_get_local_change(conflict);
10941 &incoming_old_kind, conflict, scratch_pool,
10945 &incoming_new_kind, conflict, scratch_pool,
10956 conflict->local_abspath,
10959 details = conflict->tree_conflict_local_details;
10985 options, conflict,
10993 options, conflict,
11005 * a tree conflict. */
11007 configure_option_sibling_move_merge(svn_client_conflict_t *conflict,
11022 operation = svn_client_conflict_get_operation(conflict);
11023 incoming_change = svn_client_conflict_get_incoming_change(conflict);
11024 local_change = svn_client_conflict_get_local_change(conflict);
11027 &incoming_old_kind, conflict, scratch_pool,
11031 &incoming_new_kind, conflict, scratch_pool,
11042 conflict->local_abspath,
11045 details = conflict->tree_conflict_local_details;
11052 apr_pstrdup(conflict->pool,
11069 options, conflict,
11077 options, conflict,
11092 * of the conflict victim.
11094 * be chosen to find a suitable merge target when resolving a tree conflict.
11105 * Resolve an incoming move vs local move conflict by merging from the
11114 svn_client_conflict_t *conflict,
11146 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
11147 operation = svn_client_conflict_get_operation(conflict);
11148 incoming_details = conflict->tree_conflict_incoming_details;
11151 _("The specified conflict resolution option "
11152 "requires details for tree conflict at '%s' "
11159 "conflict at '%s'"), operation,
11167 conflict, scratch_pool,
11171 NULL, conflict, scratch_pool,
11175 NULL, conflict, scratch_pool,
11209 local_details = conflict->tree_conflict_local_details;
11247 NULL, NULL, /* conflict versions */
11252 NULL, NULL, /* conflict func/baton */
11306 conflict->resolution_tree = option_id;
11318 * Resolve an incoming move vs local move conflict by merging from the
11324 svn_client_conflict_t *conflict,
11356 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
11357 operation = svn_client_conflict_get_operation(conflict);
11358 incoming_details = conflict->tree_conflict_incoming_details;
11361 _("The specified conflict resolution option "
11362 "requires details for tree conflict at '%s' "
11369 "conflict at '%s'"), operation,
11378 conflict, scratch_pool,
11382 NULL, conflict, scratch_pool,
11386 NULL, conflict, scratch_pool,
11420 local_details = conflict->tree_conflict_local_details;
11458 NULL, NULL, /* conflict versions */
11463 NULL, NULL, /* conflict func/baton */
11512 conflict->resolution_tree = option_id;
11526 svn_client_conflict_t *conflict,
11536 conflict, scratch_pool, scratch_pool));
11538 details = apr_pcalloc(conflict->pool, sizeof(*details));
11540 details->wc_move_targets = apr_array_make(conflict->pool, 1,
11543 /* Search the WC for copies of the conflict victim. */
11545 conflict->local_abspath,
11549 conflict->pool,
11552 conflict->tree_conflict_local_details = details;
11560 svn_client_conflict_t *conflict,
11567 operation = svn_client_conflict_get_operation(conflict);
11572 incoming_details = conflict->tree_conflict_incoming_details;
11590 local_details = conflict->tree_conflict_local_details;
11605 local_details = conflict->tree_conflict_local_details;
11622 svn_client_conflict_t *conflict,
11636 conflict, scratch_pool));
11641 conflict->local_abspath, scratch_pool,
11644 operation = svn_client_conflict_get_operation(conflict);
11682 svn_client_conflict_t *conflict,
11696 conflict, scratch_pool));
11701 conflict->local_abspath, scratch_pool,
11704 operation = svn_client_conflict_get_operation(conflict);
11709 description, conflict, ctx, local_moved_to_abspath,
11730 /* Configure 'both moved file merge' resolution options for a tree conflict. */
11732 configure_option_both_moved_file_merge(svn_client_conflict_t *conflict,
11750 conflict->local_abspath, scratch_pool,
11753 operation = svn_client_conflict_get_operation(conflict);
11754 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
11755 incoming_change = svn_client_conflict_get_incoming_change(conflict);
11756 local_change = svn_client_conflict_get_local_change(conflict);
11759 &incoming_old_kind, conflict, scratch_pool,
11763 &incoming_new_kind, conflict, scratch_pool,
11782 &description, conflict, ctx, conflict->pool, scratch_pool));
11788 options, conflict, svn_client_conflict_option_both_moved_file_merge,
11796 &description, conflict, ctx, conflict->pool, scratch_pool));
11798 add_resolution_option(options, conflict,
11809 /* Configure 'both moved dir merge' resolution options for a tree conflict. */
11811 configure_option_both_moved_dir_merge(svn_client_conflict_t *conflict,
11829 conflict->local_abspath, scratch_pool,
11832 operation = svn_client_conflict_get_operation(conflict);
11833 victim_node_kind = svn_client_conflict_tree_get_victim_node_kind(conflict);
11834 incoming_change = svn_client_conflict_get_incoming_change(conflict);
11835 local_change = svn_client_conflict_get_local_change(conflict);
11838 &incoming_old_kind, conflict, scratch_pool,
11842 &incoming_new_kind, conflict, scratch_pool,
11860 incoming_details = conflict->tree_conflict_incoming_details;
11865 local_details = conflict->tree_conflict_local_details;
11894 options, conflict, svn_client_conflict_option_both_moved_dir_merge,
11899 &description, conflict, ctx, local_moved_to_abspath,
11901 add_resolution_option(options, conflict,
11949 svn_client_conflict_t *conflict = option->conflict;
11973 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
11974 operation = svn_client_conflict_get_operation(conflict);
11975 incoming_change = svn_client_conflict_get_incoming_change(conflict);
11976 local_change = svn_client_conflict_get_local_change(conflict);
11984 details = conflict->tree_conflict_local_details;
11989 "requires details for tree conflict at '%s' "
12005 details = conflict->tree_conflict_incoming_details;
12009 "requires details for tree conflict at '%s' "
12095 svn_client_conflict_t *conflict = option->conflict;
12115 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
12116 operation = svn_client_conflict_get_operation(conflict);
12117 incoming_change = svn_client_conflict_get_incoming_change(conflict);
12118 local_change = svn_client_conflict_get_local_change(conflict);
12126 details = conflict->tree_conflict_local_details;
12130 "for tree conflict at '%s' to be fetched "
12143 &option->description, conflict, ctx,
12144 conflict->pool, scratch_pool));
12152 details = conflict->tree_conflict_incoming_details;
12156 "for tree conflict at '%s' to be fetched "
12176 conflict, ctx,
12178 conflict->pool,
12208 svn_client_conflict_t *conflict = option->conflict;
12233 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
12234 operation = svn_client_conflict_get_operation(conflict);
12235 incoming_change = svn_client_conflict_get_incoming_change(conflict);
12236 local_change = svn_client_conflict_get_local_change(conflict);
12244 details = conflict->tree_conflict_local_details;
12249 "requires details for tree conflict at '%s' "
12295 details = conflict->tree_conflict_local_details;
12299 "requires details for tree conflict at '%s' "
12323 details = conflict->tree_conflict_incoming_details;
12327 "requires details for tree conflict at '%s' "
12377 svn_client_conflict_t *conflict = option->conflict;
12397 victim_abspath = svn_client_conflict_get_local_abspath(conflict);
12398 operation = svn_client_conflict_get_operation(conflict);
12399 incoming_change = svn_client_conflict_get_incoming_change(conflict);
12400 local_change = svn_client_conflict_get_local_change(conflict);
12412 conflict->local_abspath,
12416 details = conflict->tree_conflict_local_details;
12421 "for tree conflict at '%s' to be fetched "
12445 conflict->pool, _("apply changes to '%s'"),
12471 &option->description, conflict, ctx,
12472 conflict->pool, scratch_pool));
12482 details = conflict->tree_conflict_local_details;
12486 "for tree conflict at '%s' to be fetched "
12506 &option->description, conflict, ctx, conflict->pool,
12510 &option->description, conflict, ctx, conflict->pool, scratch_pool));
12529 details = conflict->tree_conflict_incoming_details;
12533 "for tree conflict at '%s' to be fetched "
12559 conflict, ctx,
12561 conflict->pool,
12585 svn_client_conflict_t *conflict,
12590 SVN_ERR(assert_tree_conflict(conflict, scratch_pool));
12596 add_resolution_option(*options, conflict,
12599 _("skip this conflict and leave it unresolved"),
12602 /* Add an option which marks the conflict resolved. */
12603 SVN_ERR(configure_option_accept_current_wc_state(conflict, *options));
12606 SVN_ERR(configure_option_update_move_destination(conflict, *options));
12607 SVN_ERR(configure_option_update_raise_moved_away_children(conflict,
12609 SVN_ERR(configure_option_incoming_add_ignore(conflict, ctx, *options,
12611 SVN_ERR(configure_option_incoming_added_file_text_merge(conflict, ctx,
12614 SVN_ERR(configure_option_incoming_added_file_replace_and_merge(conflict,
12618 SVN_ERR(configure_option_incoming_added_dir_merge(conflict, ctx,
12621 SVN_ERR(configure_option_incoming_added_dir_replace(conflict, ctx,
12624 SVN_ERR(configure_option_incoming_added_dir_replace_and_merge(conflict,
12628 SVN_ERR(configure_option_incoming_delete_ignore(conflict, ctx, *options,
12630 SVN_ERR(configure_option_incoming_delete_accept(conflict, ctx, *options,
12632 SVN_ERR(configure_option_incoming_move_file_merge(conflict, ctx, *options,
12634 SVN_ERR(configure_option_incoming_dir_merge(conflict, ctx, *options,
12636 SVN_ERR(configure_option_local_move_file_or_dir_merge(conflict, ctx,
12639 SVN_ERR(configure_option_sibling_move_merge(conflict, ctx, *options,
12641 SVN_ERR(configure_option_both_moved_file_merge(conflict, ctx, *options,
12643 SVN_ERR(configure_option_both_moved_dir_merge(conflict, ctx, *options,
12666 svn_client_conflict_tree_get_details(svn_client_conflict_t *conflict,
12670 SVN_ERR(assert_tree_conflict(conflict, scratch_pool));
12677 svn_client_conflict_get_local_abspath(conflict),
12684 /* Collecting conflict details may fail due to insufficient access rights.
12686 if (conflict->tree_conflict_get_incoming_details_func)
12688 conflict->tree_conflict_get_incoming_details_func(conflict, ctx,
12692 if (conflict->tree_conflict_get_local_details_func)
12694 conflict->tree_conflict_get_local_details_func(conflict, ctx,
12702 svn_client_conflict_get_local_abspath(conflict),
12733 svn_client_conflict_get_recommended_option_id(svn_client_conflict_t *conflict)
12735 return conflict->recommended_option_id;
12739 svn_client_conflict_text_resolve(svn_client_conflict_t *conflict,
12744 SVN_ERR(assert_text_conflict(conflict, scratch_pool));
12745 SVN_ERR(option->do_resolve_func(option, conflict, ctx, scratch_pool));
12773 svn_client_conflict_t *conflict,
12782 &resolution_options, conflict, ctx,
12789 _("Inapplicable conflict resolution option "
12791 svn_dirent_local_style(conflict->local_abspath,
12794 SVN_ERR(svn_client_conflict_text_resolve(conflict, option, ctx, scratch_pool));
12800 svn_client_conflict_text_get_resolution(svn_client_conflict_t *conflict)
12802 return conflict->resolution_text;
12806 svn_client_conflict_prop_resolve(svn_client_conflict_t *conflict,
12812 SVN_ERR(assert_prop_conflict(conflict, scratch_pool));
12814 SVN_ERR(option->do_resolve_func(option, conflict, ctx, scratch_pool));
12821 svn_client_conflict_t *conflict,
12831 &resolution_options, conflict, ctx,
12838 _("Inapplicable conflict resolution option "
12840 svn_dirent_local_style(conflict->local_abspath,
12842 SVN_ERR(svn_client_conflict_prop_resolve(conflict, propname, option, ctx,
12849 svn_client_conflict_prop_get_resolution(svn_client_conflict_t *conflict,
12854 option = svn_hash_gets(conflict->resolved_props, propname);
12862 svn_client_conflict_tree_resolve(svn_client_conflict_t *conflict,
12867 SVN_ERR(assert_tree_conflict(conflict, scratch_pool));
12868 SVN_ERR(option->do_resolve_func(option, conflict, ctx, scratch_pool));
12875 svn_client_conflict_t *conflict,
12884 &resolution_options, conflict, ctx,
12891 _("Inapplicable conflict resolution option "
12893 svn_dirent_local_style(conflict->local_abspath,
12895 SVN_ERR(svn_client_conflict_tree_resolve(conflict, option, ctx, scratch_pool));
12901 svn_client_conflict_tree_get_resolution(svn_client_conflict_t *conflict)
12903 return conflict->resolution_tree;
12906 /* Return the legacy conflict descriptor which is wrapped by CONFLICT. */
12908 get_conflict_desc2_t(svn_client_conflict_t *conflict)
12910 if (conflict->legacy_text_conflict)
12911 return conflict->legacy_text_conflict;
12913 if (conflict->legacy_tree_conflict)
12914 return conflict->legacy_tree_conflict;
12916 if (conflict->prop_conflicts && conflict->legacy_prop_conflict_propname)
12917 return svn_hash_gets(conflict->prop_conflicts,
12918 conflict->legacy_prop_conflict_propname);
12927 svn_client_conflict_t *conflict,
12932 *text_conflicted = (conflict->legacy_text_conflict != NULL);
12936 if (conflict->prop_conflicts)
12937 SVN_ERR(svn_hash_keys(props_conflicted, conflict->prop_conflicts,
12945 *tree_conflicted = (conflict->legacy_tree_conflict != NULL);
12951 svn_client_conflict_get_local_abspath(svn_client_conflict_t *conflict)
12953 return conflict->local_abspath;
12957 svn_client_conflict_get_operation(svn_client_conflict_t *conflict)
12959 return get_conflict_desc2_t(conflict)->operation;
12963 svn_client_conflict_get_incoming_change(svn_client_conflict_t *conflict)
12965 return get_conflict_desc2_t(conflict)->action;
12969 svn_client_conflict_get_local_change(svn_client_conflict_t *conflict)
12971 return get_conflict_desc2_t(conflict)->reason;
12977 svn_client_conflict_t *conflict,
12983 if (get_conflict_desc2_t(conflict)->src_left_version)
12985 get_conflict_desc2_t(conflict)->src_left_version->repos_url;
12986 else if (get_conflict_desc2_t(conflict)->src_right_version)
12988 get_conflict_desc2_t(conflict)->src_right_version->repos_url;
12995 if (get_conflict_desc2_t(conflict)->src_left_version)
12997 get_conflict_desc2_t(conflict)->src_left_version->repos_uuid;
12998 else if (get_conflict_desc2_t(conflict)->src_right_version)
13000 get_conflict_desc2_t(conflict)->src_right_version->repos_uuid;
13013 svn_client_conflict_t *conflict,
13019 if (get_conflict_desc2_t(conflict)->src_left_version)
13021 get_conflict_desc2_t(conflict)->src_left_version->path_in_repos;
13028 if (get_conflict_desc2_t(conflict)->src_left_version)
13030 get_conflict_desc2_t(conflict)->src_left_version->peg_rev;
13037 if (get_conflict_desc2_t(conflict)->src_left_version)
13039 get_conflict_desc2_t(conflict)->src_left_version->node_kind;
13052 svn_client_conflict_t *conflict,
13058 if (get_conflict_desc2_t(conflict)->src_right_version)
13060 get_conflict_desc2_t(conflict)->src_right_version->path_in_repos;
13067 if (get_conflict_desc2_t(conflict)->src_right_version)
13069 get_conflict_desc2_t(conflict)->src_right_version->peg_rev;
13076 if (get_conflict_desc2_t(conflict)->src_right_version)
13078 get_conflict_desc2_t(conflict)->src_right_version->node_kind;
13087 svn_client_conflict_tree_get_victim_node_kind(svn_client_conflict_t *conflict)
13089 SVN_ERR_ASSERT_NO_RETURN(assert_tree_conflict(conflict, conflict->pool)
13092 return get_conflict_desc2_t(conflict)->node_kind;
13100 svn_client_conflict_t *conflict,
13106 SVN_ERR(assert_prop_conflict(conflict, conflict->pool));
13108 desc = svn_hash_gets(conflict->prop_conflicts, propname);
13111 _("Property '%s' is not in conflict."), propname);
13133 svn_client_conflict_prop_get_reject_abspath(svn_client_conflict_t *conflict)
13135 SVN_ERR_ASSERT_NO_RETURN(assert_prop_conflict(conflict, conflict->pool)
13139 return get_conflict_desc2_t(conflict)->their_abspath;
13143 svn_client_conflict_text_get_mime_type(svn_client_conflict_t *conflict)
13145 SVN_ERR_ASSERT_NO_RETURN(assert_text_conflict(conflict, conflict->pool)
13148 return get_conflict_desc2_t(conflict)->mime_type;
13156 svn_client_conflict_t *conflict,
13160 SVN_ERR(assert_text_conflict(conflict, scratch_pool));
13164 if (svn_client_conflict_get_operation(conflict) ==
13168 *base_abspath = get_conflict_desc2_t(conflict)->base_abspath;
13172 *working_abspath = get_conflict_desc2_t(conflict)->my_abspath;
13175 *incoming_old_abspath = get_conflict_desc2_t(conflict)->base_abspath;
13178 *incoming_new_abspath = get_conflict_desc2_t(conflict)->their_abspath;
13183 /* Set up type-specific data for a new conflict object. */
13185 conflict_type_specific_setup(svn_client_conflict_t *conflict,
13195 conflict, scratch_pool,
13201 conflict->tree_conflict_get_incoming_description_func =
13203 conflict->tree_conflict_get_local_description_func =
13206 operation = svn_client_conflict_get_operation(conflict);
13207 incoming_change = svn_client_conflict_get_incoming_change(conflict);
13208 local_change = svn_client_conflict_get_local_change(conflict);
13214 conflict->tree_conflict_get_incoming_description_func =
13216 conflict->tree_conflict_get_incoming_details_func =
13221 conflict->tree_conflict_get_incoming_description_func =
13223 conflict->tree_conflict_get_incoming_details_func =
13228 conflict->tree_conflict_get_incoming_description_func =
13230 conflict->tree_conflict_get_incoming_details_func =
13236 conflict->tree_conflict_get_local_description_func =
13238 conflict->tree_conflict_get_local_details_func =
13244 conflict->tree_conflict_get_local_details_func =
13252 svn_client_conflict_get(svn_client_conflict_t **conflict,
13261 *conflict = apr_pcalloc(result_pool, sizeof(**conflict));
13263 (*conflict)->local_abspath = apr_pstrdup(result_pool, local_abspath);
13264 (*conflict)->resolution_text = svn_client_conflict_option_unspecified;
13265 (*conflict)->resolution_tree = svn_client_conflict_option_unspecified;
13266 (*conflict)->resolved_props = apr_hash_make(result_pool);
13267 (*conflict)->recommended_option_id = svn_client_conflict_option_unspecified;
13268 (*conflict)->pool = result_pool;
13270 /* Add all legacy conflict descriptors we can find. Eventually, this code
13280 add_legacy_desc_to_conflict(desc, *conflict, result_pool);
13283 SVN_ERR(conflict_type_specific_setup(*conflict, scratch_pool));
13301 resolving a tree conflict. */
13330 * Record a tree conflict resolution failure due to error condition ERR
13334 * existing tree conflict is blocking the resolution attempt, then
13367 svn_client_conflict_t *conflict;
13374 SVN_ERR(svn_client_conflict_get(&conflict, local_abspath, cswb->ctx,
13377 conflict, scratch_pool,
13380 conflict, scratch_pool);
13395 resolution = svn_client_conflict_tree_get_resolution(conflict);
13509 _("Unable to resolve pending conflict on '%s'"),