Stefan Sperling <stsp_at_elego.de> writes:
> On Thu, Apr 07, 2011 at 02:46:45PM +0530, Noorul Islam K M wrote:
>
>> Daniel Shahaf <d.s_at_daniel.shahaf.name> writes:
>>
>> > Noorul Islam K M wrote on Thu, Apr 07, 2011 at 10:17:49 +0530:
>> >
>> >> Index: subversion/libsvn_client/info.c
>> >> ===================================================================
>> >> --- subversion/libsvn_client/info.c (revision 1089373)
>> >> +++ subversion/libsvn_client/info.c (working copy)
>> >> @@ -408,13 +408,17 @@
>> >> {
>> >> struct found_entry_baton fe_baton;
>> >> svn_error_t *err;
>> >> + svn_boolean_t show_exclude = FALSE;
>> >>
>> >> fe_baton.changelist_hash = changelist_hash;
>> >> fe_baton.receiver = receiver;
>> >> fe_baton.receiver_baton = receiver_baton;
>> >> fe_baton.wc_ctx = ctx->wc_ctx;
>> >>
>> >> - err = svn_wc__node_walk_children(ctx->wc_ctx, local_abspath, FALSE,
>> >> + if (depth == SVN_DEPTH_INFINITY_OR_FILES(TRUE))
>> >> + show_exclude = TRUE;
>> >> +
>> >> + err = svn_wc__node_walk_children(ctx->wc_ctx, local_abspath, show_exclude,
>> >> info_found_node_callback, &fe_baton, depth,
>> >> ctx->cancel_func, ctx->cancel_baton, pool);
>> >>
>> >
>> > Suppose that A/ and 'iota' are excluded. 'svn info --depth=immediates
>> > wc_dir' should also show information about both A/ and 'iota', but with
>> > your patch applied it doesn't show information for A/.
>> >
>> > (I didn't test 'iota' and testing the equivalent --depth=files recipe.)
>>
>> The requirement is to show info for excludes if '-R' is passed. Doesn't
>> that mean you have to use --depth=infinity?
>
> -R implies --depth=infinity.
> It means "unlimited recursion". It is the old way of saying "show me
> everything beneath this directory". before --depth was introduced.
>
> But with --depth, it's possible to specify how deep the recursion should be,
> to a limited extent. Say I want to see status output only for the current
> directory and its direct children. I can use --depth=immediates for that.
>
> I think --depth was initially conceived for checkout and update to control
> sparse working copies. Then it ended up being used also to replace the -R
> and -N switches of other subcommands (-N being --depth=empty).
>
> So, yes, please show exluded status also for other depth values.
> E.g. if I ask for the status of an exluded item with --depth=empty,
> I'd expect to be told that this item is excluded.
>
> Some examples:
>
> No matter whether ./foo is a file or directory, after this command...
>
> $ svn up --set-depth=exclude foo
>
> ... these commands should produce equal output:
> $ svn st foo
> $ svn st --depth=empty foo
> $ svn st --depth=immediates foo
> $ svn st --depth=infinity foo
> $ svn st --depth=files foo
>
> And these should show the same information for foo (among information
> about other items in the current directory):
>
> $ svn st
> $ svn st --depth=immediates
>
> and this also, but only if foo is a file:
>
> $ svn st --depth=files foo
>
> While this should show no information about foo:
>
> $ svn st --depth=empty
Stefan,
Please find attached the updated patch. I covered all the cases above in
the test.
Log
[[[
Fix for issue 3787. Make 'svn info --depth' variants display minimal
information about nodes with depth exclude in the tree.
* subversion/libsvn_client/info.c
(crawl_entries): Pass TRUE to svn_wc__node_walk_children() as
show_hidden parameter value.
* subversion/tests/cmdline/depth_tests.py
(info_show_exclude): New test.
(test_list): Run it.
Patch by: Noorul Islam K M <noorul{_AT_}collab.net>
]]]
Thanks and Regards
Noorul
Index: subversion/tests/cmdline/depth_tests.py
===================================================================
--- subversion/tests/cmdline/depth_tests.py (revision 1142678)
+++ subversion/tests/cmdline/depth_tests.py (working copy)
@@ -2815,7 +2815,50 @@
None, None, None, None, None, False,
'--parents', omega_path)
+@Issue(3787)
+def info_show_exclude(sbox):
+ "tests 'info --depth' variants on excluded node"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ A_path = os.path.join(wc_dir, 'A')
+ iota = os.path.join(wc_dir, 'iota')
+ svntest.main.run_svn(None, 'up', '--set-depth', 'exclude', A_path)
+ wc_uuid = svntest.actions.get_wc_uuid(wc_dir)
+
+ expected_info = []
+ expected_info = [{
+ 'Path' : '.',
+ 'Repository Root' : sbox.repo_url,
+ 'Repository UUID' : wc_uuid,
+ }]
+
+ svntest.actions.run_and_verify_info(expected_info, '--depth', 'empty',
+ wc_dir)
+
+ expected_info = [{
+ 'Path' : 'A',
+ 'Repository Root' : sbox.repo_url,
+ 'Repository UUID' : wc_uuid,
+ 'Depth' : 'exclude',
+ }]
+
+ svntest.actions.run_and_verify_info(expected_info, '--depth',
+ 'empty', A_path)
+ svntest.actions.run_and_verify_info(expected_info, '--depth',
+ 'infinity', A_path)
+ svntest.actions.run_and_verify_info(expected_info, '--depth',
+ 'immediates', A_path)
+
+ expected_info = [{
+ 'Path' : re.escape("iota"),
+ 'Repository Root' : sbox.repo_url,
+ 'Repository UUID' : wc_uuid,
+ }]
+ svntest.main.run_svn(None, 'up', '--set-depth', 'exclude', iota)
+ svntest.actions.run_and_verify_info(expected_info, '--depth', 'files', iota)
+
#----------------------------------------------------------------------
# list all tests here, starting with None:
test_list = [ None,
@@ -2862,6 +2905,7 @@
update_excluded_path_sticky_depths,
update_depth_empty_root_of_infinite_children,
sparse_update_with_dash_dash_parents,
+ info_show_exclude,
]
if __name__ == "__main__":
Index: subversion/libsvn_wc/info.c
===================================================================
--- subversion/libsvn_wc/info.c (revision 1142678)
+++ subversion/libsvn_wc/info.c (working copy)
@@ -424,7 +424,7 @@
}
err = svn_wc__internal_walk_children(wc_ctx->db, local_abspath,
- FALSE /* show_hidden */,
+ TRUE,
changelist_filter,
info_found_node_callback,
&fe_baton, depth,
Received on 2011-07-04 18:05:25 CEST