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);
>  
>  
> 
> 

Reply via email to