You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2017/12/07 14:42:10 UTC
svn commit: r1817375 [2/2] - in /subversion/branches/shelve-checkpoint: ./
build/generator/ subversion/include/ subversion/include/private/
subversion/libsvn_client/ subversion/libsvn_fs_fs/
subversion/libsvn_ra_serf/ subversion/libsvn_ra_svn/ subversi...
Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py Thu Dec 7 14:42:10 2017
@@ -129,6 +129,15 @@ def check_hotcopy_fsfs_fsx(src, dst):
if src_file == 'rep-cache.db':
db1 = svntest.sqlite3.connect(src_path)
db2 = svntest.sqlite3.connect(dst_path)
+ schema1 = db1.execute("pragma user_version").fetchone()[0]
+ schema2 = db2.execute("pragma user_version").fetchone()[0]
+ if schema1 != schema2:
+ raise svntest.Failure("rep-cache schema differs: '%s' vs. '%s'"
+ % (schema1, schema2))
+ # Can't test newer rep-cache schemas with an old built-in SQLite.
+ if schema1 >= 2 and svntest.sqlite3.sqlite_version_info < (3, 8, 2):
+ continue
+
rows1 = []
rows2 = []
for row in db1.execute("select * from rep_cache order by hash"):
@@ -746,7 +755,7 @@ def verify_windows_paths_in_repos(sbox):
"* Verified revision 0.\n",
"* Verified revision 1.\n",
"* Verified revision 2.\n"], output)
- elif svntest.main.fs_has_rep_sharing():
+ elif svntest.main.fs_has_rep_sharing() and not svntest.main.is_fs_type_bdb():
svntest.verify.compare_and_display_lines(
"Error while running 'svnadmin verify'.",
'STDOUT', ["* Verifying repository metadata ...\n",
@@ -790,6 +799,10 @@ def fsfs_file(repo_dir, kind, rev):
def verify_incremental_fsfs(sbox):
"""svnadmin verify detects corruption dump can't"""
+ if svntest.main.options.fsfs_version is not None and \
+ svntest.main.options.fsfs_version not in [4, 6]:
+ raise svntest.Skip("Unsupported prepackaged repository version")
+
# setup a repo with a directory 'c:hi'
# use physical addressing as this is hard to provoke with logical addressing
sbox.build(create_wc = False,
@@ -807,7 +820,7 @@ def verify_incremental_fsfs(sbox):
# the listing itself is valid.
r2 = fsfs_file(sbox.repo_dir, 'revs', '2')
if r2.endswith('pack'):
- raise svntest.Skip('Test doesn\'t handle packed revisions')
+ raise svntest.Skip("Test doesn't handle packed revisions")
fp = open(r2, 'wb')
fp.write(b"""id: 0-2.0.r2/0
@@ -1654,6 +1667,10 @@ text
def verify_non_utf8_paths(sbox):
"svnadmin verify with non-UTF-8 paths"
+ if svntest.main.options.fsfs_version is not None and \
+ svntest.main.options.fsfs_version not in [4, 6]:
+ raise svntest.Skip("Unsupported prepackaged repository version")
+
dumpfile = clean_dumpfile()
# Corruption only possible in physically addressed revisions created
@@ -1682,9 +1699,6 @@ def verify_non_utf8_paths(sbox):
elif line == b"text: 1 340 44 32 a6be7b4cf075fd39e6a99eb69a31232b\n":
# phys, deltified directories: fix up the representation checksum
fp_new.write(b"text: 1 340 44 32 f2e93e73272cac0f18fccf16f224eb93\n")
- elif line == b"text: 1 6 31 31 90f306aa9bfd72f456072076a2bd94f7\n":
- # log addressing: fix up the representation checksum
- fp_new.write(b"text: 1 6 31 31 db2d4a0bad5dff0aea9a288dec02f1fb\n")
elif line == b"cpath: /A\n":
# also fix up the 'created path' field
fp_new.write(b"cpath: /\xE6\n")
@@ -2520,7 +2534,7 @@ def verify_denormalized_names(sbox):
".*Verified revision 7."]
# The BDB backend doesn't do global metadata verification.
- if (svntest.main.fs_has_rep_sharing()):
+ if (svntest.main.fs_has_rep_sharing() and not svntest.main.is_fs_type_bdb()):
expected_output_regex_list.insert(0, ".*Verifying repository metadata.*")
if svntest.main.options.fsfs_sharding is not None:
@@ -3351,6 +3365,7 @@ def dump_no_op_change(sbox):
sbox2.repo_url + '/bar')
@XFail(svntest.main.is_fs_type_bdb)
+@XFail(svntest.main.is_fs_type_fsx)
@Issue(4623)
def dump_no_op_prop_change(sbox):
"svnadmin dump with no-op property change"
Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/__init__.py Thu Dec 7 14:42:10 2017
@@ -35,11 +35,8 @@ if sys.hexversion < 0x2070000:
try:
import sqlite3
except ImportError:
- try:
- from pysqlite2 import dbapi2 as sqlite3
- except ImportError:
- sys.stderr.write('[SKIPPED] Python sqlite3 module required\n')
- sys.exit(0)
+ sys.stderr.write('[SKIPPED] Python sqlite3 module required\n')
+ sys.exit(0)
# don't export this name
del sys
Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py Thu Dec 7 14:42:10 2017
@@ -1574,9 +1574,11 @@ def is_fs_log_addressing():
return is_fs_type_fsx() or \
(is_fs_type_fsfs() and options.server_minor_version >= 9)
+def fs_has_sha1():
+ return fs_has_rep_sharing()
+
def fs_has_rep_sharing():
- return is_fs_type_fsx() or \
- (is_fs_type_fsfs() and options.server_minor_version >= 6)
+ return options.server_minor_version >= 6
def fs_has_pack():
return is_fs_type_fsx() or \
@@ -2216,19 +2218,18 @@ def parse_options(arglist=sys.argv[1:],
% SVN_VER_MINOR)
# Make sure the server-minor-version matches the fsfs-version parameter.
+ #
+ # Server versions that introduced the respective FSFS formats:
+ introducing_version = { 1:1, 2:4, 3:5, 4:6, 6:8, 7:9 }
if options.fsfs_version:
- if options.fsfs_version == 6:
- if options.server_minor_version \
- and options.server_minor_version != 8 \
- and options.server_minor_version != SVN_VER_MINOR:
- parser.error("--fsfs-version=6 requires --server-minor-version=8")
- options.server_minor_version = 8
- if options.fsfs_version == 4:
+ if options.fsfs_version in introducing_version:
+ introduced_in = introducing_version[options.fsfs_version]
if options.server_minor_version \
- and options.server_minor_version != 7 \
+ and options.server_minor_version != introduced_in \
and options.server_minor_version != SVN_VER_MINOR:
- parser.error("--fsfs-version=4 requires --server-minor-version=7")
- options.server_minor_version = 7
+ parser.error("--fsfs-version=%d requires --server-minor-version=%d" \
+ % (options.fsfs_version, introduced_in))
+ options.server_minor_version = introduced_in
pass
# ### Add more tweaks here if and when we support pre-cooked versions
# ### of FSFS repositories.
Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py Thu Dec 7 14:42:10 2017
@@ -467,10 +467,11 @@ def verify_exit_code(message, actual, ex
# A simple dump file parser. While sufficient for the current
# testsuite it doesn't cope with all valid dump files.
class DumpParser:
- def __init__(self, lines):
+ def __init__(self, lines, ignore_sha1=False):
self.current = 0
self.lines = lines
self.parsed = {}
+ self.ignore_sha1 = ignore_sha1
def parse_line(self, regex, required=True):
m = re.match(regex, self.lines[self.current])
@@ -660,6 +661,9 @@ class DumpParser:
if not header in headers:
node[key] = None
continue
+ if self.ignore_sha1 and (key in ['copy_sha1', 'text_sha1']):
+ node[key] = None
+ continue
m = re.match(regex, headers[header])
if not m:
raise SVNDumpParseError("expected '%s' at line %d\n%s"
@@ -735,8 +739,7 @@ def compare_dump_files(message, label, e
of lines as returned by run_and_verify_dump, and check that the same
revisions, nodes, properties, etc. are present in both dumps.
"""
-
- parsed_expected = DumpParser(expected).parse()
+ parsed_expected = DumpParser(expected, not svntest.main.fs_has_sha1()).parse()
parsed_actual = DumpParser(actual).parse()
if ignore_uuid:
Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/wc.py Thu Dec 7 14:42:10 2017
@@ -1092,17 +1092,8 @@ def svn_uri_quote(url):
def python_sqlite_can_read_wc():
"""Check if the Python builtin is capable enough to peek into wc.db"""
-
- try:
- db = svntest.sqlite3.connect('')
-
- c = db.cursor()
- c.execute('select sqlite_version()')
- ver = tuple(map(int, c.fetchall()[0][0].split('.')))
-
- return ver >= (3, 6, 18) # Currently enough (1.7-1.9)
- except:
- return False
+ # Currently enough (1.7-1.9)
+ return svntest.sqlite3.sqlite_version_info >= (3, 6, 18)
def open_wc_db(local_path):
"""Open the SQLite DB for the WC path LOCAL_PATH.
Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py Thu Dec 7 14:42:10 2017
@@ -6840,6 +6840,21 @@ def update_delete_switched(sbox):
svntest.actions.run_and_verify_update(wc_dir, None, None, expected_status,
[], False, sbox.ospath('A'), '-r', 0)
+@XFail()
+def update_add_missing_local_add(sbox):
+ "update adds missing local addition"
+
+ sbox.build(read_only=True)
+
+ # Note that updating 'A' to r0 doesn't reproduce this issue...
+ sbox.simple_update('', revision='0')
+ sbox.simple_mkdir('A')
+ sbox.simple_add_text('mumumu', 'A/mu')
+ os.unlink(sbox.ospath('A/mu'))
+ os.rmdir(sbox.ospath('A'))
+
+ sbox.simple_update()
+
#######################################################################
# Run the tests
@@ -6930,6 +6945,7 @@ test_list = [ None,
update_add_conflicted_deep,
missing_tmp_update,
update_delete_switched,
+ update_add_missing_local_add,
]
if __name__ == '__main__':
Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_ra/ra-test.c Thu Dec 7 14:42:10 2017
@@ -427,17 +427,7 @@ lock_cb(void *baton,
struct lock_result_t *result = apr_palloc(b->pool,
sizeof(struct lock_result_t));
- if (lock)
- {
- result->lock = apr_palloc(b->pool, sizeof(svn_lock_t));
- *result->lock = *lock;
- result->lock->path = apr_pstrdup(b->pool, lock->path);
- result->lock->token = apr_pstrdup(b->pool, lock->token);
- result->lock->owner = apr_pstrdup(b->pool, lock->owner);
- result->lock->comment = apr_pstrdup(b->pool, lock->comment);
- }
- else
- result->lock = NULL;
+ result->lock = svn_lock_dup(lock, b->pool);
result->err = ra_err;
svn_hash_sets(b->results, apr_pstrdup(b->pool, path), result);
@@ -1682,6 +1672,118 @@ commit_empty_last_change(const svn_test_
return SVN_NO_ERROR;
}
+static svn_error_t *
+commit_locked_file(const svn_test_opts_t *opts, apr_pool_t *pool)
+{
+ const char *url;
+ svn_ra_callbacks2_t *cbtable;
+ svn_ra_session_t *session;
+ const svn_delta_editor_t *editor;
+ void *edit_baton;
+ void *root_baton;
+ void *file_baton;
+ struct lock_result_t *lock_result;
+ apr_hash_t *lock_tokens;
+ svn_txdelta_window_handler_t handler;
+ void *handler_baton;
+ svn_revnum_t fetched_rev;
+ apr_hash_t *fetched_props;
+ const svn_string_t *propval;
+
+ SVN_ERR(svn_test__create_repos2(NULL, &url, NULL,
+ "test-repo-commit-locked-file-test",
+ opts, pool, pool));
+
+ SVN_ERR(svn_ra_initialize(pool));
+ SVN_ERR(svn_ra_create_callbacks(&cbtable, pool));
+ SVN_ERR(svn_test__init_auth_baton(&cbtable->auth_baton, pool));
+
+ SVN_ERR(svn_ra_open4(&session, NULL, url, NULL, cbtable,
+ NULL, NULL, pool));
+ SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &edit_baton,
+ apr_hash_make(pool),
+ NULL, NULL, NULL, TRUE, pool));
+ /* Add a file. */
+ SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM,
+ pool, &root_baton));
+ SVN_ERR(editor->add_file("file", root_baton, NULL, SVN_INVALID_REVNUM,
+ pool, &file_baton));
+ SVN_ERR(editor->close_file(file_baton, NULL, pool));
+ SVN_ERR(editor->close_directory(root_baton, pool));
+ SVN_ERR(editor->close_edit(edit_baton, pool));
+
+ /* Acquire a lock on this file. */
+ {
+ struct lock_baton_t baton = {0};
+ svn_revnum_t rev = 1;
+ apr_hash_t *lock_targets;
+
+ baton.results = apr_hash_make(pool);
+ baton.pool = pool;
+
+ lock_targets = apr_hash_make(pool);
+ svn_hash_sets(lock_targets, "file", &rev);
+ SVN_ERR(svn_ra_lock(session, lock_targets, "comment", FALSE,
+ lock_cb, &baton, pool));
+
+ SVN_ERR(expect_lock("file", baton.results, session, pool));
+ lock_result = svn_hash_gets(baton.results, "file");
+ }
+
+ /* Open a new session using the file parent's URL. */
+ SVN_ERR(svn_ra_open4(&session, NULL, url, NULL, cbtable,
+ NULL, NULL, pool));
+
+ /* Create a new commit editor supplying our lock token. */
+ lock_tokens = apr_hash_make(pool);
+ svn_hash_sets(lock_tokens, "file", lock_result->lock->token);
+ SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &edit_baton,
+ apr_hash_make(pool), NULL, NULL,
+ lock_tokens, TRUE, pool));
+ /* Edit the locked file. */
+ SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM,
+ pool, &root_baton));
+ SVN_ERR(editor->open_file("file", root_baton, SVN_INVALID_REVNUM, pool,
+ &file_baton));
+ SVN_ERR(editor->apply_textdelta(file_baton, NULL, pool, &handler,
+ &handler_baton));
+ SVN_ERR(svn_txdelta_send_string(svn_string_create("A", pool),
+ handler, handler_baton, pool));
+ SVN_ERR(editor->close_file(file_baton, NULL, pool));
+ SVN_ERR(editor->close_directory(root_baton, pool));
+ SVN_ERR(editor->close_edit(edit_baton, pool));
+
+ /* Check the result. */
+ SVN_ERR(svn_ra_get_file(session, "file", SVN_INVALID_REVNUM, NULL,
+ &fetched_rev, NULL, pool));
+ SVN_TEST_INT_ASSERT((int) fetched_rev, 2);
+
+ /* Change property of the locked file. */
+ SVN_ERR(svn_ra_get_commit_editor3(session, &editor, &edit_baton,
+ apr_hash_make(pool), NULL, NULL,
+ lock_tokens, TRUE, pool));
+ SVN_ERR(editor->open_root(edit_baton, SVN_INVALID_REVNUM,
+ pool, &root_baton));
+ SVN_ERR(editor->open_file("file", root_baton, SVN_INVALID_REVNUM, pool,
+ &file_baton));
+ SVN_ERR(editor->change_file_prop(file_baton, "propname",
+ svn_string_create("propval", pool),
+ pool));
+ SVN_ERR(editor->close_file(file_baton, NULL, pool));
+ SVN_ERR(editor->close_directory(root_baton, pool));
+ SVN_ERR(editor->close_edit(edit_baton, pool));
+
+ /* Check the result. */
+ SVN_ERR(svn_ra_get_file(session, "file", SVN_INVALID_REVNUM, NULL,
+ &fetched_rev, &fetched_props, pool));
+ SVN_TEST_INT_ASSERT((int) fetched_rev, 3);
+ propval = svn_hash_gets(fetched_props, "propname");
+ SVN_TEST_ASSERT(propval);
+ SVN_TEST_STRING_ASSERT(propval->data, "propval");
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
@@ -1716,6 +1818,8 @@ static struct svn_test_descriptor_t test
"verify checkout over a tunnel"),
SVN_TEST_OPTS_PASS(commit_empty_last_change,
"check how last change applies to empty commit"),
+ SVN_TEST_OPTS_PASS(commit_locked_file,
+ "check commit editor for a locked file"),
SVN_TEST_NULL
};
Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c (original)
+++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/subst_translate-test.c Thu Dec 7 14:42:10 2017
@@ -158,7 +158,7 @@ test_svn_subst_translate_string2_null_en
};
const char **other_locale;
- strncpy(orig_lc_all, setlocale(LC_ALL, NULL), sizeof (orig_lc_all));
+ strncpy(orig_lc_all, setlocale(LC_ALL, NULL), sizeof (orig_lc_all) - 1);
for (other_locale = other_locales; *other_locale != NULL; ++other_locale)
{
Modified: subversion/branches/shelve-checkpoint/tools/client-side/bash_completion
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/bash_completion?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/tools/client-side/bash_completion (original)
+++ subversion/branches/shelve-checkpoint/tools/client-side/bash_completion Thu Dec 7 14:42:10 2017
@@ -883,8 +883,8 @@ _svn()
--force"
;;
cleanup)
- cmdOpts="--diff3-cmd $pOpts --include-externals -q --quiet\
- --remove-ignored --remove-unversioned"
+ cmdOpts="$pOpts --include-externals -q --quiet\
+ --remove-ignored --remove-unversioned --vacuum-pristines"
;;
commit|ci)
cmdOpts="$mOpts $qOpts $nOpts --targets --editor-cmd $pOpts \
@@ -953,7 +953,7 @@ _svn()
cmdOpts="$mOpts $qOpts --editor-cmd $pOpts --parents"
;;
move|mv|rename|ren)
- cmdOpts="$mOpts $rOpts $qOpts --force --editor-cmd $pOpts \
+ cmdOpts="$mOpts $qOpts --force --editor-cmd $pOpts \
--parents --allow-mixed-revisions"
;;
patch)
@@ -1006,7 +1006,7 @@ _svn()
$rOpts $cOpts"
;;
switch|sw)
- cmdOpts="--relocate $rOpts $nOpts $qOpts $pOpts --diff3-cmd \
+ cmdOpts="$rOpts $nOpts $qOpts $pOpts --diff3-cmd \
--force --accept --ignore-externals --set-depth \
--ignore-ancestry"
;;
@@ -1026,13 +1026,13 @@ _svn()
cmdOpts="$qOpts save restore list --list"
;;
shelve)
- cmdOpts="$qOpts --keep-local --delete --list $qOpts --dry-run --depth --targets $cOpts"
+ cmdOpts="$qOpts --keep-local --delete --list -m --message -F --file --encoding --force-log --editor-cmd --dry-run --depth --targets $cOpts $pOpts"
;;
unshelve)
- cmdOpts="$qOpts --list $qOpts --dry-run"
+ cmdOpts="$qOpts --list $pOpts --dry-run"
;;
shelves)
- cmdOpts="$qOpts"
+ cmdOpts="$qOpts $pOpts"
;;
*)
;;
Modified: subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test
URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test?rev=1817375&r1=1817374&r2=1817375&view=diff
==============================================================================
--- subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test (original)
+++ subversion/branches/shelve-checkpoint/tools/client-side/bash_completion_test Thu Dec 7 14:42:10 2017
@@ -117,7 +117,7 @@ get_svn_options() {
# Remove deprecated options
grep -v deprecated |
# Find the relevant lines; remove "arg" and description.
- sed -n -e '1,/^Valid options:$/d;/^ -/!d' \
+ sed -n -e '1,/^\(Valid\|Global\) options:$/d;/^ -/!d' \
-e 's/\( ARG\)* * : .*//;p' |
# Remove brackets; put each word on its own line.
tr -d '] ' | tr '[' '\n'