Noorul Islam K M wrote on Thu, Feb 03, 2011 at 14:15:48 +0530: > > Attached is the patch to fix issue #3792. Please review and let me know > your comments. > > Log > [[[ > > Fix for issue #3792. Make svn info to display information for > excluded items. >
s/to// > * subversion/include/private/svn_wc_private.h, > subversion/libsvn_wc/node.c > (svn_wc__node_depth_is_exclude): New helper function to find > whether the node is set with depth 'exclude'. > > * subversion/libsvn_client/info.c > (crawl_entries): Build minimal information if the node has > depth set as 'exclude'. > > * subversion/svn/info-cmd.c > (print_info): Print depth as 'exclude' for nodes having depth > exclude. Hide node kind while printing exclude infomation. > It's okay to print the node kind if it's known. (and it probably is) > * subversion/tests/cmdline/depth_tests.py > (test_list): Remove XFail marker from info_excluded test. > > Patch by: Noorul Islam K M <noorul{_AT_}collab.net> > ]]] > > Index: subversion/tests/cmdline/depth_tests.py > =================================================================== > --- subversion/tests/cmdline/depth_tests.py (revision 1066732) > +++ subversion/tests/cmdline/depth_tests.py (working copy) > @@ -2841,7 +2841,7 @@ > excluded_path_misc_operation, > excluded_receive_remote_removal, > exclude_keeps_hidden_entries, > - XFail(info_excluded, issues=3792), > + info_excluded, > tree_conflicts_resolved_depth_empty, > tree_conflicts_resolved_depth_files, > tree_conflicts_resolved_depth_immediates, > Index: subversion/svn/info-cmd.c > =================================================================== > --- subversion/svn/info-cmd.c (revision 1066732) > +++ subversion/svn/info-cmd.c (working copy) > @@ -291,7 +291,8 @@ > break; > > case svn_node_none: > - SVN_ERR(svn_cmdline_printf(pool, _("Node Kind: none\n"))); > + if (info->depth != svn_depth_exclude) > + SVN_ERR(svn_cmdline_printf(pool, _("Node Kind: none\n"))); That doesn't look right. Does the DB know the node kind of an excluded node? If so, it should print it; if not, it should return "unknown". > break; > > case svn_node_unknown: > @@ -363,6 +364,9 @@ > SVN_ERR(svn_cmdline_printf(pool, _("Copied From Rev: %ld\n"), > info->copyfrom_rev)); > } > + > + if (info->depth == svn_depth_exclude) > + SVN_ERR(svn_cmdline_printf(pool, _("Depth: exclude\n"))); > I know that there is already some other place in the code that prints the Depth: line, why didn't you reuse that place? > if (info->last_changed_author) > SVN_ERR(svn_cmdline_printf(pool, _("Last Changed Author: %s\n"), > Index: subversion/include/private/svn_wc_private.h > =================================================================== > --- subversion/include/private/svn_wc_private.h (revision 1066732) > +++ subversion/include/private/svn_wc_private.h (working copy) > @@ -759,6 +759,15 @@ > apr_pool_t *result_pool, > apr_pool_t *scratch_pool); > > +/** > + * Find whether @a local_abspath is set with depth exclude using @a wc_ctx. > + */ > +svn_error_t * > +svn_wc__node_depth_is_exclude(svn_boolean_t *exclude, > + svn_wc_context_t *wc_ctx, > + const char *local_abspath, > + apr_pool_t *scratch_pool); > + > #ifdef __cplusplus > } > #endif /* __cplusplus */ > Index: subversion/libsvn_wc/node.c > =================================================================== > --- subversion/libsvn_wc/node.c (revision 1066732) > +++ subversion/libsvn_wc/node.c (working copy) > @@ -247,6 +247,30 @@ > } > > svn_error_t * > +svn_wc__node_depth_is_exclude(svn_boolean_t *exclude, > + svn_wc_context_t *wc_ctx, > + const char *local_abspath, > + apr_pool_t *scratch_pool) > +{ > + svn_wc__db_status_t status; > + svn_error_t *err; > + > + *exclude = FALSE; > + > + err = svn_wc__db_read_info(&status, NULL, NULL, NULL, NULL, NULL, NULL, > + NULL, NULL, NULL, NULL, NULL, NULL, NULL, > + NULL, NULL, NULL, NULL, NULL, NULL, NULL, > + NULL, NULL, NULL, > + wc_ctx->db, local_abspath, scratch_pool, > + scratch_pool); > + > + if ((! err) && (status == svn_wc__db_status_excluded)) > + *exclude = TRUE; > + > + return svn_error_return(err); Haven't reviewed this part, but I'll have to do so before committing. > +} > + > +svn_error_t * > svn_wc__node_get_depth(svn_depth_t *depth, > svn_wc_context_t *wc_ctx, > const char *local_abspath, > Index: subversion/libsvn_client/info.c > =================================================================== > --- subversion/libsvn_client/info.c (revision 1066732) > +++ subversion/libsvn_client/info.c (working copy) > @@ -405,20 +405,31 @@ > /* Check for a tree conflict on the root node of the info, and if there > is one, send a minimal info struct. */ > const svn_wc_conflict_description2_t *tree_conflict; > + svn_boolean_t exclude = FALSE; > You don't need to (and shouldn't) initialize this variable. > SVN_ERR(svn_wc__get_tree_conflict(&tree_conflict, ctx->wc_ctx, > local_abspath, pool, pool)); > > - if (tree_conflict) > + /* Check whether depth of the node is set as exclude. */ > + if (! tree_conflict) > + SVN_ERR(svn_wc__node_depth_is_exclude(&exclude, ctx->wc_ctx, > + local_abspath, pool)); > + > + if (tree_conflict || exclude) > { > svn_info_t *info; > svn_error_clear(err); > > SVN_ERR(build_info_for_unversioned(&info, pool)); > - info->tree_conflict = svn_wc__cd2_to_cd(tree_conflict, pool); > > + if (tree_conflict) > + info->tree_conflict = svn_wc__cd2_to_cd(tree_conflict, pool); > + else > + info->depth = svn_depth_exclude; s/else/if (exclude)/, please. > + > SVN_ERR(svn_wc__node_get_repos_info(&(info->repos_root_URL), > - NULL, > + exclude ? > + &(info->repos_UUID) : NULL, Why? > ctx->wc_ctx, > local_abspath, FALSE, FALSE, > pool, pool));