Author: cmpilato Date: Tue Jul 17 14:26:16 2012 New Revision: 1362508 URL: http://svn.apache.org/viewvc?rev=1362508&view=rev Log: Stop whining about invalid base revisions when users request difference-type information on r0 (which is a valid revision, but by definition carries no "changes").
* subversion/svnlook/main.c (get_base_rev): New helper function. (do_dirs_changed, do_changed, do_diff): Now use get_base_rev() to fetch the base revision. If there's no base revision, exit without further action. Modified: subversion/trunk/subversion/svnlook/main.c Modified: subversion/trunk/subversion/svnlook/main.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnlook/main.c?rev=1362508&r1=1362507&r2=1362508&view=diff ============================================================================== --- subversion/trunk/subversion/svnlook/main.c (original) +++ subversion/trunk/subversion/svnlook/main.c Tue Jul 17 14:26:16 2012 @@ -1282,6 +1282,30 @@ print_tree(svn_fs_root_t *root, } +/* Set *BASE_REV to the revision on which the target root specified in + C is based, or to SVN_INVALID_REVNUM when C represents "revision + 0" (because that revision isn't based on another revision). */ +static svn_error_t * +get_base_rev(svn_revnum_t *base_rev, svnlook_ctxt_t *c, apr_pool_t *pool) +{ + if (c->is_revision) + { + *base_rev = c->rev_id - 1; + } + else + { + *base_rev = svn_fs_txn_base_revision(c->txn); + + if (! SVN_IS_VALID_REVNUM(*base_rev)) + return svn_error_createf + (SVN_ERR_FS_NO_SUCH_REVISION, NULL, + _("Transaction '%s' is not based on a revision; how odd"), + c->txn_name); + } + return SVN_NO_ERROR; +} + + /*** Subcommand handlers. ***/ @@ -1388,16 +1412,9 @@ do_dirs_changed(svnlook_ctxt_t *c, apr_p svn_repos_node_t *tree; SVN_ERR(get_root(&root, c, pool)); - if (c->is_revision) - base_rev_id = c->rev_id - 1; - else - base_rev_id = svn_fs_txn_base_revision(c->txn); - - if (! SVN_IS_VALID_REVNUM(base_rev_id)) - return svn_error_createf - (SVN_ERR_FS_NO_SUCH_REVISION, NULL, - _("Transaction '%s' is not based on a revision; how odd"), - c->txn_name); + SVN_ERR(get_base_rev(&base_rev_id, c, pool)); + if (base_rev_id == SVN_INVALID_REVNUM) + return SVN_NO_ERROR; SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id, pool)); if (tree) @@ -1493,16 +1510,9 @@ do_changed(svnlook_ctxt_t *c, apr_pool_t svn_repos_node_t *tree; SVN_ERR(get_root(&root, c, pool)); - if (c->is_revision) - base_rev_id = c->rev_id - 1; - else - base_rev_id = svn_fs_txn_base_revision(c->txn); - - if (! SVN_IS_VALID_REVNUM(base_rev_id)) - return svn_error_createf - (SVN_ERR_FS_NO_SUCH_REVISION, NULL, - _("Transaction '%s' is not based on a revision; how odd"), - c->txn_name); + SVN_ERR(get_base_rev(&base_rev_id, c, pool)); + if (base_rev_id == SVN_INVALID_REVNUM) + return SVN_NO_ERROR; SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id, pool)); if (tree) @@ -1521,16 +1531,9 @@ do_diff(svnlook_ctxt_t *c, apr_pool_t *p svn_repos_node_t *tree; SVN_ERR(get_root(&root, c, pool)); - if (c->is_revision) - base_rev_id = c->rev_id - 1; - else - base_rev_id = svn_fs_txn_base_revision(c->txn); - - if (! SVN_IS_VALID_REVNUM(base_rev_id)) - return svn_error_createf - (SVN_ERR_FS_NO_SUCH_REVISION, NULL, - _("Transaction '%s' is not based on a revision; how odd"), - c->txn_name); + SVN_ERR(get_base_rev(&base_rev_id, c, pool)); + if (base_rev_id == SVN_INVALID_REVNUM) + return SVN_NO_ERROR; SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id, pool)); if (tree)