Author: ivan Date: Fri Jul 19 18:07:17 2013 New Revision: 1504951 URL: http://svn.apache.org/r1504951 Log: Make svnadmin load really atomic by adding option to svn_fs_commit_txn2 to disable updating 'svn:date' revision property after committing transaction.
* subversion/include/svn_fs.h (svn_fs_commit_txn2): New. Revv svn_fs_commit_txn() and add new SET_TIMESTAMP argument to disable setting 'svn:date' in FS layer. * subversion/libsvn_fs/fs-loader.h * subversion/libsvn_fs/fs-loader.c (svn_fs_commit_txn2): Revv svn_fs_commit_txn() and pass set_timestamp argument to commit vtable method. (svn_fs_commit_txn): Call svn_fs_commit_txn2() with SET_TIMESTAMP=TRUE. * subversion/libsvn_fs_base/dag.h * subversion/libsvn_fs_base/dag.c (svn_fs_base__dag_commit_txn): Add SET_TIMESTAMP argument and update 'svn:date' revision property only if SET_TIMESTAMP is non-zero. * subversion/libsvn_fs_base/tree.c * subversion/libsvn_fs_base/tree.h (commit_args): Add SET_TIMESTAMP member. (txn_body_commit): Pass SET_TIMESTAMP to svn_fs_base__dag_commit_txn(). (svn_fs_base__commit_txn): Add SET_TIMESTAMP argument and store it in commit baton. * subversion/libsvn_fs_fs/fs_fs.h * subversion/libsvn_fs_fs/fs_fs.c (commit_baton): Add SET_TIMESTAMP member. (commit_body): Update 'svn:date' revision property only if SET_TIMESTAMP is non-zero. (svn_fs_fs__commit): Add SET_TIMESTAMP argument and store it in commit baton. * subversion/libsvn_fs_fs/tree.c * subversion/libsvn_fs_fs/tree.h (svn_fs_fs__commit_txn): Add SET_TIMESTAMP argument and pass it to svn_fs_fs__commit(). * subversion/libsvn_repos/load-fs-vtable.c (close_revision): Use svn_fs_commit_txn2() and do not fix-up 'svn:date' property after commit. Modified: subversion/trunk/subversion/include/svn_fs.h subversion/trunk/subversion/libsvn_fs/fs-loader.c subversion/trunk/subversion/libsvn_fs/fs-loader.h subversion/trunk/subversion/libsvn_fs_base/dag.c subversion/trunk/subversion/libsvn_fs_base/dag.h subversion/trunk/subversion/libsvn_fs_base/tree.c subversion/trunk/subversion/libsvn_fs_base/tree.h subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h subversion/trunk/subversion/libsvn_fs_fs/tree.c subversion/trunk/subversion/libsvn_fs_fs/tree.h subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c Modified: subversion/trunk/subversion/include/svn_fs.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_fs.h?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/include/svn_fs.h (original) +++ subversion/trunk/subversion/include/svn_fs.h Fri Jul 19 18:07:17 2013 @@ -45,7 +45,8 @@ extern "C" { #endif /* __cplusplus */ - + + /** * Get libsvn_fs version information. * @@ -175,7 +176,8 @@ typedef struct svn_fs_t svn_fs_t; */ svn_error_t * svn_fs_initialize(apr_pool_t *pool); - + + /** The type of a warning callback function. @a baton is the value specified * in the call to svn_fs_set_warning_func(); the filesystem passes it through @@ -201,7 +203,8 @@ svn_fs_set_warning_func(svn_fs_t *fs, svn_fs_warning_callback_t warning, void *warning_baton); - + + /** * Create a new, empty Subversion filesystem, stored in the directory @@ -635,7 +638,8 @@ svn_fs_berkeley_recover(const char *path /** @} */ - + + /** Filesystem Access Contexts. * * @since New in 1.2. @@ -722,7 +726,8 @@ svn_fs_access_add_lock_token(svn_fs_acce /** @} */ - + + /** Filesystem Nodes and Node-Revisions. * * In a Subversion filesystem, a `node' corresponds roughly to an @@ -813,7 +818,8 @@ svn_fs_unparse_id(const svn_fs_id_t *id, /** @} */ - + + /** Filesystem Transactions. * * To make a change to a Subversion filesystem: @@ -989,6 +995,9 @@ svn_fs_begin_txn(svn_fs_txn_t **txn_p, * the conflict in @a txn, allocated within @a pool; * otherwise, set @a *conflict_p to NULL. * + * If @ set_timestamp is non-zero 'svn:date' revision property will be updated + * to current time to ensure that svn:date revprops remain ordered. + * * If the commit succeeds, @a txn is invalid. * * If the commit fails for any reason, @a *new_rev is an invalid @@ -1020,6 +1029,19 @@ svn_fs_begin_txn(svn_fs_txn_t **txn_p, * ### conflict string * ### *new_rev will always be initialized to SVN_INVALID_REVNUM, or * ### to a valid, committed revision number + * + * @since New in 1.9. + */ +svn_error_t * +svn_fs_commit_txn2(const char **conflict_p, + svn_revnum_t *new_rev, + svn_fs_txn_t *txn, + svn_boolean_t set_timestamp, + apr_pool_t *pool); + +/* + * Same as svn_fs_commit_txn2(), but with @a set_timestamp + * always set to @c TRUE. */ svn_error_t * svn_fs_commit_txn(const char **conflict_p, @@ -1146,7 +1168,8 @@ svn_fs_change_txn_props(svn_fs_txn_t *tx /** @} */ - + + /** Roots. * * An #svn_fs_root_t object represents the root directory of some @@ -1230,7 +1253,8 @@ svn_fs_revision_root_revision(svn_fs_roo /** @} */ - + + /** Directory entry names and directory paths. * * Here are the rules for directory entry names, and directory paths: @@ -1258,7 +1282,8 @@ svn_fs_revision_root_revision(svn_fs_roo */ - + + /** The kind of change that occurred on the path. */ typedef enum svn_fs_path_change_kind_t { @@ -1387,7 +1412,8 @@ svn_fs_paths_changed(apr_hash_t **change /** @} */ - + + /* Operations appropriate to all kinds of nodes. */ /** Set @a *kind_p to the type of node present at @a path under @a @@ -1764,7 +1790,8 @@ svn_fs_merge(const char **conflict_p, apr_pool_t *pool); - + + /* Directories. */ @@ -1869,7 +1896,8 @@ svn_fs_revision_link(svn_fs_root_t *from svn_fs_root_t *to_root, const char *path, apr_pool_t *pool); - + + /* Files. */ /** Set @a *length_p to the length of the file @a path in @a root, in bytes. @@ -2103,7 +2131,8 @@ svn_fs_contents_changed(svn_boolean_t *c apr_pool_t *pool); - + + /* Filesystem revisions. */ @@ -2236,7 +2265,8 @@ svn_fs_change_rev_prop(svn_fs_t *fs, apr_pool_t *pool); - + + /* Computing deltas. */ @@ -2258,7 +2288,8 @@ svn_fs_get_file_delta_stream(svn_txdelta apr_pool_t *pool); - + + /* UUID manipulation. */ /** Populate @a *uuid with the UUID associated with @a fs. Allocate @@ -2278,13 +2309,15 @@ svn_fs_set_uuid(svn_fs_t *fs, const char *uuid, apr_pool_t *pool); - + + /* Non-historical properties. */ /* [[Yes, do tell.]] */ - + + /** @defgroup svn_fs_locks Filesystem locks * @{ * @since New in 1.2. */ Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.c?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs/fs-loader.c (original) +++ subversion/trunk/subversion/libsvn_fs/fs-loader.c Fri Jul 19 18:07:17 2013 @@ -787,8 +787,9 @@ svn_fs_begin_txn(svn_fs_txn_t **txn_p, s svn_error_t * -svn_fs_commit_txn(const char **conflict_p, svn_revnum_t *new_rev, - svn_fs_txn_t *txn, apr_pool_t *pool) +svn_fs_commit_txn2(const char **conflict_p, svn_revnum_t *new_rev, + svn_fs_txn_t *txn, svn_boolean_t set_timestamp, + apr_pool_t *pool) { svn_error_t *err; @@ -796,7 +797,7 @@ svn_fs_commit_txn(const char **conflict_ if (conflict_p) *conflict_p = NULL; - err = txn->vtable->commit(conflict_p, new_rev, txn, pool); + err = txn->vtable->commit(conflict_p, new_rev, txn, set_timestamp, pool); #ifdef SVN_DEBUG /* Check postconditions. */ @@ -829,6 +830,12 @@ svn_fs_commit_txn(const char **conflict_ return SVN_NO_ERROR; } +svn_error_t * +svn_fs_commit_txn(const char **conflict_p, svn_revnum_t *new_rev, + svn_fs_txn_t *txn, apr_pool_t *pool) +{ + return svn_fs_commit_txn2(conflict_p, new_rev, txn, TRUE, pool); +} svn_error_t * svn_fs_abort_txn(svn_fs_txn_t *txn, apr_pool_t *pool) Modified: subversion/trunk/subversion/libsvn_fs/fs-loader.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs/fs-loader.h?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs/fs-loader.h (original) +++ subversion/trunk/subversion/libsvn_fs/fs-loader.h Fri Jul 19 18:07:17 2013 @@ -248,7 +248,8 @@ typedef struct fs_vtable_t typedef struct txn_vtable_t { svn_error_t *(*commit)(const char **conflict_p, svn_revnum_t *new_rev, - svn_fs_txn_t *txn, apr_pool_t *pool); + svn_fs_txn_t *txn, svn_boolean_t set_timestamp, + apr_pool_t *pool); svn_error_t *(*abort)(svn_fs_txn_t *txn, apr_pool_t *pool); svn_error_t *(*get_prop)(svn_string_t **value_p, svn_fs_txn_t *txn, const char *propname, apr_pool_t *pool); Modified: subversion/trunk/subversion/libsvn_fs_base/dag.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/dag.c?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_base/dag.c (original) +++ subversion/trunk/subversion/libsvn_fs_base/dag.c Fri Jul 19 18:07:17 2013 @@ -59,7 +59,8 @@ #include "svn_private_config.h" - + + /* Initializing a filesystem. */ struct dag_node_t @@ -90,7 +91,8 @@ struct dag_node_t }; - + + /* Trivial helper/accessor functions. */ svn_node_kind_t svn_fs_base__dag_node_kind(dag_node_t *node) { @@ -265,7 +267,8 @@ svn_fs_base__dag_init_fs(svn_fs_t *fs) } - + + /*** Directory node functions ***/ /* Some of these are helpers for functions outside this section. */ @@ -538,7 +541,8 @@ svn_fs_base__dag_set_entry(dag_node_t *n } - + + /*** Proplists. ***/ svn_error_t * @@ -669,7 +673,8 @@ svn_fs_base__dag_set_proplist(dag_node_t } - + + /*** Roots. ***/ svn_error_t * @@ -1450,7 +1455,8 @@ svn_fs_base__dag_copy(dag_node_t *to_nod } - + + /*** Deltification ***/ /* Maybe change the representation identified by TARGET_REP_KEY to be @@ -1569,17 +1575,18 @@ svn_fs_base__dag_index_checksums(dag_nod } - + + /*** Committing ***/ svn_error_t * svn_fs_base__dag_commit_txn(svn_revnum_t *new_rev, svn_fs_txn_t *txn, trail_t *trail, + svn_boolean_t set_timestamp, apr_pool_t *pool) { revision_t revision; - svn_string_t date; apr_hash_t *txnprops; svn_fs_t *fs = txn->fs; const char *txn_id = txn->id; @@ -1605,15 +1612,22 @@ svn_fs_base__dag_commit_txn(svn_revnum_t SVN_ERR(svn_fs_base__txn_make_committed(fs, txn_id, *new_rev, trail, pool)); - /* Set a date on the commit. We wait until now to fetch the date, - so it's definitely newer than any previous revision's date. */ - date.data = svn_time_to_cstring(apr_time_now(), pool); - date.len = strlen(date.data); - return svn_fs_base__set_rev_prop(fs, *new_rev, SVN_PROP_REVISION_DATE, - NULL, &date, trail, pool); + if (set_timestamp) + { + /* Set a date on the commit if requested. We wait until now to fetch the + date, so it's definitely newer than any previous revision's date. */ + svn_string_t date; + date.data = svn_time_to_cstring(apr_time_now(), pool); + date.len = strlen(date.data); + SVN_ERR(svn_fs_base__set_rev_prop(fs, *new_rev, SVN_PROP_REVISION_DATE, + NULL, &date, trail, pool)); + } + + return SVN_NO_ERROR; } - + + /*** Comparison. ***/ svn_error_t * @@ -1657,7 +1671,8 @@ svn_fs_base__things_different(svn_boolea } - + + /*** Mergeinfo tracking stuff ***/ svn_error_t * Modified: subversion/trunk/subversion/libsvn_fs_base/dag.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/dag.h?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_base/dag.h (original) +++ subversion/trunk/subversion/libsvn_fs_base/dag.h Fri Jul 19 18:07:17 2013 @@ -273,12 +273,16 @@ svn_error_t *svn_fs_base__dag_clone_root latest revision in TXN->FS. If the caller doesn't take care of this, you may lose people's work! + Update commit time to ensure that svn:date revprops remain ordered if + SET_TIMESTAMP is non-zero. + Do any necessary temporary allocation in a subpool of POOL. Consume temporary space at most proportional to the maximum depth of SVN_TXN's tree of mutable nodes. */ svn_error_t *svn_fs_base__dag_commit_txn(svn_revnum_t *new_rev, svn_fs_txn_t *txn, trail_t *trail, + svn_boolean_t set_timestamp, apr_pool_t *pool); Modified: subversion/trunk/subversion/libsvn_fs_base/tree.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/tree.c?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_base/tree.c (original) +++ subversion/trunk/subversion/libsvn_fs_base/tree.c Fri Jul 19 18:07:17 2013 @@ -2560,6 +2560,7 @@ struct commit_args { svn_fs_txn_t *txn; svn_revnum_t new_rev; + svn_boolean_t set_timestamp; }; @@ -2619,7 +2620,7 @@ txn_body_commit(void *baton, trail_t *tr /* Else, commit the txn. */ return svn_fs_base__dag_commit_txn(&(args->new_rev), txn, trail, - trail->pool); + args->set_timestamp, trail->pool); } @@ -2629,6 +2630,7 @@ svn_error_t * svn_fs_base__commit_txn(const char **conflict_p, svn_revnum_t *new_rev, svn_fs_txn_t *txn, + svn_boolean_t set_timestamp, apr_pool_t *pool) { /* How do commits work in Subversion? @@ -2732,6 +2734,7 @@ svn_fs_base__commit_txn(const char **con /* Try to commit. */ commit_args.txn = txn; + commit_args.set_timestamp = set_timestamp; err = svn_fs_base__retry_txn(fs, txn_body_commit, &commit_args, FALSE, subpool); if (err && (err->apr_err == SVN_ERR_FS_TXN_OUT_OF_DATE)) Modified: subversion/trunk/subversion/libsvn_fs_base/tree.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_base/tree.h?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_base/tree.h (original) +++ subversion/trunk/subversion/libsvn_fs_base/tree.h Fri Jul 19 18:07:17 2013 @@ -42,6 +42,7 @@ svn_error_t *svn_fs_base__deltify(svn_fs svn_error_t *svn_fs_base__commit_txn(const char **conflict_p, svn_revnum_t *new_rev, svn_fs_txn_t *txn, + svn_boolean_t set_timestamp, apr_pool_t *pool); svn_error_t *svn_fs_base__txn_root(svn_fs_root_t **root_p, svn_fs_txn_t *txn, Modified: subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original) +++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Fri Jul 19 18:07:17 2013 @@ -8492,6 +8492,7 @@ struct commit_baton { svn_revnum_t *new_rev_p; svn_fs_t *fs; svn_fs_txn_t *txn; + svn_boolean_t set_timestamp; apr_array_header_t *reps_to_cache; apr_hash_t *reps_hash; apr_pool_t *reps_pool; @@ -8517,7 +8518,6 @@ commit_body(void *baton, apr_pool_t *poo apr_hash_t *txnprops; apr_array_header_t *txnprop_list; svn_prop_t prop; - svn_string_t date; /* Get the current youngest revision. */ SVN_ERR(svn_fs_fs__youngest_rev(&old_rev, cb->fs, pool)); @@ -8638,12 +8638,18 @@ commit_body(void *baton, apr_pool_t *poo remove the transaction directory later. */ SVN_ERR(unlock_proto_rev(cb->fs, cb->txn->id, proto_file_lockcookie, pool)); - /* Update commit time to ensure that svn:date revprops remain ordered. */ - date.data = svn_time_to_cstring(apr_time_now(), pool); - date.len = strlen(date.data); + /* Update commit time to ensure that svn:date revprops remain ordered if + requested. */ + if (cb->set_timestamp) + { + svn_string_t date; + + date.data = svn_time_to_cstring(apr_time_now(), pool); + date.len = strlen(date.data); - SVN_ERR(svn_fs_fs__change_txn_prop(cb->txn, SVN_PROP_REVISION_DATE, - &date, pool)); + SVN_ERR(svn_fs_fs__change_txn_prop(cb->txn, SVN_PROP_REVISION_DATE, + &date, pool)); + } /* Move the revprops file into place. */ SVN_ERR_ASSERT(! is_packed_revprop(cb->fs, new_rev)); @@ -8697,6 +8703,7 @@ svn_error_t * svn_fs_fs__commit(svn_revnum_t *new_rev_p, svn_fs_t *fs, svn_fs_txn_t *txn, + svn_boolean_t set_timestamp, apr_pool_t *pool) { struct commit_baton cb; @@ -8705,6 +8712,7 @@ svn_fs_fs__commit(svn_revnum_t *new_rev_ cb.new_rev_p = new_rev_p; cb.fs = fs; cb.txn = txn; + cb.set_timestamp = set_timestamp; if (ffd->rep_sharing_allowed) { Modified: subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h (original) +++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h Fri Jul 19 18:07:17 2013 @@ -360,11 +360,13 @@ svn_error_t *svn_fs_fs__set_proplist(svn /* Commit the transaction TXN in filesystem FS and return its new revision number in *REV. If the transaction is out of date, return - the error SVN_ERR_FS_TXN_OUT_OF_DATE. Use POOL for temporary - allocations. */ + the error SVN_ERR_FS_TXN_OUT_OF_DATE. Update commit time to ensure that + svn:date revprops remain ordered if SET_TIMESTAMP is non-zero. Use POOL for + temporary allocations. */ svn_error_t *svn_fs_fs__commit(svn_revnum_t *new_rev_p, svn_fs_t *fs, svn_fs_txn_t *txn, + svn_boolean_t set_timestamp, apr_pool_t *pool); /* Return the next available copy_id in *COPY_ID for the transaction Modified: subversion/trunk/subversion/libsvn_fs_fs/tree.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/tree.c?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/tree.c (original) +++ subversion/trunk/subversion/libsvn_fs_fs/tree.c Fri Jul 19 18:07:17 2013 @@ -2001,6 +2001,7 @@ svn_error_t * svn_fs_fs__commit_txn(const char **conflict_p, svn_revnum_t *new_rev, svn_fs_txn_t *txn, + svn_boolean_t set_timestamp, apr_pool_t *pool) { /* How do commits work in Subversion? @@ -2097,7 +2098,7 @@ svn_fs_fs__commit_txn(const char **confl txn->base_rev = youngish_rev; /* Try to commit. */ - err = svn_fs_fs__commit(new_rev, fs, txn, iterpool); + err = svn_fs_fs__commit(new_rev, fs, txn, set_timestamp, iterpool); if (err && (err->apr_err == SVN_ERR_FS_TXN_OUT_OF_DATE)) { /* Did someone else finish committing a new revision while we Modified: subversion/trunk/subversion/libsvn_fs_fs/tree.h URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/tree.h?rev=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_fs_fs/tree.h (original) +++ subversion/trunk/subversion/libsvn_fs_fs/tree.h Fri Jul 19 18:07:17 2013 @@ -48,10 +48,12 @@ svn_error_t *svn_fs_fs__deltify(svn_fs_t /* Commit the transaction TXN as a new revision. Return the new revision in *NEW_REV. If the transaction conflicts with other changes return SVN_ERR_FS_CONFLICT and set *CONFLICT_P to a string - that details the cause of the conflict. Perform temporary - allocations in POOL. */ + that details the cause of the conflict. + Update commit time to ensure that svn:date revprops remain ordered if + SET_TIMESTAMP is non-zero. Perform temporary allocations in POOL. */ svn_error_t *svn_fs_fs__commit_txn(const char **conflict_p, svn_revnum_t *new_rev, svn_fs_txn_t *txn, + svn_boolean_t set_timestamp, apr_pool_t *pool); /* Set ROOT_P to the root directory of transaction TXN. Allocate the 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=1504951&r1=1504950&r2=1504951&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c (original) +++ subversion/trunk/subversion/libsvn_repos/load-fs-vtable.c Fri Jul 19 18:07:17 2013 @@ -926,6 +926,15 @@ close_revision(void *baton) if (rb->skipped || (rb->rev <= 0)) return SVN_NO_ERROR; + if (!rb->datestamp) + { + /* Remove 'svn:date' revision property that was set by FS layer when TXN + created if source dump doesn't have 'svn:date' property. */ + svn_prop_t *prop = &APR_ARRAY_PUSH(rb->revprops, svn_prop_t); + prop->name = SVN_PROP_REVISION_DATE; + prop->value = NULL; + } + /* Apply revision property changes. */ if (rb->pb->validate_props) SVN_ERR(svn_repos_fs_change_txn_props(rb->txn, rb->revprops, rb->pool)); @@ -959,7 +968,8 @@ close_revision(void *baton) } /* Commit. */ - err = svn_fs_commit_txn(&conflict_msg, &committed_rev, rb->txn, rb->pool); + err = svn_fs_commit_txn2(&conflict_msg, &committed_rev, rb->txn, FALSE, + rb->pool); if (SVN_IS_VALID_REVNUM(committed_rev)) { if (err) @@ -1017,15 +1027,6 @@ close_revision(void *baton) /* Deltify the predecessors of paths changed in this revision. */ SVN_ERR(svn_fs_deltify_revision(pb->fs, committed_rev, rb->pool)); - /* Grrr, svn_fs_commit_txn rewrites the datestamp property to the - current clock-time. We don't want that, we want to preserve - history exactly. Good thing revision props aren't versioned! - Note that if rb->datestamp is NULL, that's fine -- if the dump - data doesn't carry a datestamp, we want to preserve that fact in - the load. */ - SVN_ERR(change_rev_prop(pb->repos, committed_rev, SVN_PROP_REVISION_DATE, - rb->datestamp, pb->validate_props, rb->pool)); - if (pb->notify_func) { pb->notify->action = svn_repos_notify_load_txn_committed;