Author: hwright
Date: Fri Nov 23 22:30:17 2012
New Revision: 1413093
URL: http://svn.apache.org/viewvc?rev=1413093&view=rev
Log:
On the ev2-export branch:
Bring up-to-date with trunk yet again (to pick up the fix for the fs-test 37
failure).
Removed:
subversion/branches/ev2-export/build/ac-macros/qsort_r.m4
Modified:
subversion/branches/ev2-export/ (props changed)
subversion/branches/ev2-export/aclocal.m4
subversion/branches/ev2-export/configure.ac
subversion/branches/ev2-export/subversion/svn/cl.h
subversion/branches/ev2-export/subversion/svn/propedit-cmd.c
subversion/branches/ev2-export/subversion/svn/props.c
subversion/branches/ev2-export/subversion/svn/propset-cmd.c
subversion/branches/ev2-export/subversion/svn_private_config.hw
subversion/branches/ev2-export/subversion/svnmucc/svnmucc.c
subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py
subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py
subversion/branches/ev2-export/subversion/tests/cmdline/svntest/actions.py
subversion/branches/ev2-export/subversion/tests/libsvn_fs/fs-test.c
subversion/branches/ev2-export/subversion/tests/libsvn_subr/spillbuf-test.c
subversion/branches/ev2-export/subversion/tests/svn_test_fs.c
Propchange: subversion/branches/ev2-export/
------------------------------------------------------------------------------
Merged /subversion/trunk:r1412981-1413086
Modified: subversion/branches/ev2-export/aclocal.m4
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/aclocal.m4?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/aclocal.m4 (original)
+++ subversion/branches/ev2-export/aclocal.m4 Fri Nov 23 22:30:17 2012
@@ -47,7 +47,6 @@ sinclude(build/ac-macros/swig.m4)
sinclude(build/ac-macros/zlib.m4)
sinclude(build/ac-macros/kwallet.m4)
sinclude(build/ac-macros/macosx.m4)
-sinclude(build/ac-macros/qsort_r.m4)
# Include the libtool macros
sinclude(build/libtool.m4)
Modified: subversion/branches/ev2-export/configure.ac
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/configure.ac?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/configure.ac (original)
+++ subversion/branches/ev2-export/configure.ac Fri Nov 23 22:30:17 2012
@@ -683,18 +683,6 @@ if test "$enable_nls" = "yes"; then
fi
AH_BOTTOM([
-/* Wrap qsort_r for cross-platform compatibility */
-#if !HAVE_QSORT_R
-#define SVN_QSORT_R(base, length, width, compare, thunk) \
- (qsort((base), (length), (width), (compare)))
-#elif SVN_QSORT_R_NORMAL_ARG_ORDER
-#define SVN_QSORT_R qsort_r
-#else
-/* BSD changes the order of the compare and thunk arguments */
-#define SVN_QSORT_R(base, length, width, compare, thunk) \
- (qsort_r((base), (length), (width), (thunk), (compare)))
-#endif
-
/* Indicate to translators that string X should be translated. Do not look
up the translation at run time; just expand to X. This macro is suitable
for use where a constant string is required at compile time. */
@@ -882,9 +870,6 @@ AC_FUNC_VPRINTF
dnl check for functions needed in special file handling
AC_CHECK_FUNCS(symlink readlink)
-dnl check for qsor_r presence and argument ordering
-SVN_FUNC_QSORT_R
-
dnl check for uname
AC_CHECK_HEADERS(sys/utsname.h, [AC_CHECK_FUNCS(uname)], [])
Modified: subversion/branches/ev2-export/subversion/svn/cl.h
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/svn/cl.h?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/svn/cl.h (original)
+++ subversion/branches/ev2-export/subversion/svn/cl.h Fri Nov 23 22:30:17 2012
@@ -768,7 +768,12 @@ svn_cl__operation_str_human_readable(svn
apr_pool_t *pool);
/* If PROPNAME looks like but is not identical to one of the svn:
- * poperties, raise an error and suggest a better spelling.
+ * poperties, raise an error and suggest a better spelling. Names that
+ * raise errors look like this:
+ *
+ * - start with svn: but do not exactly match a known property; or,
+ * - start with a 3-letter prefix that differs in only one letter
+ * from "svn:", and the rest exactly matches a known propery.
*
* If REVPROP is TRUE, only check revision property names; otherwise
* only check node property names.
Modified: subversion/branches/ev2-export/subversion/svn/propedit-cmd.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/svn/propedit-cmd.c?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/svn/propedit-cmd.c (original)
+++ subversion/branches/ev2-export/subversion/svn/propedit-cmd.c Fri Nov 23
22:30:17 2012
@@ -84,6 +84,9 @@ svn_cl__propedit(apr_getopt_t *os,
return svn_error_createf(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
_("'%s' is not a valid Subversion property name"),
pname_utf8);
+ if (!opt_state->force)
+ SVN_ERR(svn_cl__check_svn_prop_name(pname_utf8, opt_state->revprop, pool));
+
if (opt_state->encoding && !svn_prop_needs_translation(pname_utf8))
return svn_error_create
(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
Modified: subversion/branches/ev2-export/subversion/svn/props.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/svn/props.c?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/svn/props.c (original)
+++ subversion/branches/ev2-export/subversion/svn/props.c Fri Nov 23 22:30:17
2012
@@ -239,9 +239,7 @@ struct simprop_t
svn_string_t name; /* svn: property name */
unsigned int score; /* the similarity score */
apr_size_t diff; /* number of chars different from context.name */
-#if !HAVE_QSORT_R
struct simprop_context_t *context; /* sorting context for qsort() */
-#endif
};
/* Similarity test between two property names */
@@ -258,22 +256,13 @@ simprop_key_diff(const svn_string_t *key
return score;
}
-/* Key comparator for qsort or qsort_r for simprop_t */
-#if !HAVE_QSORT_R
+/* Key comparator for qsort for simprop_t */
static int
simprop_compare(const void *pkeya, const void *pkeyb)
-#else
-static int
-simprop_compare(void *pcontext, const void *pkeya, const void *pkeyb)
-#endif
{
struct simprop_t *const keya = *(struct simprop_t *const *)pkeya;
struct simprop_t *const keyb = *(struct simprop_t *const *)pkeyb;
-#if !HAVE_QSORT_R
struct simprop_context_t *const context = keya->context;
-#else
- struct simprop_context_t *const context = pcontext;
-#endif
if (keya->score == -1)
keya->score = simprop_key_diff(&keya->name, &context->name,
@@ -296,15 +285,19 @@ svn_cl__check_svn_prop_name(const char *
{
SVN_PROP_NODE_ALL_PROPS
};
+ static const apr_size_t nodeprops_len = sizeof(nodeprops)/sizeof(*nodeprops);
+
static const char *const revprops[] =
{
SVN_PROP_REVISION_ALL_PROPS
};
+ static const apr_size_t revprops_len = sizeof(revprops)/sizeof(*revprops);
+
+ const char *const *const proplist = (revprop ? revprops : nodeprops);
+ const apr_size_t numprops = (revprop ? revprops_len : nodeprops_len);
struct simprop_t **propkeys;
struct simprop_t *propbuf;
- const char *const *proplist;
- apr_size_t numprops;
apr_size_t i;
struct simprop_context_t context;
@@ -332,21 +325,26 @@ svn_cl__check_svn_prop_name(const char *
context.name.len = name_len; /* Restore the original propname length */
if (lcs < prefix.len - 1)
return SVN_NO_ERROR; /* Wrong prefix, ignore */
+
+ /* If the prefix is slightly different, the rest must be
+ identical in order to trigger the error. */
+ if (lcs == prefix.len - 1)
+ {
+ for (i = 0; i < numprops; ++i)
+ {
+ if (0 == strcmp(proplist[i] + prefix.len, propname + prefix.len))
+ return svn_error_createf(
+ SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
+ _("'%s' is not a valid %s property name; did you mean '%s'?"
+ "\n(To set the '%s' property, re-run with '--force'.)"),
+ propname, SVN_PROP_PREFIX, proplist[i], propname);
+ }
+ return SVN_NO_ERROR;
+ }
}
/* Now find the closest match from amongst a the set of reserved
node or revision property names. */
- if (revprop)
- {
- proplist = revprops;
- numprops = sizeof(revprops) / sizeof(*revprops);
- }
- else
- {
- proplist = nodeprops;
- numprops = sizeof(nodeprops) / sizeof(*nodeprops);
- }
-
propkeys = apr_palloc(scratch_pool,
numprops * sizeof(struct simprop_t*));
propbuf = apr_palloc(scratch_pool,
@@ -357,13 +355,10 @@ svn_cl__check_svn_prop_name(const char *
propbuf[i].name.data = proplist[i];
propbuf[i].name.len = strlen(proplist[i]);
propbuf[i].score = (unsigned int)-1;
-#if !HAVE_QSORT_R
propbuf[i].context = &context;
-#endif
}
- SVN_QSORT_R(propkeys, numprops, sizeof(*propkeys),
- simprop_compare, &context);
+ qsort(propkeys, numprops, sizeof(*propkeys), simprop_compare);
if (0 == propkeys[0]->diff)
return SVN_NO_ERROR; /* We found an exact match. */
Modified: subversion/branches/ev2-export/subversion/svn/propset-cmd.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/svn/propset-cmd.c?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/svn/propset-cmd.c (original)
+++ subversion/branches/ev2-export/subversion/svn/propset-cmd.c Fri Nov 23
22:30:17 2012
@@ -67,6 +67,9 @@ svn_cl__propset(apr_getopt_t *os,
return svn_error_createf(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
_("'%s' is not a valid Subversion property name"),
pname_utf8);
+ if (!opt_state->force)
+ SVN_ERR(svn_cl__check_svn_prop_name(pname_utf8, opt_state->revprop,
+ scratch_pool));
/* Get the PROPVAL from either an external file, or from the command
line. */
Modified: subversion/branches/ev2-export/subversion/svn_private_config.hw
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/svn_private_config.hw?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/svn_private_config.hw (original)
+++ subversion/branches/ev2-export/subversion/svn_private_config.hw Fri Nov 23
22:30:17 2012
@@ -82,9 +82,6 @@
#define SVN_APR_INT64_T_PYCFMT "L"
#endif
-#define HAVE_QSORT_R 1
-#define SVN_QSORT_R qsort_s
-
/* Setup gettext macros */
#define N_(x) x
#define U_(x) x
Modified: subversion/branches/ev2-export/subversion/svnmucc/svnmucc.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/svnmucc/svnmucc.c?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/svnmucc/svnmucc.c (original)
+++ subversion/branches/ev2-export/subversion/svnmucc/svnmucc.c Fri Nov 23
22:30:17 2012
@@ -926,7 +926,7 @@ usage(apr_pool_t *pool, int exit_val)
" -X, --extra-args ARG append arguments from file ARG (one per line;\n"
" use \"-\" to read from standard input)\n"
" --config-dir ARG use ARG to override the config directory\n"
- " --config-option ARG use ARG so override a configuration option\n"
+ " --config-option ARG use ARG to override a configuration option\n"
" --no-auth-cache do not cache authentication tokens\n"
" --version print version information\n";
svn_error_clear(svn_cmdline_fputs(msg, stream, pool));
Modified: subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py
(original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/prop_tests.py Fri
Nov 23 22:30:17 2012
@@ -900,9 +900,9 @@ def prop_value_conversions(sbox):
"svn: warning: W125005.*use 'svn propdel'")
# Anything else should be untouched
- svntest.actions.set_prop('svn:some-prop', 'bar', lambda_path)
- svntest.actions.set_prop('svn:some-prop', ' bar baz', mu_path)
- svntest.actions.set_prop('svn:some-prop', 'bar\n', iota_path)
+ svntest.actions.set_prop('svn:some-prop', 'bar', lambda_path, force=True)
+ svntest.actions.set_prop('svn:some-prop', ' bar baz', mu_path, force=True)
+ svntest.actions.set_prop('svn:some-prop', 'bar\n', iota_path, force=True)
svntest.actions.set_prop('some-prop', 'bar', lambda_path)
svntest.actions.set_prop('some-prop', ' bar baz', mu_path)
svntest.actions.set_prop('some-prop', 'bar\n', iota_path)
@@ -2670,6 +2670,31 @@ def inheritable_ignores(sbox):
[], 'add', '.', '--force','--no-ignore',
'--config-dir', config_dir)
+def almost_known_prop_names(sbox):
+ "propset with svn: prefix but unknown name"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ iota_path = sbox.ospath('iota')
+
+ # Same prefix, different prop name
+ svntest.actions.set_prop('svn:exemutable', 'x', iota_path,
+ "svn: E195011: 'svn:exemutable' "
+ "is not a valid svn: property name")
+ svntest.actions.set_prop('svn:exemutable', 'x', iota_path, force=True)
+
+ # Similar prefix, different prop name
+ svntest.actions.set_prop('svm:exemutable', 'x', iota_path)
+
+ # Similar prefix, same prop name
+ svntest.actions.set_prop('svm:executable', 'x', iota_path,
+ "svn: E195011: 'svm:executable' "
+ "is not a valid svn: property name")
+ svntest.actions.set_prop('svm:executable', 'x', iota_path, force=True)
+
+ # Different prefix, same prop name
+ svntest.actions.set_prop('tsvn:executable', 'x', iota_path)
+
########################################################################
# Run the tests
@@ -2713,6 +2738,7 @@ test_list = [ None,
file_matching_dir_prop_reject,
pristine_props_listed,
inheritable_ignores,
+ almost_known_prop_names,
]
if __name__ == '__main__':
Modified: subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py
(original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py Fri
Nov 23 22:30:17 2012
@@ -1441,8 +1441,8 @@ def status_depth_local(sbox):
# make some changes to the greek tree
change_files(wc_dir, ['A/mu', 'A/D/gamma'])
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', A_path)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', D_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', A_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', D_path)
# for all the possible types of depth, check the status
@@ -1501,8 +1501,8 @@ def status_depth_update(sbox):
# add some files, change directory properties
change_files_and_commit(wc_dir, ['A/mu', 'A/D/gamma'])
svntest.main.run_svn(None, 'up', wc_dir)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', A_path)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', D_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', A_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', D_path)
svntest.main.run_svn(None, 'ci', '-m', 'log message', wc_dir)
# update to r1
@@ -1572,8 +1572,8 @@ def status_depth_update_local_modificati
mu_path = os.path.join(A_path, 'mu')
gamma_path = os.path.join(D_path, 'gamma')
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', A_path)
- svntest.main.run_svn(None, 'propset', 'svn:test', 'value', D_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', A_path)
+ svntest.main.run_svn(None, 'propset', '--force', 'svn:test', 'value', D_path)
svntest.main.file_append(mu_path, 'modified')
svntest.main.file_append(gamma_path, 'modified')
Modified:
subversion/branches/ev2-export/subversion/tests/cmdline/svntest/actions.py
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/svntest/actions.py?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/svntest/actions.py
(original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/svntest/actions.py
Fri Nov 23 22:30:17 2012
@@ -1985,8 +1985,12 @@ def create_failing_post_commit_hook(repo
# set_prop can be used for properties with NULL characters which are not
# handled correctly when passed to subprocess.Popen() and values like "*"
# which are not handled correctly on Windows.
-def set_prop(name, value, path, expected_re_string=None):
+def set_prop(name, value, path, expected_re_string=None, force=None):
"""Set a property with specified value"""
+ if not force:
+ propset = ('propset',)
+ else:
+ propset = ('propset', '--force')
if value and (value[0] == '-' or '\x00' in value or sys.platform == 'win32'):
from tempfile import mkstemp
(fd, value_file_path) = mkstemp()
@@ -1995,12 +1999,12 @@ def set_prop(name, value, path, expected
value_file.write(value)
value_file.flush()
value_file.close()
- exit_code, out, err = main.run_svn(expected_re_string, 'propset',
- '-F', value_file_path, name, path)
+ propset += ('-F', value_file_path, name, path)
+ exit_code, out, err = main.run_svn(expected_re_string, *propset)
os.remove(value_file_path)
else:
- exit_code, out, err = main.run_svn(expected_re_string, 'propset',
- name, value, path)
+ propset += (name, value, path)
+ exit_code, out, err = main.run_svn(expected_re_string, *propset)
if expected_re_string:
if not expected_re_string.startswith(".*"):
expected_re_string = ".*(" + expected_re_string + ")"
Modified: subversion/branches/ev2-export/subversion/tests/libsvn_fs/fs-test.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_fs/fs-test.c?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/libsvn_fs/fs-test.c
(original)
+++ subversion/branches/ev2-export/subversion/tests/libsvn_fs/fs-test.c Fri Nov
23 22:30:17 2012
@@ -3533,8 +3533,8 @@ static int my_rand(apr_uint64_t scalar,
{
static const apr_uint32_t TEST_RAND_MAX = 0xffffffffUL;
/* Assumes TEST_RAND_MAX+1 can be exactly represented in a double */
- apr_uint32_t rand = svn_test_rand(seed);
- return (int)(((double)rand
+ apr_uint32_t r = svn_test_rand(seed);
+ return (int)(((double)r
/ ((double)TEST_RAND_MAX+1.0))
* (double)scalar);
}
@@ -4905,7 +4905,7 @@ delete_fs(const svn_test_opts_t *opts,
const char *path;
svn_node_kind_t kind;
- SVN_ERR(svn_test__create_fs(&fs, "test-delete-fs", opts, pool));
+ SVN_ERR(svn_test__create_fs(&fs, "test-repo-delete-fs", opts, pool));
path = svn_fs_path(fs, pool);
SVN_ERR(svn_io_check_path(path, &kind, pool));
SVN_TEST_ASSERT(kind != svn_node_none);
Modified:
subversion/branches/ev2-export/subversion/tests/libsvn_subr/spillbuf-test.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/libsvn_subr/spillbuf-test.c?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/libsvn_subr/spillbuf-test.c
(original)
+++ subversion/branches/ev2-export/subversion/tests/libsvn_subr/spillbuf-test.c
Fri Nov 23 22:30:17 2012
@@ -28,9 +28,9 @@
#include "../svn_test.h"
-static const char basic_data[] = ("abcdefghijklmnopqrstuvwxyz"
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "0123456789");
+static const char basic_data[] = "abcdefghijklmnopqrstuvwxyz"
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789";
/* Validate that BUF is STARTING_SIZE in length. Then read some data from
Modified: subversion/branches/ev2-export/subversion/tests/svn_test_fs.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/svn_test_fs.c?rev=1413093&r1=1413092&r2=1413093&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/ev2-export/subversion/tests/svn_test_fs.c Fri Nov 23
22:30:17 2012
@@ -115,7 +115,7 @@ create_fs(svn_fs_t **fs_p,
if (apr_stat(&finfo, name, APR_FINFO_TYPE, pool) == APR_SUCCESS)
{
if (finfo.filetype == APR_DIR)
- SVN_ERR_W(svn_fs_delete_fs(name, pool),
+ SVN_ERR_W(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool),
apr_psprintf(pool,
"cannot create fs '%s' there is already "
"a directory of that name", name));