You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2015/06/23 14:55:47 UTC
svn commit: r1687045 [13/31] - in
/subversion/branches/svn-mergeinfo-normalizer: ./ build/ build/ac-macros/
build/generator/ build/generator/templates/ doc/
subversion/bindings/javahl/ subversion/bindings/javahl/native/
subversion/bindings/javahl/nativ...
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.c Tue Jun 23 12:55:43 2015
@@ -1142,6 +1142,7 @@ static svn_error_t *
generate_propconflict(svn_boolean_t *conflict_remains,
svn_wc__db_t *db,
const char *local_abspath,
+ svn_node_kind_t kind,
svn_wc_operation_t operation,
const svn_wc_conflict_version_t *left_version,
const svn_wc_conflict_version_t *right_version,
@@ -1159,24 +1160,11 @@ generate_propconflict(svn_boolean_t *con
svn_wc_conflict_result_t *result = NULL;
svn_wc_conflict_description2_t *cdesc;
const char *dirpath = svn_dirent_dirname(local_abspath, scratch_pool);
- svn_node_kind_t kind;
const svn_string_t *new_value = NULL;
- SVN_ERR(svn_wc__db_read_kind(&kind, db, local_abspath,
- FALSE /* allow_missing */,
- FALSE /* show_deleted */,
- FALSE /* show_hidden */,
- scratch_pool));
-
- if (kind == svn_node_none)
- return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL,
- _("The node '%s' was not found."),
- svn_dirent_local_style(local_abspath,
- scratch_pool));
-
cdesc = svn_wc_conflict_description_create_prop2(
local_abspath,
- (kind == svn_node_dir) ? svn_node_dir : svn_node_file,
+ kind,
propname, scratch_pool);
cdesc->operation = operation;
@@ -1681,7 +1669,13 @@ build_text_conflict_resolve_items(svn_sk
SVN_ERR_ASSERT(choice == svn_wc_conflict_choose_postpone);
}
- SVN_ERR_ASSERT(install_from_abspath != NULL);
+ if (install_from_abspath == NULL)
+ return svn_error_createf(SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, NULL,
+ _("Conflict on '%s' could not be resolved "
+ "because the chosen version of the file "
+ "is not available."),
+ svn_dirent_local_style(local_abspath,
+ scratch_pool));
/* ### It would be nice if we could somehow pass RECORD_FILEINFO
as true in some easy cases. */
@@ -1739,7 +1733,6 @@ read_text_conflict_desc(svn_wc_conflict_
svn_wc__db_t *db,
const char *local_abspath,
const svn_skel_t *conflict_skel,
- svn_boolean_t is_binary,
const char *mime_type,
svn_wc_operation_t operation,
const svn_wc_conflict_version_t *left_version,
@@ -1748,8 +1741,8 @@ read_text_conflict_desc(svn_wc_conflict_
apr_pool_t *scratch_pool)
{
*desc = svn_wc_conflict_description_create_text2(local_abspath, result_pool);
- (*desc)->is_binary = is_binary;
(*desc)->mime_type = mime_type;
+ (*desc)->is_binary = mime_type ? svn_mime_type_is_binary(mime_type) : FALSE;
(*desc)->operation = operation;
(*desc)->src_left_version = left_version;
(*desc)->src_right_version = right_version;
@@ -1839,6 +1832,7 @@ resolve_tree_conflict_on_node(svn_boolea
svn_error_t *
svn_wc__conflict_invoke_resolver(svn_wc__db_t *db,
const char *local_abspath,
+ svn_node_kind_t kind,
const svn_skel_t *conflict_skel,
const apr_array_header_t *merge_options,
svn_wc_conflict_resolver_func2_t resolver_func,
@@ -1915,7 +1909,7 @@ svn_wc__conflict_invoke_resolver(svn_wc_
SVN_ERR(cancel_func(cancel_baton));
SVN_ERR(generate_propconflict(&conflict_remains,
- db, local_abspath,
+ db, local_abspath, kind,
operation,
left_version,
right_version,
@@ -1960,7 +1954,7 @@ svn_wc__conflict_invoke_resolver(svn_wc_
scratch_pool, scratch_pool));
SVN_ERR(read_text_conflict_desc(&desc,
- db, local_abspath, conflict_skel, FALSE,
+ db, local_abspath, conflict_skel,
svn_prop_get_value(props,
SVN_PROP_MIME_TYPE),
operation, left_version, right_version,
@@ -2066,7 +2060,7 @@ read_prop_conflict_descs(apr_array_heade
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- const char *prop_reject_file;
+ const char *prop_reject_abspath;
apr_hash_t *base_props;
apr_hash_t *my_props;
apr_hash_t *their_old_props;
@@ -2074,8 +2068,16 @@ read_prop_conflict_descs(apr_array_heade
apr_hash_t *conflicted_props;
apr_hash_index_t *hi;
apr_pool_t *iterpool;
+ svn_boolean_t prop_conflicted;
- SVN_ERR(svn_wc__conflict_read_prop_conflict(&prop_reject_file,
+ SVN_ERR(svn_wc__conflict_read_info(&operation, NULL, NULL, &prop_conflicted,
+ NULL, db, local_abspath, conflict_skel,
+ scratch_pool, scratch_pool));
+
+ if (!prop_conflicted)
+ return SVN_NO_ERROR;
+
+ SVN_ERR(svn_wc__conflict_read_prop_conflict(&prop_reject_abspath,
&my_props,
&their_old_props,
&their_props,
@@ -2084,7 +2086,9 @@ read_prop_conflict_descs(apr_array_heade
conflict_skel,
scratch_pool, scratch_pool));
- if ((! create_tempfiles) || apr_hash_count(conflicted_props) == 0)
+ prop_reject_abspath = apr_pstrdup(result_pool, prop_reject_abspath);
+
+ if (apr_hash_count(conflicted_props) == 0)
{
/* Legacy prop conflict with only a .reject file. */
svn_wc_conflict_description2_t *desc;
@@ -2095,7 +2099,7 @@ read_prop_conflict_descs(apr_array_heade
/* ### For property conflicts, cd2 stores prop_reject_abspath in
* ### their_abspath, and stores theirs_abspath in merged_file. */
- desc->prop_reject_abspath = apr_pstrdup(result_pool, prop_reject_file);
+ desc->prop_reject_abspath = prop_reject_abspath; /* in result_pool */
desc->their_abspath = desc->prop_reject_abspath;
desc->operation = operation;
@@ -2107,8 +2111,11 @@ read_prop_conflict_descs(apr_array_heade
return SVN_NO_ERROR;
}
- SVN_ERR(svn_wc__db_read_pristine_props(&base_props, db, local_abspath,
- result_pool, scratch_pool));
+ if (operation == svn_wc_operation_merge)
+ SVN_ERR(svn_wc__db_read_pristine_props(&base_props, db, local_abspath,
+ result_pool, scratch_pool));
+ else
+ base_props = NULL;
iterpool = svn_pool_create(scratch_pool);
for (hi = apr_hash_first(scratch_pool, conflicted_props);
hi;
@@ -2155,22 +2162,26 @@ read_prop_conflict_descs(apr_array_heade
/* ### For property conflicts, cd2 stores prop_reject_abspath in
* ### their_abspath, and stores theirs_abspath in merged_file. */
- desc->prop_reject_abspath = apr_pstrdup(result_pool, prop_reject_file);
+ desc->prop_reject_abspath = prop_reject_abspath; /* in result_pool */
desc->their_abspath = desc->prop_reject_abspath;
- desc->prop_value_base = svn_hash_gets(base_props, propname);
+ desc->prop_value_base = base_props ? svn_hash_gets(base_props, propname)
+ : desc->prop_value_incoming_old;
if (my_value)
{
svn_stream_t *s;
apr_size_t len;
- SVN_ERR(svn_stream_open_unique(&s, &desc->my_abspath, NULL,
- svn_io_file_del_on_pool_cleanup,
- result_pool, iterpool));
- len = my_value->len;
- SVN_ERR(svn_stream_write(s, my_value->data, &len));
- SVN_ERR(svn_stream_close(s));
+ if (create_tempfiles)
+ {
+ SVN_ERR(svn_stream_open_unique(&s, &desc->my_abspath, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, iterpool));
+ len = my_value->len;
+ SVN_ERR(svn_stream_write(s, my_value->data, &len));
+ SVN_ERR(svn_stream_close(s));
+ }
desc->prop_value_working = svn_string_dup(my_value, result_pool);
}
@@ -2182,12 +2193,15 @@ read_prop_conflict_descs(apr_array_heade
/* ### For property conflicts, cd2 stores prop_reject_abspath in
* ### their_abspath, and stores theirs_abspath in merged_file. */
- SVN_ERR(svn_stream_open_unique(&s, &desc->merged_file, NULL,
- svn_io_file_del_on_pool_cleanup,
- result_pool, iterpool));
- len = their_value->len;
- SVN_ERR(svn_stream_write(s, their_value->data, &len));
- SVN_ERR(svn_stream_close(s));
+ if (create_tempfiles)
+ {
+ SVN_ERR(svn_stream_open_unique(&s, &desc->merged_file, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, iterpool));
+ len = their_value->len;
+ SVN_ERR(svn_stream_write(s, their_value->data, &len));
+ SVN_ERR(svn_stream_close(s));
+ }
desc->prop_value_incoming_new = svn_string_dup(their_value, result_pool);
}
@@ -2197,12 +2211,15 @@ read_prop_conflict_descs(apr_array_heade
svn_stream_t *s;
apr_size_t len;
- SVN_ERR(svn_stream_open_unique(&s, &desc->base_abspath, NULL,
- svn_io_file_del_on_pool_cleanup,
- result_pool, iterpool));
- len = old_value->len;
- SVN_ERR(svn_stream_write(s, old_value->data, &len));
- SVN_ERR(svn_stream_close(s));
+ if (create_tempfiles)
+ {
+ SVN_ERR(svn_stream_open_unique(&s, &desc->base_abspath, NULL,
+ svn_io_file_del_on_pool_cleanup,
+ result_pool, iterpool));
+ len = old_value->len;
+ SVN_ERR(svn_stream_write(s, old_value->data, &len));
+ SVN_ERR(svn_stream_close(s));
+ }
desc->prop_value_incoming_old = svn_string_dup(old_value, result_pool);
}
@@ -2216,13 +2233,15 @@ read_prop_conflict_descs(apr_array_heade
svn_error_t *
svn_wc__read_conflicts(const apr_array_header_t **conflicts,
+ svn_skel_t **conflict_skel,
svn_wc__db_t *db,
const char *local_abspath,
svn_boolean_t create_tempfiles,
+ svn_boolean_t only_tree_conflict,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- svn_skel_t *conflict_skel;
+ svn_skel_t *the_conflict_skel;
apr_array_header_t *cflcts;
svn_boolean_t prop_conflicted;
svn_boolean_t text_conflicted;
@@ -2232,12 +2251,19 @@ svn_wc__read_conflicts(const apr_array_h
const svn_wc_conflict_version_t *left_version = NULL;
const svn_wc_conflict_version_t *right_version = NULL;
svn_node_kind_t node_kind;
+ apr_hash_t *props;
- SVN_ERR(svn_wc__db_read_conflict(&conflict_skel, &node_kind,
+ if (!conflict_skel)
+ conflict_skel = &the_conflict_skel;
+
+ SVN_ERR(svn_wc__db_read_conflict(conflict_skel, &node_kind, &props,
db, local_abspath,
- scratch_pool, scratch_pool));
+ (conflict_skel == &the_conflict_skel)
+ ? scratch_pool
+ : result_pool,
+ scratch_pool));
- if (!conflict_skel)
+ if (!*conflict_skel)
{
/* Some callers expect not NULL */
*conflicts = apr_array_make(result_pool, 0,
@@ -2247,7 +2273,7 @@ svn_wc__read_conflicts(const apr_array_h
SVN_ERR(svn_wc__conflict_read_info(&operation, &locations, &text_conflicted,
&prop_conflicted, &tree_conflicted,
- db, local_abspath, conflict_skel,
+ db, local_abspath, *conflict_skel,
result_pool, scratch_pool));
cflcts = apr_array_make(result_pool, 4,
@@ -2258,22 +2284,23 @@ svn_wc__read_conflicts(const apr_array_h
if (locations && locations->nelts > 1)
right_version = APR_ARRAY_IDX(locations, 1, const svn_wc_conflict_version_t *);
- if (prop_conflicted)
+ if (prop_conflicted && !only_tree_conflict)
{
SVN_ERR(read_prop_conflict_descs(cflcts,
- db, local_abspath, conflict_skel,
+ db, local_abspath, *conflict_skel,
create_tempfiles, node_kind,
operation, left_version, right_version,
result_pool, scratch_pool));
}
- if (text_conflicted)
+ if (text_conflicted && !only_tree_conflict)
{
svn_wc_conflict_description2_t *desc;
SVN_ERR(read_text_conflict_desc(&desc,
- db, local_abspath, conflict_skel,
- FALSE /*is_binary*/, NULL /*mime_type*/,
+ db, local_abspath, *conflict_skel,
+ svn_prop_get_value(props,
+ SVN_PROP_MIME_TYPE),
operation, left_version, right_version,
result_pool, scratch_pool));
APR_ARRAY_PUSH(cflcts, svn_wc_conflict_description2_t *) = desc;
@@ -2285,7 +2312,7 @@ svn_wc__read_conflicts(const apr_array_h
SVN_ERR(read_tree_conflict_desc(&desc,
db, local_abspath, node_kind,
- conflict_skel,
+ *conflict_skel,
operation, left_version, right_version,
result_pool, scratch_pool));
@@ -2338,7 +2365,7 @@ static svn_error_t *
resolve_prop_conflict_on_node(svn_boolean_t *did_resolve,
svn_wc__db_t *db,
const char *local_abspath,
- const svn_skel_t *conflicts,
+ svn_skel_t *conflicts,
const char *conflicted_propname,
svn_wc_conflict_choice_t conflict_choice,
const char *merged_file,
@@ -2357,6 +2384,8 @@ resolve_prop_conflict_on_node(svn_boolea
svn_skel_t *work_items = NULL;
svn_wc_operation_t operation;
svn_boolean_t prop_conflicted;
+ apr_hash_t *actual_props;
+ svn_boolean_t resolved_all, resolved_all_prop;
*did_resolve = FALSE;
@@ -2372,12 +2401,35 @@ resolve_prop_conflict_on_node(svn_boolea
db, local_abspath, conflicts,
scratch_pool, scratch_pool));
+ if (!conflicted_props)
+ {
+ /* We have a pre 1.8 property conflict. Just mark it resolved */
+
+ SVN_ERR(remove_artifact_file_if_exists(&work_items, did_resolve,
+ db, local_abspath, prop_reject_file,
+ scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath, FALSE, TRUE, FALSE,
+ work_items, scratch_pool));
+ SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
+ scratch_pool));
+ return SVN_NO_ERROR;
+ }
+
+ if (conflicted_propname[0] != '\0'
+ && !svn_hash_gets(conflicted_props, conflicted_propname))
+ {
+ return SVN_NO_ERROR; /* This property is not conflicted! */
+ }
+
if (operation == svn_wc_operation_merge)
SVN_ERR(svn_wc__db_read_pristine_props(&old_props, db, local_abspath,
scratch_pool, scratch_pool));
else
old_props = their_old_props;
+ SVN_ERR(svn_wc__db_read_props(&actual_props, db, local_abspath,
+ scratch_pool, scratch_pool));
+
/* We currently handle *_conflict as *_full as this argument is currently
always applied for all conflicts on a node at the same time. Giving
an error would break some tests that assumed that this would just
@@ -2405,11 +2457,7 @@ resolve_prop_conflict_on_node(svn_boolea
case svn_wc_conflict_choose_merged:
if ((merged_file || merged_value) && conflicted_propname[0] != '\0')
{
- apr_hash_t *actual_props;
-
- SVN_ERR(svn_wc__db_read_props(&actual_props, db, local_abspath,
- scratch_pool, scratch_pool));
- resolve_from = actual_props;
+ resolve_from = apr_hash_copy(scratch_pool, actual_props);
if (!merged_value)
{
@@ -2433,15 +2481,26 @@ resolve_prop_conflict_on_node(svn_boolea
_("Invalid 'conflict_result' argument"));
}
- if (conflicted_props && apr_hash_count(conflicted_props) && resolve_from)
+
+ if (resolve_from)
{
apr_hash_index_t *hi;
- apr_hash_t *actual_props;
+ apr_hash_t *apply_on_props;
- SVN_ERR(svn_wc__db_read_props(&actual_props, db, local_abspath,
- scratch_pool, scratch_pool));
+ if (conflicted_propname[0] == '\0')
+ {
+ /* Apply to all conflicted properties */
+ apply_on_props = conflicted_props;
+ }
+ else
+ {
+ /* Apply to a single property */
+ apply_on_props = apr_hash_make(scratch_pool);
+ svn_hash_sets(apply_on_props, conflicted_propname, "");
+ }
- for (hi = apr_hash_first(scratch_pool, conflicted_props);
+ /* Apply the selected changes */
+ for (hi = apr_hash_first(scratch_pool, apply_on_props);
hi;
hi = apr_hash_next(hi))
{
@@ -2452,28 +2511,67 @@ resolve_prop_conflict_on_node(svn_boolea
svn_hash_sets(actual_props, propname, new_value);
}
- SVN_ERR(svn_wc__db_op_set_props(db, local_abspath, actual_props,
- FALSE, NULL, NULL,
- scratch_pool));
}
+ /*else the user accepted the properties as-is */
- /* Legacy behavior: Only report property conflicts as resolved when the
- property reject file exists
+ /* This function handles conflicted_propname "" as resolving
+ all property conflicts... Just what we need here */
+ SVN_ERR(svn_wc__conflict_skel_resolve(&resolved_all, conflicts,
+ db, local_abspath,
+ FALSE, conflicted_propname,
+ FALSE,
+ scratch_pool, scratch_pool));
- If not the UI shows the conflict as already resolved
- (and in this case we just remove the in-db conflict) */
+ if (!resolved_all)
+ {
+ /* Are there still property conflicts left? (or only...) */
+ SVN_ERR(svn_wc__conflict_read_info(NULL, NULL, NULL, &prop_conflicted,
+ NULL, db, local_abspath, conflicts,
+ scratch_pool, scratch_pool));
- {
- svn_skel_t *work_item;
+ resolved_all_prop = (! prop_conflicted);
+ }
+ else
+ {
+ resolved_all_prop = TRUE;
+ conflicts = NULL;
+ }
- SVN_ERR(remove_artifact_file_if_exists(&work_item, did_resolve,
- db, local_abspath, prop_reject_file,
- scratch_pool, scratch_pool));
- work_items = svn_wc__wq_merge(work_items, work_item, scratch_pool);
- }
+ if (resolved_all_prop)
+ {
+ /* Legacy behavior: Only report property conflicts as resolved when the
+ property reject file exists
+
+ If not the UI shows the conflict as already resolved
+ (and in this case we just remove the in-db conflict) */
+ SVN_ERR(remove_artifact_file_if_exists(&work_items, did_resolve,
+ db, local_abspath,
+ prop_reject_file,
+ scratch_pool, scratch_pool));
+ }
+ else
+ {
+ /* Create a new prej file, based on the remaining conflicts */
+ SVN_ERR(svn_wc__wq_build_prej_install(&work_items,
+ db, local_abspath,
+ scratch_pool, scratch_pool));
+ *did_resolve = TRUE; /* We resolved a property conflict */
+ }
+
+ /* This installs the updated conflict skel */
+ SVN_ERR(svn_wc__db_op_set_props(db, local_abspath, actual_props,
+ FALSE, conflicts, work_items,
+ scratch_pool));
+
+ if (resolved_all)
+ {
+ /* Remove the whole conflict. Should probably be integrated
+ into the op_set_props() call */
+ SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath,
+ FALSE, TRUE, FALSE,
+ NULL, scratch_pool));
+ }
- SVN_ERR(svn_wc__db_op_mark_resolved(db, local_abspath, FALSE, TRUE, FALSE,
- work_items, scratch_pool));
SVN_ERR(svn_wc__wq_run(db, local_abspath, cancel_func, cancel_baton,
scratch_pool));
@@ -2570,7 +2668,8 @@ resolve_tree_conflict_on_node(svn_boolea
const char *dup_abspath;
if (!resolve_later
- || err->apr_err != SVN_ERR_WC_OBSTRUCTED_UPDATE)
+ || (err->apr_err != SVN_ERR_WC_OBSTRUCTED_UPDATE
+ && err->apr_err != SVN_ERR_WC_FOUND_CONFLICT))
return svn_error_trace(err);
svn_error_clear(err);
@@ -2584,7 +2683,7 @@ resolve_tree_conflict_on_node(svn_boolea
/* We might now have a moved-away on *this* path, let's
try to resolve that directly if that is the case */
- SVN_ERR(svn_wc__db_read_conflict(&new_conflicts, NULL,
+ SVN_ERR(svn_wc__db_read_conflict(&new_conflicts, NULL, NULL,
db, local_abspath,
scratch_pool, scratch_pool));
@@ -2651,7 +2750,8 @@ resolve_tree_conflict_on_node(svn_boolea
const char *dup_abspath;
if (!resolve_later
- || err->apr_err != SVN_ERR_WC_OBSTRUCTED_UPDATE)
+ || (err->apr_err != SVN_ERR_WC_OBSTRUCTED_UPDATE
+ && err->apr_err != SVN_ERR_WC_FOUND_CONFLICT))
return svn_error_trace(err);
svn_error_clear(err);
@@ -2755,7 +2855,8 @@ svn_wc__mark_resolved_text_conflict(svn_
svn_skel_t *work_items;
svn_skel_t *conflict;
- SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, db, local_abspath,
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, NULL,
+ db, local_abspath,
scratch_pool, scratch_pool));
if (!conflict)
@@ -2784,7 +2885,8 @@ svn_wc__mark_resolved_prop_conflicts(svn
svn_boolean_t ignored_result;
svn_skel_t *conflicts;
- SVN_ERR(svn_wc__db_read_conflict(&conflicts, NULL, db, local_abspath,
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, NULL, NULL,
+ db, local_abspath,
scratch_pool, scratch_pool));
if (!conflicts)
@@ -2869,10 +2971,10 @@ conflict_status_walker(void *baton,
iterpool = svn_pool_create(scratch_pool);
- SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, db, local_abspath,
- scratch_pool, scratch_pool));
-
- SVN_ERR(svn_wc__read_conflicts(&conflicts, db, local_abspath, TRUE,
+ SVN_ERR(svn_wc__read_conflicts(&conflicts, &conflict,
+ db, local_abspath,
+ (cswb->conflict_func != NULL) /* tmp files */,
+ FALSE /* only tree conflicts */,
scratch_pool, iterpool));
for (i = 0; i < conflicts->nelts; i++)
@@ -3014,33 +3116,11 @@ svn_wc__resolve_conflicts(svn_wc_context
void *notify_baton,
apr_pool_t *scratch_pool)
{
- svn_node_kind_t kind;
- svn_boolean_t conflicted;
struct conflict_status_walker_baton cswb;
apr_pool_t *iterpool = NULL;
svn_error_t *err;
- /* ### the underlying code does NOT support resolving individual
- ### properties. bail out if the caller tries it. */
- if (resolve_prop != NULL && *resolve_prop != '\0')
- return svn_error_create(SVN_ERR_INCORRECT_PARAMS, NULL,
- U_("Resolving a single property is not (yet) "
- "supported."));
-
- /* ### Just a versioned check? */
- /* Conflicted is set to allow invoking on actual only nodes */
- SVN_ERR(svn_wc__db_read_info(NULL, &kind, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, &conflicted,
- NULL, NULL, NULL, NULL, NULL, NULL,
- wc_ctx->db, local_abspath,
- scratch_pool, scratch_pool));
-
- /* When the implementation still used the entry walker, depth
- unknown was translated to infinity. */
- if (kind != svn_node_dir)
- depth = svn_depth_empty;
- else if (depth == svn_depth_unknown)
+ if (depth == svn_depth_unknown)
depth = svn_depth_infinity;
cswb.db = wc_ctx->db;
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.h?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.h (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/conflicts.h Tue Jun 23 12:55:43 2015
@@ -419,6 +419,7 @@ svn_wc__conflict_create_markers(svn_skel
svn_error_t *
svn_wc__conflict_invoke_resolver(svn_wc__db_t *db,
const char *local_abspath,
+ svn_node_kind_t kind,
const svn_skel_t *conflict_skel,
const apr_array_header_t *merge_options,
svn_wc_conflict_resolver_func2_t resolver_func,
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/copy.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/copy.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/copy.c Tue Jun 23 12:55:43 2015
@@ -258,8 +258,9 @@ copy_versioned_file(svn_wc__db_t *db,
svn_error_t *err;
/* Is there a text conflict at the source path? */
- SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, db, src_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, NULL,
+ db, src_abspath,
+ scratch_pool, scratch_pool));
err = svn_wc__conflict_read_text_conflict(&conflict_working, NULL, NULL,
db, src_abspath, conflict,
@@ -945,7 +946,8 @@ remove_node_conflict_markers(svn_wc__db_
{
svn_skel_t *conflict;
- SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, db, src_abspath,
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, NULL,
+ db, src_abspath,
scratch_pool, scratch_pool));
/* Do we have conflict markers that should be removed? */
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/delete.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/delete.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/delete.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/delete.c Tue Jun 23 12:55:43 2015
@@ -135,7 +135,8 @@ create_delete_wq_items(svn_skel_t **work
const apr_array_header_t *markers;
int i;
- SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, db, local_abspath,
+ SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, NULL,
+ db, local_abspath,
scratch_pool, scratch_pool));
SVN_ERR(svn_wc__conflict_read_markers(&markers, db, local_abspath,
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/deprecated.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/deprecated.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/deprecated.c Tue Jun 23 12:55:43 2015
@@ -948,12 +948,12 @@ svn_wc_delete(const char *path,
svn_error_t *
svn_wc_add_from_disk2(svn_wc_context_t *wc_ctx,
const char *local_abspath,
- const apr_hash_t *props,
+ const apr_hash_t *props,
svn_wc_notify_func2_t notify_func,
void *notify_baton,
apr_pool_t *scratch_pool)
{
- SVN_ERR(svn_wc_add_from_disk3(wc_ctx, local_abspath, NULL, FALSE,
+ SVN_ERR(svn_wc_add_from_disk3(wc_ctx, local_abspath, props, FALSE,
notify_func, notify_baton, scratch_pool));
return SVN_NO_ERROR;
}
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_editor.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_editor.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_editor.c Tue Jun 23 12:55:43 2015
@@ -145,6 +145,9 @@ struct dir_baton_t
/* TRUE if the node is to be compared with an unrelated node*/
svn_boolean_t ignoring_ancestry;
+ /* TRUE if the directory was reported incomplete to the repository */
+ svn_boolean_t is_incomplete;
+
/* Processor state */
void *pdb;
svn_boolean_t skip;
@@ -1220,10 +1223,8 @@ handle_local_only(struct dir_baton_t *pb
switch (info->status)
{
- case svn_wc__db_status_incomplete:
- return SVN_NO_ERROR; /* Not local only */
-
case svn_wc__db_status_normal:
+ case svn_wc__db_status_incomplete:
if (!repos_delete)
return SVN_NO_ERROR; /* Local and remote */
svn_hash_sets(pb->deletes, name, NULL);
@@ -1608,25 +1609,47 @@ open_directory(const char *path,
db->repos_only = TRUE;
if (!db->repos_only)
- switch (info->status)
- {
- case svn_wc__db_status_normal:
- break;
- case svn_wc__db_status_deleted:
- db->repos_only = TRUE;
-
- if (!info->have_more_work)
- svn_hash_sets(pb->compared,
- apr_pstrdup(pb->pool, db->name), "");
- break;
- case svn_wc__db_status_added:
- if (eb->ignore_ancestry)
- db->ignoring_ancestry = TRUE;
- else
+ {
+ switch (info->status)
+ {
+ case svn_wc__db_status_normal:
+ case svn_wc__db_status_incomplete:
+ db->is_incomplete = (info->status ==
+ svn_wc__db_status_incomplete);
+ break;
+ case svn_wc__db_status_deleted:
db->repos_only = TRUE;
- break;
- default:
- SVN_ERR_MALFUNCTION();
+
+ if (!info->have_more_work)
+ svn_hash_sets(pb->compared,
+ apr_pstrdup(pb->pool, db->name), "");
+ break;
+ case svn_wc__db_status_added:
+ if (eb->ignore_ancestry)
+ db->ignoring_ancestry = TRUE;
+ else
+ db->repos_only = TRUE;
+ break;
+ default:
+ SVN_ERR_MALFUNCTION();
+ }
+
+ if (info->status == svn_wc__db_status_added
+ || info->status == svn_wc__db_status_deleted)
+ {
+ svn_wc__db_status_t base_status;
+
+ /* Node is shadowed; check BASE */
+ SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ eb->db, db->local_abspath,
+ dir_pool, dir_pool));
+
+ if (base_status == svn_wc__db_status_incomplete)
+ db->is_incomplete = TRUE;
+ }
}
if (!db->repos_only)
@@ -1714,7 +1737,7 @@ close_directory(void *dir_baton,
{
apr_hash_t *repos_props;
- if (db->added)
+ if (db->added || db->is_incomplete)
{
repos_props = apr_hash_make(scratch_pool);
}
@@ -1891,6 +1914,7 @@ open_file(const char *path,
switch (info->status)
{
case svn_wc__db_status_normal:
+ case svn_wc__db_status_incomplete:
break;
case svn_wc__db_status_deleted:
fb->repos_only = TRUE;
@@ -2404,8 +2428,8 @@ wrap_dir_opened(void **new_dir_baton,
wc_diff_wrap_baton_t *wb = processor->baton;
svn_boolean_t tree_conflicted = FALSE;
- assert(left_source || right_source);
- assert(!copyfrom_source || !right_source);
+ assert(left_source || right_source); /* Must exist at one point. */
+ assert(!left_source || !copyfrom_source); /* Either existed or added. */
/* Maybe store state and tree_conflicted in baton? */
if (left_source != NULL)
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_local.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_local.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_local.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/diff_local.c Tue Jun 23 12:55:43 2015
@@ -281,7 +281,8 @@ diff_status_callback(void *baton,
{
local_only = TRUE; /* Only report additions */
}
- else if (db_status == svn_wc__db_status_normal)
+ else if (db_status == svn_wc__db_status_normal
+ || db_status == svn_wc__db_status_incomplete)
{
/* Simple diff */
base_kind = db_kind;
@@ -297,7 +298,8 @@ diff_status_callback(void *baton,
eb->db, local_abspath,
scratch_pool, scratch_pool));
- if (base_status != svn_wc__db_status_normal)
+ if (base_status != svn_wc__db_status_normal
+ && base_status != svn_wc__db_status_incomplete)
return SVN_NO_ERROR;
}
else
@@ -312,7 +314,8 @@ diff_status_callback(void *baton,
eb->db, local_abspath,
scratch_pool, scratch_pool));
- if (base_status != svn_wc__db_status_normal)
+ if (base_status != svn_wc__db_status_normal
+ && base_status != svn_wc__db_status_incomplete)
local_only = TRUE;
else if (base_kind != db_kind || !eb->ignore_ancestry)
{
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/entries.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/entries.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/entries.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/entries.c Tue Jun 23 12:55:43 2015
@@ -45,11 +45,15 @@
#include "wc_db.h"
#include "wc-queries.h" /* for STMT_* */
+#define SVN_WC__I_AM_WC_DB
+
#include "svn_private_config.h"
#include "private/svn_wc_private.h"
#include "private/svn_sqlite.h"
#include "token-map.h"
+#include "wc_db_private.h"
+
#define MAYBE_ALLOC(x,p) ((x) ? (x) : apr_pcalloc((p), sizeof(*(x))))
@@ -214,6 +218,8 @@ get_info_for_deleted(svn_wc_entry_t *ent
svn_wc__db_lock_t **lock,
svn_wc__db_t *db,
const char *entry_abspath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *entry_relpath,
const svn_wc_entry_t *parent_entry,
svn_boolean_t have_base,
svn_boolean_t have_more_work,
@@ -222,12 +228,13 @@ get_info_for_deleted(svn_wc_entry_t *ent
{
if (have_base && !have_more_work)
{
+ apr_int64_t repos_id;
/* This is the delete of a BASE node */
- SVN_ERR(svn_wc__db_base_get_info(NULL, kind,
+ SVN_ERR(svn_wc__db_base_get_info_internal(
+ NULL, kind,
&entry->revision,
repos_relpath,
- &entry->repos,
- &entry->uuid,
+ &repos_id,
&entry->cmt_rev,
&entry->cmt_date,
&entry->cmt_author,
@@ -237,16 +244,18 @@ get_info_for_deleted(svn_wc_entry_t *ent
lock,
&entry->has_props, NULL,
NULL,
- db,
- entry_abspath,
+ wcroot, entry_relpath,
result_pool,
scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&entry->repos, &entry->uuid,
+ wcroot, repos_id, result_pool));
}
else
{
- const char *work_del_abspath;
+ const char *work_del_relpath;
const char *parent_repos_relpath;
- const char *parent_abspath;
+ const char *parent_relpath;
+ apr_int64_t repos_id;
/* This is a deleted child of a copy/move-here,
so we need to scan up the WORKING tree to find the root of
@@ -266,30 +275,33 @@ get_info_for_deleted(svn_wc_entry_t *ent
scratch_pool));
/* working_size and text_time unavailable */
- SVN_ERR(svn_wc__db_scan_deletion(NULL,
+ SVN_ERR(svn_wc__db_scan_deletion_internal(
+ NULL,
NULL,
- &work_del_abspath, NULL,
- db, entry_abspath,
+ &work_del_relpath, NULL,
+ wcroot, entry_relpath,
scratch_pool, scratch_pool));
- SVN_ERR_ASSERT(work_del_abspath != NULL);
- parent_abspath = svn_dirent_dirname(work_del_abspath, scratch_pool);
+ SVN_ERR_ASSERT(work_del_relpath != NULL);
+ parent_relpath = svn_relpath_dirname(work_del_relpath, scratch_pool);
/* The parent directory of the delete root must be added, so we
can find the required information there */
- SVN_ERR(svn_wc__db_scan_addition(NULL, NULL,
+ SVN_ERR(svn_wc__db_scan_addition_internal(
+ NULL, NULL,
&parent_repos_relpath,
- &entry->repos,
- &entry->uuid,
- NULL, NULL, NULL, NULL,
- db, parent_abspath,
+ &repos_id,
+ NULL, NULL, NULL,
+ wcroot, parent_relpath,
result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&entry->repos, &entry->uuid,
+ wcroot, repos_id, result_pool));
/* Now glue it all together */
*repos_relpath = svn_relpath_join(parent_repos_relpath,
- svn_dirent_is_child(parent_abspath,
- entry_abspath,
- NULL),
+ svn_relpath_skip_ancestor(
+ parent_relpath,
+ entry_relpath),
result_pool);
@@ -298,11 +310,12 @@ get_info_for_deleted(svn_wc_entry_t *ent
if (have_base)
{
svn_wc__db_status_t status;
- SVN_ERR(svn_wc__db_base_get_info(&status, NULL, &entry->revision,
+ SVN_ERR(svn_wc__db_base_get_info_internal(
+ &status, NULL, &entry->revision,
NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, lock, NULL, NULL,
+ NULL, NULL, lock, NULL, NULL,
NULL,
- db, entry_abspath,
+ wcroot, entry_relpath,
result_pool, scratch_pool));
if (status == svn_wc__db_status_not_present)
@@ -370,12 +383,17 @@ write_tree_conflicts(const char **confli
If this node is "this dir", then PARENT_ENTRY should be NULL. Otherwise,
it should refer to the entry for the child's parent directory.
+ ### All database read operations should really use wcroot, dir_relpath,
+ as that restores obstruction compatibility with <= 1.6.0
+ but that has been the case since the introduction of WC-NG in 1.7.0
+
Temporary allocations are made in SCRATCH_POOL. */
static svn_error_t *
read_one_entry(const svn_wc_entry_t **new_entry,
svn_wc__db_t *db,
- apr_int64_t wc_id,
const char *dir_abspath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *dir_relpath,
const char *name,
const svn_wc_entry_t *parent_entry,
apr_pool_t *result_pool,
@@ -388,24 +406,28 @@ read_one_entry(const svn_wc_entry_t **ne
const svn_checksum_t *checksum;
svn_filesize_t translated_size;
svn_wc_entry_t *entry = alloc_entry(result_pool);
+ const char *entry_relpath;
const char *entry_abspath;
+ apr_int64_t repos_id;
+ apr_int64_t original_repos_id;
const char *original_repos_relpath;
const char *original_root_url;
svn_boolean_t conflicted;
svn_boolean_t have_base;
svn_boolean_t have_more_work;
+ svn_boolean_t op_root;
- entry->name = name;
+ entry->name = apr_pstrdup(result_pool, name);
+ entry_relpath = svn_relpath_join(dir_relpath, entry->name, scratch_pool);
entry_abspath = svn_dirent_join(dir_abspath, entry->name, scratch_pool);
- SVN_ERR(svn_wc__db_read_info(
+ SVN_ERR(svn_wc__db_read_info_internal(
&status,
&kind,
&entry->revision,
&repos_relpath,
- &entry->repos,
- &entry->uuid,
+ &repos_id,
&entry->cmt_rev,
&entry->cmt_date,
&entry->cmt_author,
@@ -413,24 +435,27 @@ read_one_entry(const svn_wc_entry_t **ne
&checksum,
NULL,
&original_repos_relpath,
- &original_root_url,
- NULL,
+ &original_repos_id,
&entry->copyfrom_rev,
&lock,
&translated_size,
&entry->text_time,
&entry->changelist,
&conflicted,
- NULL /* op_root */,
+ &op_root,
&entry->has_props /* have_props */,
&entry->has_prop_mods /* props_mod */,
&have_base,
&have_more_work,
NULL /* have_work */,
- db,
- entry_abspath,
- result_pool,
- scratch_pool));
+ wcroot, entry_relpath,
+ result_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_fetch_repos_info(&entry->repos, &entry->uuid,
+ wcroot, repos_id, result_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&original_root_url, NULL,
+ wcroot, original_repos_id,
+ result_pool));
if (entry->has_prop_mods)
entry->has_props = TRUE;
@@ -458,9 +483,10 @@ read_one_entry(const svn_wc_entry_t **ne
child_abspath = svn_dirent_join(dir_abspath, child_name,
scratch_pool);
- SVN_ERR(svn_wc__read_conflicts(&child_conflicts,
+ SVN_ERR(svn_wc__read_conflicts(&child_conflicts, NULL,
db, child_abspath,
FALSE /* create tempfiles */,
+ TRUE /* tree_conflicts_only */,
scratch_pool, scratch_pool));
for (j = 0; j < child_conflicts->nelts; j++)
@@ -494,13 +520,15 @@ read_one_entry(const svn_wc_entry_t **ne
/* Grab inherited repository information, if necessary. */
if (repos_relpath == NULL)
{
- SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL, &repos_relpath,
- &entry->repos,
- &entry->uuid, NULL, NULL, NULL,
+ SVN_ERR(svn_wc__db_base_get_info_internal(
+ NULL, NULL, NULL, &repos_relpath,
+ &repos_id, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL,
NULL,
- db, entry_abspath,
+ wcroot, entry_relpath,
result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&entry->repos, &entry->uuid,
+ wcroot, repos_id, result_pool));
}
entry->incomplete = (status == svn_wc__db_status_incomplete);
@@ -520,13 +548,14 @@ read_one_entry(const svn_wc_entry_t **ne
entry->copied = FALSE;
else
{
- const char *work_del_abspath;
- SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
- &work_del_abspath, NULL,
- db, entry_abspath,
+ const char *work_del_relpath;
+ SVN_ERR(svn_wc__db_scan_deletion_internal(
+ NULL, NULL,
+ &work_del_relpath, NULL,
+ wcroot, entry_relpath,
scratch_pool, scratch_pool));
- if (work_del_abspath)
+ if (work_del_relpath)
entry->copied = TRUE;
}
@@ -564,13 +593,14 @@ read_one_entry(const svn_wc_entry_t **ne
/* ENTRY->REVISION is overloaded. When a node is schedule-add
or -replace, then REVISION refers to the BASE node's revision
that is being overwritten. We need to fetch it now. */
- SVN_ERR(svn_wc__db_base_get_info(&base_status, NULL,
+ SVN_ERR(svn_wc__db_base_get_info_internal(
+ &base_status, NULL,
&entry->revision,
NULL, NULL, NULL,
NULL, NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- db, entry_abspath,
+ NULL, NULL, NULL,
+ wcroot, entry_relpath,
scratch_pool,
scratch_pool));
@@ -604,18 +634,27 @@ read_one_entry(const svn_wc_entry_t **ne
have important data. Set up stuff to kill that idea off,
and finish up this entry. */
{
- SVN_ERR(svn_wc__db_scan_addition(&work_status,
- &op_root_abspath,
+ const char *op_root_relpath;
+ SVN_ERR(svn_wc__db_scan_addition_internal(
+ &work_status,
+ &op_root_relpath,
&repos_relpath,
- &entry->repos,
- &entry->uuid,
+ &repos_id,
&scanned_original_relpath,
- NULL, NULL, /* original_root|uuid */
+ NULL /* original_repos_id */,
&original_revision,
- db,
- entry_abspath,
+ wcroot, entry_relpath,
result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_fetch_repos_info(&entry->repos, &entry->uuid,
+ wcroot, repos_id, result_pool));
+
+ if (!op_root_relpath)
+ op_root_abspath = NULL;
+ else
+ op_root_abspath = svn_dirent_join(wcroot->abspath, op_root_relpath,
+ scratch_pool);
+
/* In wc.db we want to keep the valid revision of the not-present
BASE_REV, but when we used entries we set the revision to 0
when adding a new node over a not present base node. */
@@ -676,10 +715,12 @@ read_one_entry(const svn_wc_entry_t **ne
mixed-revision situation. */
if (!is_copied_child)
{
- const char *parent_abspath;
+ const char *parent_relpath;
svn_error_t *err;
const char *parent_repos_relpath;
const char *parent_root_url;
+ apr_int64_t parent_repos_id;
+ const char *op_root_relpath;
/* When we insert entries into the database, we will
construct additional copyfrom records for mixed-revision
@@ -706,15 +747,16 @@ read_one_entry(const svn_wc_entry_t **ne
Note that the parent could be added/copied/moved-here.
There is no way for it to be deleted/moved-away and
have *this* node appear as copied. */
- parent_abspath = svn_dirent_dirname(entry_abspath,
- scratch_pool);
- err = svn_wc__db_scan_addition(NULL,
- &op_root_abspath,
- NULL, NULL, NULL,
- &parent_repos_relpath,
- &parent_root_url,
+ parent_relpath = svn_relpath_dirname(entry_relpath,
+ scratch_pool);
+ err = svn_wc__db_scan_addition_internal(
+ NULL,
+ &op_root_relpath,
NULL, NULL,
- db, parent_abspath,
+ &parent_repos_relpath,
+ &parent_repos_id,
+ NULL,
+ wcroot, parent_relpath,
scratch_pool,
scratch_pool);
if (err)
@@ -722,10 +764,24 @@ read_one_entry(const svn_wc_entry_t **ne
if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
return svn_error_trace(err);
svn_error_clear(err);
+ op_root_abspath = NULL;
+ parent_repos_relpath = NULL;
+ parent_root_url = NULL;
}
- else if (parent_root_url != NULL
+ else
+ {
+ SVN_ERR(svn_wc__db_fetch_repos_info(&parent_root_url, NULL,
+ wcroot, parent_repos_id,
+ scratch_pool));
+ op_root_abspath = svn_dirent_join(wcroot->abspath,
+ op_root_relpath,
+ scratch_pool);
+ }
+
+ if (parent_root_url != NULL
&& strcmp(original_root_url, parent_root_url) == 0)
{
+
const char *relpath_to_entry = svn_dirent_is_child(
op_root_abspath, entry_abspath, NULL);
const char *entry_repos_relpath = svn_relpath_join(
@@ -828,6 +884,7 @@ read_one_entry(const svn_wc_entry_t **ne
&checksum,
&lock,
db, entry_abspath,
+ wcroot, entry_relpath,
parent_entry,
have_base, have_more_work,
result_pool, scratch_pool));
@@ -870,7 +927,7 @@ read_one_entry(const svn_wc_entry_t **ne
/* We got a SHA-1, get the corresponding MD-5. */
if (checksum->kind != svn_checksum_md5)
SVN_ERR(svn_wc__db_pristine_get_md5(&checksum, db,
- entry_abspath, checksum,
+ dir_abspath, checksum,
scratch_pool, scratch_pool));
SVN_ERR_ASSERT(checksum->kind == svn_checksum_md5);
@@ -882,8 +939,9 @@ read_one_entry(const svn_wc_entry_t **ne
svn_skel_t *conflict;
svn_boolean_t text_conflicted;
svn_boolean_t prop_conflicted;
- SVN_ERR(svn_wc__db_read_conflict(&conflict, NULL, db, entry_abspath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_read_conflict_internal(&conflict, NULL, NULL,
+ wcroot, entry_relpath,
+ scratch_pool, scratch_pool));
SVN_ERR(svn_wc__conflict_read_info(NULL, NULL, &text_conflicted,
&prop_conflicted, NULL,
@@ -956,7 +1014,9 @@ read_one_entry(const svn_wc_entry_t **ne
static svn_error_t *
read_entries_new(apr_hash_t **result_entries,
svn_wc__db_t *db,
- const char *local_abspath,
+ const char *dir_abspath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *dir_relpath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
@@ -965,11 +1025,12 @@ read_entries_new(apr_hash_t **result_ent
apr_pool_t *iterpool = svn_pool_create(scratch_pool);
int i;
const svn_wc_entry_t *parent_entry;
- apr_int64_t wc_id = 1; /* ### hacky. should remove. */
entries = apr_hash_make(result_pool);
- SVN_ERR(read_one_entry(&parent_entry, db, wc_id, local_abspath,
+ SVN_ERR(read_one_entry(&parent_entry,
+ db, dir_abspath,
+ wcroot, dir_relpath,
"" /* name */,
NULL /* parent_entry */,
result_pool, iterpool));
@@ -978,8 +1039,8 @@ read_entries_new(apr_hash_t **result_ent
/* Use result_pool so that the child names (used by reference, rather
than copied) appear in result_pool. */
SVN_ERR(svn_wc__db_read_children(&children, db,
- local_abspath,
- result_pool, iterpool));
+ dir_abspath,
+ scratch_pool, iterpool));
for (i = children->nelts; i--; )
{
const char *name = APR_ARRAY_IDX(children, i, const char *);
@@ -988,7 +1049,9 @@ read_entries_new(apr_hash_t **result_ent
svn_pool_clear(iterpool);
SVN_ERR(read_one_entry(&entry,
- db, wc_id, local_abspath, name, parent_entry,
+ db, dir_abspath,
+ wcroot, dir_relpath,
+ name, parent_entry,
result_pool, iterpool));
svn_hash_sets(entries, entry->name, entry);
}
@@ -1001,28 +1064,20 @@ read_entries_new(apr_hash_t **result_ent
}
-/* Read a pair of entries from wc_db in the directory DIR_ABSPATH. Return
- the directory's entry in *PARENT_ENTRY and NAME's entry in *ENTRY. The
- two returned pointers will be the same if NAME=="" ("this dir").
-
- The parent entry must exist.
-
- The requested entry MAY exist. If it does not, then NULL will be returned.
-
- The resulting entries are allocated in RESULT_POOL, and all temporary
- allocations are made in SCRATCH_POOL. */
static svn_error_t *
-read_entry_pair(const svn_wc_entry_t **parent_entry,
- const svn_wc_entry_t **entry,
- svn_wc__db_t *db,
- const char *dir_abspath,
- const char *name,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+read_entry_pair_txn(const svn_wc_entry_t **parent_entry,
+ const svn_wc_entry_t **entry,
+ svn_wc__db_t *db,
+ const char *dir_abspath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *dir_relpath,
+ const char *name,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
- apr_int64_t wc_id = 1; /* ### hacky. should remove. */
-
- SVN_ERR(read_one_entry(parent_entry, db, wc_id, dir_abspath,
+ SVN_ERR(read_one_entry(parent_entry,
+ db, dir_abspath,
+ wcroot, dir_relpath,
"" /* name */,
NULL /* parent_entry */,
result_pool, scratch_pool));
@@ -1074,7 +1129,9 @@ read_entry_pair(const svn_wc_entry_t **p
svn_error_t *err;
err = read_one_entry(entry,
- db, wc_id, dir_abspath, name, *parent_entry,
+ db, dir_abspath,
+ wcroot, dir_relpath,
+ name, *parent_entry,
result_pool, scratch_pool);
if (err)
{
@@ -1097,28 +1154,76 @@ read_entry_pair(const svn_wc_entry_t **p
return SVN_NO_ERROR;
}
+/* Read a pair of entries from wc_db in the directory DIR_ABSPATH. Return
+ the directory's entry in *PARENT_ENTRY and NAME's entry in *ENTRY. The
+ two returned pointers will be the same if NAME=="" ("this dir").
+
+ The parent entry must exist.
+
+ The requested entry MAY exist. If it does not, then NULL will be returned.
+
+ The resulting entries are allocated in RESULT_POOL, and all temporary
+ allocations are made in SCRATCH_POOL. */
+static svn_error_t *
+read_entry_pair(const svn_wc_entry_t **parent_entry,
+ const svn_wc_entry_t **entry,
+ svn_wc__db_t *db,
+ const char *dir_abspath,
+ const char *name,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *dir_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &dir_relpath,
+ db, dir_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(read_entry_pair_txn(parent_entry, entry,
+ db, dir_abspath,
+ wcroot, dir_relpath,
+ name,
+ result_pool, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
+}
/* */
static svn_error_t *
read_entries(apr_hash_t **entries,
svn_wc__db_t *db,
- const char *wcroot_abspath,
+ const char *dir_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
+ svn_wc__db_wcroot_t *wcroot;
+ const char *dir_relpath;
int wc_format;
- SVN_ERR(svn_wc__db_temp_get_format(&wc_format, db, wcroot_abspath,
+ SVN_ERR(svn_wc__db_temp_get_format(&wc_format, db, dir_abspath,
scratch_pool));
if (wc_format < SVN_WC__WC_NG_VERSION)
return svn_error_trace(svn_wc__read_entries_old(entries,
- wcroot_abspath,
+ dir_abspath,
result_pool,
scratch_pool));
- return svn_error_trace(read_entries_new(entries, db, wcroot_abspath,
- result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &dir_relpath,
+ db, dir_abspath,
+ scratch_pool, scratch_pool));
+ VERIFY_USABLE_WCROOT(wcroot);
+
+ SVN_WC__DB_WITH_TXN(read_entries_new(entries,
+ db, dir_abspath,
+ wcroot, dir_relpath,
+ result_pool, scratch_pool),
+ wcroot);
+
+ return SVN_NO_ERROR;
}
@@ -1373,25 +1478,6 @@ prune_deleted(apr_hash_t **entries_prune
return SVN_NO_ERROR;
}
-struct entries_read_baton_t
-{
- apr_hash_t **new_entries;
- svn_wc__db_t *db;
- const char *local_abspath;
- apr_pool_t *result_pool;
-};
-
-static svn_error_t *
-entries_read_txn(void *baton, svn_sqlite__db_t *db, apr_pool_t *scratch_pool)
-{
- struct entries_read_baton_t *erb = baton;
-
- SVN_ERR(read_entries(erb->new_entries, erb->db, erb->local_abspath,
- erb->result_pool, scratch_pool));
-
- return NULL;
-}
-
svn_error_t *
svn_wc__entries_read_internal(apr_hash_t **entries,
svn_wc_adm_access_t *adm_access,
@@ -1406,21 +1492,9 @@ svn_wc__entries_read_internal(apr_hash_t
svn_wc__db_t *db = svn_wc__adm_get_db(adm_access);
const char *local_abspath = svn_wc__adm_access_abspath(adm_access);
apr_pool_t *result_pool = svn_wc__adm_access_pool_internal(adm_access);
- svn_sqlite__db_t *sdb;
- struct entries_read_baton_t erb;
-
- /* ### Use the borrow DB api to handle all calls in a single read
- ### transaction. This api is used extensively in our test suite
- ### via the entries-read application. */
-
- SVN_ERR(svn_wc__db_temp_borrow_sdb(&sdb, db, local_abspath, pool));
-
- erb.db = db;
- erb.local_abspath = local_abspath;
- erb.new_entries = &new_entries;
- erb.result_pool = result_pool;
- SVN_ERR(svn_sqlite__with_lock(sdb, entries_read_txn, &erb, pool));
+ SVN_ERR(read_entries(&new_entries, db, local_abspath,
+ result_pool, pool));
svn_wc__adm_access_set_entries(adm_access, new_entries);
}
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/externals.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/externals.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/externals.c Tue Jun 23 12:55:43 2015
@@ -462,9 +462,10 @@ struct edit_baton
const apr_array_header_t *ext_patterns;
const char *diff3cmd;
- const char *url;
const char *repos_root_url;
const char *repos_uuid;
+ const char *old_repos_relpath;
+ const char *new_repos_relpath;
const char *record_ancestor_abspath;
const char *recorded_repos_relpath;
@@ -474,6 +475,8 @@ struct edit_baton
/* Introducing a new file external */
svn_boolean_t added;
+ svn_wc_conflict_resolver_func2_t conflict_func;
+ void *conflict_baton;
svn_cancel_func_t cancel_func;
void *cancel_baton;
svn_wc_notify_func2_t notify_func;
@@ -572,7 +575,8 @@ open_file(const char *path,
*file_baton = eb;
SVN_ERR(svn_wc__db_base_get_info(NULL, &kind, &eb->original_revision,
- NULL, NULL, NULL, &eb->changed_rev,
+ &eb->old_repos_relpath, NULL, NULL,
+ &eb->changed_rev,
&eb->changed_date, &eb->changed_author,
NULL, &eb->original_checksum, NULL, NULL,
&eb->had_props, NULL, NULL,
@@ -733,8 +737,6 @@ close_file(void *file_baton,
const svn_checksum_t *original_checksum = NULL;
svn_boolean_t added = !SVN_IS_VALID_REVNUM(eb->original_revision);
- const char *repos_relpath = svn_uri_skip_ancestor(eb->repos_root_url,
- eb->url, pool);
if (! added)
{
@@ -908,14 +910,14 @@ close_file(void *file_baton,
svn_wc_conflict_version_create2(
eb->repos_root_url,
eb->repos_uuid,
- repos_relpath,
+ eb->old_repos_relpath,
eb->original_revision,
svn_node_file,
pool),
svn_wc_conflict_version_create2(
eb->repos_root_url,
eb->repos_uuid,
- repos_relpath,
+ eb->new_repos_relpath,
*eb->target_revision,
svn_node_file,
pool),
@@ -933,7 +935,7 @@ close_file(void *file_baton,
eb->db,
eb->local_abspath,
eb->wri_abspath,
- repos_relpath,
+ eb->new_repos_relpath,
eb->repos_root_url,
eb->repos_uuid,
*eb->target_revision,
@@ -963,6 +965,18 @@ close_file(void *file_baton,
/* Run the work queue to complete the installation */
SVN_ERR(svn_wc__wq_run(eb->db, eb->wri_abspath,
eb->cancel_func, eb->cancel_baton, pool));
+
+ if (conflict_skel && eb->conflict_func)
+ SVN_ERR(svn_wc__conflict_invoke_resolver(eb->db,
+ eb->local_abspath,
+ svn_node_file,
+ conflict_skel,
+ NULL /* merge_options */,
+ eb->conflict_func,
+ eb->conflict_baton,
+ eb->cancel_func,
+ eb->cancel_baton,
+ pool));
}
/* Notify */
@@ -1002,6 +1016,7 @@ close_edit(void *edit_baton,
if (!eb->file_closed)
{
+ apr_hash_t *wcroot_iprops = NULL;
/* The file wasn't updated, but its url or revision might have...
e.g. switch between branches for relative externals.
@@ -1009,53 +1024,26 @@ close_edit(void *edit_baton,
investigating when we should and shouldn't update it...
and avoid hard to debug edge cases */
- svn_node_kind_t kind;
- const char *old_repos_relpath;
- svn_revnum_t changed_rev;
- apr_time_t changed_date;
- const char *changed_author;
- const svn_checksum_t *checksum;
- apr_hash_t *pristine_props;
- const char *repos_relpath = svn_uri_skip_ancestor(eb->repos_root_url,
- eb->url, pool);
-
- SVN_ERR(svn_wc__db_base_get_info(NULL, &kind, NULL, &old_repos_relpath,
- NULL, NULL, &changed_rev, &changed_date,
- &changed_author, NULL, &checksum, NULL,
- NULL, NULL, &pristine_props, NULL,
- eb->db, eb->local_abspath,
- pool, pool));
+ if (eb->iprops)
+ {
+ wcroot_iprops = apr_hash_make(pool);
+ svn_hash_sets(wcroot_iprops, eb->local_abspath, eb->iprops);
+ }
- if (kind != svn_node_file)
- return svn_error_createf(SVN_ERR_WC_PATH_UNEXPECTED_STATUS, NULL,
- _("Node '%s' is no existing file external"),
- svn_dirent_local_style(eb->local_abspath,
- pool));
-
- SVN_ERR(svn_wc__db_external_add_file(
- eb->db,
- eb->local_abspath,
- eb->wri_abspath,
- repos_relpath,
- eb->repos_root_url,
- eb->repos_uuid,
- *eb->target_revision,
- pristine_props,
- eb->iprops,
- eb->changed_rev,
- eb->changed_date,
- eb->changed_author,
- checksum,
- NULL /* clear dav props */,
- eb->record_ancestor_abspath,
- eb->recorded_repos_relpath,
- eb->recorded_peg_revision,
- eb->recorded_revision,
- FALSE, NULL,
- TRUE /* keep_recorded_info */,
- NULL /* conflict_skel */,
- NULL /* work_items */,
- pool));
+ SVN_ERR(svn_wc__db_op_bump_revisions_post_update(eb->db,
+ eb->local_abspath,
+ svn_depth_infinity,
+ eb->new_repos_relpath,
+ eb->repos_root_url,
+ eb->repos_uuid,
+ *eb->target_revision,
+ apr_hash_make(pool)
+ /* exclude_relpaths */,
+ wcroot_iprops,
+ TRUE /* empty update */,
+ eb->notify_func,
+ eb->notify_baton,
+ pool));
}
return SVN_NO_ERROR;
@@ -1079,6 +1067,8 @@ svn_wc__get_file_external_editor(const s
const char *recorded_url,
const svn_opt_revision_t *recorded_peg_rev,
const svn_opt_revision_t *recorded_rev,
+ svn_wc_conflict_resolver_func2_t conflict_func,
+ void *conflict_baton,
svn_cancel_func_t cancel_func,
void *cancel_baton,
svn_wc_notify_func2_t notify_func,
@@ -1101,9 +1091,12 @@ svn_wc__get_file_external_editor(const s
eb->name = svn_dirent_basename(eb->local_abspath, NULL);
eb->target_revision = target_revision;
- eb->url = apr_pstrdup(edit_pool, url);
eb->repos_root_url = apr_pstrdup(edit_pool, repos_root_url);
eb->repos_uuid = apr_pstrdup(edit_pool, repos_uuid);
+ eb->new_repos_relpath = svn_uri_skip_ancestor(eb->repos_root_url, url, edit_pool);
+ eb->old_repos_relpath = eb->new_repos_relpath;
+
+ eb->original_revision = SVN_INVALID_REVNUM;
eb->iprops = iprops;
@@ -1127,6 +1120,8 @@ svn_wc__get_file_external_editor(const s
else
eb->recorded_revision = SVN_INVALID_REVNUM; /* Not fixed/HEAD */
+ eb->conflict_func = conflict_func;
+ eb->conflict_baton = conflict_baton;
eb->cancel_func = cancel_func;
eb->cancel_baton = cancel_baton;
eb->notify_func = notify_func;
@@ -1496,8 +1491,8 @@ svn_wc__external_remove(svn_wc_context_t
else
{
SVN_ERR(svn_wc__db_base_remove(wc_ctx->db, local_abspath,
- FALSE, FALSE, FALSE,
- SVN_INVALID_REVNUM,
+ FALSE, TRUE, FALSE,
+ 0,
NULL, NULL, scratch_pool));
SVN_ERR(svn_wc__wq_run(wc_ctx->db, local_abspath,
cancel_func, cancel_baton,
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/info.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/info.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/info.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/info.c Tue Jun 23 12:55:43 2015
@@ -283,9 +283,10 @@ build_info_for_node(svn_wc__info2_t **in
local_abspath, result_pool, scratch_pool));
if (conflicted)
- SVN_ERR(svn_wc__read_conflicts(&wc_info->conflicts, db,
- local_abspath,
- TRUE /* ### create tempfiles */,
+ SVN_ERR(svn_wc__read_conflicts(&wc_info->conflicts, NULL,
+ db, local_abspath,
+ FALSE /* create tempfiles */,
+ FALSE /* only tree conflicts */,
result_pool, scratch_pool));
else
wc_info->conflicts = NULL;
@@ -530,9 +531,10 @@ svn_wc__get_info(svn_wc_context_t *wc_ct
info->repos_root_URL = repos_root_url;
info->repos_UUID = repos_uuid;
- SVN_ERR(svn_wc__read_conflicts(&conflicts,
+ SVN_ERR(svn_wc__read_conflicts(&conflicts, NULL,
wc_ctx->db, this_abspath,
- TRUE /* ### create tempfiles */,
+ FALSE /* create tempfiles */,
+ FALSE /* only tree conflicts */,
iterpool, iterpool));
if (! conflicts || ! conflicts->nelts)
continue;
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/merge.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/merge.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/merge.c Tue Jun 23 12:55:43 2015
@@ -1230,6 +1230,7 @@ svn_wc_merge5(enum svn_wc_merge_outcome_
apr_hash_t *pristine_props = NULL;
apr_hash_t *old_actual_props;
apr_hash_t *new_actual_props = NULL;
+ svn_node_kind_t kind;
SVN_ERR_ASSERT(svn_dirent_is_absolute(left_abspath));
SVN_ERR_ASSERT(svn_dirent_is_absolute(right_abspath));
@@ -1242,7 +1243,6 @@ svn_wc_merge5(enum svn_wc_merge_outcome_
/* Sanity check: the merge target must be a file under revision control */
{
svn_wc__db_status_t status;
- svn_node_kind_t kind;
svn_boolean_t had_props;
svn_boolean_t props_mod;
svn_boolean_t conflicted;
@@ -1405,7 +1405,7 @@ svn_wc_merge5(enum svn_wc_merge_outcome_
svn_boolean_t text_conflicted, prop_conflicted;
SVN_ERR(svn_wc__conflict_invoke_resolver(
- wc_ctx->db, target_abspath,
+ wc_ctx->db, target_abspath, kind,
conflict_skel, merge_options,
conflict_func, conflict_baton,
cancel_func, cancel_baton,
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/props.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/props.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/props.c Tue Jun 23 12:55:43 2015
@@ -327,7 +327,8 @@ svn_wc_merge_props3(svn_wc_notify_state_
{
svn_boolean_t prop_conflicted;
- SVN_ERR(svn_wc__conflict_invoke_resolver(db, local_abspath, conflict_skel,
+ SVN_ERR(svn_wc__conflict_invoke_resolver(db, local_abspath, kind,
+ conflict_skel,
NULL /* merge_options */,
conflict_func, conflict_baton,
cancel_func, cancel_baton,
@@ -750,7 +751,8 @@ svn_wc__create_prejfile(const char **tmp
apr_hash_t *conflicted_props;
svn_skel_t *conflicts;
- SVN_ERR(svn_wc__db_read_conflict(&conflicts, NULL, db, local_abspath,
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, NULL, NULL,
+ db, local_abspath,
scratch_pool, scratch_pool));
SVN_ERR(svn_wc__conflict_read_info(&operation, NULL, NULL, NULL, NULL,
Modified: subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/questions.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/questions.c?rev=1687045&r1=1687044&r2=1687045&view=diff
==============================================================================
--- subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/questions.c (original)
+++ subversion/branches/svn-mergeinfo-normalizer/subversion/libsvn_wc/questions.c Tue Jun 23 12:55:43 2015
@@ -369,7 +369,8 @@ internal_conflicted_p(svn_boolean_t *tex
svn_boolean_t resolved_text = FALSE;
svn_boolean_t resolved_props = FALSE;
- SVN_ERR(svn_wc__db_read_conflict(&conflicts, NULL, db, local_abspath,
+ SVN_ERR(svn_wc__db_read_conflict(&conflicts, NULL, NULL,
+ db, local_abspath,
scratch_pool, scratch_pool));
if (!conflicts)