You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/05/23 20:14:05 UTC
svn commit: r1126626 -
/subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py
Author: stsp
Date: Mon May 23 18:14:04 2011
New Revision: 1126626
URL: http://svn.apache.org/viewvc?rev=1126626&view=rev
Log:
For issue #3779, "actual-only nodes need regression tests", add a test that
presents (and passes) the current behaviour. We will need to review each
case and adapt this test as bad behaviour is fixed.
* subversion/tests/cmdline/tree_conflict_tests.py
(actual_only_node_behaviour, test_list): New test.
Modified:
subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py
Modified: subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py?rev=1126626&r1=1126625&r2=1126626&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/tree_conflict_tests.py Mon May 23 18:14:04 2011
@@ -37,6 +37,7 @@ from svntest.actions import run_and_veri
from svntest.actions import run_and_verify_status
from svntest.actions import run_and_verify_info
from svntest.actions import get_virginal_state
+import shutil
# (abbreviation)
Skip = svntest.testcase.Skip_deco
@@ -1092,6 +1093,284 @@ def at_directory_external(sbox):
svntest.main.run_svn(None, "merge", '-c', merge_rev, '^/A/B', wc_dir)
svntest.main.run_svn(None, "merge", '-c', merge_rev2, '^/A/B', wc_dir)
+#----------------------------------------------------------------------
+@Issue(3779)
+### This test currently passes on the current behaviour.
+### However in many cases it is unclear whether the current behaviour is
+### correct. Review is still required.
+def actual_only_node_behaviour(sbox):
+ "test behaviour with actual-only nodes"
+
+ sbox.build()
+ A_url = sbox.repo_url + '/A'
+ A_copy_url = sbox.repo_url + '/A_copy'
+ wc_dir = sbox.wc_dir
+ foo_path = sbox.ospath('A/foo', wc_dir)
+
+ # r2: copy ^/A -> ^/A_copy
+ sbox.simple_repo_copy('A', 'A_copy')
+
+ # r3: add a file foo on ^/A_copy branch
+ wc2_dir = sbox.add_wc_path('wc2')
+ foo2_path = sbox.ospath('foo', wc2_dir)
+ svntest.main.run_svn(None, "checkout", A_copy_url, wc2_dir)
+ svntest.main.file_write(foo2_path, "This is initially file foo.\n")
+ svntest.main.run_svn(None, "add", foo2_path)
+ svntest.main.run_svn(None, "commit", '-m', svntest.main.make_log_msg(),
+ foo2_path)
+
+ # r4: make a change to foo
+ svntest.main.file_append(foo2_path, "This is a new line in file foo.\n")
+ svntest.main.run_svn(None, "commit", '-m', svntest.main.make_log_msg(),
+ wc2_dir)
+
+ # cherry-pick r4 to ^/A -- the resulting tree conflict creates
+ # an actual-only node for 'A/foo'
+ sbox.simple_update()
+ svntest.main.run_svn(None, "merge", '-c', '4', A_copy_url,
+ os.path.join(wc_dir, 'A'))
+
+ # Attempt running various commands on foo and verify expected behavior
+
+ # add
+ expected_stdout = None
+ expected_stderr = ".*foo.*not found.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "add", foo_path)
+
+ # blame (praise, annotate, ann)
+ expected_stdout = None
+ expected_stderr = ".*foo.*not found.*"
+ run_and_verify_svn(None, 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,
+ "cat", foo_path)
+ # changelist (cl)
+ ### this does not error out -- needs review
+ expected_stdout = None
+ expected_stderr = []
+ run_and_verify_svn(None, 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,
+ "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)
+
+ # cleanup
+ expected_stdout = None
+ expected_stderr = ".*foo.*is not a working copy directory"
+ run_and_verify_svn(None, 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,
+ "commit", foo_path)
+ # copy (cp)
+ expected_stdout = None
+ expected_stderr = ".*foo.*does not exist.*"
+ run_and_verify_svn(None, 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,
+ "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,
+ "diff", foo_path)
+ # export
+ expected_stdout = None
+ expected_stderr = ".*foo.*was not found.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "export", foo_path, sbox.get_tempname())
+ # import
+ expected_stdout = None
+ expected_stderr = ".*foo.*does not exist.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "import", '-m', svntest.main.make_log_msg(),
+ foo_path, sbox.repo_url + '/foo_imported')
+
+ # info
+ expected_info = {
+ 'Tree conflict': 'local missing, incoming edit upon merge.*',
+ 'Name': 'foo',
+ 'Schedule': 'normal',
+ 'Node Kind': 'none',
+ 'Depth': 'empty', ### is this right?
+ 'Copied From Rev': '0',
+ 'Path': sbox.ospath('A/foo'),
+ }
+ run_and_verify_info([expected_info], foo_path)
+
+ # list (ls)
+ expected_stdout = None
+ expected_stderr = ".*foo.*was not found.*"
+ run_and_verify_svn(None, 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,
+ "lock", foo_path)
+ # log
+ expected_stdout = None
+ expected_stderr = ".*foo.*was not found.*"
+ run_and_verify_svn(None, 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.*does not exist.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "merge", '--ignore-ancestry', '-c', '4',
+ '^/trunk/alpha', foo_path)
+
+ # mergeinfo
+ expected_stdout = None
+ expected_stderr = ".*foo.*was not found.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "mergeinfo", A_copy_url + '/foo', foo_path)
+ # mkdir
+ ### this does not error out -- needs review
+ expected_stdout = None
+ expected_stderr = []
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "mkdir", foo_path)
+ ### for now, ignore the fact that mkdir succeeds, revert the entire
+ ### working copy, and repeat the merge so we can test more commands
+ svntest.main.run_svn(None, "revert", "-R", wc_dir)
+ os.rmdir(foo_path) # remove obstruction
+ svntest.main.run_svn(None, "merge", '-c', '4', A_copy_url,
+ os.path.join(wc_dir, 'A'))
+
+ # move (mv, rename, ren)
+ expected_stdout = None
+ expected_stderr = ".*foo.*does not exist.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "move", foo_path, foo_path + ".moved")
+ # patch
+ expected_stdout = None
+ expected_stderr = ".*foo.*does not exist.*"
+ patch_path = sbox.get_tempname()
+ f = open(patch_path, 'w')
+ patch_data = [
+ "--- foo (revision 2)\n"
+ "+++ foo (working copy)\n"
+ "@@ -1 +1,2 @@\n"
+ " foo\n"
+ " +foo\n"
+ ]
+ for line in patch_data:
+ f.write(line)
+ f.close()
+ run_and_verify_svn(None, 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,
+ "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,
+ "propget", "svn:eol-style", foo_path)
+
+ # proplist (plist, pl)
+ ### proplist does exit(0) -- is that expected?
+ expected_stdout = None
+ expected_stderr = ".*foo.*is not under version control.*"
+ svntest.actions.run_and_verify_svn2(None, expected_stdout, expected_stderr,
+ 0, "proplist", foo_path)
+
+ # propset (pset, ps)
+ expected_stdout = None
+ expected_stderr = ".*foo.*was not found.*"
+ run_and_verify_svn(None, 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,
+ "relocate", "^/A_copy/foo", foo_path)
+
+ # resolve
+ expected_stdout = "Resolved conflicted state of.*foo.*"
+ expected_stderr = []
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "resolve", "--accept", "working", foo_path)
+
+ # revert the entire working copy and repeat the merge so we can test
+ # more commands
+ svntest.main.run_svn(None, "revert", "-R", wc_dir)
+ svntest.main.run_svn(None, "merge", '-c', '4', A_copy_url,
+ os.path.join(wc_dir, 'A'))
+
+ # revert
+ expected_stdout = "Reverted.*foo.*"
+ expected_stderr = []
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "revert", foo_path)
+
+ # revert the entire working copy and repeat the merge so we can test
+ # more commands
+ svntest.main.run_svn(None, "revert", "-R", wc_dir)
+ svntest.main.run_svn(None, "merge", '-c', '4', A_copy_url,
+ os.path.join(wc_dir, 'A'))
+
+ # status (stat, st)
+ expected_status = wc.State(foo_path, {
+ '' : Item(status='! ', treeconflict='C'),
+ })
+ run_and_verify_status(foo_path, expected_status)
+
+ # switch (sw)
+ expected_stdout = None
+ expected_stderr = ".*foo.*was not found.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "switch", "^/A_copy/foo", foo_path)
+
+ # unlock
+ expected_stdout = None
+ expected_stderr = ".*foo.*was not found.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "unlock", foo_path)
+
+ # update (up)
+ ### update does not fail at all -- needs review
+ expected_stdout = [
+ "Updating '%s':\n" % sbox.ospath('A/foo'),
+ "At revision 4.\n",
+ ]
+ expected_stderr = []
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "update", foo_path)
+
+ # upgrade
+ expected_stdout = None
+ expected_stderr = ".*Cannot upgrade.*foo.*"
+ run_and_verify_svn(None, expected_stdout, expected_stderr,
+ "upgrade", foo_path)
+
#######################################################################
# Run the tests
@@ -1120,6 +1399,7 @@ test_list = [ None,
up_add_onto_add_revert,
lock_update_only,
at_directory_external,
+ actual_only_node_behaviour,
]
if __name__ == '__main__':