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__':