Author: pburba
Date: Wed Apr 21 16:20:12 2010
New Revision: 936387

URL: http://svn.apache.org/viewvc?rev=936387&view=rev
Log:
Revert r927243, see http://svn.haxx.se/dev/archive-2010-04/0475.shtml

* subversion/libsvn_repos/load.c

  Barring some whitespace conflicts, this is a straightforward reversion
  of r927243.

* subversion/tests/cmdline/svnadmin_tests.py

  Revert r927243 with a few minor adjustments as noted below.

  (reflect_dropped_renumbered_revs):
  (drop_mergeinfo_outside_of_dump_stream):
   Keep the typo fixes from r927243.  Adjust the XFail comments to link
   to the latest discussion of this issue on the dev list.

  (test_list): Remove XFail from the test
   dont_drop_valid_mergeinfo_during_incremental_loads.  This is a test
   for the regression caused by r927243, so obviously it passes now.

Modified:
    subversion/trunk/subversion/libsvn_repos/load.c
    subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py

Modified: subversion/trunk/subversion/libsvn_repos/load.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/load.c?rev=936387&r1=936386&r2=936387&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/load.c (original)
+++ subversion/trunk/subversion/libsvn_repos/load.c Wed Apr 21 16:20:12 2010
@@ -55,18 +55,7 @@ struct parse_baton
   enum svn_repos_load_uuid uuid_action;
   const char *parent_dir;
   apr_pool_t *pool;
-
-  /* A hash mapping copy-from revisions and mergeinfo range revisions
-     (svn_revnum_t *) in the dump stream to their corresponding revisions
-     (svn_revnum_t *) in the loaded repository.  The hash and its
-     contents are allocated in POOL. */
   apr_hash_t *rev_map;
-
-  /* The oldest and youngest old revisions loaded so far from the dump
-     stream.  If no revisions have been loaded yet, then both are set to
-     SVN_INVALID_REVNUM. */
-  svn_revnum_t oldest_old_rev;
-  svn_revnum_t youngest_old_rev;
 };
 
 struct revision_baton
@@ -265,10 +254,9 @@ prefix_mergeinfo_paths(svn_string_t **me
 }
 
 
-/* Examine the mergeinfo in INITIAL_VAL, if necessary remove revisions that
-   refer to history outside of the dump stream and renumber mergeinfo
-   rangelists to point to the appropriate revisions in the loaded repository.
-   Return the (possibly new) mergeinfo in *FINAL_VAL (allocated from POOL). */
+/* Examine the mergeinfo in INITIAL_VAL, renumber revisions in rangelists
+   as appropriate, and return the (possibly new) mergeinfo in *FINAL_VAL
+   (allocated from POOL). */
 static svn_error_t *
 renumber_mergeinfo_revs(svn_string_t **final_val,
                         const svn_string_t *initial_val,
@@ -281,16 +269,6 @@ renumber_mergeinfo_revs(svn_string_t **f
   apr_hash_index_t *hi;
 
   SVN_ERR(svn_mergeinfo_parse(&mergeinfo, initial_val->data, subpool));
-
-  /* Issue #3020: If the dump stream represents only part of a repository,
-     then mergeinfo in the stream may refer to revisions outside of the
-     stream.  Remove any such invalid ranges before renumbering. */
-  SVN_ERR(svn_mergeinfo__filter_mergeinfo_by_ranges(
-    &mergeinfo, mergeinfo,
-    rb->pb->youngest_old_rev, rb->pb->oldest_old_rev - 1,
-    TRUE, /* Allow only references to revs that exist in the load stream. */
-    subpool, subpool));
-
   for (hi = apr_hash_first(subpool, mergeinfo); hi; hi = apr_hash_next(hi))
     {
       const char *merge_source;
@@ -313,28 +291,7 @@ renumber_mergeinfo_revs(svn_string_t **f
           rev_from_map = apr_hash_get(pb->rev_map, &range->start,
                                       sizeof(svn_revnum_t));
           if (rev_from_map && SVN_IS_VALID_REVNUM(*rev_from_map))
-            {
               range->start = *rev_from_map;
-            }
-          else if (range->start == pb->oldest_old_rev - 1)
-            {
-              /* Since the start revision of svn_merge_range_t are not
-                 inclusive there is one possible valid start revision that
-                 won't be found in the PB->REV_MAP mapping of load stream
-                 revisions to loaded revisions: The revision immediately
-                 preceeding the oldest revision from the load stream.
-                 This is a valid revision for mergeinfo, but not a valid
-                 copy from revision (which PB->REV_MAP also maps for) so it
-                 will never be in the mapping.
-
-                 If that is what we have here, then find the mapping for the
-                 oldest rev from the load stream and subtract 1 to get the
-                 renumbered, non-inclusive, start revision. */
-              rev_from_map = apr_hash_get(pb->rev_map, &pb->oldest_old_rev,
-                                          sizeof(svn_revnum_t));
-              if (rev_from_map && SVN_IS_VALID_REVNUM(*rev_from_map))
-                range->start = *rev_from_map - 1;
-            }
 
           rev_from_map = apr_hash_get(pb->rev_map, &range->end,
                                       sizeof(svn_revnum_t));
@@ -1250,31 +1207,19 @@ set_node_property(void *baton,
 
   if (strcmp(name, SVN_PROP_MERGEINFO) == 0)
     {
-      /* If we haven't yet committed any revisions then *any* mergeinfo
-         will refer to the wrong revisions or revisions that don't exist.
-         Either way none of this mergeinfo can be valid, so remove it all. */
-      if (apr_hash_count(rb->pb->rev_map) == 0)
-        {
-          value = NULL;
-        }
-      else
+      /* Renumber mergeinfo as appropriate. */
+      svn_string_t *renumbered_mergeinfo;
+      SVN_ERR(renumber_mergeinfo_revs(&renumbered_mergeinfo, value, rb,
+                                      nb->pool));
+      value = renumbered_mergeinfo;
+      if (parent_dir)
         {
-          /* Renumber mergeinfo as appropriate. */
-          svn_string_t *renumbered_mergeinfo;
-
-          SVN_ERR(renumber_mergeinfo_revs(&renumbered_mergeinfo, value, rb,
-                                          nb->pool));
-          value = renumbered_mergeinfo;
-          if (parent_dir)
-            {
-              /* Prefix the merge source paths with PARENT_DIR. */
-              /* ASSUMPTION: All source paths are included in the dump
-                 stream. */
-              svn_string_t *mergeinfo_val;
-              SVN_ERR(prefix_mergeinfo_paths(&mergeinfo_val, value,
-                                             parent_dir, nb->pool));
-              value = mergeinfo_val;
-            }
+          /* Prefix the merge source paths with PARENT_DIR. */
+          /* ASSUMPTION: All source paths are included in the dump stream. */
+          svn_string_t *mergeinfo_val;
+          SVN_ERR(prefix_mergeinfo_paths(&mergeinfo_val, value, parent_dir,
+                                         nb->pool));
+          value = mergeinfo_val;
         }
     }
 
@@ -1410,13 +1355,6 @@ close_revision(void *baton)
         return svn_error_return(err);
     }
 
-  /* Update the youngest revision committed from the load stream (or both
-     if this is the first revision committed). */
-  if (SVN_IS_VALID_REVNUM(pb->youngest_old_rev))
-    pb->youngest_old_rev = *old_rev;
-  else
-    pb->oldest_old_rev = pb->youngest_old_rev = *old_rev;
-
   /* Run post-commit hook, if so commanded.  */
   if (pb->use_post_commit_hook)
     {
@@ -1498,7 +1436,6 @@ svn_repos_get_fs_build_parser2(const svn
   pb->parent_dir = parent_dir;
   pb->pool = pool;
   pb->rev_map = apr_hash_make(pool);
-  pb->youngest_old_rev = pb->oldest_old_rev = SVN_INVALID_REVNUM;
 
   *callbacks = parser;
   *parse_baton = pb;

Modified: subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py?rev=936387&r1=936386&r2=936387&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py Wed Apr 21 
16:20:12 2010
@@ -813,6 +813,10 @@ def reflect_dropped_renumbered_revs(sbox
                              '/toplevel')
 
   # Verify the svn:mergeinfo properties
+  #
+  # Currently this test is set as XFail because we needed to revert
+  # http://svn.apache.org/viewvc?view=revision&revision=927243,
+  # see http://svn.haxx.se/dev/archive-2010-04/0475.shtml.
   svntest.actions.run_and_verify_svn(None, ["/trunk:2-4\n"],
                                      [], 'propget', 'svn:mergeinfo',
                                      sbox.repo_url + '/branch2')
@@ -1067,7 +1071,26 @@ def drop_mergeinfo_outside_of_dump_strea
   #   Properties on 'Projects/Project-X/branches/B2':
   #     svn:mergeinfo
   #       /Projects/Project-X/trunk:10
-
+  #
+  # ...With the reversion of
+  # http://svn.apache.org/viewvc?view=revision&revision=927243, see
+  # http://svn.haxx.se/dev/archive-2010-04/0475.shtml, this is failing
+  # again with this mergeinfo:
+  #
+  #   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 = open(os.path.join(os.path.dirname(sys.argv[0]),
                                 'svnadmin_tests_data',
@@ -1213,14 +1236,14 @@ 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,
               SkipUnless(verify_with_invalid_revprops,
                          svntest.main.is_fs_type_fsfs),
-              drop_mergeinfo_outside_of_dump_stream,
-              XFail(dont_drop_valid_mergeinfo_during_incremental_loads),
+              XFail(drop_mergeinfo_outside_of_dump_stream),
+              dont_drop_valid_mergeinfo_during_incremental_loads,
              ]
 
 if __name__ == '__main__':


Reply via email to