Noorul Islam K M <noo...@collab.net> writes: > "Bert Huijben" <b...@qqmail.nl> writes: > >>> -----Original Message----- >>> From: Noorul Islam K M [mailto:noo...@collab.net] >>> Sent: maandag 4 juli 2011 18:05 >>> To: Daniel Shahaf >>> Cc: Subversion >>> Subject: Re: [PATCH] Fix for issue 3787 >> >>> [[[ >>> >>> 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> >>> >>> ]]] >> >> (Please look in your irc log. We talked about this on IRC before) >> >> This simple fix makes that the code also gets not-present and server >> excluded nodes. But the info api (and the output) don't handle these cases. >> >> Switching the 'show hidden' flag requires more work in the callback to hide >> all unexpected hidden kinds. >> >> Bert > > In those cases build_info_for_entry() is throwing error. Is that not > good enough? > > <code> > else if (status == svn_wc__db_status_not_present > || status == svn_wc__db_status_server_excluded) > { > return svn_error_createf(SVN_ERR_WC_PATH_NOT_FOUND, NULL, > _("The node '%s' was not found."), > svn_dirent_local_style(local_abspath, > scratch_pool)); > } > </code> >
I updated the patch to filter out nodes with status svn_wc__db_status_not_present and svn_wc__db_status_server_excluded in the callback function itself. 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. (info_found_node_callback): Filter out nodes with status svn_wc__db_status_not_present and svn_wc__db_status_server_excluded. * 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 1142624) +++ 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 1142624) +++ subversion/libsvn_wc/info.c (working copy) @@ -332,7 +332,25 @@ { struct found_entry_baton *fe_baton = walk_baton; svn_wc__info2_t *info; + svn_wc__db_status_t status; + /* We are passing TRUE as value to show_hidden parameter of function + * svn_wc__internal_walk_children(). This will make this callback + * function to be called for nodes with status + * svn_wc__db_status_excluded, svn_wc__db_status_not_present and + * svn_wc__db_status_server_excluded. Since we need only excluded + * nodes, filter out others. + */ + SVN_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, NULL, NULL, NULL, + fe_baton->db, local_abspath, pool, pool)); + + if (status == svn_wc__db_status_not_present + || status == svn_wc__db_status_server_excluded) + return SVN_NO_ERROR; + SVN_ERR(build_info_for_entry(&info, fe_baton->db, local_abspath, kind, pool, pool)); @@ -424,7 +442,7 @@ } err = svn_wc__internal_walk_children(wc_ctx->db, local_abspath, - FALSE /* show_hidden */, + TRUE /* show_hidden */, changelist_filter, info_found_node_callback, &fe_baton, depth,