You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by cm...@apache.org on 2012/11/27 23:13:38 UTC
svn commit: r1414433 [4/4] - in /subversion/branches/issue-4194-dev: ./
build/ac-macros/ subversion/include/ subversion/include/private/
subversion/libsvn_client/ subversion/libsvn_delta/ subversion/libsvn_diff/
subversion/libsvn_fs_fs/ subversion/libs...
Modified: subversion/branches/issue-4194-dev/subversion/tests/cmdline/externals_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/cmdline/externals_tests.py?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/cmdline/externals_tests.py (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/cmdline/externals_tests.py Tue Nov 27 22:13:24 2012
@@ -2131,7 +2131,7 @@ def copy_file_externals(sbox):
actions.run_and_verify_update(wc_dir, expected_output, expected_disk,
expected_status, None, None, None, None, None, True, wc_dir)
-def include_externals(sbox):
+def commit_include_externals(sbox):
"commit --include-externals"
# svntest.factory.make(sbox, """
# mkdir Z
@@ -2939,6 +2939,59 @@ def duplicate_targets(sbox):
actions.run_and_verify_svn2('OUTPUT', expected_stdout, [], 0, 'pg',
'svn:externals', wc_dir)
+@Issue(4225)
+def list_include_externals(sbox):
+ "list with --include-externals"
+
+ externals_test_setup(sbox)
+
+ wc_dir = sbox.wc_dir
+ repo_url = sbox.repo_url
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'checkout',
+ repo_url, wc_dir)
+
+ B_path = sbox.ospath("A/B")
+ C_path = sbox.ospath("A/C")
+
+ B_url = repo_url + "/A/B"
+ C_url = repo_url + "/A/C"
+
+ def list_external_string(path, url):
+ string = "Listing external" + " '" + path + "' " + "defined on" + " '" + \
+ url + "'" + ":"
+ return string
+
+ expected_stdout = verify.UnorderedOutput([
+ "E/" + "\n",
+ "F/" + "\n",
+ "lambda" + "\n",
+ list_external_string("gamma", B_url ) + "\n",
+ "gamma" + "\n"])
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_path)
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', B_url)
+
+ expected_stdout = verify.UnorderedOutput([
+ list_external_string("exdir_G", C_url)+ "\n",
+ "pi" + "\n",
+ "rho" + "\n",
+ "tau" + "\n",
+ list_external_string("exdir_H", C_url) + "\n",
+ "chi" + "\n",
+ "omega" + "\n",
+ "psi" + "\n"])
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_path)
+
+ exit_code, stdout, stderr = svntest.actions.run_and_verify_svn2(
+ "OUTPUT", expected_stdout, [], 0, 'ls', '--include-externals', C_url)
+
########################################################################
@@ -2982,13 +3035,14 @@ test_list = [ None,
file_externals_different_url,
file_external_in_unversioned,
copy_file_externals,
- include_externals,
+ commit_include_externals,
include_immediate_dir_externals,
shadowing,
remap_file_external_with_prop_del,
dir_external_with_dash_r_only,
url_to_wc_copy_of_externals,
duplicate_targets,
+ list_include_externals,
]
if __name__ == '__main__':
Modified: subversion/branches/issue-4194-dev/subversion/tests/cmdline/getopt_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/cmdline/getopt_tests.py?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/cmdline/getopt_tests.py (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/cmdline/getopt_tests.py Tue Nov 27 22:13:24 2012
@@ -167,33 +167,11 @@ def run_one_test(sbox, basename, *vararg
actual_stdout = process_lines(actual_stdout)
actual_stderr = process_lines(actual_stderr)
- if exp_stdout != actual_stdout:
- logger.warn("Standard output does not match.")
- logger.warn("Expected standard output:")
- logger.warn("=====")
- for x in exp_stdout:
- logger.warn(x)
- logger.warn("=====")
- logger.warn("Actual standard output:")
- logger.warn("=====")
- for x in actual_stdout:
- logger.warn(x)
- logger.warn("=====")
- raise svntest.Failure
-
- if exp_stderr != actual_stderr:
- logger.warn("Standard error does not match.")
- logger.warn("Expected standard error:")
- logger.warn("=====")
- for x in exp_stderr:
- logger.warn(x)
- logger.warn("=====")
- logger.warn("Actual standard error:")
- logger.warn("=====")
- for x in actual_stderr:
- logger.warn(x)
- logger.warn("=====")
- raise svntest.Failure
+ svntest.verify.compare_and_display_lines("Standard output does not match.",
+ "STDOUT", exp_stdout, actual_stdout)
+
+ svntest.verify.compare_and_display_lines("Standard error does not match.",
+ "STDERR", exp_stderr, actual_stderr)
def getopt_no_args(sbox):
"run svn with no arguments"
Modified: subversion/branches/issue-4194-dev/subversion/tests/cmdline/iprop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/cmdline/iprop_tests.py?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/cmdline/iprop_tests.py (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/cmdline/iprop_tests.py Tue Nov 27 22:13:24 2012
@@ -1635,6 +1635,40 @@ def iprops_with_file_externals(sbox):
sbox.ospath('A/B/E/file-external'), expected_iprops,
expected_explicit_props)
+def iprops_survive_commit(sbox):
+ "verify that iprops survive a commit"
+
+ sbox.build()
+ sbox.simple_propset('key', 'D', 'A/B',)
+ sbox.simple_commit()
+
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B/E',
+ sbox.ospath('A/D'), '--ignore-ancestry')
+ svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B/F',
+ sbox.ospath('iota'), '--ignore-ancestry')
+ expected_iprops = {
+ sbox.repo_url + '/A/B' : {'key' : 'D'},
+ }
+
+ expected_explicit_props = {}
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('A/D'),
+ expected_iprops,
+ expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('iota'),
+ expected_iprops,
+ expected_explicit_props)
+
+ sbox.simple_propset('new', 'V', 'A/D', 'iota')
+ sbox.simple_commit()
+
+ expected_explicit_props = {'new': 'V'}
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('A/D'),
+ expected_iprops,
+ expected_explicit_props)
+ svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('iota'),
+ expected_iprops,
+ expected_explicit_props)
+
########################################################################
# Run the tests
@@ -1648,6 +1682,7 @@ test_list = [ None,
iprops_shallow_operative_depths,
iprops_with_directory_externals,
iprops_with_file_externals,
+ iprops_survive_commit,
]
if __name__ == '__main__':
Modified: subversion/branches/issue-4194-dev/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/cmdline/prop_tests.py?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/cmdline/prop_tests.py Tue Nov 27 22:13:24 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,37 @@ 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)
+
+ # Property name is too different to matter
+ svntest.actions.set_prop('svn:foobar', 'x', iota_path,
+ "svn: E195011: 'svn:foobar'"
+ " is not a valid svn: property name;"
+ " re-run with '--force' to set it")
+
########################################################################
# Run the tests
@@ -2713,6 +2744,7 @@ test_list = [ None,
file_matching_dir_prop_reject,
pristine_props_listed,
inheritable_ignores,
+ almost_known_prop_names,
]
if __name__ == '__main__':
Modified: subversion/branches/issue-4194-dev/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/cmdline/stat_tests.py?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/cmdline/stat_tests.py Tue Nov 27 22:13:24 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/issue-4194-dev/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/cmdline/svntest/actions.py?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/cmdline/svntest/actions.py Tue Nov 27 22:13:24 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/issue-4194-dev/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/cmdline/update_tests.py?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/cmdline/update_tests.py Tue Nov 27 22:13:24 2012
@@ -5523,6 +5523,16 @@ def update_to_HEAD_plus_1(sbox):
None, None,
None, None, None, wc_dir, '-r', '2')
+ other_wc = sbox.add_wc_path('other')
+ other_url = sbox.repo_url + '/A'
+ svntest.actions.run_and_verify_svn("subtree checkout", None, [],
+ 'co', other_url, other_wc)
+ svntest.actions.run_and_verify_update(other_wc,
+ None, None, None,
+ "E160006.*No such.*revision",
+ None, None,
+ None, None, None, other_wc, '-r', '2')
+
@XFail()
def update_moved_dir_leaf_del(sbox):
"update locally moved dir with leaf del"
Modified: subversion/branches/issue-4194-dev/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/libsvn_fs/fs-test.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/libsvn_fs/fs-test.c Tue Nov 27 22:13:24 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);
}
@@ -4901,18 +4901,28 @@ static svn_error_t *
delete_fs(const svn_test_opts_t *opts,
apr_pool_t *pool)
{
- svn_fs_t *fs;
const char *path;
svn_node_kind_t kind;
- SVN_ERR(svn_test__create_fs(&fs, "test-delete-fs", opts, pool));
- path = svn_fs_path(fs, pool);
+ /* We have to use a subpool to close the svn_fs_t before calling
+ svn_fs_delete_fs. See issue 4264. */
+ {
+ svn_fs_t *fs;
+ apr_pool_t *subpool = svn_pool_create(pool);
+ SVN_ERR(svn_test__create_fs(&fs, "test-repo-delete-fs", opts, subpool));
+ path = svn_fs_path(fs, pool);
+ svn_pool_destroy(subpool);
+ }
+
SVN_ERR(svn_io_check_path(path, &kind, pool));
SVN_TEST_ASSERT(kind != svn_node_none);
SVN_ERR(svn_fs_delete_fs(path, pool));
SVN_ERR(svn_io_check_path(path, &kind, pool));
SVN_TEST_ASSERT(kind == svn_node_none);
+ /* Recreate dir so that test cleanup doesn't fail. */
+ SVN_ERR(svn_io_dir_make(path, APR_OS_DEFAULT, pool));
+
return SVN_NO_ERROR;
}
Modified: subversion/branches/issue-4194-dev/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/libsvn_repos/repos-test.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/libsvn_repos/repos-test.c Tue Nov 27 22:13:24 2012
@@ -49,6 +49,20 @@
#define MIN(a,b) (((a)<(b))?(a):(b))
#endif
+/* Compare strings, like strcmp but either or both may be NULL which
+ * compares equal to NULL and not equal to any non-NULL string. */
+static int
+strcmp_null(const char *s1, const char *s2)
+{
+ if (s1 && s2)
+ return strcmp(s1, s2);
+ else if (s1 || s2)
+ return 1;
+ else
+ return 0;
+}
+
+
static svn_error_t *
dir_deltas(const svn_test_opts_t *opts,
@@ -1739,7 +1753,9 @@ nls_receiver(svn_location_segment_t *seg
"Got unexpected location segment: %s",
format_segment(segment, pool));
- if (expected_segment->range_start != segment->range_start)
+ if (expected_segment->range_start != segment->range_start
+ || expected_segment->range_end != segment->range_end
+ || strcmp_null(expected_segment->path, segment->path) != 0)
return svn_error_createf(SVN_ERR_TEST_FAILED, NULL,
"Location segments differ\n"
" Expected location segment: %s\n"
@@ -1950,7 +1966,7 @@ node_location_segments(const svn_test_op
{ 6, 6, "A/D2/G" },
{ 5, 5, NULL },
{ 3, 4, "A/D2/G" },
- { 1, 2, "A/D2/G" },
+ { 1, 2, "A/D/G" },
{ 0 }
};
SVN_ERR(check_location_segments(repos, "A/D/G",
@@ -1965,7 +1981,7 @@ node_location_segments(const svn_test_op
svn_location_segment_t expected_segments[] =
{
{ 3, 3, "A/D2/G" },
- { 2, 2, "A/D2/G" },
+ { 2, 2, "A/D/G" },
{ 0 }
};
SVN_ERR(check_location_segments(repos, "A/D/G",
Modified: subversion/branches/issue-4194-dev/subversion/tests/libsvn_subr/spillbuf-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/libsvn_subr/spillbuf-test.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/libsvn_subr/spillbuf-test.c (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/libsvn_subr/spillbuf-test.c Tue Nov 27 22:13:24 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/issue-4194-dev/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/libsvn_subr/string-test.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/libsvn_subr/string-test.c Tue Nov 27 22:13:24 2012
@@ -612,6 +612,105 @@ test_stringbuf_replace(apr_pool_t *pool)
return expect_stringbuf_equal(a, "test hello, world!!!", pool);
}
+static svn_error_t *
+test_string_similarity(apr_pool_t *pool)
+{
+ const struct sim_score_test_t
+ {
+ const char *stra;
+ const char *strb;
+ apr_size_t lcs;
+ int score;
+ } tests[] =
+ {
+#define SCORE(lcs, len) ((2000 * (lcs) + (len)/2) / (len))
+
+ /* Equality */
+ {"", "", 0, 1000},
+ {"quoth", "quoth", 5, SCORE(5, 5+5)},
+
+ /* Deletion at start */
+ {"quoth", "uoth", 4, SCORE(4, 5+4)},
+ {"uoth", "quoth", 4, SCORE(4, 4+5)},
+
+ /* Deletion at end */
+ {"quoth", "quot", 4, SCORE(4, 5+4)},
+ {"quot", "quoth", 4, SCORE(4, 4+5)},
+
+ /* Insertion at start */
+ {"quoth", "Xquoth", 5, SCORE(5, 5+6)},
+ {"Xquoth", "quoth", 5, SCORE(5, 6+5)},
+
+ /* Insertion at end */
+ {"quoth", "quothX", 5, SCORE(5, 5+6)},
+ {"quothX", "quoth", 5, SCORE(5, 6+5)},
+
+ /* Insertion in middle */
+ {"quoth", "quoXth", 5, SCORE(5, 5+6)},
+ {"quoXth", "quoth", 5, SCORE(5, 6+5)},
+
+ /* Transposition at start */
+ {"quoth", "uqoth", 4, SCORE(4, 5+5)},
+ {"uqoth", "quoth", 4, SCORE(4, 5+5)},
+
+ /* Transposition at end */
+ {"quoth", "quoht", 4, SCORE(4, 5+5)},
+ {"quoht", "quoth", 4, SCORE(4, 5+5)},
+
+ /* Transposition in middle */
+ {"quoth", "qutoh", 4, SCORE(4, 5+5)},
+ {"qutoh", "quoth", 4, SCORE(4, 5+5)},
+
+ /* Difference */
+ {"quoth", "raven", 0, SCORE(0, 5+5)},
+ {"raven", "quoth", 0, SCORE(0, 5+5)},
+ {"x", "", 0, SCORE(0, 1+0)},
+ {"", "x", 0, SCORE(0, 0+1)},
+ {"", "quoth", 0, SCORE(0, 0+5)},
+ {"quoth", "", 0, SCORE(0, 5+0)},
+ {"quoth", "the raven", 2, SCORE(2, 5+9)},
+ {"the raven", "quoth", 2, SCORE(2, 5+9)},
+ {NULL, NULL}
+ };
+
+ const struct sim_score_test_t *t;
+ svn_membuf_t buffer;
+
+ svn_membuf__create(&buffer, 0, pool);
+ for (t = tests; t->stra; ++t)
+ {
+ apr_size_t lcs;
+ const unsigned int score =
+ svn_cstring__similarity(t->stra, t->strb, &buffer, &lcs);
+ /*
+ fprintf(stderr,
+ "lcs %s ~ %s score %.3f (%"APR_SIZE_T_FMT
+ ") expected %.3f (%"APR_SIZE_T_FMT"))\n",
+ t->stra, t->strb, score/1000.0, lcs, t->score/1000.0, t->lcs);
+ */
+ if (score != t->score)
+ return fail(pool, "%s ~ %s score %.3f <> expected %.3f",
+ t->stra, t->strb, score/1000.0, t->score/1000.0);
+
+ if (lcs != t->lcs)
+ return fail(pool,
+ "%s ~ %s lcs %"APR_SIZE_T_FMT
+ " <> expected %"APR_SIZE_T_FMT,
+ t->stra, t->strb, lcs, t->lcs);
+ }
+
+ /* Test partial similarity */
+ {
+ const svn_string_t foo = {"svn:foo", 4};
+ const svn_string_t bar = {"svn:bar", 4};
+ if (1000 != svn_string__similarity(&foo, &bar, &buffer, NULL))
+ return fail(pool, "'%s'[:4] ~ '%s'[:4] found different",
+ foo.data, bar.data);
+ }
+
+ return SVN_NO_ERROR;
+}
+
/*
====================================================================
If you add a new test to this file, update this array.
@@ -677,5 +776,7 @@ struct svn_test_descriptor_t test_funcs[
"check deletion from svn_stringbuf_t"),
SVN_TEST_PASS2(test_stringbuf_replace,
"check replacement in svn_stringbuf_t"),
+ SVN_TEST_PASS2(test_string_similarity,
+ "test string similarity scores"),
SVN_TEST_NULL
};
Propchange: subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Nov 27 22:13:24 2012
@@ -11,3 +11,4 @@ tree-conflict-data-test
wc-incomplete-tester
wc-lock-tester
wc-queries-test
+wc-test
Modified: subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/db-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/db-test.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/db-test.c (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/db-test.c Tue Nov 27 22:13:24 2012
@@ -664,7 +664,7 @@ test_inserting_nodes(apr_pool_t *pool)
props,
1, TIME_1a, AUTHOR_1,
checksum,
- NULL, FALSE, FALSE, NULL, FALSE, FALSE,
+ NULL, FALSE, FALSE, NULL, NULL, FALSE, FALSE,
NULL, NULL,
pool));
@@ -677,7 +677,7 @@ test_inserting_nodes(apr_pool_t *pool)
props,
1, TIME_1a, AUTHOR_1,
"O-target",
- NULL, FALSE, FALSE, NULL, FALSE, FALSE,
+ NULL, FALSE, FALSE, NULL, NULL, FALSE, FALSE,
NULL, NULL,
pool));
Modified: subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/utils.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/utils.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/utils.c (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/libsvn_wc/utils.c Tue Nov 27 22:13:24 2012
@@ -293,7 +293,7 @@ sbox_wc_commit(svn_test__sandbox_t *b, c
sizeof(const char *));
APR_ARRAY_PUSH(targets, const char *) = sbox_wc_path(b, path);
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
return svn_client_commit5(targets, svn_depth_infinity,
FALSE, FALSE, TRUE, /* keep locks/cl's/use_ops*/
NULL, NULL, NULL, NULL, ctx, b->pool);
@@ -312,7 +312,7 @@ sbox_wc_update(svn_test__sandbox_t *b, c
revision.value.number = revnum;
APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path);
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
return svn_client_update4(&result_revs, paths, &revision, svn_depth_infinity,
TRUE, FALSE, FALSE, FALSE, FALSE,
ctx, b->pool);
@@ -323,8 +323,9 @@ sbox_wc_resolved(svn_test__sandbox_t *b,
{
svn_client_ctx_t *ctx;
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
- return svn_client_resolved(sbox_wc_path(b, path), TRUE, ctx, b->pool);
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
+ return svn_client_resolve(sbox_wc_path(b, path), svn_depth_infinity,
+ svn_wc_conflict_choose_merged, ctx, b->pool);
}
svn_error_t *
@@ -332,7 +333,7 @@ sbox_wc_resolve(svn_test__sandbox_t *b,
{
svn_client_ctx_t *ctx;
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
return svn_client_resolve(sbox_wc_path(b, path), svn_depth_infinity,
svn_wc_conflict_choose_mine_conflict,
ctx, b->pool);
@@ -345,7 +346,7 @@ sbox_wc_move(svn_test__sandbox_t *b, con
apr_array_header_t *paths = apr_array_make(b->pool, 1,
sizeof(const char *));
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, src);
return svn_client_move6(paths, sbox_wc_path(b, dst),
FALSE, FALSE, NULL, NULL, NULL, ctx, b->pool);
@@ -361,7 +362,7 @@ sbox_wc_propset(svn_test__sandbox_t *b,
apr_array_header_t *paths = apr_array_make(b->pool, 1,
sizeof(const char *));
- SVN_ERR(svn_client_create_context(&ctx, b->pool));
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, b->pool));
APR_ARRAY_PUSH(paths, const char *) = sbox_wc_path(b, path);
return svn_client_propset_local(name, svn_string_create(value, b->pool),
paths, svn_depth_empty, TRUE, NULL, ctx,
Modified: subversion/branches/issue-4194-dev/subversion/tests/svn_test_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/subversion/tests/svn_test_fs.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/issue-4194-dev/subversion/tests/svn_test_fs.c Tue Nov 27 22:13:24 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));
Modified: subversion/branches/issue-4194-dev/tools/client-side/svn-bench/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/tools/client-side/svn-bench/main.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/tools/client-side/svn-bench/main.c (original)
+++ subversion/branches/issue-4194-dev/tools/client-side/svn-bench/main.c Tue Nov 27 22:13:24 2012
@@ -66,7 +66,7 @@ typedef enum svn_cl__longopt_t {
opt_with_revprop,
opt_with_all_revprops,
opt_with_no_revprops,
- opt_trust_server_cert,
+ opt_trust_server_cert
} svn_cl__longopt_t;
Modified: subversion/branches/issue-4194-dev/tools/client-side/svn-bench/null-log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/tools/client-side/svn-bench/null-log-cmd.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/tools/client-side/svn-bench/null-log-cmd.c (original)
+++ subversion/branches/issue-4194-dev/tools/client-side/svn-bench/null-log-cmd.c Tue Nov 27 22:13:24 2012
@@ -134,7 +134,7 @@ svn_cl__null_log(apr_getopt_t *os,
svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
apr_array_header_t *targets;
- struct log_receiver_baton lb = { ctx };
+ struct log_receiver_baton lb;
const char *target;
int i;
apr_array_header_t *revprops;
@@ -194,6 +194,7 @@ svn_cl__null_log(apr_getopt_t *os,
}
}
+ lb.ctx = ctx;
lb.quiet = opt_state->quiet;
revprops = apr_array_make(pool, 3, sizeof(char *));
Propchange: subversion/branches/issue-4194-dev/tools/server-side/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Tue Nov 27 22:13:24 2012
@@ -3,3 +3,4 @@ svn-populate-node-origins-index
svnauthz-validate
svn-rep-sharing-stats
fsfs-reorg
+fsfs-stats
Modified: subversion/branches/issue-4194-dev/tools/server-side/fsfs-reorg.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/tools/server-side/fsfs-reorg.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/tools/server-side/fsfs-reorg.c (original)
+++ subversion/branches/issue-4194-dev/tools/server-side/fsfs-reorg.c Tue Nov 27 22:13:24 2012
@@ -828,7 +828,7 @@ read_revision_header(apr_size_t *changes
{
char buf[64];
const char *line;
- const char *space;
+ char *space;
apr_uint64_t val;
apr_size_t len;
@@ -857,7 +857,7 @@ read_revision_header(apr_size_t *changes
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Final line in revision file missing space"));
- *(char *)space = 0;
+ *space = 0;
SVN_ERR(svn_cstring_strtoui64(&val, line+1, 0, APR_SIZE_MAX, 10));
*root_noderev = (apr_size_t)val;
@@ -998,8 +998,8 @@ key_matches(svn_string_t *string, const
static int
compare_noderev_offsets(const void *data, const void *key)
{
- apr_ssize_t diff = (*(const noderev_t **)data)->original.offset
- - *(const apr_size_t *)key;
+ apr_ssize_t diff = (*(const noderev_t *const *)data)->original.offset
+ - *(const apr_size_t *)key;
/* sizeof(int) may be < sizeof(ssize_t) */
if (diff < 0)
@@ -1050,14 +1050,14 @@ find_noderev(noderev_t **result,
compare_noderev_offsets);
if ((idx < 0) || (idx >= revision_info->node_revs->nelts))
return svn_error_createf(SVN_ERR_BAD_VERSION_FILE_FORMAT, NULL,
- _("No noderev found at offset %" APR_OFF_T_FMT),
- offset);
+ _("No noderev found at offset %ld"),
+ (long)offset);
*result = APR_ARRAY_IDX(revision_info->node_revs, idx, noderev_t *);
if ((*result)->original.offset != offset)
return svn_error_createf(SVN_ERR_BAD_VERSION_FILE_FORMAT, NULL,
- _("No noderev found at offset %" APR_OFF_T_FMT),
- offset);
+ _("No noderev found at offset %ld"),
+ (long)offset);
return SVN_NO_ERROR;
}
@@ -1079,8 +1079,8 @@ parse_pred(noderev_t **result,
static int
compare_representation_offsets(const void *data, const void *key)
{
- apr_ssize_t diff = (*(const representation_t **)data)->original.offset
- - *(const apr_size_t *)key;
+ apr_ssize_t diff = (*(const representation_t *const *)data)->original.offset
+ - *(const apr_size_t *)key;
/* sizeof(int) may be < sizeof(ssize_t) */
if (diff < 0)
@@ -2290,7 +2290,7 @@ write_revisions(fs_fs_t *fs,
revision_info_t *info = APR_ARRAY_IDX(pack->info, i,
revision_info_t *);
SVN_ERR(svn_stream_printf(stream, itempool,
- "%" APR_UINT64_T_FMT "\n",
+ "%" APR_SIZE_T_FMT "\n",
info->target.offset));
svn_pool_clear(itempool);
}
@@ -2469,10 +2469,9 @@ update_text(svn_stringbuf_t *node_rev,
if (representation->dir)
{
char *newline_pos = strchr(val_pos, '\n');
- svn_checksum_t checksum = {representation->dir->target_md5,
- svn_checksum_md5};
- const char* temp = apr_psprintf(scratch_pool, "%ld %" APR_UINT64_T_FMT " %"
- APR_UINT64_T_FMT" %" APR_SIZE_T_FMT " %s",
+ svn_checksum_t checksum;
+ const char* temp = apr_psprintf(scratch_pool, "%ld %" APR_SIZE_T_FMT " %"
+ APR_SIZE_T_FMT" %" APR_SIZE_T_FMT " %s",
representation->revision->revision,
representation->target.offset - representation->revision->target.offset,
representation->target.size,
@@ -2480,6 +2479,8 @@ update_text(svn_stringbuf_t *node_rev,
svn_checksum_to_cstring(&checksum,
scratch_pool));
+ checksum.digest = representation->dir->target_md5;
+ checksum.kind = svn_checksum_md5;
svn_stringbuf_replace(node_rev,
val_pos - node_rev->data, newline_pos - val_pos,
temp, strlen(temp));
@@ -2491,7 +2492,7 @@ update_text(svn_stringbuf_t *node_rev,
val_pos = end_pos + 1;
end_pos = strchr(strchr(val_pos, ' ') + 1, ' ');
- temp = apr_psprintf(scratch_pool, "%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT,
+ temp = apr_psprintf(scratch_pool, "%" APR_SIZE_T_FMT " %" APR_SIZE_T_FMT,
representation->target.offset - representation->revision->target.offset,
representation->target.size);
@@ -2520,7 +2521,7 @@ get_fragment_content(svn_string_t **cont
case header_fragment:
info = fragment->data;
*content = svn_string_createf(pool,
- "\n%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
+ "\n%" APR_SIZE_T_FMT " %" APR_SIZE_T_FMT "\n",
info->root_noderev->target.offset - info->target.offset,
info->target.changes);
return SVN_NO_ERROR;
@@ -2557,7 +2558,7 @@ get_fragment_content(svn_string_t **cont
header = svn_stringbuf_create("DELTA\n", pool);
else
header = svn_stringbuf_createf(pool,
- "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
+ "DELTA %ld %" APR_SIZE_T_FMT " %" APR_SIZE_T_FMT "\n",
representation->delta_base->revision->revision,
representation->delta_base->target.offset
- representation->delta_base->revision->target.offset,
@@ -2600,7 +2601,7 @@ get_fragment_content(svn_string_t **cont
{
representation_t *base_rep = representation->delta_base;
header = svn_stringbuf_createf(pool,
- "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
+ "DELTA %ld %" APR_SIZE_T_FMT " %" APR_SIZE_T_FMT "\n",
base_rep->revision->revision,
base_rep->target.offset - base_rep->revision->target.offset,
base_rep->target.size);
Modified: subversion/branches/issue-4194-dev/tools/server-side/fsfs-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/issue-4194-dev/tools/server-side/fsfs-stats.c?rev=1414433&r1=1414432&r2=1414433&view=diff
==============================================================================
--- subversion/branches/issue-4194-dev/tools/server-side/fsfs-stats.c (original)
+++ subversion/branches/issue-4194-dev/tools/server-side/fsfs-stats.c Tue Nov 27 22:13:24 2012
@@ -81,7 +81,7 @@ typedef struct representation_t
/* revision that contains this representation
* (may be referenced by other revisions, though) */
- apr_uint32_t revision;
+ svn_revnum_t revision;
apr_uint32_t ref_count;
/* length of the PLAIN / DELTA line in the source file in bytes */
@@ -418,7 +418,7 @@ read_revision_header(apr_size_t *changes
{
char buf[64];
const char *line;
- const char *space;
+ char *space;
apr_uint64_t val;
apr_size_t len;
@@ -447,7 +447,7 @@ read_revision_header(apr_size_t *changes
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Final line in revision file missing space"));
- *(char *)space = 0;
+ *space = 0;
SVN_ERR(svn_cstring_strtoui64(&val, line+1, 0, APR_SIZE_MAX, 10));
*root_noderev = (apr_size_t)val;
@@ -588,8 +588,8 @@ key_matches(svn_string_t *string, const
static int
compare_representation_offsets(const void *data, const void *key)
{
- apr_ssize_t diff = (*(const representation_t **)data)->offset
- - *(const apr_size_t *)key;
+ apr_ssize_t diff = (*(const representation_t *const *)data)->offset
+ - *(const apr_size_t *)key;
/* sizeof(int) may be < sizeof(ssize_t) */
if (diff < 0)
@@ -601,7 +601,7 @@ static representation_t *
find_representation(int *idx,
fs_fs_t *fs,
revision_info_t **revision_info,
- int revision,
+ svn_revnum_t revision,
apr_size_t offset)
{
revision_info_t *info;
@@ -645,7 +645,8 @@ read_rep_base(representation_t **represe
apr_pool_t *scratch_pool)
{
char *str, *last_str;
- int idx, revision;
+ int idx;
+ svn_revnum_t revision;
apr_uint64_t temp;
const char *buffer = file_content->data + offset;
@@ -673,7 +674,7 @@ read_rep_base(representation_t **represe
/* We hopefully have a DELTA vs. a non-empty base revision. */
str = svn_cstring_tokenize(" ", &last_str);
str = svn_cstring_tokenize(" ", &last_str);
- SVN_ERR(svn_cstring_atoi(&revision, str));
+ SVN_ERR(svn_revnum_parse(&revision, str, NULL));
str = svn_cstring_tokenize(" ", &last_str);
SVN_ERR(svn_cstring_strtoui64(&temp, str, 0, APR_SIZE_MAX, 10));
@@ -692,7 +693,7 @@ parse_representation(representation_t **
apr_pool_t *scratch_pool)
{
representation_t *result;
- int revision;
+ svn_revnum_t revision;
apr_uint64_t offset;
apr_uint64_t size;
@@ -700,7 +701,7 @@ parse_representation(representation_t **
int idx;
char *c = (char *)value->data;
- SVN_ERR(svn_cstring_atoi(&revision, svn_cstring_tokenize(" ", &c)));
+ SVN_ERR(svn_revnum_parse(&revision, svn_cstring_tokenize(" ", &c), NULL));
SVN_ERR(svn_cstring_strtoui64(&offset, svn_cstring_tokenize(" ", &c), 0, APR_SIZE_MAX, 10));
SVN_ERR(svn_cstring_strtoui64(&size, svn_cstring_tokenize(" ", &c), 0, APR_SIZE_MAX, 10));
SVN_ERR(svn_cstring_strtoui64(&expanded_size, svn_cstring_tokenize(" ", &c), 0, APR_SIZE_MAX, 10));
@@ -907,7 +908,7 @@ parse_dir(fs_fs_t *fs,
text_pool));
current = text->data;
- revision_key = apr_psprintf(text_pool, "r%d/", representation->revision);
+ revision_key = apr_psprintf(text_pool, "r%ld/", representation->revision);
key_len = strlen(revision_key);
/* Translate the string dir entries into real entries. */
@@ -923,9 +924,9 @@ parse_dir(fs_fs_t *fs,
next = current ? strchr(++current, '\n') : NULL;
if (next == NULL)
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
- _("Corrupt directory representation in rev %d at offset %ld"),
+ _("Corrupt directory representation in rev %ld at offset %ld"),
representation->revision,
- representation->offset);
+ (long)representation->offset);
*next = 0;
current = strstr(current, revision_key);