You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2018/12/24 16:52:14 UTC
svn commit: r1849698 -
/subversion/trunk/subversion/tests/cmdline/revert_tests.py
Author: julianfoad
Date: Mon Dec 24 16:52:14 2018
New Revision: 1849698
URL: http://svn.apache.org/viewvc?rev=1849698&view=rev
Log:
In 'revert' tests: simplify verifying the expected notifications.
* subversion/tests/cmdline/revert_tests.py
(expected_output_revert,
run_and_verify_revert): New.
(...elsewhere...): Use this 'run_and_verify_revert' wherever an expected
output was specified.
Modified:
subversion/trunk/subversion/tests/cmdline/revert_tests.py
Modified: subversion/trunk/subversion/tests/cmdline/revert_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/revert_tests.py?rev=1849698&r1=1849697&r2=1849698&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/revert_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/revert_tests.py Mon Dec 24 16:52:14 2018
@@ -46,6 +46,23 @@ Item = svntest.wc.StateItem
######################################################################
# Helpers
+def expected_output_revert(reverted_paths, skipped_paths=[]):
+ return svntest.verify.UnorderedRegexListOutput(
+ ["Reverted '%s'\n" % re.escape(path) for path in reverted_paths] +
+ ["Skipped '%s'.*\n" % re.escape(path) for path in skipped_paths])
+
+def run_and_verify_revert(targets, options=[],
+ reverted_paths=None, skipped_paths=[]):
+ """Run 'svn revert OPTIONS TARGETS'. Verify that the printed output matches
+ REVERTED_PATHS and SKIPPED_PATHS. If REVERTED_PATHS is None, it defaults
+ to TARGETS.
+ """
+ if reverted_paths is None:
+ reverted_paths = targets
+ expected_output = expected_output_revert(reverted_paths, skipped_paths)
+ svntest.actions.run_and_verify_svn(expected_output, [],
+ *(['revert'] + options + targets))
+
def revert_replacement_with_props(sbox, wc_copy):
"""Helper implementing the core of
revert_{repos,wc}_to_wc_replace_with_props().
@@ -129,9 +146,7 @@ def revert_replacement_with_props(sbox,
svntest.actions.run_and_verify_status(wc_dir, expected_status)
expected_status.tweak('A/D/G/rho', status=' ', copied=None, wc_rev='2')
- expected_output = ["Reverted '" + rho_path + "'\n"]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', '-R', wc_dir)
+ run_and_verify_revert([wc_dir], ['-R'], [rho_path])
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Check disk status
@@ -356,8 +371,7 @@ def revert_replaced_file_without_props(s
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# revert file1
- svntest.actions.run_and_verify_svn(["Reverted '" + file1_path + "'\n"],
- [], 'revert', file1_path)
+ run_and_verify_revert([file1_path])
# test that file1 really was reverted
expected_status.tweak('file1', status=' ', wc_rev=2)
@@ -402,10 +416,7 @@ def revert_moved_file(sbox):
actions.run_and_verify_unquiet_status(wc_dir, expected_status)
# svn revert iota
- expected_stdout = ["Reverted '" + iota + "'\n"]
-
- actions.run_and_verify_svn2(expected_stdout, [], 0, 'revert',
- iota)
+ run_and_verify_revert([iota])
# svn st
expected_status.tweak('iota', status=' ', moved_to=None)
@@ -644,9 +655,7 @@ def revert_propset__dir(sbox):
wc_dir = sbox.wc_dir
a_path = os.path.join(wc_dir, 'A')
svntest.main.run_svn(None, 'propset', 'foo', 'x', a_path)
- expected_output = re.escape("Reverted '" + a_path + "'")
- svntest.actions.run_and_verify_svn(expected_output, [], "revert",
- a_path)
+ run_and_verify_revert([a_path])
def revert_propset__file(sbox):
"revert a simple propset on a file"
@@ -655,9 +664,7 @@ def revert_propset__file(sbox):
wc_dir = sbox.wc_dir
iota_path = os.path.join(wc_dir, 'iota')
svntest.main.run_svn(None, 'propset', 'foo', 'x', iota_path)
- expected_output = re.escape("Reverted '" + iota_path + "'")
- svntest.actions.run_and_verify_svn(expected_output, [], "revert",
- iota_path)
+ run_and_verify_revert([iota_path])
def revert_propdel__dir(sbox):
"revert a simple propdel on a dir"
@@ -669,9 +676,7 @@ def revert_propdel__dir(sbox):
svntest.main.run_svn(None,
'commit', '-m', 'ps', a_path)
svntest.main.run_svn(None, 'propdel', 'foo', a_path)
- expected_output = re.escape("Reverted '" + a_path + "'")
- svntest.actions.run_and_verify_svn(expected_output, [], "revert",
- a_path)
+ run_and_verify_revert([a_path])
def revert_propdel__file(sbox):
"revert a simple propdel on a file"
@@ -683,9 +688,7 @@ def revert_propdel__file(sbox):
svntest.main.run_svn(None,
'commit', '-m', 'ps', iota_path)
svntest.main.run_svn(None, 'propdel', 'foo', iota_path)
- expected_output = re.escape("Reverted '" + iota_path + "'")
- svntest.actions.run_and_verify_svn(expected_output, [], "revert",
- iota_path)
+ run_and_verify_revert([iota_path])
def revert_replaced_with_history_file_1(sbox):
"revert a committed replace-with-history == no-op"
@@ -776,9 +779,7 @@ def status_of_missing_dir_after_revert(s
A_D_G_path = os.path.join(wc_dir, "A", "D", "G")
svntest.actions.run_and_verify_svn(None, [], "rm", A_D_G_path)
- expected_output = re.escape("Reverted '" + A_D_G_path + "'")
- svntest.actions.run_and_verify_svn(expected_output, [], "revert",
- A_D_G_path)
+ run_and_verify_revert([A_D_G_path])
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/D/G/rho', 'A/D/G/pi', 'A/D/G/tau',
@@ -877,11 +878,7 @@ def status_of_missing_dir_after_revert_r
revert_paths = [G_path] + [os.path.join(G_path, child)
for child in ['alpha', 'beta', 'pi', 'rho', 'tau']]
- expected_output = svntest.verify.UnorderedOutput([
- "Reverted '%s'\n" % path for path in revert_paths])
-
- svntest.actions.run_and_verify_svn(expected_output, [], "revert", "-R",
- G_path)
+ run_and_verify_revert([G_path], ["-R"], revert_paths)
svntest.actions.run_and_verify_svn([], [],
"status", wc_dir)
@@ -947,12 +944,6 @@ def revert_tree_conflicts_in_updated_fil
G2_tau = os.path.join(G2, 'tau')
# Expectations
- expected_output = svntest.verify.UnorderedOutput(
- ["Reverted '%s'\n" % G_pi,
- "Reverted '%s'\n" % G_rho,
- "Reverted '%s'\n" % G_tau,
- ])
-
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak('A/D/G/pi', status=' ')
expected_status.remove('A/D/G/rho')
@@ -965,23 +956,15 @@ def revert_tree_conflicts_in_updated_fil
expected_disk.remove('A/D/G/tau')
# Revert individually in wc
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', G_pi, G_rho, G_tau)
+ run_and_verify_revert([G_pi, G_rho, G_tau])
svntest.actions.run_and_verify_status(wc_dir, expected_status)
svntest.actions.verify_disk(wc_dir, expected_disk)
# Expectations
- expected_output = svntest.verify.UnorderedOutput(
- ["Reverted '%s'\n" % G2_pi,
- "Reverted '%s'\n" % G2_rho,
- "Reverted '%s'\n" % G2_tau,
- ])
-
expected_status.wc_dir = wc_dir_2
# Revert recursively in wc 2
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', '-R', G2)
+ run_and_verify_revert([G2], ['-R'], [G2_pi, G2_rho, G2_tau])
svntest.actions.run_and_verify_status(wc_dir_2, expected_status)
svntest.actions.verify_disk(wc_dir_2, expected_disk)
@@ -1049,9 +1032,7 @@ def revert_child_of_copy(sbox):
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# First revert removes text change, child is still copied
- expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E2/beta')]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', sbox.ospath('A/B/E2/beta'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E2/beta']))
expected_status.tweak('A/B/E2/beta', status=' ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1074,9 +1055,7 @@ def revert_non_recusive_after_delete(sbo
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# This appears to work but gets the op-depth wrong
- expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B')]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', sbox.ospath('A/B'))
+ run_and_verify_revert(sbox.ospaths(['A/B']))
expected_status.tweak('A/B', status=' ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1086,9 +1065,7 @@ def revert_non_recusive_after_delete(sbo
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Since the op-depth was wrong A/B/E erroneously remains deleted
- expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E')]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', sbox.ospath('A/B/E'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E']))
expected_status.tweak('A/B/E', status=' ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1134,17 +1111,13 @@ def revert_permissions_only(sbox):
os.chmod(sbox.ospath('A/B/E/alpha'), svntest.main.S_ALL_READ) # read-only
is_readonly(sbox.ospath('A/B/E/alpha'))
- expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/alpha')]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', sbox.ospath('A/B/E/alpha'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E/alpha']))
is_writable(sbox.ospath('A/B/E/alpha'))
if svntest.main.is_posix_os():
os.chmod(sbox.ospath('A/B/E/beta'), svntest.main.S_ALL_RWX) # executable
is_executable(sbox.ospath('A/B/E/beta'))
- expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/beta')]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', sbox.ospath('A/B/E/beta'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E/beta']))
is_non_executable(sbox.ospath('A/B/E/beta'))
svntest.actions.run_and_verify_svn(None, [],
@@ -1167,17 +1140,13 @@ def revert_permissions_only(sbox):
os.chmod(sbox.ospath('A/B/E/alpha'), svntest.main.S_ALL_RW) # not read-only
is_writable(sbox.ospath('A/B/E/alpha'))
- expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/alpha')]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', sbox.ospath('A/B/E/alpha'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E/alpha']))
is_readonly(sbox.ospath('A/B/E/alpha'))
if svntest.main.is_posix_os():
os.chmod(sbox.ospath('A/B/E/beta'), svntest.main.S_ALL_RW) # not executable
is_non_executable(sbox.ospath('A/B/E/beta'))
- expected_output = ["Reverted '%s'\n" % sbox.ospath('A/B/E/beta')]
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', sbox.ospath('A/B/E/beta'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E/beta']))
is_executable(sbox.ospath('A/B/E/beta'))
# copied file is always writeable
@@ -1212,14 +1181,8 @@ def revert_copy_depth_files(sbox):
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
- expected_output = svntest.verify.UnorderedOutput([
- "Reverted '%s'\n" % sbox.ospath(path) for path in ['A/B/E2',
- 'A/B/E2/alpha',
- 'A/B/E2/beta']])
-
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', '--depth', 'files',
- sbox.ospath('A/B/E2'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E2']), ['--depth', 'files'],
+ sbox.ospaths(['A/B/E2', 'A/B/E2/alpha', 'A/B/E2/beta']))
expected_status.remove('A/B/E2', 'A/B/E2/alpha', 'A/B/E2/beta')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1242,12 +1205,8 @@ def revert_nested_add_depth_immediates(s
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
- expected_output = svntest.verify.UnorderedOutput([
- "Reverted '%s'\n" % sbox.ospath(path) for path in ['A/X', 'A/X/Y']])
-
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', '--depth', 'immediates',
- sbox.ospath('A/X'))
+ run_and_verify_revert(sbox.ospaths(['A/X']), ['--depth', 'immediates'],
+ sbox.ospaths(['A/X', 'A/X/Y']))
expected_status.remove('A/X', 'A/X/Y')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1299,9 +1258,7 @@ def revert_empty_actual(sbox):
wc_dir = sbox.wc_dir
# Non-recursive code path works
- svntest.actions.run_and_verify_svn(["Reverted '%s'\n" % sbox.ospath('alpha')],
- [],
- 'revert', sbox.ospath('alpha'))
+ run_and_verify_revert(sbox.ospaths(['alpha']))
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1316,9 +1273,7 @@ def revert_empty_actual_recursive(sbox):
# Recursive code path fails, the superfluous actual node suppresses the
# notification
- svntest.actions.run_and_verify_svn(["Reverted '%s'\n" % sbox.ospath('alpha')],
- [],
- 'revert', '-R', sbox.ospath('alpha'))
+ run_and_verify_revert(sbox.ospaths(['alpha']), ['-R'])
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1433,7 +1388,7 @@ def revert_tree_conflicts_with_replaceme
cd_and_status_u('A/D/H')
# Revert everything (i.e., accept "theirs-full").
- svntest.actions.run_and_verify_revert([
+ reverted_paths = [
wc('A/B/E'),
wc('A/B/E/alpha'), # incoming & local
wc('A/B/E/beta'),
@@ -1450,7 +1405,8 @@ def revert_tree_conflicts_with_replaceme
wc('A/D/H/loc_psi'),
wc('A/D/gamma'),
wc('A/mu'),
- ], '-R', wc_dir)
+ ]
+ run_and_verify_revert([wc_dir], ['-R'], reverted_paths)
# Remove a few unversioned files that revert left behind.
os.remove(wc('A/B/E/loc_beta'))
@@ -1511,10 +1467,7 @@ def revert_no_text_change_conflict(sbox)
create_no_text_change_conflict(sbox)
wc_dir = sbox.wc_dir
- svntest.actions.run_and_verify_svn(["Reverted '%s'\n"
- % sbox.ospath('A/B/E/alpha')],
- [],
- 'revert', sbox.ospath('A/B/E/alpha'))
+ run_and_verify_revert(sbox.ospaths(['A/B/E/alpha']))
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1526,10 +1479,7 @@ def revert_no_text_change_conflict_recur
create_no_text_change_conflict(sbox)
wc_dir = sbox.wc_dir
- svntest.actions.run_and_verify_svn(["Reverted '%s'\n"
- % sbox.ospath('A/B/E/alpha')],
- [],
- 'revert', '-R', wc_dir)
+ run_and_verify_revert(sbox.ospaths(['A/B/E/alpha']), ['-R'])
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
@@ -1560,13 +1510,8 @@ def revert_with_unversioned_targets(sbox
f.write(psi_contents)
# revert
- expected_output = svntest.verify.UnorderedOutput([
- "Reverted '%s'\n" % sbox.ospath('A/D/H/chi'),
- "Skipped '%s'\n" % sbox.ospath('A/D/H/delta'),
- "Reverted '%s'\n" % sbox.ospath('A/D/H/psi'),
- ])
- svntest.actions.run_and_verify_svn(expected_output, [],
- 'revert', chi_path, delta_path, psi_path)
+ run_and_verify_revert([chi_path, delta_path, psi_path], [],
+ [chi_path, psi_path], [delta_path])
# verify status
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
@@ -1585,8 +1530,8 @@ def revert_with_unversioned_targets(sbox
def revert_nonexistent(sbox):
'svn revert -R nonexistent'
sbox.build(read_only=True)
- svntest.actions.run_and_verify_svn('Skipped.*nonexistent', [],
- 'revert', '-R', sbox.ospath('nonexistent'))
+ run_and_verify_revert(sbox.ospaths(['nonexistent']), ['-R'],
+ [], sbox.ospaths(['nonexistent']))
@Issue(4168)
def revert_obstructing_wc(sbox):