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));
Received on 2011-02-04 02:59:27 CET