Hello,
I found a little bug with slashes in paths of the svn proplist output;
this patch would fix it.
[[[
Fix bug: svn proplist command prints slashes of incorrect style.
If the proplist command is invoked from a working copy, but it has to make a
request to a server, it will print paths in internal style.
Command to reproduce:
C:\> svn proplist -r HEAD svn-trunk
Properties on 'https:\\svn.apache.org\repos\asf\subversion\trunk':
svn:auto-props
svn:ignore
svn:mergeinfo
Expected output:
-Properties on 'https:\\svn.apache.org\repos\asf\subversion\trunk':
+Properties on 'https://svn.apache.org/repos/asf/subversion/trunk':
svn:auto-props
svn:ignore
svn:mergeinfo
* subversion/svn/proplist-cmd.c
(proplist_baton_t): Remove is_url field.
(proplist_receiver_xml, proplist_receiver): Use the svn_path_is_url()
instead of the field from a baton to determine if the path url or not.
(svn_cl__proplist): Do not initialize the is_url field of the baton.
* subversion/tests/cmdline/prop_tests.py
(list_remote_props_by_path): New test.
(test_list): Run new test.
]]]
--
Timofei Zhakov
Index: subversion/svn/proplist-cmd.c
===================================================================
--- subversion/svn/proplist-cmd.c (revision 1917991)
+++ subversion/svn/proplist-cmd.c (working copy)
@@ -45,7 +45,6 @@
typedef struct proplist_baton_t
{
svn_cl__opt_state_t *opt_state;
- svn_boolean_t is_url;
} proplist_baton_t;
@@ -61,7 +60,6 @@ proplist_receiver_xml(void *baton,
apr_pool_t *pool)
{
svn_cl__opt_state_t *opt_state = ((proplist_baton_t *)baton)->opt_state;
- svn_boolean_t is_url = ((proplist_baton_t *)baton)->is_url;
svn_stringbuf_t *sb;
const char *name_local;
@@ -93,7 +91,7 @@ proplist_receiver_xml(void *baton,
svn_pool_destroy(iterpool);
}
- if (! is_url)
+ if (! svn_path_is_url(path))
name_local = svn_dirent_local_style(path, pool);
else
name_local = path;
@@ -129,10 +127,9 @@ proplist_receiver(void *baton,
apr_pool_t *pool)
{
svn_cl__opt_state_t *opt_state = ((proplist_baton_t *)baton)->opt_state;
- svn_boolean_t is_url = ((proplist_baton_t *)baton)->is_url;
const char *name_local;
- if (! is_url)
+ if (! svn_path_is_url(path))
name_local = svn_dirent_local_style(path, pool);
else
name_local = path;
@@ -281,7 +278,6 @@ svn_cl__proplist(apr_getopt_t *os,
svn_pool_clear(iterpool);
SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton));
- pl_baton.is_url = svn_path_is_url(target);
pl_baton.opt_state = opt_state;
/* Check for a peg revision. */
Index: subversion/tests/cmdline/prop_tests.py
===================================================================
--- subversion/tests/cmdline/prop_tests.py (revision 1917991)
+++ subversion/tests/cmdline/prop_tests.py (working copy)
@@ -2860,7 +2860,34 @@ def tmpfile_name_matches_prop_type(sbox):
'ignored-propname',
sbox.ospath('A/mu'))
+def list_remote_props_by_path(sbox):
+ "list remote properties by path (from working copy)"
+ sbox.build()
+
+ # Add a couple of properties
+ sbox.simple_propset("prop1", "foo", '.')
+
+ # Commit
+ sbox.simple_commit()
+
+ svntest.actions.run_and_verify_svn(
+ [ "Properties on '" + sbox.repo_url + "':\n",
+ " prop1\n"], [],
+ 'proplist', sbox.wc_dir, "-r", "HEAD")
+
+ svntest.actions.run_and_verify_svn(
+ ['<?xml version="1.0" encoding="UTF-8"?>\n',
+ '<properties>\n',
+ '<target\n',
+ ' path="' + sbox.repo_url + '">\n',
+ '<property\n',
+ ' name="prop1"/>\n',
+ '</target>\n',
+ '</properties>\n'], [],
+ 'proplist', sbox.wc_dir, "-r", "HEAD", "--xml")
+
+
########################################################################
# Run the tests
@@ -2913,6 +2940,7 @@ test_list = [ None,
wc_propop_on_url,
prop_conflict_root,
tmpfile_name_matches_prop_type,
+ list_remote_props_by_path,
]
if __name__ == '__main__':