You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2012/03/21 03:39:00 UTC
svn commit: r1303257 [4/4] - in /subversion/branches/inheritable-props: ./
build/ac-macros/ notes/ notes/directory-index/ notes/wc-ng/
subversion/bindings/swig/ruby/test/ subversion/include/
subversion/include/private/ subversion/libsvn_client/ subvers...
Modified: subversion/branches/inheritable-props/subversion/libsvn_wc/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_wc/props.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_wc/props.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_wc/props.c Wed Mar 21 02:38:58 2012
@@ -788,7 +788,7 @@ set_prop_merge_state(svn_wc_notify_state
* 'choose_postpone', then set *CONFLICT_REMAINS to TRUE and return.
*
* If the callback responds with a choice of 'base', 'theirs', 'mine',
- * or 'merged', then install the proper value into WORKING_PROPS and
+ * or 'merged', then install the proper value into ACTUAL_PROPS and
* set *CONFLICT_REMAINS to FALSE.
*/
static svn_error_t *
@@ -799,7 +799,7 @@ maybe_generate_propconflict(svn_boolean_
const svn_wc_conflict_version_t *right_version,
svn_boolean_t is_dir,
const char *propname,
- apr_hash_t *working_props,
+ apr_hash_t *actual_props,
const svn_string_t *incoming_old_val,
const svn_string_t *incoming_new_val,
const svn_string_t *base_val,
@@ -936,7 +936,7 @@ maybe_generate_propconflict(svn_boolean_
}
/* Build the rest of the description object: */
- cdesc->mime_type = (is_dir ? NULL : svn_prop_get_value(working_props,
+ cdesc->mime_type = (is_dir ? NULL : svn_prop_get_value(actual_props,
SVN_PROP_MIME_TYPE));
cdesc->is_binary = (cdesc->mime_type
&& svn_mime_type_is_binary(cdesc->mime_type));
@@ -978,7 +978,7 @@ maybe_generate_propconflict(svn_boolean_
}
case svn_wc_conflict_choose_mine_full:
{
- /* No need to change working_props; it already contains working_val */
+ /* No need to change actual_props; it already contains working_val */
*conflict_remains = FALSE;
break;
}
@@ -989,14 +989,14 @@ maybe_generate_propconflict(svn_boolean_
then choose _mine side or _theirs side for conflicting ones. */
case svn_wc_conflict_choose_theirs_full:
{
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING,
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING,
incoming_new_val);
*conflict_remains = FALSE;
break;
}
case svn_wc_conflict_choose_base:
{
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, base_val);
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING, base_val);
*conflict_remains = FALSE;
break;
}
@@ -1018,7 +1018,7 @@ maybe_generate_propconflict(svn_boolean_
cdesc->merged_file,
scratch_pool));
merged_string = svn_stringbuf__morph_into_string(merged_stringbuf);
- apr_hash_set(working_props, propname,
+ apr_hash_set(actual_props, propname,
APR_HASH_KEY_STRING, merged_string);
*conflict_remains = FALSE;
}
@@ -1033,7 +1033,7 @@ maybe_generate_propconflict(svn_boolean_
}
-/* Add the property with name PROPNAME to the set of WORKING_PROPS on
+/* Add the property with name PROPNAME to the set of ACTUAL_PROPS on
* PATH, setting *STATE or *CONFLICT_REMAINS according to merge outcomes.
*
* *STATE is an input and output parameter, its value is to be
@@ -1055,7 +1055,7 @@ apply_single_prop_add(svn_wc_notify_stat
const svn_wc_conflict_version_t *left_version,
const svn_wc_conflict_version_t *right_version,
svn_boolean_t is_dir,
- apr_hash_t *working_props,
+ apr_hash_t *actual_props,
const char *propname,
const svn_string_t *base_val,
const svn_string_t *new_val,
@@ -1067,13 +1067,13 @@ apply_single_prop_add(svn_wc_notify_stat
{
svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
+ = apr_hash_get(actual_props, propname, APR_HASH_KEY_STRING);
*conflict_remains = FALSE;
if (working_val)
{
- /* the property already exists in working_props... */
+ /* the property already exists in actual_props... */
if (svn_string_compare(working_val, new_val))
/* The value we want is already there, so it's a merge. */
@@ -1107,7 +1107,7 @@ apply_single_prop_add(svn_wc_notify_stat
else
{
merged_prop = TRUE;
- apr_hash_set(working_props, propname,
+ apr_hash_set(actual_props, propname,
APR_HASH_KEY_STRING, merged_val);
set_prop_merge_state(state, svn_wc_notify_state_merged);
}
@@ -1119,7 +1119,7 @@ apply_single_prop_add(svn_wc_notify_stat
db, local_abspath,
left_version, right_version,
is_dir,
- propname, working_props,
+ propname, actual_props,
NULL, new_val,
base_val, working_val,
conflict_func,
@@ -1134,21 +1134,21 @@ apply_single_prop_add(svn_wc_notify_stat
db, local_abspath,
left_version, right_version,
is_dir, propname,
- working_props, NULL, new_val,
+ actual_props, NULL, new_val,
base_val, NULL,
conflict_func, conflict_baton,
dry_run, scratch_pool));
}
- else /* property doesn't yet exist in working_props... */
+ else /* property doesn't yet exist in actual_props... */
/* so just set it */
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, new_val);
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING, new_val);
return SVN_NO_ERROR;
}
/* Delete the property with name PROPNAME from the set of
- * WORKING_PROPS on PATH, setting *STATE or *CONFLICT_REMAINS according to
+ * ACTUAL_PROPS on PATH, setting *STATE or *CONFLICT_REMAINS according to
* merge outcomes.
*
* *STATE is an input and output parameter, its value is to be
@@ -1171,7 +1171,7 @@ apply_single_prop_delete(svn_wc_notify_s
const svn_wc_conflict_version_t *left_version,
const svn_wc_conflict_version_t *right_version,
svn_boolean_t is_dir,
- apr_hash_t *working_props,
+ apr_hash_t *actual_props,
const char *propname,
const svn_string_t *base_val,
const svn_string_t *old_val,
@@ -1182,7 +1182,7 @@ apply_single_prop_delete(svn_wc_notify_s
apr_pool_t *scratch_pool)
{
svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
+ = apr_hash_get(actual_props, propname, APR_HASH_KEY_STRING);
*conflict_remains = FALSE;
@@ -1196,14 +1196,14 @@ apply_single_prop_delete(svn_wc_notify_s
db, local_abspath,
left_version, right_version,
is_dir, propname,
- working_props, old_val, NULL,
+ actual_props, old_val, NULL,
base_val, working_val,
conflict_func, conflict_baton,
dry_run, scratch_pool));
}
else
{
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, NULL);
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING, NULL);
if (old_val)
/* This is a merge, merging a delete into non-existent
property or a local addition of same prop value. */
@@ -1217,14 +1217,14 @@ apply_single_prop_delete(svn_wc_notify_s
{
if (svn_string_compare(working_val, old_val))
/* they have the same values, so it's an update */
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, NULL);
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING, NULL);
else
{
SVN_ERR(maybe_generate_propconflict(conflict_remains,
db, local_abspath,
left_version, right_version,
is_dir,
- propname, working_props,
+ propname, actual_props,
old_val, NULL,
base_val, working_val,
conflict_func,
@@ -1244,7 +1244,7 @@ apply_single_prop_delete(svn_wc_notify_s
db, local_abspath,
left_version, right_version,
is_dir, propname,
- working_props, old_val, NULL,
+ actual_props, old_val, NULL,
base_val, working_val,
conflict_func, conflict_baton,
dry_run, scratch_pool));
@@ -1269,7 +1269,7 @@ apply_single_mergeinfo_prop_change(svn_w
const svn_wc_conflict_version_t *left_version,
const svn_wc_conflict_version_t *right_version,
svn_boolean_t is_dir,
- apr_hash_t *working_props,
+ apr_hash_t *actual_props,
const char *propname,
const svn_string_t *base_val,
const svn_string_t *old_val,
@@ -1281,7 +1281,7 @@ apply_single_mergeinfo_prop_change(svn_w
apr_pool_t *scratch_pool)
{
svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
+ = apr_hash_get(actual_props, propname, APR_HASH_KEY_STRING);
if ((working_val && ! base_val)
|| (! working_val && base_val)
@@ -1305,7 +1305,7 @@ apply_single_mergeinfo_prop_change(svn_w
new_val,
result_pool,
scratch_pool));
- apr_hash_set(working_props, propname,
+ apr_hash_set(actual_props, propname,
APR_HASH_KEY_STRING, new_val);
set_prop_merge_state(state, svn_wc_notify_state_merged);
}
@@ -1317,7 +1317,7 @@ apply_single_mergeinfo_prop_change(svn_w
SVN_ERR(maybe_generate_propconflict(conflict_remains,
db, local_abspath,
left_version, right_version,
- is_dir, propname, working_props,
+ is_dir, propname, actual_props,
old_val, new_val,
base_val, working_val,
conflict_func, conflict_baton,
@@ -1339,14 +1339,14 @@ apply_single_mergeinfo_prop_change(svn_w
old_val, new_val, scratch_pool));
SVN_ERR(svn_mergeinfo_to_string(&mergeinfo_string,
added_mergeinfo, result_pool));
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING,
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING,
mergeinfo_string);
}
else /* means working && base && svn_string_compare(working, base) */
{
if (svn_string_compare(old_val, base_val))
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, new_val);
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING, new_val);
else
{
@@ -1358,7 +1358,7 @@ apply_single_mergeinfo_prop_change(svn_w
working_val,
new_val, result_pool,
scratch_pool));
- apr_hash_set(working_props, propname,
+ apr_hash_set(actual_props, propname,
APR_HASH_KEY_STRING, new_val);
set_prop_merge_state(state, svn_wc_notify_state_merged);
}
@@ -1381,7 +1381,7 @@ apply_single_generic_prop_change(svn_wc_
const svn_wc_conflict_version_t *left_version,
const svn_wc_conflict_version_t *right_version,
svn_boolean_t is_dir,
- apr_hash_t *working_props,
+ apr_hash_t *actual_props,
const char *propname,
const svn_string_t *base_val,
const svn_string_t *old_val,
@@ -1393,7 +1393,7 @@ apply_single_generic_prop_change(svn_wc_
apr_pool_t *scratch_pool)
{
svn_string_t *working_val
- = apr_hash_get(working_props, propname, APR_HASH_KEY_STRING);
+ = apr_hash_get(actual_props, propname, APR_HASH_KEY_STRING);
SVN_ERR_ASSERT(old_val != NULL);
@@ -1411,7 +1411,7 @@ apply_single_generic_prop_change(svn_wc_
&& svn_string_compare(working_val, old_val))
{
/* A trivial update: change it to new_val. */
- apr_hash_set(working_props, propname, APR_HASH_KEY_STRING, new_val);
+ apr_hash_set(actual_props, propname, APR_HASH_KEY_STRING, new_val);
}
else
{
@@ -1419,7 +1419,7 @@ apply_single_generic_prop_change(svn_wc_
SVN_ERR(maybe_generate_propconflict(conflict_remains,
db, local_abspath,
left_version, right_version,
- is_dir, propname, working_props,
+ is_dir, propname, actual_props,
old_val, new_val,
base_val, working_val,
conflict_func, conflict_baton,
@@ -1429,7 +1429,7 @@ apply_single_generic_prop_change(svn_wc_
return SVN_NO_ERROR;
}
-/* Change the property with name PROPNAME in the set of WORKING_PROPS
+/* Change the property with name PROPNAME in the set of ACTUAL_PROPS
* on PATH, setting *STATE or *CONFLICT_REMAINS according to the merge outcome.
*
* *STATE is an input and output parameter, its value is to be
@@ -1454,7 +1454,7 @@ apply_single_prop_change(svn_wc_notify_s
const svn_wc_conflict_version_t *left_version,
const svn_wc_conflict_version_t *right_version,
svn_boolean_t is_dir,
- apr_hash_t *working_props,
+ apr_hash_t *actual_props,
const char *propname,
const svn_string_t *base_val,
const svn_string_t *old_val,
@@ -1490,7 +1490,7 @@ apply_single_prop_change(svn_wc_notify_s
left_version,
right_version,
is_dir,
- working_props,
+ actual_props,
propname,
base_val,
old_val,
@@ -1522,7 +1522,7 @@ apply_single_prop_change(svn_wc_notify_s
db, local_abspath,
left_version, right_version,
is_dir,
- working_props,
+ actual_props,
propname, base_val, old_val,
new_val,
conflict_func, conflict_baton,
@@ -1988,7 +1988,7 @@ svn_wc_prop_get2(const svn_string_t **va
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -2014,7 +2014,7 @@ svn_wc__internal_propget(const svn_strin
apr_pool_t *scratch_pool)
{
apr_hash_t *prophash = NULL;
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
svn_boolean_t hidden;
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -2429,7 +2429,7 @@ svn_wc_prop_set4(svn_wc_context_t *wc_ct
void *notify_baton,
apr_pool_t *scratch_pool)
{
- enum svn_prop_kind prop_kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind prop_kind = svn_property_kind2(name);
svn_kind_t kind;
const char *dir_abspath;
@@ -2609,7 +2609,7 @@ svn_wc_canonicalize_svn_prop(const svn_s
svn_boolean_t
svn_wc_is_normal_prop(const char *name)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
return (kind == svn_prop_regular_kind);
}
@@ -2617,7 +2617,7 @@ svn_wc_is_normal_prop(const char *name)
svn_boolean_t
svn_wc_is_wc_prop(const char *name)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
return (kind == svn_prop_wc_kind);
}
@@ -2625,7 +2625,7 @@ svn_wc_is_wc_prop(const char *name)
svn_boolean_t
svn_wc_is_entry_prop(const char *name)
{
- enum svn_prop_kind kind = svn_property_kind(NULL, name);
+ enum svn_prop_kind kind = svn_property_kind2(name);
return (kind == svn_prop_entry_kind);
}
Modified: subversion/branches/inheritable-props/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_wc/update_editor.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_wc/update_editor.c Wed Mar 21 02:38:58 2012
@@ -2541,7 +2541,7 @@ change_dir_prop(void *dir_baton,
propchange->name = apr_pstrdup(db->pool, name);
propchange->value = value ? svn_string_dup(value, db->pool) : NULL;
- if (!db->edited && svn_property_kind(NULL, name) == svn_prop_regular_kind)
+ if (!db->edited && svn_property_kind2(name) == svn_prop_regular_kind)
SVN_ERR(mark_directory_edited(db, pool));
return SVN_NO_ERROR;
@@ -3724,7 +3724,7 @@ change_file_prop(void *file_baton,
propchange->name = apr_pstrdup(fb->pool, name);
propchange->value = value ? svn_string_dup(value, fb->pool) : NULL;
- if (!fb->edited && svn_property_kind(NULL, name) == svn_prop_regular_kind)
+ if (!fb->edited && svn_property_kind2(name) == svn_prop_regular_kind)
SVN_ERR(mark_file_edited(fb, scratch_pool));
return SVN_NO_ERROR;
@@ -4470,8 +4470,8 @@ close_file(void *file_baton,
NULL /* left_version */,
NULL /* right_version */,
NULL /* server_baseprops (not merging) */,
- current_base_props /* base_props */,
- fake_actual_props /* working_props */,
+ current_base_props /* pristine_props */,
+ fake_actual_props /* actual_props */,
regular_prop_changes, /* propchanges */
TRUE /* base_merge */,
FALSE /* dry_run */,
Modified: subversion/branches/inheritable-props/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svn/cl.h?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svn/cl.h (original)
+++ subversion/branches/inheritable-props/subversion/svn/cl.h Wed Mar 21 02:38:58 2012
@@ -196,6 +196,7 @@ typedef struct svn_cl__opt_state_t
const char *merge_cmd; /* the external merge command to use */
const char *editor_cmd; /* the external editor command to use */
svn_boolean_t record_only; /* whether to record mergeinfo */
+ svn_boolean_t symmetric_merge; /* symmetric merge */
const char *old_target; /* diff target */
const char *new_target; /* diff target */
svn_boolean_t relocate; /* rewrite urls (svn switch) */
Modified: subversion/branches/inheritable-props/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svn/main.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svn/main.c (original)
+++ subversion/branches/inheritable-props/subversion/svn/main.c Wed Mar 21 02:38:58 2012
@@ -127,6 +127,7 @@ typedef enum svn_cl__longopt_t {
opt_use_patch_diff_format,
opt_allow_mixed_revisions,
opt_include_externals,
+ opt_symmetric,
opt_show_inherited_props,
} svn_cl__longopt_t;
@@ -367,6 +368,8 @@ const apr_getopt_option_t svn_cl__option
"recursion. This does not include externals with a\n"
" "
"fixed revision. (See the svn:externals property)")},
+ {"symmetric", opt_symmetric, 0,
+ N_("Symmetric merge")},
{"show-inherited-props", opt_show_inherited_props, 0,
N_("retrieve target's inherited properties")},
@@ -1017,7 +1020,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
" repositories.\n"),
{'r', 'c', 'N', opt_depth, 'q', opt_force, opt_dry_run, opt_merge_cmd,
opt_record_only, 'x', opt_ignore_ancestry, opt_accept, opt_reintegrate,
- opt_allow_mixed_revisions} },
+ opt_allow_mixed_revisions, opt_symmetric} },
{ "mergeinfo", svn_cl__mergeinfo, {0}, N_
("Display merge-related information.\n"
@@ -1955,6 +1958,9 @@ main(int argc, const char *argv[])
case opt_record_only:
opt_state.record_only = TRUE;
break;
+ case opt_symmetric:
+ opt_state.symmetric_merge = TRUE;
+ break;
case opt_editor_cmd:
opt_state.editor_cmd = apr_pstrdup(pool, opt_arg);
break;
Modified: subversion/branches/inheritable-props/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svn/merge-cmd.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svn/merge-cmd.c (original)
+++ subversion/branches/inheritable-props/subversion/svn/merge-cmd.c Wed Mar 21 02:38:58 2012
@@ -33,6 +33,7 @@
#include "svn_error.h"
#include "svn_types.h"
#include "cl.h"
+#include "private/svn_client_private.h"
#include "svn_private_config.h"
@@ -97,6 +98,40 @@ ensure_wc_path_has_repo_revision(const c
return SVN_NO_ERROR;
}
+#ifdef SVN_WITH_SYMMETRIC_MERGE
+/* Symmetric, merge-tracking merge, used for sync or reintegrate purposes. */
+static svn_error_t *
+symmetric_merge(const char *source_path_or_url,
+ const svn_opt_revision_t *source_revision,
+ const char *target_wcpath,
+ svn_depth_t depth,
+ svn_boolean_t ignore_ancestry,
+ svn_boolean_t force,
+ svn_boolean_t record_only,
+ svn_boolean_t dry_run,
+ svn_boolean_t allow_mixed_rev,
+ const apr_array_header_t *merge_options,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ svn_client__symmetric_merge_t *merge;
+
+ /* Find the 3-way merges needed (and check suitability of the WC). */
+ SVN_ERR(svn_client__find_symmetric_merge(&merge,
+ source_path_or_url, source_revision,
+ target_wcpath, allow_mixed_rev,
+ ctx, scratch_pool, scratch_pool));
+
+ /* Perform the 3-way merges */
+ SVN_ERR(svn_client__do_symmetric_merge(merge, target_wcpath, depth,
+ ignore_ancestry, force, record_only,
+ dry_run, merge_options,
+ ctx, scratch_pool));
+
+ return SVN_NO_ERROR;
+}
+#endif
+
/* This implements the `svn_opt_subcommand_t' interface. */
svn_error_t *
svn_cl__merge(apr_getopt_t *os,
@@ -346,6 +381,29 @@ svn_cl__merge(apr_getopt_t *os,
"with --reintegrate"));
}
+#ifdef SVN_WITH_SYMMETRIC_MERGE
+ if (opt_state->symmetric_merge)
+ {
+ if (two_sources_specified || opt_state->reintegrate)
+ return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("--reintegrate and SOURCE2 can't be used "
+ "with --symmetric"));
+ SVN_ERR_W(svn_cl__check_related_source_and_target(
+ sourcepath1, &peg_revision1, targetpath, &unspecified,
+ ctx, pool),
+ _("Source and target must be different but related branches"));
+
+ err = symmetric_merge(sourcepath1, &peg_revision1, targetpath,
+ opt_state->depth,
+ opt_state->ignore_ancestry,
+ opt_state->force,
+ opt_state->record_only,
+ opt_state->dry_run,
+ opt_state->allow_mixed_rev,
+ options, ctx, pool);
+ }
+ else
+#endif
if (opt_state->reintegrate)
{
SVN_ERR_W(svn_cl__check_related_source_and_target(
Modified: subversion/branches/inheritable-props/subversion/svnrdump/dump_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnrdump/dump_editor.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnrdump/dump_editor.c (original)
+++ subversion/branches/inheritable-props/subversion/svnrdump/dump_editor.c Wed Mar 21 02:38:58 2012
@@ -676,7 +676,7 @@ change_dir_prop(void *parent_baton,
LDR_DBG(("change_dir_prop %p\n", parent_baton));
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
if (value)
@@ -718,7 +718,7 @@ change_file_prop(void *file_baton,
LDR_DBG(("change_file_prop %p\n", file_baton));
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
if (value)
Modified: subversion/branches/inheritable-props/subversion/svnrdump/load_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnrdump/load_editor.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnrdump/load_editor.c (original)
+++ subversion/branches/inheritable-props/subversion/svnrdump/load_editor.c Wed Mar 21 02:38:58 2012
@@ -876,7 +876,7 @@ remove_node_props(void *baton)
for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
{
const char *name = svn__apr_hash_index_key(hi);
- svn_prop_kind_t kind = svn_property_kind(NULL, name);
+ svn_prop_kind_t kind = svn_property_kind2(name);
if (kind == svn_prop_regular_kind)
SVN_ERR(set_node_property(nb, name, NULL));
Modified: subversion/branches/inheritable-props/subversion/svnsync/sync.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnsync/sync.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnsync/sync.c (original)
+++ subversion/branches/inheritable-props/subversion/svnsync/sync.c Wed Mar 21 02:38:58 2012
@@ -386,7 +386,7 @@ change_file_prop(void *file_baton,
edit_baton_t *eb = fb->edit_baton;
/* only regular properties can pass over libsvn_ra */
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
/* Maybe drop svn:mergeinfo. */
@@ -434,7 +434,7 @@ change_dir_prop(void *dir_baton,
edit_baton_t *eb = db->edit_baton;
/* Only regular properties can pass over libsvn_ra */
- if (svn_property_kind(NULL, name) != svn_prop_regular_kind)
+ if (svn_property_kind2(name) != svn_prop_regular_kind)
return SVN_NO_ERROR;
/* Maybe drop svn:mergeinfo. */
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/merge_reintegrate_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/merge_reintegrate_tests.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/merge_reintegrate_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/merge_reintegrate_tests.py Wed Mar 21 02:38:58 2012
@@ -2580,7 +2580,26 @@ def reintegrate_symlink_deletion(sbox):
svntest.main.run_svn(None, 'merge', '--reintegrate',
A_COPY_url, A_path)
+#----------------------------------------------------------------------
+def no_op_reintegrate(sbox):
+ """no-op reintegrate"""
+
+ # Make A_COPY branch in r2, and do a few more commits to A in r3-6.
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ A_path = sbox.ospath('A')
+ A_COPY_path = sbox.ospath('A_COPY')
+ expected_disk, expected_status = set_up_branch(sbox)
+
+ # Sync merge from trunk to branch
+ svntest.main.run_svn(None, 'merge', sbox.repo_url + '/A', A_COPY_path)
+ sbox.simple_commit()
+ sbox.simple_update()
+ # Reintegrate; there are no relevant changes on the branch.
+ # ### TODO: Check the result more carefully than merely that it completed.
+ svntest.main.run_svn(None, 'merge', '--reintegrate',
+ sbox.repo_url + '/A_COPY', A_path)
########################################################################
# Run the tests
@@ -2606,6 +2625,7 @@ test_list = [ None,
no_source_subtree_mergeinfo,
reintegrate_replaced_source,
reintegrate_symlink_deletion,
+ no_op_reintegrate,
]
if __name__ == '__main__':
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tests.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tests.py Wed Mar 21 02:38:58 2012
@@ -17467,6 +17467,90 @@ def merge_source_with_replacement(sbox):
'merge', sbox.repo_url + '/A',
A_COPY_path)
+#----------------------------------------------------------------------
+# Test for issue #4144 'Reverse merge with replace in source applies
+# diffs in forward order'.
+@SkipUnless(server_has_mergeinfo)
+@XFail()
+@Issue(4144)
+def reverse_merge_with_rename(sbox):
+ "reverse merge applies revs in reverse order"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Some paths we'll care about.
+ A_path = os.path.join(sbox.wc_dir, 'A')
+ omega_path = os.path.join(sbox.wc_dir, 'trunk', 'D', 'H', 'omega')
+ A_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY')
+ beta_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'B', 'E', 'beta')
+ psi_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'psi')
+ rho_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'G', 'rho')
+ omega_COPY_path = os.path.join(sbox.wc_dir, 'A_COPY', 'D', 'H', 'omega')
+
+ # branch A@1 to A_COPY in r2, then make a few edits under A in r3-6:
+ wc_disk, wc_status = set_up_branch(sbox)
+
+ # r7 - Rename ^/A to ^/trunk.
+ svntest.actions.run_and_verify_svn(None,
+ ['\n', 'Committed revision 7.\n'],
+ [], 'move',
+ sbox.repo_url + '/A',
+ sbox.repo_url + '/trunk',
+ '-m', "Rename 'A' to 'trunk'")
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # r8 - Make and edit to trunk/D/H/omega (which was also edited in r6).
+ svntest.main.file_write(omega_path, "Edit 'omega' on trunk.\n")
+ svntest.main.run_svn(None, 'ci', '-m', 'Another omega edit', wc_dir)
+
+ # r9 - Sync merge ^/trunk to A_COPY.
+ svntest.actions.run_and_verify_svn(None,
+ None, # Don't check stdout, we test this
+ # type of merge to death elsewhere.
+ [], 'merge', sbox.repo_url + '/trunk',
+ A_COPY_path)
+ svntest.main.run_svn(None, 'ci', '-m', 'Sync A_COPY with ^/trunk', wc_dir)
+ svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+
+ # Reverse merge -r9:1 from ^/trunk to A_COPY. This should return
+ # A_COPY to the same state it had prior to the sync merge in r2.
+ #
+ # This currently fails because the Subversion tries to reverse merge
+ # -r6:1 first, then -r8:6, causing a spurious conflict on omega:
+ #
+ # >svn merge ^/trunk A_COPY -r9:1 --accept=postpone
+ # --- Reverse-merging r6 through r2 into 'A_COPY':
+ # U A_COPY\B\E\beta
+ # U A_COPY\D\G\rho
+ # C A_COPY\D\H\omega
+ # U A_COPY\D\H\psi
+ # --- Recording mergeinfo for reverse merge of r6 through r2 into 'A_COPY':
+ # U A_COPY
+ # Summary of conflicts:
+ # Text conflicts: 1
+ # ..\..\..\subversion\svn\util.c:913: (apr_err=155015)
+ # ..\..\..\subversion\libsvn_client\merge.c:10848: (apr_err=155015)
+ # ..\..\..\subversion\libsvn_client\merge.c:10812: (apr_err=155015)
+ # ..\..\..\subversion\libsvn_client\merge.c:8984: (apr_err=155015)
+ # ..\..\..\subversion\libsvn_client\merge.c:4728: (apr_err=155015)
+ # svn: E155015: One or more conflicts were produced while merging r6:1
+ # into 'C:\SVN\src-trunk-4\Debug\subversion\tests\cmdline\svn-test-work
+ # \working_copies\merge_tests-127\A_COPY' -- resolve all conflicts and
+ # rerun the merge to apply the remaining unmerged revisions
+ expected_output = expected_merge_output(
+ [[8,7],[6,2]],
+ ['U ' + beta_COPY_path + '\n',
+ 'U ' + rho_COPY_path + '\n',
+ 'U ' + omega_COPY_path + '\n',
+ 'G ' + omega_COPY_path + '\n',
+ 'U ' + psi_COPY_path + '\n',
+ ' U ' + A_COPY_path + '\n',
+ ' G ' + A_COPY_path + '\n',], elides=True)
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge', sbox.repo_url + '/trunk',
+ A_COPY_path, '-r9:1')
+
########################################################################
# Run the tests
@@ -17599,6 +17683,7 @@ test_list = [ None,
unnecessary_noninheritable_mergeinfo_shallow_merge,
svnmucc_abuse_1,
merge_source_with_replacement,
+ reverse_merge_with_rename,
]
if __name__ == '__main__':
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svnadmin_tests.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svnadmin_tests.py Wed Mar 21 02:38:58 2012
@@ -29,6 +29,7 @@ import os
import re
import shutil
import sys
+import threading
# Our testing module
import svntest
@@ -1780,6 +1781,47 @@ def locking(sbox):
iota_token)
+@SkipUnless(svntest.main.is_threaded_python)
+@Issue(4129)
+def mergeinfo_race(sbox):
+ "concurrent mergeinfo commits invalidate pred-count"
+ sbox.build()
+
+ wc_dir = sbox.wc_dir
+ wc2_dir = sbox.add_wc_path('2')
+
+ ## Create wc2.
+ svntest.main.run_svn(None, 'checkout', '-q', sbox.repo_url, wc2_dir)
+
+ ## Some random edits.
+ svntest.main.run_svn(None, 'mkdir', sbox.ospath('d1', wc_dir))
+ svntest.main.run_svn(None, 'mkdir', sbox.ospath('d2', wc2_dir))
+
+ ## Set random mergeinfo properties.
+ svntest.main.run_svn(None, 'ps', 'svn:mergeinfo', '/P:42', sbox.ospath('A', wc_dir))
+ svntest.main.run_svn(None, 'ps', 'svn:mergeinfo', '/Q:42', sbox.ospath('iota', wc2_dir))
+
+ def makethread(some_wc_dir):
+ def worker():
+ svntest.main.run_svn(None, 'commit', '-mm', some_wc_dir)
+ return worker
+
+ t1 = threading.Thread(None, makethread(wc_dir))
+ t2 = threading.Thread(None, makethread(wc2_dir))
+
+ # t2 will trigger the issue #4129 sanity check in fs_fs.c
+ t1.start(); t2.start();
+
+ t1.join(); t2.join();
+
+ # Crude attempt to make sure everything worked.
+ # TODO: better way to catch exceptions in the thread
+ if svntest.actions.run_and_parse_info(sbox.repo_url)[0]['Revision'] != '3':
+ raise svntest.Failure("one or both commits failed")
+
+
+
+
########################################################################
# Run the tests
@@ -1814,6 +1856,7 @@ test_list = [ None,
hotcopy_incremental,
hotcopy_incremental_packed,
locking,
+ mergeinfo_race,
]
if __name__ == '__main__':
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/main.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/main.py Wed Mar 21 02:38:58 2012
@@ -1125,6 +1125,9 @@ def is_os_darwin():
def is_fs_case_insensitive():
return (is_os_darwin() or is_os_windows())
+def is_threaded_python():
+ return True
+
def server_has_mergeinfo():
return options.server_minor_version >= 5
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/sandbox.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/sandbox.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/sandbox.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/sandbox.py Wed Mar 21 02:38:58 2012
@@ -200,14 +200,14 @@ class Sandbox:
temporary and 'TEMP' or 'PERM',
parts[1])
- def simple_update(self, target=None):
+ def simple_update(self, target=None, revision='HEAD'):
"""Update the WC or TARGET.
TARGET is a relpath relative to the WC."""
if target is None:
target = self.wc_dir
else:
target = self.ospath(target)
- svntest.main.run_svn(False, 'update', target)
+ svntest.main.run_svn(False, 'update', target, '-r', revision)
def simple_switch(self, url, target=None):
"""Switch the WC or TARGET to URL.
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py Wed Mar 21 02:38:58 2012
@@ -1216,7 +1216,7 @@ def actual_only_node_behaviour(sbox):
"export", foo_path, sbox.get_tempname())
# import
expected_stdout = None
- expected_stderr = ".*foo.*does not exist.*"
+ expected_stderr = ".*(foo.*does not exist|Can't stat.*foo).*"
run_and_verify_svn(None, expected_stdout, expected_stderr,
"import", '-m', svntest.main.make_log_msg(),
foo_path, sbox.repo_url + '/foo_imported')
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/update_tests.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/update_tests.py Wed Mar 21 02:38:58 2012
@@ -5696,6 +5696,101 @@ def update_moved_dir_file_move(sbox):
None, None, None,
None, None, 1)
+@XFail()
+def update_move_text_mod(sbox):
+ "text mod to moved files"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ svntest.main.file_append(sbox.ospath('A/B/lambda'), "modified\n")
+ svntest.main.file_append(sbox.ospath('A/B/E/beta'), "modified\n")
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+
+ sbox.simple_move("A/B/E", "A/E2")
+ sbox.simple_move("A/B/lambda", "A/lambda2")
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', 'A/B/lambda',
+ status='D ')
+ expected_status.add({
+ 'A/E2' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/E2/alpha' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/lambda2' : Item(status='A ', copied='+', wc_rev='-'),
+ })
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/lambda2' : Item(status='U '),
+ 'A/E2/beta' : Item(status='U '),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E', 'A/B/lambda')
+ expected_disk.add({
+ 'A/E2' : Item(),
+ 'A/E2/alpha' : Item(contents="This is the file 'alpha'.\n"),
+ 'A/E2/beta' : Item(contents="This is the file 'beta'.\nmodified\n"),
+ 'A/lambda2' : Item(contents="This is the file 'lambda'.\nmodified\n"),
+ })
+ expected_status.tweak(wc_rev=2)
+ expected_status.tweak('A/E2', 'A/E2/alpha', 'A/E2/beta', 'A/lambda2',
+ wc_rev='-')
+ ### XFAIL 'A/E2/beta' is status R but should be ' '
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+@XFail()
+def update_nested_move_text_mod(sbox):
+ "text mod to moved file in moved dir"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ svntest.main.file_append(sbox.ospath('A/B/E/alpha'), "modified\n")
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+
+ sbox.simple_move("A/B/E", "A/E2")
+ sbox.simple_move("A/E2/alpha", "A/alpha2")
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ')
+ expected_status.add({
+ 'A/E2' : Item(status='A ', copied='+', wc_rev='-'),
+ 'A/E2/alpha' : Item(status='D ', copied='+', wc_rev='-'),
+ 'A/E2/beta' : Item(status=' ', copied='+', wc_rev='-'),
+ 'A/alpha2' : Item(status='A ', copied='+', wc_rev='-'),
+ })
+
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ expected_output = svntest.wc.State(wc_dir, {
+ 'A/alpha2' : Item(status='U '),
+ })
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('A/B/E/alpha', 'A/B/E/beta', 'A/B/E')
+ expected_disk.add({
+ 'A/E2' : Item(),
+ 'A/E2/beta' : Item(contents="This is the file 'beta'.\n"),
+ 'A/alpha2' : Item(contents="This is the file 'alpha'.\nmodified\n"),
+ })
+ expected_status.tweak(wc_rev=2)
+ expected_status.tweak('A/E2', 'A/E2/alpha', 'A/E2/beta', 'A/alpha2',
+ wc_rev='-')
+ ### XFAIL update fails 'No such file'
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output,
+ expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, 1)
+
+
#######################################################################
# Run the tests
@@ -5768,6 +5863,8 @@ test_list = [ None,
update_moved_dir_dir_add,
update_moved_dir_file_move,
update_binary_file_3,
+ update_move_text_mod,
+ update_nested_move_text_mod,
]
if __name__ == '__main__':
Propchange: subversion/branches/inheritable-props/subversion/tests/libsvn_client/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Mar 21 02:38:58 2012
@@ -4,3 +4,4 @@ client-test
test-patch*
test-wc*
test-copy-crash
+test-youngest-common-ancestor
Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c Wed Mar 21 02:38:58 2012
@@ -4505,6 +4505,78 @@ move_added(const svn_test_opts_t *opts,
return SVN_NO_ERROR;
}
+static svn_error_t *
+move_update(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ svn_test__sandbox_t b;
+
+ SVN_ERR(svn_test__sandbox_create(&b, "move_update", opts, pool));
+
+ SVN_ERR(wc_mkdir(&b, "A"));
+ SVN_ERR(wc_mkdir(&b, "A/B"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_mkdir(&b, "A/B/C"));
+ SVN_ERR(wc_commit(&b, ""));
+ SVN_ERR(wc_update(&b, "", 1));
+
+ /* A is single-revision so A2 is a single-revision copy */
+ SVN_ERR(wc_move(&b, "A", "A2"));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 1, "A/B"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 1, "A/B", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update A/B makes A2 a mixed-revision copy */
+ SVN_ERR(wc_update(&b, "A/B", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 1, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 1, "A", MOVED_HERE},
+ {1, "A2/B", "not-present", 2, "A/B"}, /* XFAIL */
+ {2, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {2, "A2/B/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ /* Update A makes A2 back into a single-revision copy */
+ SVN_ERR(wc_update(&b, "A", 2));
+ {
+ nodes_row_t nodes[] = {
+ {0, "", "normal", 1, ""},
+ {0, "A", "normal", 2, "A"},
+ {0, "A/B", "normal", 2, "A/B"},
+ {0, "A/B/C", "normal", 2, "A/B/C"},
+ {1, "A", "base-deleted", NO_COPY_FROM, "A2"},
+ {1, "A/B", "base-deleted", NO_COPY_FROM},
+ {1, "A/B/C", "base-deleted", NO_COPY_FROM},
+ {1, "A2", "normal", 2, "A", MOVED_HERE},
+ {1, "A2/B", "normal", 2, "A/B", MOVED_HERE},
+ {1, "A2/B/C", "normal", 2, "A/B/C", MOVED_HERE},
+ {0}
+ };
+ SVN_ERR(check_db_rows(&b, "", nodes));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* ---------------------------------------------------------------------- */
@@ -4595,5 +4667,7 @@ struct svn_test_descriptor_t test_funcs[
"move_on_move2"),
SVN_TEST_OPTS_XFAIL(move_added,
"move_added"),
+ SVN_TEST_OPTS_XFAIL(move_update,
+ "move_update"),
SVN_TEST_NULL
};
Modified: subversion/branches/inheritable-props/tools/client-side/mergeinfo-sanitizer.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/client-side/mergeinfo-sanitizer.py?rev=1303257&r1=1303256&r2=1303257&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/client-side/mergeinfo-sanitizer.py (original)
+++ subversion/branches/inheritable-props/tools/client-side/mergeinfo-sanitizer.py Wed Mar 21 02:38:58 2012
@@ -25,7 +25,6 @@ import getopt
import hashlib
import pickle
import getpass
-import re
from svn import client, core, ra, wc
## This script first fetches the mergeinfo of the working copy and tries
@@ -42,7 +41,7 @@ except AttributeError:
mergeinfo = {}
def usage():
- sys.stderr.write(""" Usage: %s WCPATH
+ sys.stderr.write(""" Usage: %s WCPATH [OPTION]
Analyze the mergeinfo property of the given WCPATH.
Look for the existence of merge_source's locations at their recorded
Propchange: subversion/branches/inheritable-props/tools/client-side/mergeinfo-sanitizer.py
------------------------------------------------------------------------------
svn:executable = *