You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2010/03/25 17:08:41 UTC

svn commit: r927467 - in /subversion/branches/1.6.x-issue3020: ./ subversion/tests/cmdline/ subversion/tests/cmdline/svnadmin_tests_data/

Author: pburba
Date: Thu Mar 25 16:08:41 2010
New Revision: 927467

URL: http://svn.apache.org/viewvc?rev=927467&view=rev
Log:
Merge r921453 and r927184 from subversion/trunk to
subversion/branches/1.6.x-issue3020.

Added:
    subversion/branches/1.6.x-issue3020/subversion/tests/cmdline/svnadmin_tests_data/mergeinfo_included_partial.dump
      - copied unchanged from r927184, subversion/trunk/subversion/tests/cmdline/svnadmin_tests_data/mergeinfo_included_partial.dump
    subversion/branches/1.6.x-issue3020/subversion/tests/cmdline/svnadmin_tests_data/skeleton_repos.dump
      - copied unchanged from r927184, subversion/trunk/subversion/tests/cmdline/svnadmin_tests_data/skeleton_repos.dump
Modified:
    subversion/branches/1.6.x-issue3020/   (props changed)
    subversion/branches/1.6.x-issue3020/CHANGES   (props changed)
    subversion/branches/1.6.x-issue3020/subversion/tests/cmdline/svnadmin_tests.py

Propchange: subversion/branches/1.6.x-issue3020/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 25 16:08:41 2010
@@ -64,4 +64,4 @@
 /subversion/branches/tc_url_rev:870696-870828
 /subversion/branches/tree-conflicts:864636-869499
 /subversion/branches/tree-conflicts-notify:870271-870353
-/subversion/trunk:875976,875980-875981,876054-876056,876092,876175,876299,876306,876427,876440,876450,876507,876571,876862,877203,877595,877597,877665,878216,878269,878321,878341,878343,878399,878423,878426,879093,879688,880274-880275,880370,880450,880474,880525-880526,880552,881905,884842,886164,886197,888715,888979,889081,889840,891672,892050,892085,895514,895653,896522,896915,898963,899826,899828,900797,901752,904301,904394,904594,905303,905326,906256,906305,917640,918211,922516
+/subversion/trunk:875976,875980-875981,876054-876056,876092,876175,876299,876306,876427,876440,876450,876507,876571,876862,877203,877595,877597,877665,878216,878269,878321,878341,878343,878399,878423,878426,879093,879688,880274-880275,880370,880450,880474,880525-880526,880552,881905,884842,886164,886197,888715,888979,889081,889840,891672,892050,892085,895514,895653,896522,896915,898963,899826,899828,900797,901752,904301,904394,904594,905303,905326,906256,906305,917640,918211,921453,922516,927184

Propchange: subversion/branches/1.6.x-issue3020/CHANGES
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 25 16:08:41 2010
@@ -63,4 +63,4 @@
 /subversion/branches/tc_url_rev/CHANGES:870696-870828
 /subversion/branches/tree-conflicts/CHANGES:864636-869499
 /subversion/branches/tree-conflicts-notify/CHANGES:870271-870353
-/subversion/trunk/CHANGES:875962-901365,901752,904301,904394,904594,905303,905326,917640,918211,922516
+/subversion/trunk/CHANGES:875962-901365,901752,904301,904394,904594,905303,905326,917640,918211,921453,922516,927184

Modified: subversion/branches/1.6.x-issue3020/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.6.x-issue3020/subversion/tests/cmdline/svnadmin_tests.py?rev=927467&r1=927466&r2=927467&view=diff
==============================================================================
--- subversion/branches/1.6.x-issue3020/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/1.6.x-issue3020/subversion/tests/cmdline/svnadmin_tests.py Thu Mar 25 16:08:41 2010
@@ -25,6 +25,7 @@ import sys
 import svntest
 from svntest.verify import SVNExpectedStdout, SVNExpectedStderr
 from svntest.verify import SVNUnexpectedStderr
+from svntest.main import SVN_PROP_MERGEINFO
 
 # (abbreviation)
 Skip = svntest.testcase.Skip
@@ -804,22 +805,25 @@ def reflect_dropped_renumbered_revs(sbox
                              '/toplevel')
 
   # Verify the svn:mergeinfo properties
-  svntest.actions.run_and_verify_svn(None, ["/trunk:1-4\n"],
+  # Currently this test is set as XFail because the original fix for
+  # issue #3020 didn't have the correct expecations, see
+  # http://svn.haxx.se/dev/archive-2010-03/0244.shtml.
+  svntest.actions.run_and_verify_svn(None, ["/trunk:2-4\n"],
                                      [], 'propget', 'svn:mergeinfo',
                                      sbox.repo_url + '/branch2')
   svntest.actions.run_and_verify_svn(None, ["/branch1:5-9\n"],
                                      [], 'propget', 'svn:mergeinfo',
                                      sbox.repo_url + '/trunk')
-  svntest.actions.run_and_verify_svn(None, ["/toplevel/trunk:1-13\n"],
+  svntest.actions.run_and_verify_svn(None, ["/toplevel/trunk:11-13\n"],
                                      [], 'propget', 'svn:mergeinfo',
                                      sbox.repo_url + '/toplevel/branch2')
   svntest.actions.run_and_verify_svn(None, ["/toplevel/branch1:14-18\n"],
                                      [], 'propget', 'svn:mergeinfo',
                                      sbox.repo_url + '/toplevel/trunk')
-  svntest.actions.run_and_verify_svn(None, ["/toplevel/trunk:1-12\n"],
+  svntest.actions.run_and_verify_svn(None, ["/toplevel/trunk:11-12\n"],
                                      [], 'propget', 'svn:mergeinfo',
                                      sbox.repo_url + '/toplevel/branch1')
-  svntest.actions.run_and_verify_svn(None, ["/trunk:1-3\n"],
+  svntest.actions.run_and_verify_svn(None, ["/trunk:2-3\n"],
                                      [], 'propget', 'svn:mergeinfo',
                                      sbox.repo_url + '/branch1')
 
@@ -950,6 +954,169 @@ def verify_with_invalid_revprops(sbox):
     ".*Malformed file"):
     raise svntest.Failure
 
+#----------------------------------------------------------------------
+# More testing for issue #3020 'Reflect dropped/renumbered revisions in
+# svn:mergeinfo data during svnadmin load'
+#
+# Specifically, test that loading a partial dump file filters out
+# mergeinfo that refers to revisions that are older than the oldest
+# loaded revisions -- See
+# http://subversion.tigris.org/issues/show_bug.cgi?id=3020#desc10.
+def drop_mergeinfo_outside_of_dump_stream(sbox):
+  "filter mergeinfo revs outside of dump stream"
+
+  test_create(sbox)
+
+  # Load a partial dump into an existing repository.
+  #
+  # Picture == 1k words:
+  #
+  # The existing repos loaded from skeleton_repos.dump looks like this:
+  #
+  # Projects/       (Added r1)
+  #   README        (Added r2)
+  #   Project-X     (Added r3)
+  #   Project-Y     (Added r4)
+  #   Project-Z     (Added r5)
+  #   docs/         (Added r6)
+  #     README      (Added r6)
+  #
+  # The dump file 'mergeinfo_included_partial.dump' is a dump of r6:HEAD of
+  # the following repos:
+  #                       __________________________________________
+  #                      |                                         |
+  #                      |             ____________________________|_____
+  #                      |            |                            |     |
+  # trunk---r2---r3-----r5---r6-------r8---r9--------------->      |     |
+  #   r1             |        |     |       |                      |     |
+  # intial           |        |     |       |______                |     |
+  # import         copy       |   copy             |            merge   merge
+  #                  |        |     |            merge           (r5)   (r8)
+  #                  |        |     |            (r9)              |     |
+  #                  |        |     |              |               |     |
+  #                  |        |     V              V               |     |
+  #                  |        | branches/B2-------r11---r12---->   |     |
+  #                  |        |     r7              |____|         |     |
+  #                  |        |                        |           |     |
+  #                  |      merge                      |___        |     |
+  #                  |      (r6)                           |       |     |
+  #                  |        |_________________           |       |     |
+  #                  |                          |        merge     |     |
+  #                  |                          |      (r11-12)    |     |
+  #                  |                          |          |       |     |
+  #                  V                          V          V       |     |
+  #              branches/B1-------------------r10--------r13-->   |     |
+  #                  r4                                            |     |
+  #                   |                                            V     V
+  #                  branches/B1/B/E------------------------------r14---r15->
+  #                  
+  #
+  # The mergeinfo on the complete repos in the preceeding repos looks like:
+  #
+  #   Properties on 'branches/B1':
+  #     svn:mergeinfo
+  #       /branches/B2:11-12
+  #       /trunk:6,9
+  #   Properties on 'branches/B1/B/E':
+  #     svn:mergeinfo
+  #       /branches/B2/B/E:11-12
+  #       /trunk/B/E:5-6,8-9
+  #   Properties on 'branches/B2':
+  #     svn:mergeinfo
+  #       /trunk:9
+  #
+  # If we were to load the dump of r6:HEAD into an empty repository, we'd
+  # expect any references to revisions <r6 to be removed entirely (since
+  # that history no longer exists) and the the remaining mergeinfo should
+  # have its revisions offset by -5.  The resulting mergeinfo should look
+  # like this:
+  #
+  #   Properties on 'branches/B1':
+  #     svn:mergeinfo
+  #       /branches/B2:6-7
+  #       /trunk:1,4
+  #   Properties on 'branches/B1/B/E':
+  #     svn:mergeinfo
+  #       /branches/B2/B/E:6-7
+  #       /trunk/B/E:1,3-4
+  #   Properties on 'branches/B2':
+  #     svn:mergeinfo
+  #       /trunk:4
+  #
+  # But here we will load it into the existing skeleton repository in the
+  # projects/Project-X directory.  Since we are loading the dump into a
+  # subtree, all the merge sources should be prefixed with the path to
+  # that subtree, i.e. 'projects/Project-X', compared to the mergeinfo above.
+  # In addition, since the skeleton repos already has 6 revisions, we expect
+  # all the remaining revisions to be offset +6 from the above.  That should
+  # result in this mergeinfo:
+  #
+  #   Properties on 'projects/Project-X/branches/B1':
+  #     svn:mergeinfo
+  #       /projects/Project-X/branches/B2:12-13
+  #       /projects/Project-X/trunk:7,10
+  #   Properties on 'projects/Project-X/branches/B1/B/E':
+  #     svn:mergeinfo
+  #       /projects/Project-X/branches/B2/B/E:12-13
+  #       /projects/Project-X/trunk/B/E:7,9-10
+  #   Properties on 'projects/Project-X/branches/B2':
+  #     svn:mergeinfo
+  #       /projects/Project-X/trunk:10
+  #
+  # ...Unfortunately this is currently the resulting mergeinfo
+  # (and why this test is set to XFail):
+  #
+  #   Properties on 'projects\Project-X\branches\B1':
+  #     svn:mergeinfo
+  #       /projects/Project-X/branches/B2:12-13
+  #       /projects/Project-X/trunk:6-7,10
+  #                                 ^
+  #   Properties on 'projects\Project-X\branches\B1\B\E':
+  #     svn:mergeinfo
+  #       /projects/Project-X/branches/B2/B/E:12-13
+  #       /projects/Project-X/trunk/B/E:5-7,9-10
+  #                                     ^^
+  #   Properties on 'projects\Project-X\branches\B2':
+  #     svn:mergeinfo
+  #       /projects/Project-X/trunk:10
+
+  # Load the skeleton dump:
+  dumpfile1 = svntest.main.file_read(
+    os.path.join(os.path.dirname(sys.argv[0]),
+                 'svnadmin_tests_data',
+                 'skeleton_repos.dump'))
+  load_and_verify_dumpstream(sbox, [], [], None, dumpfile1, '--ignore-uuid')
+
+  # Load the partial repository with mergeinfo dump:
+  dumpfile2 = svntest.main.file_read(
+    os.path.join(os.path.dirname(sys.argv[0]),
+                 'svnadmin_tests_data',
+                 'mergeinfo_included_partial.dump'))
+  load_and_verify_dumpstream(sbox, [], [], None, dumpfile2, '--ignore-uuid',
+                             '--parent-dir', '/Projects/Project-X')
+
+  # Check the resulting mergeinfo.
+  #
+  # TODO: Use pg -vR, which would make the expected output easier on the eyes.
+  #       Not using it because pg -vR on windows is outputting <CR><CR><LF>
+  #       after the first line of multiline mergeinfo, which breaks the
+  #       comparison, e.g.:
+  #
+  #   Properties on 'Projects/Project-X/branches/B1/B/E':<CR><LF>
+  #     svn:mergeinfo<CR><LF>
+  #       /Projects/Project-X/branches/B2:12-13<CR><CR><LF>
+  #                                            ^^^
+  #       /Projects/Project-X/trunk:7,10<CR><LF>
+  url = sbox.repo_url + '/Projects/Project-X/branches/'
+  expected_output = svntest.verify.UnorderedOutput([
+    url + "B1 - /Projects/Project-X/branches/B2:12-13\n",
+    "/Projects/Project-X/trunk:7,10\n",
+    url + "B2 - /Projects/Project-X/trunk:10\n",
+    url + "B1/B/E - /Projects/Project-X/branches/B2/B/E:12-13\n",
+    "/Projects/Project-X/trunk/B/E:7,9-10\n"])
+  svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'propget', 'svn:mergeinfo', '-R',
+                                     sbox.repo_url)
 
 ########################################################################
 # Run the tests
@@ -972,11 +1139,12 @@ test_list = [ None,
               SkipUnless(recover_fsfs, svntest.main.is_fs_type_fsfs),
               load_with_parent_dir,
               set_uuid,
-              reflect_dropped_renumbered_revs,
+              XFail(reflect_dropped_renumbered_revs),
               SkipUnless(fsfs_recover_handle_missing_revs_or_revprops_file,
                          svntest.main.is_fs_type_fsfs),
               create_in_repo_subdir,
               verify_with_invalid_revprops,
+              XFail(drop_mergeinfo_outside_of_dump_stream),
              ]
 
 if __name__ == '__main__':