I think this fix is wrong. svn_fs_fs__read_noderev() should return the parsed noderev as is --- if it's a revision file and the noderev contains an is-fresh-txn-root field, then it needs to reflect that.
stef...@apache.org wrote on Thu, Sep 06, 2012 at 23:52:17 -0000: > Author: stefan2 > Date: Thu Sep 6 23:52:16 2012 > New Revision: 1381808 > > URL: http://svn.apache.org/viewvc?rev=1381808&view=rev > Log: > Address issue #4031 by ignoring the is-fresh-txn-root flag when > we read from committed revisions. > > Note: This does not fix the root cause but fixed svnadmin verify > for existing repositories that contain empty revisions. > > * subversion/libsvn_fs_fs/fs_fs.h > (svn_fs_fs__read_noderev): add allow_for_txn_roots parameter > * subversion/libsvn_fs_fs/fs_fs.c > (svn_fs_fs__read_noderev): adapt implementation > (get_node_revision_body): adapt caller > > Modified: > subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c > subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h > > 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=1381808&r1=1381807&r2=1381808&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c (original) > +++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.c Thu Sep 6 23:52:16 2012 > @@ -2284,6 +2284,7 @@ get_node_revision_body(node_revision_t * > SVN_ERR(svn_fs_fs__read_noderev(noderev_p, > svn_stream_from_aprfile2(revision_file, > FALSE, > pool), > + svn_fs_fs__id_txn_id(id) != NULL, > pool)); > > /* The noderev is not in cache, yet. Add it, if caching has been enabled. > */ > @@ -2293,6 +2294,7 @@ get_node_revision_body(node_revision_t * > svn_error_t * > svn_fs_fs__read_noderev(node_revision_t **noderev_p, > svn_stream_t *stream, > + svn_boolean_t allow_for_txn_roots, > apr_pool_t *pool) > { > apr_hash_t *headers; > @@ -2423,7 +2425,9 @@ svn_fs_fs__read_noderev(node_revision_t > } > > /* Get whether this is a fresh txn root. */ > - value = apr_hash_get(headers, HEADER_FRESHTXNRT, APR_HASH_KEY_STRING); > + value = allow_for_txn_roots > + ? apr_hash_get(headers, HEADER_FRESHTXNRT, APR_HASH_KEY_STRING) > + : NULL; > noderev->is_fresh_txn_root = (value != NULL); > > /* Get the mergeinfo count. */ > > 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=1381808&r1=1381807&r2=1381808&view=diff > ============================================================================== > --- subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h (original) > +++ subversion/trunk/subversion/libsvn_fs_fs/fs_fs.h Thu Sep 6 23:52:16 2012 > @@ -94,11 +94,13 @@ svn_fs_fs__write_noderev(svn_stream_t *o > apr_pool_t *pool); > > /* Read a node-revision from STREAM. Set *NODEREV to the new structure, > - allocated in POOL. */ > + allocated in POOL. If ALLOW_FOR_TXN_ROOTS is FALSE, the is-fresh-txn-root > + flag will be ignored. */ > /* ### Currently used only by fs_fs.c */ > svn_error_t * > svn_fs_fs__read_noderev(node_revision_t **noderev, > svn_stream_t *stream, > + svn_boolean_t allow_for_txn_roots, > apr_pool_t *pool); > > > >