Author: ivan
Date: Fri Feb 20 12:11:26 2015
New Revision: 1661103
URL: http://svn.apache.org/r1661103
Log:
Fix issue 4563 (load does not delete svn:date from r0).
* subversion/libsvn_repos/load-fs-vtable.c
(set_revision_property): Collect property changes for all revisions.
(close_revision): Move special handling for r0 here from
set_revision_property(). Calculate difference between current revision
properties for r0 and collected from dump.
* subversion/tests/cmdline/svnadmin_tests.py
(load_no_svndate_r0): Remove XFail marker.
Modified:
subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c
subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
Modified: subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c?rev=1661103&r1=1661102&r2=1661103&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c (original)
+++ subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c Fri Feb 20
12:11:26 2015
@@ -726,6 +726,7 @@ set_revision_property(void *baton,
struct revision_baton *rb = baton;
struct parse_baton *pb = rb->pb;
svn_boolean_t is_date = strcmp(name, SVN_PROP_REVISION_DATE) == 0;
+ svn_prop_t *prop;
/* If we're skipping this revision, we're done here. */
if (rb->skipped)
@@ -735,32 +736,16 @@ set_revision_property(void *baton,
if (is_date && pb->ignore_dates)
return SVN_NO_ERROR;
- if (rb->rev > 0)
- {
- svn_prop_t *prop = &APR_ARRAY_PUSH(rb->revprops, svn_prop_t);
-
- /* Collect property changes to apply them in one FS call in
- close_revision. */
- prop->name = apr_pstrdup(rb->pool, name);
- prop->value = svn_string_dup(value, rb->pool);
-
- /* Remember any datestamp that passes through! (See comment in
- close_revision() below.) */
- if (is_date)
- rb->datestamp = svn_string_dup(value, rb->pool);
- }
- else if (rb->rev == 0)
- {
- /* Special case: set revision 0 properties when loading into an
- 'empty' filesystem. */
- svn_revnum_t youngest_rev;
-
- SVN_ERR(svn_fs_youngest_rev(&youngest_rev, pb->fs, rb->pool));
-
- if (youngest_rev == 0)
- SVN_ERR(change_rev_prop(pb->repos, 0, name, value,
- pb->validate_props, rb->pool));
- }
+ /* Collect property changes to apply them in one FS call in
+ close_revision. */
+ svn_prop_t *prop = &APR_ARRAY_PUSH(rb->revprops, svn_prop_t);
+ prop->name = apr_pstrdup(rb->pool, name);
+ prop->value = svn_string_dup(value, rb->pool);
+
+ /* Remember any datestamp that passes through! (See comment in
+ close_revision() below.) */
+ if (is_date)
+ rb->datestamp = svn_string_dup(value, rb->pool);
return SVN_NO_ERROR;
}
@@ -1018,11 +1003,41 @@ close_revision(void *baton)
const char *txn_name = NULL;
apr_hash_t *hooks_env;
- /* If we're skipping this revision or it has an invalid revision
- number, we're done here. */
- if (rb->skipped || (rb->rev <= 0))
+ /* If we're skipping this revision we're done here. */
+ if (rb->skipped)
return SVN_NO_ERROR;
+ if (rb->rev == 0)
+ {
+ /* Special case: set revision 0 properties when loading into an
+ 'empty' filesystem. */
+ svn_revnum_t youngest_rev;
+
+ SVN_ERR(svn_fs_youngest_rev(&youngest_rev, pb->fs, rb->pool));
+
+ if (youngest_rev == 0)
+ {
+ apr_hash_t *orig_props;
+ apr_hash_t *new_props;
+ apr_array_header_t *diff;
+ int i;
+
+ SVN_ERR(svn_fs_revision_proplist(&orig_props, pb->fs, 0, rb->pool));
+ new_props = svn_prop_array_to_hash(rb->revprops, rb->pool);
+ SVN_ERR(svn_prop_diffs(&diff, new_props, orig_props, rb->pool));
+
+ for (i = 0; i < diff->nelts; i++)
+ {
+ const svn_prop_t *prop = &APR_ARRAY_IDX(diff, i, svn_prop_t);
+
+ SVN_ERR(change_rev_prop(pb->repos, 0, prop->name, prop->value,
+ pb->validate_props, rb->pool));
+ }
+ }
+
+ return SVN_NO_ERROR;
+ }
+
/* If the dumpstream doesn't have an 'svn:date' property and we
aren't ignoring the dates in the dumpstream altogether, remove
any 'svn:date' revision property that was set by FS layer when
Modified: subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py?rev=1661103&r1=1661102&r2=1661103&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/svnadmin_tests.py Fri Feb 20
12:11:26 2015
@@ -2930,7 +2930,6 @@ def load_txdelta(sbox):
".*Verified revision *"):
raise svntest.Failure
-@XFail()
@Issues(4563)
def load_no_svndate_r0(sbox):
"load without svn:date on r0"