Stefan Sperling <s...@elego.de> writes: > On Thu, Apr 07, 2011 at 02:46:45PM +0530, Noorul Islam K M wrote: > >> Daniel Shahaf <d...@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,