Author: rinrab
Date: Mon May 26 16:56:57 2025
New Revision: 1925832
URL: http://svn.apache.org/viewvc?rev=1925832&view=rev
Log:
On the 'utf8-cmdline-prototype' branch: add a version of svn_opt_parse_revprop()
that assumes that revprop_spec is already converted to utf8, test it, and use
in the command line instead of the old one. At this point no functionality has
been changed.
* subversion/include/svn_opt.h
(svn_opt_parse_revprop_utf8): Declare symbol.
* subversion/libsvn_subr/opt.c
(svn_opt_parse_revprop_utf8): Copy implementation from svn_opt_parse_revprop,
but remove encoding conversion.
(svn_opt_parse_revprop): Implement through svn_opt_parse_revprop_utf8().
* subversion/svn/svn.c
* subversion/svnbench/svnbench.c
* subversion/svnmucc/svnmucc.c
(sub_main): Use new function.
* subversion/tests/libsvn_subr/opt-test.c
(test_svn_opt_parse_revprop): New test.
(test_funcs): Run the test.
### TODO: maybe deprecate svn_opt_parse_revprop?
Modified:
subversion/branches/utf8-cmdline-prototype/subversion/include/svn_opt.h
subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c
subversion/branches/utf8-cmdline-prototype/subversion/svn/svn.c
subversion/branches/utf8-cmdline-prototype/subversion/svnbench/svnbench.c
subversion/branches/utf8-cmdline-prototype/subversion/svnmucc/svnmucc.c
subversion/branches/utf8-cmdline-prototype/subversion/tests/libsvn_subr/opt-test.c
Modified: subversion/branches/utf8-cmdline-prototype/subversion/include/svn_opt.h
URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/include/svn_opt.h?rev=1925832&r1=1925831&r2=1925832&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/include/svn_opt.h (original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/include/svn_opt.h Mon May 26 16:56:57 2025
@@ -677,6 +677,16 @@ svn_error_t *
svn_opt_parse_revprop(apr_hash_t **revprops, const char *revprop_spec,
apr_pool_t *pool);
+/**
+ * Similar to svn_opt_parse_revprop() but assumes that revprop_spec_utf8 is
+ * already utf8 encoded.
+ *
+ * @since New in 1.15.
+ */
+svn_error_t *
+svn_opt_parse_revprop_utf8(apr_hash_t **revprop_table_p,
+ const char *revprop_spec_utf8,
+ apr_pool_t *pool);
/**
* If no targets exist in @a *targets, add `.' as the lone target.
Modified: subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c
URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c?rev=1925832&r1=1925831&r2=1925832&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c (original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/libsvn_subr/opt.c Mon May 26 16:56:57 2025
@@ -1071,26 +1071,38 @@ svn_error_t *
svn_opt_parse_revprop(apr_hash_t **revprop_table_p, const char *revprop_spec,
apr_pool_t *pool)
{
+ const char *revprop_spec_utf8;
+
+ SVN_ERR(svn_utf_cstring_to_utf8(&revprop_spec_utf8, revprop_spec, pool));
+
+ return svn_error_trace(svn_opt_parse_revprop_utf8(revprop_table_p,
+ revprop_spec_utf8, pool));
+}
+
+svn_error_t *
+svn_opt_parse_revprop_utf8(apr_hash_t **revprop_table_p,
+ const char *revprop_spec_utf8, apr_pool_t *pool)
+{
const char *sep, *propname;
svn_string_t *propval;
- if (! *revprop_spec)
+ if (!*revprop_spec_utf8)
return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
_("Revision property pair is empty"));
- if (! *revprop_table_p)
+ if (!*revprop_table_p)
*revprop_table_p = apr_hash_make(pool);
- sep = strchr(revprop_spec, '=');
+ sep = strchr(revprop_spec_utf8, '=');
if (sep)
{
- propname = apr_pstrndup(pool, revprop_spec, sep - revprop_spec);
- SVN_ERR(svn_utf_cstring_to_utf8(&propname, propname, pool));
+ propname =
+ apr_pstrndup(pool, revprop_spec_utf8, sep - revprop_spec_utf8);
propval = svn_string_create(sep + 1, pool);
}
else
{
- SVN_ERR(svn_utf_cstring_to_utf8(&propname, revprop_spec, pool));
+ propname = apr_pstrdup(pool, revprop_spec_utf8);
propval = svn_string_create_empty(pool);
}
Modified: subversion/branches/utf8-cmdline-prototype/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/svn/svn.c?rev=1925832&r1=1925831&r2=1925832&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/svn/svn.c (original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/svn/svn.c Mon May 26 16:56:57 2025
@@ -2615,8 +2615,8 @@ sub_main(int *exit_code,
opt_state.no_revprops = TRUE;
break;
case opt_with_revprop:
- SVN_ERR(svn_opt_parse_revprop(&opt_state.revprop_table,
- opt_arg, pool));
+ SVN_ERR(svn_opt_parse_revprop_utf8(&opt_state.revprop_table,
+ utf8_opt_arg, pool));
break;
case opt_parents:
opt_state.parents = TRUE;
Modified: subversion/branches/utf8-cmdline-prototype/subversion/svnbench/svnbench.c
URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/svnbench/svnbench.c?rev=1925832&r1=1925831&r2=1925832&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/svnbench/svnbench.c (original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/svnbench/svnbench.c Mon May 26 16:56:57 2025
@@ -632,8 +632,9 @@ sub_main(int *exit_code,
opt_state.no_revprops = TRUE;
break;
case opt_with_revprop:
- SVN_ERR(svn_opt_parse_revprop(&opt_state.revprop_table,
- opt_arg, pool));
+ SVN_ERR(svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool));
+ SVN_ERR(svn_opt_parse_revprop_utf8(&opt_state.revprop_table,
+ utf8_opt_arg, pool));
break;
case 'g':
opt_state.use_merge_history = TRUE;
Modified: subversion/branches/utf8-cmdline-prototype/subversion/svnmucc/svnmucc.c
URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/svnmucc/svnmucc.c?rev=1925832&r1=1925831&r2=1925832&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/svnmucc/svnmucc.c (original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/svnmucc/svnmucc.c Mon May 26 16:56:57 2025
@@ -610,7 +610,8 @@ sub_main(int *exit_code,
}
break;
case with_revprop_opt:
- SVN_ERR(svn_opt_parse_revprop(&revprops, arg, pool));
+ SVN_ERR(svn_utf_cstring_to_utf8(&opt_arg, arg, pool));
+ SVN_ERR(svn_opt_parse_revprop_utf8(&revprops, opt_arg, pool));
break;
case 'X':
SVN_ERR(svn_utf_cstring_to_utf8(&extra_args_file, arg, pool));
Modified: subversion/branches/utf8-cmdline-prototype/subversion/tests/libsvn_subr/opt-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/utf8-cmdline-prototype/subversion/tests/libsvn_subr/opt-test.c?rev=1925832&r1=1925831&r2=1925832&view=diff
==============================================================================
--- subversion/branches/utf8-cmdline-prototype/subversion/tests/libsvn_subr/opt-test.c (original)
+++ subversion/branches/utf8-cmdline-prototype/subversion/tests/libsvn_subr/opt-test.c Mon May 26 16:56:57 2025
@@ -27,6 +27,7 @@
#include "../svn_test.h"
#include "svn_opt.h"
+#include "svn_hash.h"
#include "private/svn_opt_private.h"
@@ -263,6 +264,32 @@ test_svn_opt_parse_change_to_range(apr_p
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_svn_opt_parse_revprop(apr_pool_t *pool)
+{
+#define UNICODE_TEST_STRING "\xf0\x9f\x91\x89\xf0\x9f\x91\x88"
+
+ apr_hash_t *hash = apr_hash_make(pool);
+ svn_string_t *val;
+
+ apr_hash_clear(hash);
+ SVN_ERR(svn_opt_parse_revprop(&hash, "name=val", pool));
+ val = apr_hash_get(hash, "name", APR_HASH_KEY_STRING);
+ SVN_TEST_STRING_ASSERT(val->data, "val");
+
+ apr_hash_clear(hash);
+ SVN_ERR(svn_opt_parse_revprop_utf8(&hash, "name=val", pool));
+ val = apr_hash_get(hash, "name", APR_HASH_KEY_STRING);
+ SVN_TEST_STRING_ASSERT(val->data, "val");
+
+ apr_hash_clear(hash);
+ SVN_ERR(svn_opt_parse_revprop_utf8(&hash, "name=" UNICODE_TEST_STRING, pool));
+ val = apr_hash_get(hash, "name", APR_HASH_KEY_STRING);
+ SVN_TEST_STRING_ASSERT(val->data, UNICODE_TEST_STRING);
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
@@ -277,6 +304,8 @@ static struct svn_test_descriptor_t test
"test svn_opt_args_to_target_array2"),
SVN_TEST_PASS2(test_svn_opt_parse_change_to_range,
"test svn_opt_parse_change_to_range"),
+ SVN_TEST_PASS2(test_svn_opt_parse_revprop,
+ "test test_svn_opt_parse_revprop"),
SVN_TEST_NULL
};
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.