[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r33957 - in branches/tc-merge-notify/subversion: libsvn_client tests/cmdline

From: Neels J. Hofmeyr <neels_at_elego.de>
Date: Thu, 30 Oct 2008 06:46:34 +0100

Hi tree-conflicts folks,

merge notification is starting to look really nice.

It is only implemented for the repos-diff editor in repos_diff.c, not for
the other ones. In fact, merge only uses the repos-diff one, so it's
obsolete to implement tree-conflicts notification for the wc-diff editor,
when no-one using the wc-diff editor is ever raising a tree conflict to be
notified with it.

`svn status' fails to note some tree-conflicts, but that was there before.

So there only is some freak output status=' U' on some tree-conflicts
notifications, seen in some tests that I have left failing for now, and e.g.
in merge_tests.py 144 (tree_conflicts_on_merge_local_ci_5_1). These will go
away as soon as I implement sbutler's suggestion to not use a flag in
notify_t, but a new notify_action enum field for tree-conflicts
notification. I'm intending to do that on trunk because it also affects the
update/switch code.

Can you guys find issues that would prevent merging tc-merge-notify back to
trunk now?

(Oh, and meta about merging: stsp told me once to use `merge --reintegrate',
but I've read somewhere that there are problems with that and one should
rather use two-URL merge. Steve, which commands did you use to merge that
other branch back to trunk? Did you copy-paste the commit logs over, and how?)

Thanks
~Neels

neels_at_tigris.org wrote:
> Author: neels
> Date: Wed Oct 29 22:21:26 2008
> New Revision: 33957
>
> Log:
> On (lightweight) branch tc-merge-notify:
>
> Do not show `Skipped' messages within newly tree-conflicted directories.
> Pass a boolean SKIP down the item batons and completely skip *all*
> action in the editor if SKIP is TRUE (i.e. don't even call diff callbacks).
>
> * subversion/libsvn_client/repos_diff.c
> (dir_baton, file_baton): Add SKIPPED flag.
> (make_dir_baton, make_file_baton): Default SKIPPED to FALSE.
> (delete_entry, add_directory, open_directory, add_file, open_file):
> Skip *all* action if the parent node is SKIPped or TREE_CONFLICTED.
> Propagate the SKIP flag to child batons where necessary.
> (window_handler, apply_textdelta, close_file, close_directory,
> change_file_prop, change_dir_prop): Skip *all* action if this node's
> SKIP flag is TRUE.
>
> * subversion/tests/cmdline/merge_tests.py
> (delete_file_and_dir, merge_catches_nonexistent_target,
> merge_tree_deleted_in_target, merge_added_dir_to_deleted_in_target,
> three_way_merge_add_of_existing_binary_file, del_differing_file,
> tree_conflicts_and_obstructions,
> tree_conflicts_on_merge_local_ci_4_1,
> tree_conflicts_on_merge_local_ci_4_2, tree_conflicts_on_merge_local_ci_5_1,
> tree_conflicts_on_merge_local_ci_5_2, tree_conflicts_on_merge_local_ci_6,
> tree_conflicts_on_merge_no_local_ci_4_1,
> tree_conflicts_on_merge_no_local_ci_4_2,
> tree_conflicts_on_merge_no_local_ci_5_1,
> tree_conflicts_on_merge_no_local_ci_5_2,
> tree_conflicts_on_merge_no_local_ci_6): Fix up some tests. Intentionally
> leaving some merge tests unfixed for now.
>
> Modified:
> branches/tc-merge-notify/subversion/libsvn_client/repos_diff.c
> branches/tc-merge-notify/subversion/tests/cmdline/merge_tests.py
>
> Modified: branches/tc-merge-notify/subversion/libsvn_client/repos_diff.c
> URL: http://svn.collab.net/viewvc/svn/branches/tc-merge-notify/subversion/libsvn_client/repos_diff.c?pathrev=33957&r1=33956&r2=33957
> ==============================================================================
> --- branches/tc-merge-notify/subversion/libsvn_client/repos_diff.c Wed Oct 29 13:38:51 2008 (r33956)
> +++ branches/tc-merge-notify/subversion/libsvn_client/repos_diff.c Wed Oct 29 22:21:26 2008 (r33957)
> @@ -101,6 +101,11 @@ struct dir_baton {
> * (does not show tree-conflicts persisting from before this operation). */
> svn_boolean_t tree_conflicted;
>
> + /* If TRUE, this node is skipped entirely.
> + * This is currently used to skip all children of a tree-conflicted
> + * directory without setting TREE_CONFLICTED to TRUE everywhere. */
> + svn_boolean_t skip;
> +
> /* The path of the directory within the repository */
> const char *path;
>
> @@ -136,6 +141,11 @@ struct file_baton {
> * (does not show tree-conflicts persisting from before this operation). */
> svn_boolean_t tree_conflicted;
>
> + /* If TRUE, this node is skipped entirely.
> + * This is currently used to skip all children of a tree-conflicted
> + * directory. */
> + svn_boolean_t skip;
> +
> /* The path of the file within the repository */
> const char *path;
>
> @@ -192,6 +202,7 @@ make_dir_baton(const char *path,
> dir_baton->edit_baton = edit_baton;
> dir_baton->added = added;
> dir_baton->tree_conflicted = FALSE;
> + dir_baton->skip = FALSE;
> dir_baton->pool = pool;
> dir_baton->path = apr_pstrdup(pool, path);
> dir_baton->wcpath = svn_path_join(edit_baton->target, path, pool);
> @@ -217,6 +228,7 @@ make_file_baton(const char *path,
> file_baton->edit_baton = edit_baton;
> file_baton->added = added;
> file_baton->tree_conflicted = FALSE;
> + file_baton->skip = FALSE;
> file_baton->pool = pool;
> file_baton->path = apr_pstrdup(pool, path);
> file_baton->wcpath = svn_path_join(eb->target, path, pool);
> @@ -454,6 +466,10 @@ delete_entry(const char *path,
> svn_wc_notify_action_t action = svn_wc_notify_skip;
> svn_boolean_t tree_conflicted = FALSE;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (pb->skip || pb->tree_conflicted)
> + return SVN_NO_ERROR;
> +
> /* We need to know if this is a directory or a file */
> SVN_ERR(svn_ra_check_path(eb->ra_session, path, eb->revision, &kind, pool));
> SVN_ERR(get_path_access(&adm_access, eb->adm_access, pb->wcpath,
> @@ -551,6 +567,14 @@ add_directory(const char *path,
> b->pristine_props = eb->empty_hash;
> *child_baton = b;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (pb->skip || pb->tree_conflicted)
> + {
> + b->skip = TRUE;
> + return SVN_NO_ERROR;
> + }
> +
> +
> SVN_ERR(get_path_access(&adm_access, eb->adm_access, pb->wcpath, TRUE,
> pool));
>
> @@ -623,6 +647,13 @@ open_directory(const char *path,
> b = make_dir_baton(path, pb, pb->edit_baton, FALSE, pool);
> *child_baton = b;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (pb->skip || pb->tree_conflicted)
> + {
> + b->skip = TRUE;
> + return SVN_NO_ERROR;
> + }
> +
> SVN_ERR(get_dirprops_from_ra(b, base_revision));
>
> SVN_ERR(get_path_access(&adm_access, eb->adm_access, pb->wcpath, TRUE,
> @@ -651,6 +682,13 @@ add_file(const char *path,
> b = make_file_baton(path, TRUE, pb->edit_baton, pool);
> *file_baton = b;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (pb->skip || pb->tree_conflicted)
> + {
> + b->skip = TRUE;
> + return SVN_NO_ERROR;
> + }
> +
> SVN_ERR(get_empty_file(b->edit_baton, &(b->path_start_revision)));
> b->pristine_props = pb->edit_baton->empty_hash;
>
> @@ -671,6 +709,13 @@ open_file(const char *path,
> b = make_file_baton(path, FALSE, pb->edit_baton, pool);
> *file_baton = b;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (pb->skip || pb->tree_conflicted)
> + {
> + b->skip = TRUE;
> + return SVN_NO_ERROR;
> + }
> +
> return get_file_from_ra(b, base_revision);
> }
>
> @@ -681,6 +726,10 @@ window_handler(svn_txdelta_window_t *win
> {
> struct file_baton *b = window_baton;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (b->skip)
> + return SVN_NO_ERROR;
> +
> SVN_ERR(b->apply_handler(window, b->apply_baton));
>
> if (!window)
> @@ -703,6 +752,14 @@ apply_textdelta(void *file_baton,
> struct file_baton *b = file_baton;
> svn_wc_adm_access_t *adm_access;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (b->skip)
> + {
> + *handler = window_handler;
> + *handler_baton = file_baton;
> + return SVN_NO_ERROR;
> + }
> +
> /* Open the file to be used as the base for second revision */
> SVN_ERR(svn_io_file_open(&(b->file_start_revision),
> b->path_start_revision,
> @@ -764,6 +821,10 @@ close_file(void *file_baton,
> svn_wc_notify_state_t content_state = svn_wc_notify_state_unknown;
> svn_wc_notify_state_t prop_state = svn_wc_notify_state_unknown;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (b->skip)
> + return SVN_NO_ERROR;
> +
> err = get_parent_access(&adm_access, eb->adm_access,
> b->wcpath, eb->dry_run, b->pool);
>
> @@ -886,6 +947,10 @@ close_directory(void *dir_baton,
> svn_error_t *err;
> svn_wc_adm_access_t *adm_access;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (b->skip)
> + return SVN_NO_ERROR;
> +
> if (eb->dry_run)
> svn_hash__clear(svn_client__dry_run_deletions(eb->diff_cmd_baton));
>
> @@ -983,6 +1048,10 @@ change_file_prop(void *file_baton,
> struct file_baton *b = file_baton;
> svn_prop_t *propchange;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (b->skip)
> + return SVN_NO_ERROR;
> +
> propchange = apr_array_push(b->propchanges);
> propchange->name = apr_pstrdup(b->pool, name);
> propchange->value = value ? svn_string_dup(value, b->pool) : NULL;
> @@ -1000,6 +1069,10 @@ change_dir_prop(void *dir_baton,
> struct dir_baton *db = dir_baton;
> svn_prop_t *propchange;
>
> + /* Skip *everything* within a newly tree-conflicted directory. */
> + if (db->skip)
> + return SVN_NO_ERROR;
> +
> propchange = apr_array_push(db->propchanges);
> propchange->name = apr_pstrdup(db->pool, name);
> propchange->value = value ? svn_string_dup(value, db->pool) : NULL;
>
> Modified: branches/tc-merge-notify/subversion/tests/cmdline/merge_tests.py
> URL: http://svn.collab.net/viewvc/svn/branches/tc-merge-notify/subversion/tests/cmdline/merge_tests.py?pathrev=33957&r1=33956&r2=33957
> ==============================================================================
> --- branches/tc-merge-notify/subversion/tests/cmdline/merge_tests.py Wed Oct 29 13:38:51 2008 (r33956)
> +++ branches/tc-merge-notify/subversion/tests/cmdline/merge_tests.py Wed Oct 29 22:21:26 2008 (r33957)
> @@ -563,18 +563,18 @@ def delete_file_and_dir(sbox):
> # children, 'E' and 'lambda', get override mergeinfo reflecting their
> # mergeinfo prior to the merge (in this case empty mergeinfo).
> expected_output = wc.State(B2_path, {
> - '' : Item(status='C ')
> + '' : Item(),
> + 'lambda' : Item(status=' ', treeconflict='C'),
> + 'E' : Item(status=' ', treeconflict='C'),
> })
> expected_disk = wc.State('', {
> '' : Item(props={SVN_PROP_MERGEINFO : '/A/B:3'}),
> - 'E' : Item(props={SVN_PROP_MERGEINFO : '',
> - 'foo' : 'foo_val'}),
> + 'E' : Item(props={'foo' : 'foo_val'}),
> 'E/alpha' : Item("This is the file 'alpha'.\n"),
> 'E/beta' : Item("This is the file 'beta'.\n"),
> 'F' : Item(),
> 'lambda' : Item("This is the file 'lambda'.\n",
> - props={SVN_PROP_MERGEINFO : '',
> - 'foo' : 'foo_val'}),
> + props={'foo' : 'foo_val'}),
> })
> expected_status2 = wc.State(B2_path, {
> '' : Item(status=' M'),
> @@ -586,8 +586,6 @@ def delete_file_and_dir(sbox):
> })
> expected_status2.tweak(wc_rev=2)
> expected_skip = wc.State(B2_path, {
> - 'lambda' : Item(),
> - 'E' : Item(),
> })
> svntest.actions.run_and_verify_merge(B2_path, '2', '3', B_url,
> expected_output,
> @@ -614,7 +612,6 @@ def delete_file_and_dir(sbox):
> expected_disk.tweak('E', props={'foo' : 'foo_val'})
> expected_status2.tweak('E', 'E/alpha', 'E/beta', 'lambda', status='D ')
> expected_status2.tweak('', status=' M')
> - expected_skip.remove('lambda', 'E')
>
> ### Full-to-dry-run automatic comparison disabled because a) dry-run
> ### doesn't descend into deleted directories, and b) the full merge
> @@ -890,7 +887,7 @@ def merge_catches_nonexistent_target(sbo
> # notes/tree-conflicts/detection.txt).
> os.chdir(G_path)
> expected_output = wc.State('', {
> - '' : Item(status='C '),
> + 'newfile' : Item(status=' ', treeconflict='C'),
> })
> expected_status = wc.State('', {
> '' : Item(status=' M' ),
> @@ -909,7 +906,6 @@ def merge_catches_nonexistent_target(sbo
> 'tau' : Item("This is the file 'tau'.\n"),
> })
> expected_skip = wc.State('', {
> - 'newfile' :Item(),
> })
> svntest.actions.run_and_verify_merge('', '2', '3', Q_url,
> expected_output,
> @@ -962,8 +958,8 @@ def merge_tree_deleted_in_target(sbox):
> 'up', os.path.join(wc_dir,'A'))
>
> expected_output = wc.State(I_path, {
> - '' : Item(status='C '),
> 'lambda' : Item(status='U '),
> + 'E' : Item(status=' ', treeconflict='C'),
> })
> expected_disk = wc.State('', {
> '' : Item(props={SVN_PROP_MERGEINFO : '/A/B:3'}),
> @@ -977,8 +973,6 @@ def merge_tree_deleted_in_target(sbox):
> })
> expected_status.tweak(wc_rev=4)
> expected_skip = wc.State(I_path, {
> - 'E' : Item(),
> - 'E/alpha' : Item(),
> })
> svntest.actions.run_and_verify_merge(I_path, '2', '3', B_url,
> expected_output,
> @@ -1027,7 +1021,7 @@ def merge_added_dir_to_deleted_in_target
> 'up', os.path.join(wc_dir,'A'))
>
> expected_output = wc.State(I_path, {
> - '' : Item(status='C '),
> + 'F' : Item(status=' ', treeconflict='C'),
> })
> expected_disk = wc.State('', {
> 'E' : Item(),
> @@ -1036,8 +1030,6 @@ def merge_added_dir_to_deleted_in_target
> 'lambda' : Item("This is the file 'lambda'.\n"),
> })
> expected_skip = wc.State(I_path, {
> - 'F/J' : Item(),
> - 'F' : Item(),
> })
>
> svntest.actions.run_and_verify_merge(I_path, '2', '4', B_url,
> @@ -1589,8 +1581,7 @@ def three_way_merge_add_of_existing_bina
> # And after the merge, the status should not report any differences.
>
> expected_output = wc.State(wc_dir, {
> - "A" : Item(status="C "),
> - "A/theta" : Item(status="A "),
> + "A/theta" : Item(status=" ", treeconflict='C'),
> })
>
> # As greek_state is rooted at / instead of /A (our merge target), we
> @@ -12252,20 +12243,14 @@ def del_differing_file(sbox):
> pi = os.path.join(dir_D, 'G2', 'pi')
> # Should complain and "skip" it.
> svn_merge(s_rev_tau, source, target, [
> - "Skipped '%s'\n" % tau,
> - "--- Merging r2 into '%s':\n" % dir_G2,
> - "C %s\n" % dir_G2,
> + " C %s\n" % tau,
> "Summary of conflicts:\n",
> - " Text conflicts: 1\n",
> - " Skipped paths: 1\n"])
> + " Tree conflicts: 1\n"])
>
> svn_merge(s_rev_pi, source, target, [
> - "Skipped '%s'\n" % pi,
> - "--- Merging r3 into '%s':\n" % dir_G2,
> - "C %s\n" % dir_G2,
> + " C %s\n" % pi,
> "Summary of conflicts:\n",
> - " Text conflicts: 1\n",
> - " Skipped paths: 1\n"])
> + " Tree conflicts: 1\n"])
>
>
> # Copy a file, modify it, commit, and merge a deletion to it.
> @@ -12283,20 +12268,14 @@ def del_differing_file(sbox):
>
> # Should complain and "skip" it.
> svn_merge(s_rev_tau, source, target, [
> - "Skipped '%s'\n" % tau,
> - "--- Merging r2 into '%s':\n" % dir_G3,
> - "C %s\n" % dir_G3,
> + " C %s\n" % tau,
> "Summary of conflicts:\n",
> - " Text conflicts: 1\n",
> - " Skipped paths: 1\n"])
> + " Tree conflicts: 1\n"])
>
> svn_merge(s_rev_pi, source, target, [
> - "Skipped '%s'\n" % pi,
> - "--- Merging r3 into '%s':\n" % dir_G3,
> - "C %s\n" % dir_G3,
> + " C %s\n" % pi,
> "Summary of conflicts:\n",
> - " Text conflicts: 1\n",
> - " Skipped paths: 1\n"])
> + " Tree conflicts: 1\n"])
>
> os.chdir(saved_cwd)
>
> @@ -13322,8 +13301,8 @@ def tree_conflicts_and_obstructions(sbox
>
> # Merge the obstructions into the branch.
> expected_output = svntest.wc.State(branch_path, {
> - '' : Item(status='C '),
> 'alpha' : Item(status='D '),
> + 'alpha-moved' : Item(status=' ', treeconflict='C'),
> })
> expected_disk = wc.State('', {
> 'beta' : Item("This is the file 'beta'.\n"),
> @@ -13335,7 +13314,6 @@ def tree_conflicts_and_obstructions(sbox
> 'beta' : Item(status=' ', wc_rev=3),
> })
> expected_skip = wc.State(branch_path, {
> - 'alpha-moved' : Item(),
> })
>
> svntest.actions.run_and_verify_merge(branch_path,
> @@ -13387,12 +13365,12 @@ def tree_conflicts_on_merge_local_ci_4_1
> # 4.1) local tree delete, incoming leaf edit
>
> expected_output = svntest.wc.State('', {
> - 'F' : Item(status='C '),
> - 'D' : Item(status='C '),
> - 'DF' : Item(status='C '),
> - 'DD' : Item(status='C '),
> - 'DDF' : Item(status='C '),
> - 'DDD' : Item(status='C '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' ', treeconflict='C'),
> + 'DD/D1' : Item(status=' ', treeconflict='C'),
> + 'DDF/D1' : Item(status=' ', treeconflict='C'),
> + 'DDD/D1' : Item(status=' ', treeconflict='C'),
> })
>
> expected_disk = state_after_tree_del
> @@ -13408,12 +13386,6 @@ def tree_conflicts_on_merge_local_ci_4_1
> })
>
> expected_skip = svntest.wc.State('', {
> - 'F/alpha' : Item(),
> - 'DF/D1/beta' : Item(),
> - 'DDF/D1/D2/gamma' : Item(),
> - 'D/D1/delta' : Item(),
> - 'DD/D1/D2/epsilon' : Item(),
> - 'DDD/D1/D2/D3/zeta' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> @@ -13445,12 +13417,12 @@ def tree_conflicts_on_merge_local_ci_4_2
> # 4.2) local tree delete, incoming leaf delete
>
> expected_output = svntest.wc.State('', {
> - 'F' : Item(status='C '),
> - 'D' : Item(status='C '),
> - 'DF' : Item(status='C '),
> - 'DD' : Item(status='C '),
> - 'DDF' : Item(status='C '),
> - 'DDD' : Item(status='C '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' ', treeconflict='C'),
> + 'DD/D1' : Item(status=' ', treeconflict='C'),
> + 'DDF/D1' : Item(status=' ', treeconflict='C'),
> + 'DDD/D1' : Item(status=' ', treeconflict='C'),
> })
>
> expected_disk = state_after_tree_del
> @@ -13466,12 +13438,6 @@ def tree_conflicts_on_merge_local_ci_4_2
> })
>
> expected_skip = svntest.wc.State('', {
> - 'F/alpha' : Item(),
> - 'DF/D1/beta' : Item(),
> - 'DDF/D1/D2/gamma' : Item(),
> - 'D/D1' : Item(),
> - 'DD/D1/D2' : Item(),
> - 'DDD/D1/D2/D3' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> @@ -13493,35 +13459,20 @@ def tree_conflicts_on_merge_local_ci_5_1
> # 5.1) local leaf edit, incoming tree delete
>
> expected_output = svntest.wc.State('', {
> - 'D' : Item(),
> - 'D/D1' : Item(status='D '),
> - 'F' : Item(status='C '),
> - 'DD' : Item(),
> - 'DD/D1' : Item(status='D '),
> - 'DF' : Item(),
> - 'DF/D1' : Item(status='D '),
> - 'DDD' : Item(),
> - 'DDD/D1' : Item(status='D '),
> - 'DDF' : Item(),
> - 'DDF/D1' : Item(status='D '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' U', treeconflict='C'),
> + 'DF/D1' : Item(status=' U', treeconflict='C'),
> + 'DD/D1' : Item(status=' U', treeconflict='C'),
> + 'DDF/D1' : Item(status=' U', treeconflict='C'),
> + 'DDD/D1' : Item(status=' U', treeconflict='C'),
> })
>
> expected_disk = svntest.wc.State('', {
> - 'DF' : Item(),
> 'DF/D1' : Item(),
> - 'DDF' : Item(),
> - 'DDF/D1' : Item(),
> 'DDF/D1/D2' : Item(),
> - 'F' : Item(),
> 'F/alpha' : Item(contents="This is the file 'alpha'.\nMore text for file alpha.\n"),
> - 'DDD' : Item(),
> - 'DDD/D1' : Item(),
> - 'DDD/D1/D2' : Item(),
> 'DDD/D1/D2/D3' : Item(),
> - 'DD' : Item(),
> - 'DD/D1' : Item(),
> 'DD/D1/D2' : Item(),
> - 'D' : Item(),
> 'D/D1' : Item(),
> })
>
> @@ -13532,15 +13483,10 @@ def tree_conflicts_on_merge_local_ci_5_1
> 'D' : Item(status=' ', wc_rev='3'),
> 'D/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
> 'D/D1/delta' : Item(status='D ', wc_rev='4'),
> - 'F' : Item(status=' ', wc_rev='3'),
> - 'F/alpha' : Item(status=' M', wc_rev='4', treeconflict='C'),
> 'DD' : Item(status=' ', wc_rev='3'),
> 'DD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
> 'DD/D1/D2' : Item(status='D ', wc_rev='3'),
> 'DD/D1/D2/epsilon' : Item(status='D ', wc_rev='4'),
> - 'DF' : Item(status=' ', wc_rev='3'),
> - 'DF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
> - 'DF/D1/beta' : Item(status='D ', wc_rev='4'),
> 'DDD' : Item(status=' ', wc_rev='3'),
> 'DDD/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
> 'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
> @@ -13550,10 +13496,15 @@ def tree_conflicts_on_merge_local_ci_5_1
> 'DDF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
> 'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
> 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='4'),
> + 'DF' : Item(status=' ', wc_rev='3'),
> + 'DF/D1' : Item(status='D ', wc_rev='3'), # tree conflict?
> + 'DF/D1/beta' : Item(status='D ', wc_rev='4'),
> + 'F' : Item(status=' ', wc_rev='3'),
> + 'F/alpha' : Item(status=' ', treeconflict='C', wc_rev='4'),
> +
> })
>
> expected_skip = svntest.wc.State('', {
> - 'F/alpha' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> @@ -13573,16 +13524,12 @@ def tree_conflicts_on_merge_local_ci_5_2
> # 5.2) local leaf del, incoming tree delete
>
> expected_output = svntest.wc.State('', {
> - 'D' : Item(status='C '),
> - 'F' : Item(status='C '),
> - 'DD' : Item(),
> - 'DD/D1' : Item(status='D '),
> - 'DF' : Item(),
> - 'DF/D1' : Item(status='D '),
> - 'DDD' : Item(),
> - 'DDD/D1' : Item(status='D '),
> - 'DDF' : Item(),
> - 'DDF/D1' : Item(status='D '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' U', treeconflict='C'),
> + 'DD/D1' : Item(status=' U', treeconflict='C'),
> + 'DDF/D1' : Item(status=' U', treeconflict='C'),
> + 'DDD/D1' : Item(status=' U', treeconflict='C'),
> })
>
>
> @@ -13612,8 +13559,6 @@ def tree_conflicts_on_merge_local_ci_5_2
> })
>
> expected_skip = svntest.wc.State('', {
> - 'F/alpha' : Item(),
> - 'D/D1' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> @@ -13643,12 +13588,12 @@ def tree_conflicts_on_merge_local_ci_6(s
> # local tree delete, incoming tree delete
>
> expected_output = svntest.wc.State('', {
> - 'F' : Item(status='C '),
> - 'D' : Item(status='C '),
> - 'DF' : Item(status='C '),
> - 'DD' : Item(status='C '),
> - 'DDF' : Item(status='C '),
> - 'DDD' : Item(status='C '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' ', treeconflict='C'),
> + 'DD/D1' : Item(status=' ', treeconflict='C'),
> + 'DDF/D1' : Item(status=' ', treeconflict='C'),
> + 'DDD/D1' : Item(status=' ', treeconflict='C'),
> })
>
> expected_disk = state_after_tree_del
> @@ -13664,12 +13609,6 @@ def tree_conflicts_on_merge_local_ci_6(s
> })
>
> expected_skip = svntest.wc.State('', {
> - 'D/D1' : Item(),
> - 'F/alpha' : Item(),
> - 'DD/D1' : Item(),
> - 'DF/D1' : Item(),
> - 'DDD/D1' : Item(),
> - 'DDF/D1' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> @@ -13704,61 +13643,47 @@ def tree_conflicts_on_merge_no_local_ci_
> # 4.1) local tree delete, incoming leaf edit
>
> expected_output = svntest.wc.State('', {
> - 'F' : Item(status='C '),
> - 'D' : Item(status='C '),
> - 'D/D1' : Item(),
> - 'D/D1/delta' : Item(status='A '),
> - 'DF' : Item(status='C '),
> - 'DF/D1' : Item(status='C '),
> - 'DD' : Item(status='C '),
> - 'DD/D1' : Item(status='C '),
> - 'DD/D1/D2' : Item(),
> - 'DD/D1/D2/epsilon' : Item(status='A '),
> - 'DDF' : Item(status='C '),
> - 'DDF/D1' : Item(status='C '),
> - 'DDF/D1/D2' : Item(status='C '),
> - 'DDD' : Item(status='C '),
> - 'DDD/D1' : Item(status='C '),
> - 'DDD/D1/D2' : Item(status='C '),
> - 'DDD/D1/D2/D3' : Item(),
> - 'DDD/D1/D2/D3/zeta' : Item(status='A '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' ', treeconflict='C'),
> + 'DD/D1' : Item(status=' ', treeconflict='C'),
> + 'DDF/D1' : Item(status=' ', treeconflict='C'),
> + 'DDD/D1' : Item(status=' ', treeconflict='C'),
> })
>
> expected_disk = svntest.wc.State('', {
> 'F' : Item(),
> - 'D/D1/delta' : Item(contents="This is the file 'delta'.\n"),
> + 'D/D1' : Item(),
> 'DF/D1' : Item(),
> - 'DD/D1/D2/epsilon' : Item(contents="This is the file 'epsilon'.\n"),
> + 'DD/D1/D2' : Item(),
> 'DDF/D1/D2' : Item(),
> - 'DDD/D1/D2/D3/zeta' : Item(contents="This is the file 'zeta'.\n"),
> + 'DDD/D1/D2/D3' : Item(),
> })
>
> expected_status = svntest.wc.State('', {
> '' : Item(status=' M', wc_rev='3'),
> - 'F' : Item(status=' ', wc_rev='3'),
> - 'F/alpha' : Item(status='D ', wc_rev='3', treeconflict='C'),
> + 'D' : Item(status=' ', wc_rev='3'),
> + 'D/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> 'DD' : Item(status=' ', wc_rev='3'),
> - 'DD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DD/D1/D2' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DD/D1/D2/epsilon' : Item(status='A ', copied='+', wc_rev='-'),
> - 'DF' : Item(status=' ', wc_rev='3'),
> - 'DF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DF/D1/beta' : Item(status='D ', wc_rev='3', treeconflict='C'),
> + 'DD/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DD/D1/D2' : Item(status='D ', wc_rev='3'),
> 'DDD' : Item(status=' ', wc_rev='3'),
> - 'DDD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDD/D1/D2' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDD/D1/D2/D3/zeta' : Item(status='A ', copied='+', wc_rev='-'),
> + 'DDD/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
> + 'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3'),
> 'DDF' : Item(status=' ', wc_rev='3'),
> - 'DDF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDF/D1/D2' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'D' : Item(status=' ', wc_rev='3'),
> - 'D/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'D/D1/delta' : Item(status='A ', copied='+', wc_rev='-'),
> + 'DDF/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
> + 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='3'),
> + 'DF' : Item(status=' ', wc_rev='3'),
> + 'DF/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DF/D1/beta' : Item(status='D ', wc_rev='3'),
> + 'F' : Item(status=' ', wc_rev='3'),
> + 'F/alpha' : Item(status='D ', treeconflict='C', wc_rev='3'),
> })
>
> - expected_skip = alpha_beta_gamma
> + expected_skip = svntest.wc.State('', {
> + })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> [ DeepTreesTestCase(
> @@ -13778,21 +13703,12 @@ def tree_conflicts_on_merge_no_local_ci_
> # 4.2) local tree delete, incoming leaf delete
>
> expected_output = svntest.wc.State('', {
> - 'F' : Item(status='C '),
> - 'D' : Item(status='C '),
> - 'D/D1' : Item(status='D '),
> - 'DF' : Item(status='C '),
> - 'DF/D1' : Item(status='C '),
> - 'DD' : Item(status='C '),
> - 'DD/D1' : Item(status='C '),
> - 'DD/D1/D2' : Item(status='D '),
> - 'DDF' : Item(status='C '),
> - 'DDF/D1' : Item(status='C '),
> - 'DDF/D1/D2' : Item(status='C '),
> - 'DDD' : Item(status='C '),
> - 'DDD/D1' : Item(status='C '),
> - 'DDD/D1/D2' : Item(status='C '),
> - 'DDD/D1/D2/D3' : Item(status='D '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' ', treeconflict='C'),
> + 'DD/D1' : Item(status=' ', treeconflict='C'),
> + 'DDF/D1' : Item(status=' ', treeconflict='C'),
> + 'DDD/D1' : Item(status=' ', treeconflict='C'),
> })
>
> expected_disk = svntest.wc.State('', {
> @@ -13806,27 +13722,28 @@ def tree_conflicts_on_merge_no_local_ci_
>
> expected_status = svntest.wc.State('', {
> '' : Item(status=' M', wc_rev='3'),
> - 'F' : Item(status=' ', wc_rev='3'),
> - 'F/alpha' : Item(status='D ', wc_rev='3', treeconflict='C'),
> 'D' : Item(status=' ', wc_rev='3'),
> - 'D/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DF' : Item(status=' ', wc_rev='3'),
> - 'DF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DF/D1/beta' : Item(status='D ', wc_rev='3', treeconflict='C'),
> + 'D/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> 'DD' : Item(status=' ', wc_rev='3'),
> - 'DD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DD/D1/D2' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDF' : Item(status=' ', wc_rev='3'),
> - 'DDF/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDF/D1/D2' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='3', treeconflict='C'),
> + 'DD/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DD/D1/D2' : Item(status='D ', wc_rev='3'),
> 'DDD' : Item(status=' ', wc_rev='3'),
> - 'DDD/D1' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDD/D1/D2' : Item(status='D ', wc_rev='3', treeconflict='C'),
> - 'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3', treeconflict='C'),
> + 'DDD/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DDD/D1/D2' : Item(status='D ', wc_rev='3'),
> + 'DDD/D1/D2/D3' : Item(status='D ', wc_rev='3'),
> + 'DDF' : Item(status=' ', wc_rev='3'),
> + 'DDF/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DDF/D1/D2' : Item(status='D ', wc_rev='3'),
> + 'DDF/D1/D2/gamma' : Item(status='D ', wc_rev='3'),
> + 'DF' : Item(status=' ', wc_rev='3'),
> + 'DF/D1' : Item(status='D ', treeconflict='C', wc_rev='3'),
> + 'DF/D1/beta' : Item(status='D ', wc_rev='3'),
> + 'F' : Item(status=' ', wc_rev='3'),
> + 'F/alpha' : Item(status='D ', treeconflict='C', wc_rev='3'),
> })
>
> - expected_skip = alpha_beta_gamma
> + expected_skip = svntest.wc.State('', {
> + })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> [ DeepTreesTestCase(
> @@ -13850,7 +13767,12 @@ def tree_conflicts_on_merge_no_local_ci_
> # 5.1) local leaf edit, incoming tree delete
>
> expected_output = svntest.wc.State('', {
> - 'F' : Item(status='C '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' ', treeconflict='C'),
> + 'DD/D1' : Item(status=' ', treeconflict='C'),
> + 'DDF/D1' : Item(status=' ', treeconflict='C'),
> + 'DDD/D1' : Item(status=' ', treeconflict='C'),
> })
>
> expected_disk = state_after_leaf_edit
> @@ -13858,35 +13780,29 @@ def tree_conflicts_on_merge_no_local_ci_
> expected_status = svntest.wc.State('', {
> '' : Item(status=' M', wc_rev='3'),
> 'D' : Item(status=' ', wc_rev='3'),
> - 'D/D1' : Item(status=' M', wc_rev='3'), # tree conflict?
> + 'D/D1' : Item(status=' ', wc_rev='3'), # tree conflict?
> 'D/D1/delta' : Item(status='A ', wc_rev='0'),
> - 'F' : Item(status=' ', wc_rev='3'),
> - 'F/alpha' : Item(status='MM', wc_rev='3', treeconflict='C'),
> 'DD' : Item(status=' ', wc_rev='3'),
> - 'DD/D1' : Item(status=' M', wc_rev='3'), # tree conflict?
> + 'DD/D1' : Item(status=' ', wc_rev='3'), # tree conflict?
> 'DD/D1/D2' : Item(status=' ', wc_rev='3'),
> 'DD/D1/D2/epsilon' : Item(status='A ', wc_rev='0'),
> - 'DF' : Item(status=' ', wc_rev='3'),
> - 'DF/D1' : Item(status=' M', wc_rev='3'), # tree conflict?
> - 'DF/D1/beta' : Item(status='M ', wc_rev='3'),
> 'DDD' : Item(status=' ', wc_rev='3'),
> - 'DDD/D1' : Item(status=' M', wc_rev='3'), # tree conflict?
> + 'DDD/D1' : Item(status=' ', wc_rev='3'), # tree conflict?
> 'DDD/D1/D2' : Item(status=' ', wc_rev='3'),
> 'DDD/D1/D2/D3' : Item(status=' ', wc_rev='3'),
> 'DDD/D1/D2/D3/zeta' : Item(status='A ', wc_rev='0'),
> 'DDF' : Item(status=' ', wc_rev='3'),
> - 'DDF/D1' : Item(status=' M', wc_rev='3'), # tree conflict?
> + 'DDF/D1' : Item(status=' ', wc_rev='3'), # tree conflict?
> 'DDF/D1/D2' : Item(status=' ', wc_rev='3'),
> 'DDF/D1/D2/gamma' : Item(status='M ', wc_rev='3'),
> + 'DF' : Item(status=' ', wc_rev='3'),
> + 'DF/D1' : Item(status=' ', wc_rev='3'), # tree conflict?
> + 'DF/D1/beta' : Item(status='M ', wc_rev='3'),
> + 'F' : Item(status=' ', wc_rev='3'),
> + 'F/alpha' : Item(status='M ', treeconflict='C', wc_rev='3'),
> })
>
> expected_skip = svntest.wc.State('', {
> - 'D/D1' : Item(),
> - 'F/alpha' : Item(),
> - 'DD/D1' : Item(),
> - 'DF/D1' : Item(),
> - 'DDD/D1' : Item(),
> - 'DDF/D1' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> @@ -13908,17 +13824,12 @@ def tree_conflicts_on_merge_no_local_ci_
> # 5.2) local leaf del, incoming tree delete
>
> expected_output = svntest.wc.State('', {
> - 'D' : Item(status='C '),
> - 'D/D1' : Item(status='D '),
> - 'F' : Item(status='C '),
> - 'DD' : Item(),
> - 'DD/D1' : Item(status='D '),
> - 'DF' : Item(),
> - 'DF/D1' : Item(status='D '),
> - 'DDD' : Item(),
> - 'DDD/D1' : Item(status='D '),
> - 'DDF' : Item(),
> - 'DDF/D1' : Item(status='D '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' U', treeconflict='C'),
> + 'DD/D1' : Item(status=' U', treeconflict='C'),
> + 'DDF/D1' : Item(status=' U', treeconflict='C'),
> + 'DDD/D1' : Item(status=' U', treeconflict='C'),
> })
>
>
> @@ -13954,7 +13865,6 @@ def tree_conflicts_on_merge_no_local_ci_
> })
>
> expected_skip = svntest.wc.State('', {
> - 'F/alpha' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
> @@ -13976,17 +13886,12 @@ def tree_conflicts_on_merge_no_local_ci_
> # local tree delete, incoming tree delete
>
> expected_output = svntest.wc.State('', {
> - 'D' : Item(status='C '),
> - 'D/D1' : Item(status='D '),
> - 'F' : Item(status='C '),
> - 'DD' : Item(status='C '),
> - 'DD/D1' : Item(status='D '),
> - 'DF' : Item(status='C '),
> - 'DF/D1' : Item(status='D '),
> - 'DDD' : Item(status='C '),
> - 'DDD/D1' : Item(status='D '),
> - 'DDF' : Item(status='C '),
> - 'DDF/D1' : Item(status='D '),
> + 'F/alpha' : Item(status=' ', treeconflict='C'),
> + 'D/D1' : Item(status=' ', treeconflict='C'),
> + 'DF/D1' : Item(status=' ', treeconflict='C'),
> + 'DD/D1' : Item(status=' ', treeconflict='C'),
> + 'DDF/D1' : Item(status=' ', treeconflict='C'),
> + 'DDD/D1' : Item(status=' ', treeconflict='C'),
> })
>
> expected_disk = svntest.wc.State('', {
> @@ -14021,7 +13926,6 @@ def tree_conflicts_on_merge_no_local_ci_
> })
>
> expected_skip = svntest.wc.State('', {
> - 'F/alpha' : Item(),
> })
>
> svntest.actions.deep_trees_run_tests_scheme_for_merge(sbox,
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: svn-unsubscribe_at_subversion.tigris.org
> For additional commands, e-mail: svn-help_at_subversion.tigris.org
>

Received on 2008-10-30 06:47:15 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.