summaryrefslogtreecommitdiff
path: root/subversion/tests/cmdline/tree_conflict_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/tests/cmdline/tree_conflict_tests.py')
-rwxr-xr-xsubversion/tests/cmdline/tree_conflict_tests.py231
1 files changed, 140 insertions, 91 deletions
diff --git a/subversion/tests/cmdline/tree_conflict_tests.py b/subversion/tests/cmdline/tree_conflict_tests.py
index c9e5b1a..acf7c90 100755
--- a/subversion/tests/cmdline/tree_conflict_tests.py
+++ b/subversion/tests/cmdline/tree_conflict_tests.py
@@ -25,7 +25,7 @@
######################################################################
# General modules
-import sys, re, os, traceback
+import sys, re, os, stat, traceback
# Our testing module
import svntest
@@ -350,7 +350,7 @@ def set_up_repos(wc_dir, br_dir, scenarios):
main.run_svn(None, 'mkdir', '--parents', P)
for modaction in init_mods:
modify(modaction, incoming_paths(wc_dir, P))
- run_and_verify_svn(None, AnyOutput, [],
+ run_and_verify_svn(AnyOutput, [],
'commit', '-m', 'Initial set-up.', wc_dir)
# Capture the revision number
init_rev = 2 ### hard-coded
@@ -363,7 +363,7 @@ def set_up_repos(wc_dir, br_dir, scenarios):
modify(modaction, incoming_paths(wc_dir, P))
# commit all the modifications
- run_and_verify_svn(None, AnyOutput, [],
+ run_and_verify_svn(AnyOutput, [],
'commit', '-m', 'Action.', wc_dir)
# Capture the revision number
changed_rev = 3 ### hard-coded
@@ -411,7 +411,7 @@ def ensure_tree_conflict(sbox, operation,
else: # switch/merge
# Make, and work in, a "branch2" that is a copy of "branch1".
target_br = "branch2"
- run_and_verify_svn(None, AnyOutput, [],
+ run_and_verify_svn(AnyOutput, [],
'copy', '-r', str(source_left_rev), url_of(source_br),
url_of(target_br),
'-m', 'Create target branch.')
@@ -435,7 +435,7 @@ def ensure_tree_conflict(sbox, operation,
for modaction in loc_action:
modify(modaction, localmod_paths(".", target_path), is_init=False)
if commit_local_mods:
- run_and_verify_svn(None, AnyOutput, [],
+ run_and_verify_svn(AnyOutput, [],
'commit', target_path,
'-m', 'Mods in target branch.')
head_rev += 1
@@ -444,7 +444,7 @@ def ensure_tree_conflict(sbox, operation,
# For switch/merge, there is no such precondition.
if operation == 'update':
logger.debug("--- Trying to commit (expecting 'out-of-date' error)")
- run_and_verify_commit(".", None, None, "Commit failed",
+ run_and_verify_commit(".", None, None, ".*Commit failed.*",
target_path)
if modaction.startswith('f'):
@@ -462,15 +462,15 @@ def ensure_tree_conflict(sbox, operation,
# Do the main action
if operation == 'update':
logger.debug("--- Updating")
- run_and_verify_svn(None, expected_stdout, [],
+ run_and_verify_svn(expected_stdout, [],
'update', target_path)
elif operation == 'switch':
logger.debug("--- Switching")
- run_and_verify_svn(None, expected_stdout, [],
+ run_and_verify_svn(expected_stdout, [],
'switch', source_url, target_path)
elif operation == 'merge':
logger.debug("--- Merging")
- run_and_verify_svn(None, expected_stdout, [],
+ run_and_verify_svn(expected_stdout, [],
'merge',
'--allow-mixed-revisions',
'-r', str(source_left_rev) + ':' + str(source_right_rev),
@@ -513,7 +513,7 @@ def ensure_tree_conflict(sbox, operation,
"^ > .* upon " + operation] +
svntest.main.summary_of_conflicts(tree_conflicts=1))
])
- run_and_verify_svn(None, expected_stdout, [],
+ run_and_verify_svn(expected_stdout, [],
'status', victim_path)
logger.debug("--- Resolving the conflict")
@@ -523,14 +523,14 @@ def ensure_tree_conflict(sbox, operation,
run_and_verify_resolved([victim_path])
logger.debug("--- Checking that 'status' does not report a conflict")
- exitcode, stdout, stderr = run_and_verify_svn(None, None, [],
+ exitcode, stdout, stderr = run_and_verify_svn(None, [],
'status', victim_path)
for line in stdout:
if line[6] == 'C': # and line.endswith(victim_path + '\n'):
raise svntest.Failure("unexpected status C") # on victim_path
# logger.debug("--- Committing (should now succeed)")
- # run_and_verify_svn(None, None, [],
+ # run_and_verify_svn(None, [],
# 'commit', '-m', '', target_path)
# target_start_rev += 1
@@ -542,7 +542,7 @@ def ensure_tree_conflict(sbox, operation,
main.run_svn(None, 'revert', '-R', wc_dir)
main.safe_rmtree(wc_dir)
if operation != 'update':
- run_and_verify_svn(None, AnyOutput, [],
+ run_and_verify_svn(AnyOutput, [],
'delete', url_of(target_br),
'-m', 'Delete target branch.')
head_rev += 1
@@ -654,7 +654,6 @@ def up_sw_dir_del_onto_del(sbox):
# Adding branch1\dC\D
#
# Committed revision 4.
-@XFail(svntest.main.is_ra_type_dav)
@Issue(3314)
def up_sw_dir_add_onto_add(sbox):
"up/sw dir: add onto add"
@@ -777,11 +776,9 @@ def force_del_tc_inside(sbox):
main.run_svn(None, 'update', '-r2', wc_dir)
# Set a meaningless prop on each dir and file
- run_and_verify_svn(None,
- ["property 'propname' set on '" + dir + "'\n"],
+ run_and_verify_svn(["property 'propname' set on '" + dir + "'\n"],
[], 'ps', 'propname', 'propval', dir)
- run_and_verify_svn(None,
- ["property 'propname' set on '" + file + "'\n"],
+ run_and_verify_svn(["property 'propname' set on '" + file + "'\n"],
[], 'ps', 'propname', 'propval', file)
# Update WC to HEAD, tree conflicts result dir and file
@@ -805,12 +802,10 @@ def force_del_tc_inside(sbox):
})
run_and_verify_update(wc_dir,
expected_output, expected_disk, expected_status,
- None, None, None, None, None, 1,
- wc_dir)
+ check_props=True)
# Delete A/C with --force, in effect disarming the tree-conflicts.
- run_and_verify_svn(None,
- verify.UnorderedOutput(['D ' + C + '\n',
+ run_and_verify_svn(verify.UnorderedOutput(['D ' + C + '\n',
'D ' + dir + '\n',
'D ' + file + '\n']),
[], 'delete', C, '--force')
@@ -828,8 +823,7 @@ def force_del_tc_inside(sbox):
expected_status.remove('A/C')
run_and_verify_commit(wc_dir,
- expected_output, expected_status, None,
- wc_dir)
+ expected_output, expected_status)
#----------------------------------------------------------------------
@@ -865,11 +859,9 @@ def force_del_tc_is_target(sbox):
main.run_svn(None, 'update', '-r2', wc_dir)
# Set a meaningless prop on each dir and file
- run_and_verify_svn(None,
- ["property 'propname' set on '" + dir + "'\n"],
+ run_and_verify_svn(["property 'propname' set on '" + dir + "'\n"],
[], 'ps', 'propname', 'propval', dir)
- run_and_verify_svn(None,
- ["property 'propname' set on '" + file + "'\n"],
+ run_and_verify_svn(["property 'propname' set on '" + file + "'\n"],
[], 'ps', 'propname', 'propval', file)
# Update WC to HEAD, tree conflicts result dir and file
@@ -893,12 +885,10 @@ def force_del_tc_is_target(sbox):
})
run_and_verify_update(wc_dir,
expected_output, expected_disk, expected_status,
- None, None, None, None, None, 1,
- wc_dir)
+ check_props=True)
# Delete nodes with --force, in effect disarming the tree-conflicts.
- run_and_verify_svn(None,
- ['D ' + dir + '\n',
+ run_and_verify_svn(['D ' + dir + '\n',
'D ' + file + '\n'],
[],
'delete', dir, file, '--force')
@@ -911,8 +901,7 @@ def force_del_tc_is_target(sbox):
expected_output = wc.State(wc_dir, {})
run_and_verify_commit(wc_dir,
- expected_output, expected_status, None,
- wc_dir)
+ expected_output, expected_status)
#----------------------------------------------------------------------
@@ -945,8 +934,7 @@ def query_absent_tree_conflicted_dir(sbox):
main.run_svn(None, 'update', '-r2', wc_dir)
# Set a meaningless prop on A/C/C
- run_and_verify_svn(None,
- ["property 'propname' set on '" + C_C_path + "'\n"],
+ run_and_verify_svn(["property 'propname' set on '" + C_C_path + "'\n"],
[], 'ps', 'propname', 'propval', C_C_path)
# Update WC to HEAD, a tree conflict results on A/C/C because of the
@@ -964,12 +952,10 @@ def query_absent_tree_conflicted_dir(sbox):
treeconflict='C')})
run_and_verify_update(wc_dir,
expected_output, expected_disk, expected_status,
- None, None, None, None, None, 1,
- wc_dir)
+ check_props=True)
# Delete A/C with --keep-local.
- run_and_verify_svn(None,
- verify.UnorderedOutput(['D ' + C_C_path + '\n',
+ run_and_verify_svn(verify.UnorderedOutput(['D ' + C_C_path + '\n',
'D ' + C_path + '\n']),
[],
'delete', C_path, '--keep-local')
@@ -996,7 +982,7 @@ def query_absent_tree_conflicted_dir(sbox):
run_and_verify_status(C_C_path, expected_output)
# using info:
- run_and_verify_svn(None, None, ".*W155010.*The node.*was not found.*",
+ run_and_verify_svn(None, ".*W155010.*The node.*was not found.*",
'info', C_C_path)
#----------------------------------------------------------------------
@@ -1008,7 +994,7 @@ def up_add_onto_add_revert(sbox):
sbox.build()
wc_dir = sbox.wc_dir
wc2_dir = sbox.add_wc_path('wc2')
- svntest.actions.run_and_verify_svn(None, None, [], 'checkout',
+ svntest.actions.run_and_verify_svn(None, [], 'checkout',
sbox.repo_url, wc2_dir)
file1 = os.path.join(wc_dir, 'newfile')
@@ -1023,7 +1009,7 @@ def up_add_onto_add_revert(sbox):
main.run_svn(None, 'cp', os.path.join(wc_dir, 'A/C'), dir1)
main.run_svn(None, 'cp', os.path.join(wc2_dir, 'A/C'), dir2)
- main.run_svn(None, 'ci', wc_dir, '-m', 'Added file')
+ sbox.simple_commit(message='Added file')
expected_disk = main.greek_state.copy()
expected_disk.add({
@@ -1039,8 +1025,7 @@ def up_add_onto_add_revert(sbox):
run_and_verify_update(wc2_dir,
None, expected_disk, expected_status,
- None, None, None, None, None, 1,
- wc2_dir)
+ check_props=True)
# Currently (r927086), this removes dir2 and file2 in a way that
# they don't reappear after update.
@@ -1057,8 +1042,7 @@ def up_add_onto_add_revert(sbox):
# the repository
run_and_verify_update(wc2_dir,
None, expected_disk, expected_status,
- None, None, None, None, None, 1,
- wc2_dir)
+ check_props=True)
#----------------------------------------------------------------------
@@ -1080,12 +1064,12 @@ def lock_update_only(sbox):
file_path_b = os.path.join(wc_b, fname)
# Lock a file as wc_author, and schedule the file for deletion.
- svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
+ svntest.actions.run_and_verify_svn(".*locked by user", [], 'lock',
'-m', '', file_path)
svntest.main.run_svn(None, 'delete', file_path)
# In our other working copy, steal that lock.
- svntest.actions.run_and_verify_svn(None, ".*locked by user", [], 'lock',
+ svntest.actions.run_and_verify_svn(".*locked by user", [], 'lock',
'-m', '', '--force', file_path)
# Now update the first working copy. It should appear as a no-op.
@@ -1095,8 +1079,7 @@ def lock_update_only(sbox):
expected_status.tweak('iota', status='D ', writelocked='K')
run_and_verify_update(wc_dir,
None, expected_disk, expected_status,
- None, None, None, None, None, 1,
- wc_dir)
+ check_props=True)
#----------------------------------------------------------------------
@@ -1171,92 +1154,95 @@ def actual_only_node_behaviour(sbox):
# add
expected_stdout = None
expected_stderr = ".*foo.*is an existing item in conflict.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"add", foo_path)
# add (with an existing obstruction of foo)
svntest.main.file_write(foo_path, "This is an obstruction of foo.\n")
expected_stdout = None
expected_stderr = ".*foo.*is an existing item in conflict.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"add", foo_path)
os.remove(foo_path) # remove obstruction
# blame (praise, annotate, ann)
expected_stdout = None
expected_stderr = ".*foo.*not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"blame", foo_path)
# cat
expected_stdout = None
expected_stderr = ".*foo.*not under version control.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"cat", foo_path)
# cat -rBASE
expected_stdout = None
expected_stderr = ".*foo.*not under version control.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"cat", "-r", "BASE", foo_path)
# changelist (cl)
expected_stdout = None
expected_stderr = ".*svn: warning: W155010: The node '.*foo' was not found."
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"changelist", "my_changelist", foo_path)
# checkout (co)
### this does not error out -- needs review
expected_stdout = None
expected_stderr = []
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"checkout", A_copy_url, foo_path)
### for now, ignore the fact that checkout succeeds and remove the nested
### working copy so we can test more commands
- shutil.rmtree(foo_path)
+ def onerror(function, path, execinfo):
+ os.chmod(path, stat.S_IREAD | stat.S_IWRITE)
+ os.remove(path)
+ shutil.rmtree(foo_path, onerror=onerror)
# cleanup
expected_stdout = None
expected_stderr = ".*foo.*is not a working copy directory"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"cleanup", foo_path)
# commit (ci)
expected_stdout = None
expected_stderr = ".*foo.*remains in conflict.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"commit", foo_path)
# copy (cp)
expected_stdout = None
expected_stderr = ".*foo.*does not exist.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"copy", foo_path, foo_path + ".copy")
# delete (del, remove, rm)
expected_stdout = None
expected_stderr = ".*foo.*is not under version control.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"delete", foo_path)
# diff (di)
expected_stdout = None
- expected_stderr = ".*foo.*is not under version control.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ expected_stderr = ".*E155.*foo.*was not found.*"
+ run_and_verify_svn(expected_stdout, expected_stderr,
"diff", foo_path)
# export
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"export", foo_path, sbox.get_tempname())
# import
expected_stdout = None
expected_stderr = ".*(foo.*does not exist|Can't stat.*foo).*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"import", '-m', svntest.main.make_log_msg(),
foo_path, sbox.repo_url + '/foo_imported')
# info
expected_info = {
- 'Tree conflict': 'local file missing, incoming file edit upon merge.*',
+ 'Tree conflict': 'local missing or deleted or moved away, incoming file edit upon merge.*',
'Name': 'foo',
'Schedule': 'normal',
'Node Kind': 'none',
@@ -1267,42 +1253,42 @@ def actual_only_node_behaviour(sbox):
# list (ls)
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"list", foo_path)
# lock
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"lock", foo_path)
# log
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"log", foo_path)
# merge
# note: this is intentionally a no-op merge that does not record mergeinfo
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"merge", '--ignore-ancestry', '-c', '4',
A_copy_url + '/mu', foo_path)
# mergeinfo
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"mergeinfo", A_copy_url + '/foo', foo_path)
# mkdir
expected_stdout = None
expected_stderr = ".*foo.*is an existing item in conflict.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"mkdir", foo_path)
# move (mv, rename, ren)
expected_stdout = None
expected_stderr = ".*foo.*does not exist.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"move", foo_path, foo_path + ".moved")
# patch
expected_stdout = None
@@ -1319,43 +1305,43 @@ def actual_only_node_behaviour(sbox):
for line in patch_data:
f.write(line)
f.close()
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"patch", patch_path, sbox.ospath("A/foo"))
# propdel (pdel, pd)
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"propdel", "svn:eol-style", foo_path)
# propget (pget, pg)
expected_stdout = None
expected_stderr = ".*foo.*is not under version control.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"propget", "svn:eol-style", foo_path)
# proplist (plist, pl)
expected_stdout = None
expected_stderr = ".*foo.*is not under version control.*"
- svntest.actions.run_and_verify_svn(None, expected_stdout, expected_stderr,
+ svntest.actions.run_and_verify_svn(expected_stdout, expected_stderr,
"proplist", foo_path)
# propset (pset, ps)
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"propset", "svn:eol-style", "native", foo_path)
# relocate
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"relocate", A_copy_url + "/foo", foo_path)
# resolve
expected_stdout = "Resolved conflicted state of.*foo.*"
expected_stderr = []
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"resolve", "--accept", "working", foo_path)
# revert the entire working copy and repeat the merge so we can test
@@ -1367,7 +1353,7 @@ def actual_only_node_behaviour(sbox):
# revert
expected_stdout = "Reverted.*foo.*"
expected_stderr = []
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"revert", foo_path)
# revert the entire working copy and repeat the merge so we can test
@@ -1379,7 +1365,7 @@ def actual_only_node_behaviour(sbox):
# revert
expected_stdout = "Reverted.*foo.*"
expected_stderr = []
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"revert", "-R", foo_path)
# revert the entire working copy and repeat the merge so we can test
@@ -1397,13 +1383,13 @@ def actual_only_node_behaviour(sbox):
# switch (sw)
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"switch", A_copy_url + "/foo", foo_path)
# unlock
expected_stdout = None
expected_stderr = ".*foo.*was not found.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"unlock", foo_path)
# update (up)
@@ -1413,13 +1399,13 @@ def actual_only_node_behaviour(sbox):
expected_stdout = [
"Updating '" + foo_path + "':\n", "At revision 4.\n"]
expected_stderr = []
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"update", foo_path)
# upgrade
expected_stdout = None
expected_stderr = ".*Can't upgrade.*foo.*"
- run_and_verify_svn(None, expected_stdout, expected_stderr,
+ run_and_verify_svn(expected_stdout, expected_stderr,
"upgrade", foo_path)
#----------------------------------------------------------------------
@@ -1443,18 +1429,80 @@ def update_dir_with_not_present(sbox):
sbox.simple_rm('A/B')
# We can't commit this without updating (ra_svn produces its own error)
- run_and_verify_svn(None, None,
+ run_and_verify_svn(None,
"svn: (E155011|E160028|E170004): (Dir|Item).*B.*out of date",
'ci', '-m', '', wc_dir)
# So we run update
- run_and_verify_svn(None, None, [],
+ run_and_verify_svn(None, [],
'up', wc_dir)
# And now we can commit
- run_and_verify_svn(None, None, [],
+ run_and_verify_svn(None, [],
'ci', '-m', '', wc_dir)
+def update_delete_mixed_rev(sbox):
+ "update that deletes mixed-rev"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ sbox.simple_move('A/B/E/alpha', 'A/B/E/alpha2')
+ sbox.simple_commit()
+ sbox.simple_update()
+ sbox.simple_rm('A/B')
+ sbox.simple_commit()
+ sbox.simple_update(revision=1)
+ sbox.simple_update(target='A/B/E', revision=2)
+ sbox.simple_mkdir('A/B/E2')
+
+ # Update raises a tree conflict on A/B due to local mod A/B/E2
+ expected_output = wc.State(wc_dir, {
+ 'A/B' : Item(status=' ', treeconflict='C'),
+ })
+ expected_disk = main.greek_state.copy()
+ expected_disk.add({
+ 'A/B/E2' : Item(),
+ 'A/B/E/alpha2' : Item(contents='This is the file \'alpha\'.\n'),
+ })
+ expected_disk.remove('A/B/E/alpha')
+ expected_status = get_virginal_state(wc_dir, 3)
+ expected_status.remove('A/B/E/alpha')
+ expected_status.add({
+ 'A/B/E2' : Item(status='A ', wc_rev='-'),
+ 'A/B/E/alpha2' : Item(status=' ', copied='+', wc_rev='-'),
+ })
+ expected_status.tweak('A/B',
+ status='A ', copied='+', treeconflict='C', wc_rev='-')
+ expected_status.tweak('A/B/F', 'A/B/E', 'A/B/E/beta', 'A/B/lambda',
+ copied='+', wc_rev='-')
+
+ # The entries world doesn't see a changed revision as another add
+ # while the WC-NG world does...
+ expected_status.tweak('A/B/E', status='A ', entry_status=' ')
+ run_and_verify_update(wc_dir,
+ expected_output, expected_disk, expected_status,
+ check_props=True)
+
+ # Resolving to working state should give a mixed-revision copy that
+ # gets committed as multiple copies
+ run_and_verify_resolved([sbox.ospath('A/B')], sbox.ospath('A/B'))
+ expected_output = wc.State(wc_dir, {
+ 'A/B' : Item(verb='Adding'),
+ 'A/B/E' : Item(verb='Replacing'),
+ 'A/B/E2' : Item(verb='Adding'),
+ })
+ expected_status.tweak('A/B', 'A/B/E', 'A/B/E2', 'A/B/F', 'A/B/E/alpha2',
+ 'A/B/E/beta', 'A/B/lambda',
+ status=' ', wc_rev=4, copied=None, treeconflict=None)
+ run_and_verify_commit(wc_dir,
+ expected_output, expected_status)
+
+ expected_info = {
+ 'Name': 'alpha2',
+ 'Node Kind': 'file',
+ }
+ run_and_verify_info([expected_info], sbox.repo_url + '/A/B/E/alpha2')
+
#######################################################################
# Run the tests
@@ -1485,6 +1533,7 @@ test_list = [ None,
at_directory_external,
actual_only_node_behaviour,
update_dir_with_not_present,
+ update_delete_mixed_rev,
]
if __name__ == '__main__':