You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2013/06/26 13:47:06 UTC

svn commit: r1496885 - in /subversion/trunk/subversion/tests/cmdline: move_tests.py svnmucc_tests.py

Author: danielsh
Date: Wed Jun 26 11:47:06 2013
New Revision: 1496885

URL: http://svn.apache.org/r1496885
Log:
Add tests for some of the torturous nested moves/replaces from the "Ev2 as a
move-aware editor" thread:

http://mid.gmane.org/87obauwh4w.fsf@ntlworld.com

The resulting 'log -qv' in both tests are slightly different from each other;
I am not entirely sure whether that is correct behaviour.

* subversion/tests/cmdline/move_tests.py
  (nested_replaces): New test.
  (test_list): Run it.

* subversion/tests/cmdline/svnmucc_tests.py
  (nested_replaces): New test.
  (test_list): Run it.

Modified:
    subversion/trunk/subversion/tests/cmdline/move_tests.py
    subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py

Modified: subversion/trunk/subversion/tests/cmdline/move_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/move_tests.py?rev=1496885&r1=1496884&r2=1496885&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/move_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/move_tests.py Wed Jun 26 11:47:06 2013
@@ -1234,6 +1234,61 @@ def move_missing(sbox):
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
 
+def nested_replaces(sbox):
+  "nested replaces"
+
+  repo_dir, repo_url = sbox.add_repo_path('blank')
+  wc_dir = sbox.add_wc_path('blank')
+  svntest.main.create_repos(repo_dir)
+  ospath = lambda dirent: sbox.ospath(dirent, wc_dir)
+
+  ## r1: setup
+  svntest.main.run_svn(None, 'mkdir', '--parents',
+                       '-m', 'r1: create tree',
+                       repo_url + '/A/B/C', repo_url + '/X/Y/Z')
+  svntest.main.run_svn(None, 'checkout', '-q', repo_url, wc_dir)
+  expected_status = svntest.wc.State(wc_dir, {
+    ''            : Item(status='  ', wc_rev='1'),
+    'A'           : Item(status='  ', wc_rev='1'),
+    'A/B'         : Item(status='  ', wc_rev='1'),
+    'A/B/C'       : Item(status='  ', wc_rev='1'),
+    'X'           : Item(status='  ', wc_rev='1'),
+    'X/Y'         : Item(status='  ', wc_rev='1'),
+    'X/Y/Z'       : Item(status='  ', wc_rev='1'),
+    })
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+  ## r2: juggling
+  moves = [
+    ('A', 'A2'),
+    ('X', 'X2'),
+    ('A2/B/C', 'X'),
+    ('X2/Y/Z', 'A'),
+    ('A2/B', 'A/B'),
+    ('X2/Y', 'X/Y'),
+    ('A2', 'X/Y/Z'),
+    ('X2', 'A/B/C'),
+  ]
+  for src, dst in moves:
+    svntest.main.run_svn(None, 'mv', ospath(src), ospath(dst))
+  # svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+  svntest.main.run_svn(None, 'commit', '-m', 'r2: juggle the tree', wc_dir)
+  expected_output = svntest.verify.UnorderedRegexListOutput(map(re.escape, [
+    '   R /A (from /X/Y/Z:1)',
+    '   A /A/B (from /A/B:1)',
+    '   R /A/B/C (from /X:1)',
+    '   R /X (from /A/B/C:1)',
+    '   A /X/Y (from /X/Y:1)',
+    '   R /X/Y/Z (from /A:1)',
+    '   D /X/Y/Z/B',
+    '   D /A/B/C/Y',
+  ]) + [
+    '^-', '^r2', '^-', '^Changed paths:',
+  ])
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'log', '-qvr2', repo_url)
+
 #######################################################################
 # Run the tests
 
@@ -1245,6 +1300,7 @@ test_list = [ None,
               deeper_move_file_test,
               property_merge,
               move_missing,
+              nested_replaces,
             ]
 
 if __name__ == '__main__':

Modified: subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py?rev=1496885&r1=1496884&r2=1496885&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnmucc_tests.py Wed Jun 26 11:47:06 2013
@@ -411,6 +411,44 @@ def no_log_msg_non_interactive(sbox):
                 'mkdir', 'A/subdir')
 
 
+def nested_replaces(sbox):
+  "nested replaces"
+
+  sbox.build(create_wc=False)
+  repo_url = sbox.repo_url
+  svntest.main.run_svnmucc('-U', repo_url, '-m', 'r2: create tree',
+                           'rm', 'A',
+                           'rm', 'iota',
+                           'mkdir', 'A', 'mkdir', 'A/B', 'mkdir', 'A/B/C',
+                           'mkdir', 'M', 'mkdir', 'M/N', 'mkdir', 'M/N/O',
+                           'mkdir', 'X', 'mkdir', 'X/Y', 'mkdir', 'X/Y/Z')
+  svntest.main.run_svnmucc('-U', repo_url, '-m', 'r3: nested replaces',
+                           *("""
+rm A rm M rm X
+cp HEAD X/Y/Z A cp HEAD A/B/C M cp HEAD M/N/O X
+cp HEAD A/B A/B cp HEAD M/N M/N cp HEAD X/Y X/Y
+rm A/B/C rm M/N/O rm X/Y/Z
+cp HEAD X A/B/C cp HEAD A M/N/O cp HEAD M X/Y/Z
+                           """.split()))
+
+  # ### TODO: need a smarter run_and_verify_log() that verifies copyfrom
+  expected_output = svntest.verify.UnorderedRegexListOutput(map(re.escape, [
+    '   R /A (from /X/Y/Z:2)',
+    '   A /A/B (from /A/B:2)',
+    '   R /A/B/C (from /X:2)',
+    '   R /M (from /A/B/C:2)',
+    '   A /M/N (from /M/N:2)',
+    '   R /M/N/O (from /A:2)',
+    '   R /X (from /M/N/O:2)',
+    '   A /X/Y (from /X/Y:2)',
+    '   R /X/Y/Z (from /M:2)',
+  ]) + [
+    '^-', '^r3', '^-', '^Changed paths:',
+  ])
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'log', '-qvr3', repo_url)
+
+
 ######################################################################
 
 test_list = [ None,
@@ -419,6 +457,7 @@ test_list = [ None,
               propset_root,
               too_many_log_messages,
               no_log_msg_non_interactive,
+              nested_replaces,
             ]
 
 if __name__ == '__main__':