You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/04/25 02:24:12 UTC
svn commit: r1589916 [2/2] - in /subversion/branches/1.8.x-r1579588: ./
build/ac-macros/ subversion/bindings/javahl/native/
subversion/bindings/swig/ subversion/bindings/swig/ruby/libsvn_swig_ruby/
subversion/bindings/swig/ruby/test/ subversion/include...
Modified: subversion/branches/1.8.x-r1579588/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/svnserve/serve.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/svnserve/serve.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/svnserve/serve.c Fri Apr 25 00:24:11 2014
@@ -1526,6 +1526,9 @@ static svn_error_t *get_file(svn_ra_svn_
&want_props, &want_contents,
&wants_inherited_props));
+ if (wants_inherited_props == SVN_RA_SVN_UNSPECIFIED_NUMBER)
+ wants_inherited_props = FALSE;
+
full_path = svn_fspath__join(b->fs_path->data,
svn_relpath_canonicalize(path, pool), pool);
@@ -1545,8 +1548,14 @@ static svn_error_t *get_file(svn_ra_svn_
SVN_CMD_ERR(svn_fs_file_checksum(&checksum, svn_checksum_md5, root,
full_path, TRUE, pool));
hex_digest = svn_checksum_to_cstring_display(checksum, pool);
+
+ /* Fetch the file's explicit and/or inherited properties if
+ requested. Although the wants-iprops boolean was added to the
+ protocol in 1.8 a standard 1.8 client never requests iprops. */
if (want_props || wants_inherited_props)
- SVN_CMD_ERR(get_props(&props, &inherited_props, &ab, root, full_path,
+ SVN_CMD_ERR(get_props(want_props ? &props : NULL,
+ wants_inherited_props ? &inherited_props : NULL,
+ &ab, root, full_path,
pool));
if (want_contents)
SVN_CMD_ERR(svn_fs_file_contents(&contents, root, full_path, pool));
@@ -1640,6 +1649,9 @@ static svn_error_t *get_dir(svn_ra_svn_c
&dirent_fields_list,
&wants_inherited_props));
+ if (wants_inherited_props == SVN_RA_SVN_UNSPECIFIED_NUMBER)
+ wants_inherited_props = FALSE;
+
if (! dirent_fields_list)
{
dirent_fields = SVN_DIRENT_ALL;
@@ -1689,10 +1701,13 @@ static svn_error_t *get_dir(svn_ra_svn_c
/* Fetch the root of the appropriate revision. */
SVN_CMD_ERR(svn_fs_revision_root(&root, b->fs, rev, pool));
- /* Fetch the directory's explicit and/or inherited properties
- if requested. */
+ /* Fetch the directory's explicit and/or inherited properties if
+ requested. Although the wants-iprops boolean was added to the
+ protocol in 1.8 a standard 1.8 client never requests iprops. */
if (want_props || wants_inherited_props)
- SVN_CMD_ERR(get_props(&props, &inherited_props, &ab, root, full_path,
+ SVN_CMD_ERR(get_props(want_props ? &props : NULL,
+ wants_inherited_props ? &inherited_props : NULL,
+ &ab, root, full_path,
pool));
/* Begin response ... */
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/commit_tests.py?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/commit_tests.py Fri Apr 25 00:24:11 2014
@@ -2545,6 +2545,16 @@ def start_commit_hook_test(sbox):
'STDERR',
expected_stderr, actual_stderr)
+ # Now list the txns in the repo. The list should be empty.
+ exit_code, output, errput = svntest.main.run_svnadmin('lstxns',
+ sbox.repo_dir)
+ svntest.verify.compare_and_display_lines(
+ "Error running 'svnadmin lstxns'.",
+ 'STDERR', [], errput)
+ svntest.verify.compare_and_display_lines(
+ "Output of 'svnadmin lstxns' is unexpected.",
+ 'STDOUT', [], output)
+
#----------------------------------------------------------------------
@Issue(3553)
def pre_commit_hook_test(sbox):
@@ -2998,7 +3008,64 @@ def commit_cp_with_deep_delete(sbox):
None,
wc_dir)
-
+def commit_deep_deleted(sbox):
+ "try to commit a deep descendant of a deleted node"
+
+ sbox.build()
+
+ sbox.simple_move('A', 'AA')
+
+ sbox.simple_propset('k', 'v', 'AA/D/G')
+
+ # Committing some added descendant returns a proper error
+ expected_err = ('svn: E200009: \'%s\' is not known to exist in the ' +
+ 'repository and is not part of the commit, yet its ' +
+ 'child \'%s\' is part of the commit') % (
+ re.escape(os.path.abspath(sbox.ospath('AA'))),
+ re.escape(os.path.abspath(sbox.ospath('AA/D/G'))))
+
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ expected_err,
+ sbox.ospath('AA/D/G'))
+
+ sbox.simple_propdel('k', 'AA/D/G')
+ sbox.simple_rm('AA/D/G')
+
+ # But a delete fails..
+ # This used to trigger an assertion in Subversion 1.8.0-1.8.8, because
+ # the status walker couldn't find the repository path for AA/D/G
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ expected_err,
+ sbox.ospath('AA/D/G'))
+
+ # And now commit like how a GUI client would do it, but forgetting the move
+ expected_err = ('svn: E200009: Cannot commit \'%s\' because it was moved ' +
+ 'from \'%s\' which is not part of the commit; both sides ' +
+ 'of the move must be committed together') % (
+ re.escape(os.path.abspath(sbox.ospath('AA'))),
+ re.escape(os.path.abspath(sbox.ospath('A'))))
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ expected_err,
+ '--depth', 'empty',
+ sbox.ospath('AA/D/G'),
+ sbox.ospath('AA'))
+
+
+ # And now how it works
+ svntest.actions.run_and_verify_commit(sbox.wc_dir,
+ None,
+ None,
+ [],
+ '--depth', 'empty',
+ sbox.ospath('AA/D/G'),
+ sbox.ospath('AA'),
+ sbox.ospath('A'))
########################################################################
# Run the tests
@@ -3072,6 +3139,7 @@ test_list = [ None,
commit_danglers,
last_changed_of_copied_subdir,
commit_cp_with_deep_delete,
+ commit_deep_deleted,
]
if __name__ == '__main__':
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/lock_tests.py Fri Apr 25 00:24:11 2014
@@ -1940,6 +1940,56 @@ def dav_lock_timeout(sbox):
+def non_root_locks(sbox):
+ "locks for working copies not at repos root"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'cp', sbox.repo_url, sbox.repo_url + '/X',
+ '-m', 'copy greek tree')
+
+ sbox.simple_switch(sbox.repo_url + '/X')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Lock a file
+ svntest.actions.run_and_verify_svn(None, ".*locked by user", [],
+ 'lock', sbox.ospath('A/D/G/pi'),
+ '-m', '')
+ expected_status.tweak('A/D/G/pi', writelocked='K')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Updates don't break the lock
+ sbox.simple_update('A/D')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ sbox.simple_update('')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Break the lock
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'unlock', sbox.repo_url + '/X/A/D/G/pi')
+
+ # Subdir update reports the break
+ sbox.simple_update('A/D')
+ expected_status.tweak('A/D/G/pi', writelocked=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+ # Relock and break
+ svntest.actions.run_and_verify_svn(None, ".*locked by user", [],
+ 'lock', sbox.ospath('A/D/G/pi'),
+ '-m', '')
+ expected_status.tweak('A/D/G/pi', writelocked='K')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'unlock', sbox.repo_url + '/X/A/D/G/pi')
+
+ # Root update reports the break
+ sbox.simple_update('')
+ expected_status.tweak('A/D/G/pi', writelocked=None)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
########################################################################
# Run the tests
@@ -1994,6 +2044,7 @@ test_list = [ None,
commit_stolen_lock,
drop_locks_on_parent_deletion,
dav_lock_timeout,
+ non_root_locks,
]
if __name__ == '__main__':
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_automatic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_automatic_tests.py?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_automatic_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_automatic_tests.py Fri Apr 25 00:24:11 2014
@@ -1202,6 +1202,132 @@ def effective_sync_results_in_reintegrat
svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
sbox.repo_url + '/branch', A_path)
+@Issue(4481)
+def reintegrate_subtree_not_updated(sbox):
+ "reintegrate subtree not updated"
+
+ sbox.build()
+
+ # Create change on branch 'D_1'
+ sbox.simple_copy('A/D', 'D_1')
+ sbox.simple_commit()
+ sbox.simple_append('D_1/G/pi', "D_1/G pi edit\n")
+ sbox.simple_append('D_1/H/chi', "D_1/H chi edit\n")
+ sbox.simple_commit()
+
+ # Merge back to 'D' with two subtree merges
+ expected_output = [
+ "--- Merging r2 through r3 into '"
+ + sbox.ospath('A/D/G') + "':\n",
+ "U "
+ + sbox.ospath('A/D/G/pi') + "\n",
+ "--- Recording mergeinfo for merge of r2 through r3 into '"
+ + sbox.ospath('A/D/G') + "':\n",
+ " U "
+ + sbox.ospath('A/D/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/D_1/G',
+ sbox.ospath('A/D/G'))
+ expected_output = [
+ "--- Merging r2 through r3 into '"
+ + sbox.ospath('A/D/H') + "':\n",
+ "U "
+ + sbox.ospath('A/D/H/chi') + "\n",
+ "--- Recording mergeinfo for merge of r2 through r3 into '"
+ + sbox.ospath('A/D/H') + "':\n",
+ " U "
+ + sbox.ospath('A/D/H') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/D_1/H',
+ sbox.ospath('A/D/H'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create branch 'D_2'
+ sbox.simple_copy('A/D', 'D_2')
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create change on 'D_2'
+ sbox.simple_append('D_2/G/pi', "D_2/G pi edit\n")
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Create change on 'D'
+ sbox.simple_append('A/D/G/rho', "D/G rho edit\n")
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Sync merge to 'D_2' (doesn't record mergeinfo on 'D_2/H' subtree)
+ expected_output = [
+ "--- Merging r5 through r7 into '"
+ + sbox.ospath('D_2') + "':\n",
+ "U "
+ + sbox.ospath('D_2/G/rho') + "\n",
+ "--- Recording mergeinfo for merge of r5 through r7 into '"
+ + sbox.ospath('D_2') + "':\n",
+ " U "
+ + sbox.ospath('D_2') + "\n",
+ "--- Recording mergeinfo for merge of r5 through r7 into '"
+ + sbox.ospath('D_2/G') + "':\n",
+ " U "
+ + sbox.ospath('D_2/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/A/D',
+ sbox.ospath('D_2'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # Reintegrate 'D_2' to 'D'
+ expected_output = [
+ "--- Merging differences between repository URLs into '"
+ + sbox.ospath('A/D') + "':\n",
+ "U "
+ + sbox.ospath('A/D/G/pi') + "\n",
+ " U "
+ + sbox.ospath('A/D/G') + "\n",
+ "--- Recording mergeinfo for merge between repository URLs into '"
+ + sbox.ospath('A/D') + "':\n",
+ " U "
+ + sbox.ospath('A/D') + "\n",
+ " U "
+ + sbox.ospath('A/D/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/D_2',
+ sbox.ospath('A/D'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
+ # merge to 'D_2'. This merge previously failed with this error:
+ #
+ # svn: E195016: Reintegrate can only be used if revisions 5 through 9 were
+ # previously merged from [URL]/D_2 to the reintegrate source, but this is
+ # not the case:
+ # A/D/G
+ # Missing ranges: /A/D/G:7
+ #
+ expected_output = [
+ "--- Merging differences between repository URLs into '"
+ + sbox.ospath('D_2') + "':\n",
+ " U "
+ + sbox.ospath('D_2/G') + "\n",
+ "--- Recording mergeinfo for merge between repository URLs into '"
+ + sbox.ospath('D_2') + "':\n",
+ " U "
+ + sbox.ospath('D_2') + "\n",
+ " G "
+ + sbox.ospath('D_2/G') + "\n"]
+ svntest.actions.run_and_verify_svn(None, expected_output, [],
+ 'merge',
+ sbox.repo_url + '/A/D',
+ sbox.ospath('D_2'))
+ sbox.simple_commit()
+ sbox.simple_update()
+
########################################################################
# Run the tests
@@ -1230,6 +1356,7 @@ test_list = [ None,
merge_replacement,
auto_merge_handles_replacements_in_merge_source,
effective_sync_results_in_reintegrate,
+ reintegrate_subtree_not_updated,
]
if __name__ == '__main__':
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_tests.py?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/merge_tests.py Fri Apr 25 00:24:11 2014
@@ -19143,6 +19143,159 @@ def merge_to_empty_target_merge_to_infin
# Commit the merge.
#sbox.simple_commit()
+def merge_dir_delete_force(sbox):
+ "merge a directory delete with --force"
+
+ sbox.build()
+
+ sbox.simple_rm('A/D/G')
+ sbox.simple_commit() # r2
+
+ sbox.simple_update(revision=1)
+
+ # Just merging r2 on r1 succeeds
+ svntest.actions.run_and_verify_svn(sbox.wc_dir, None, [],
+ 'merge', '-c2', '^/', sbox.wc_dir,
+ '--ignore-ancestry')
+
+ # Bring working copy to r1 again
+ svntest.actions.run_and_verify_svn(sbox.wc_dir, None, [],
+ 'revert', '-R', sbox.wc_dir)
+
+ # But when using --force this same merge caused a segfault in 1.8.0-1.8.8
+ svntest.actions.run_and_verify_svn(sbox.wc_dir, None, [],
+ 'merge', '-c2', '^/', sbox.wc_dir,
+ '--ignore-ancestry', '--force')
+
+def conflict_naming(sbox):
+ "verify conflict file naming"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+ sbox.simple_append('file.txt', 'This is the initial content\n')
+ sbox.simple_add('file.txt')
+ sbox.simple_commit()
+
+ sbox.simple_append('file.txt', 'This is the new content\n', truncate=True)
+ sbox.simple_commit()
+
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Update - no preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_output = svntest.wc.State(wc_dir, {
+ 'file.txt' : Item(status='C ')
+ })
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='2')
+ })
+
+ expected_disk.add({
+ 'file.txt.r3' : Item(contents="This is the new content\n"),
+ 'file.txt.r2' : Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .mine\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .r2\n"),
+ 'file.txt.mine' : Item(contents="This is conflicting content\n"),
+ })
+ svntest.actions.run_and_verify_update(wc_dir,
+ expected_output, expected_disk,
+ expected_status,
+ None, None, None,
+ None, None, None,
+ wc_dir, '-r', '2')
+
+ sbox.simple_revert('file.txt')
+ sbox.simple_update('', revision=3)
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Update - preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_output = svntest.wc.State(wc_dir, {
+ 'file.txt' : Item(status='C ')
+ })
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='2')
+ })
+
+ expected_disk.add({
+ 'file.txt.r3.txt' : Item(contents="This is the new content\n"),
+ 'file.txt.r2.txt' : Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .mine.txt\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .r2.txt\n"),
+ 'file.txt.mine.txt' : Item(contents="This is conflicting content\n"),
+ })
+ svntest.actions.run_and_verify_update(
+ wc_dir,
+ expected_output, expected_disk, expected_status,
+ None, None, None, None, None, None,
+ wc_dir, '-r', '2',
+ '--config-option',
+ 'config:miscellany:preserved-conflict-file-exts=' +
+ 'c txt h')
+
+ sbox.simple_revert('file.txt')
+ sbox.simple_update('', revision=3)
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Merge - no preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='3')
+ })
+ expected_disk.add({
+ 'file.txt.merge-left.r3' : Item(contents="This is the new content\n"),
+ 'file.txt.merge-right.r2': Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .working\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .merge-right.r2\n"),
+ 'file.txt.working' : Item(contents="This is conflicting content\n"),
+ })
+
+ svntest.actions.run_and_verify_svn(wc_dir, None, [],
+ 'merge', '-c-3', '^/', sbox.ospath(''))
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
+ sbox.simple_revert('file.txt')
+ sbox.simple_append('file.txt', 'This is conflicting content\n', truncate=True)
+
+ # Merge - preserve ext
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+ expected_disk = svntest.main.greek_state.copy()
+ expected_status.add({
+ 'file.txt' : Item(status='C ', wc_rev='3')
+ })
+ expected_disk.add({
+ 'file.txt.merge-left.r3.txt' : Item(contents="This is the new content\n"),
+ 'file.txt.merge-right.r2.txt': Item(contents="This is the initial content\n"),
+ 'file.txt' : Item(contents="<<<<<<< .working.txt\n" \
+ "This is conflicting content\n" \
+ "=======\n" \
+ "This is the initial content\n" \
+ ">>>>>>> .merge-right.r2.txt\n"),
+ 'file.txt.working.txt' : Item(contents="This is conflicting content\n"),
+ })
+
+ svntest.actions.run_and_verify_svn(
+ wc_dir, None, [],
+ 'merge', '-c-3', '^/', sbox.ospath(''),
+ '--config-option',
+ 'config:miscellany:preserved-conflict-file-exts=' +
+ 'c txt h')
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.actions.verify_disk(wc_dir, expected_disk)
+
########################################################################
# Run the tests
@@ -19288,6 +19441,8 @@ test_list = [ None,
single_editor_drive_merge_notifications,
conflicted_split_merge_with_resolve,
merge_to_empty_target_merge_to_infinite_target,
+ merge_dir_delete_force,
+ conflict_naming,
]
if __name__ == '__main__':
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/prop_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/prop_tests.py?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/prop_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/prop_tests.py Fri Apr 25 00:24:11 2014
@@ -2654,6 +2654,20 @@ def iprops_list_abspath(sbox):
'--show-inherited-props', '-v',
os.path.abspath(sbox.ospath('')))
+def wc_propop_on_url(sbox):
+ "perform wc specific operations on url"
+
+ sbox.build(create_wc = False)
+
+ svntest.actions.run_and_verify_svn(None, None, '.*E195000:.*path',
+ 'pl', '-r', 'PREV',
+ sbox.repo_url)
+
+ svntest.actions.run_and_verify_svn(None, None, '.*E195000:.*path',
+ 'pg', 'my:Q', '-r', 'PREV',
+ sbox.repo_url)
+
+
########################################################################
# Run the tests
@@ -2700,6 +2714,7 @@ test_list = [ None,
almost_known_prop_names,
peg_rev_base_working,
iprops_list_abspath,
+ wc_propop_on_url,
]
if __name__ == '__main__':
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/svndumpfilter_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/svndumpfilter_tests.py?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/svndumpfilter_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/svndumpfilter_tests.py Fri Apr 25 00:24:11 2014
@@ -559,7 +559,7 @@ def dropped_but_not_renumbered_empty_rev
full_dump_contents = open(full_dump).read()
filtered_dumpfile, filtered_out = filter_and_return_output(
full_dump_contents,
- 8192, # Set a sufficiently large bufsize to avoid a deadlock
+ 16384, # Set a sufficiently large bufsize to avoid a deadlock
"exclude", "branches/B2",
"--skip-missing-merge-sources", "--drop-empty-revs")
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/wc_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/wc_tests.py?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/wc_tests.py (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/cmdline/wc_tests.py Fri Apr 25 00:24:11 2014
@@ -118,8 +118,13 @@ def add_with_symlink_in_path(sbox):
sbox.simple_append('A/B/kappa', 'xyz', True)
sbox.simple_add('Z/B/kappa')
+def is_posix_os_and_not_root():
+ if not svntest.main.is_posix_os():
+ return False
+ return os.getuid() != 0
+
@Issue(4118)
-@SkipUnless(svntest.main.is_posix_os)
+@SkipUnless(is_posix_os_and_not_root)
def status_with_inaccessible_wc_db(sbox):
"""inaccessible .svn/wc.db"""
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_repos/repos-test.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_repos/repos-test.c Fri Apr 25 00:24:11 2014
@@ -3261,6 +3261,65 @@ filename_with_control_chars(const svn_te
}
+/* Notification receiver for test_dump_bad_mergeinfo(). This does not
+ need to do anything, it just needs to exist.
+ */
+static void
+dump_r0_mergeinfo_notifier(void *baton,
+ const svn_repos_notify_t *notify,
+ apr_pool_t *scratch_pool)
+{
+}
+
+/* Regression test for part the 'dump' part of issue #4476 "Mergeinfo
+ containing r0 makes svnsync and svnadmin dump fail". */
+static svn_error_t *
+test_dump_r0_mergeinfo(const svn_test_opts_t *opts,
+ apr_pool_t *pool)
+{
+ svn_repos_t *repos;
+ svn_fs_t *fs;
+ svn_fs_txn_t *txn;
+ svn_fs_root_t *txn_root;
+ svn_revnum_t youngest_rev = 0;
+ const svn_string_t *bad_mergeinfo = svn_string_create("/foo:0", pool);
+
+ SVN_ERR(svn_test__create_repos(&repos, "test-repo-dump-r0-mergeinfo",
+ opts, pool));
+ fs = svn_repos_fs(repos);
+
+ /* Revision 1: Any commit will do, here */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_make_dir(txn_root, "/bar", pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ /* Revision 2: Add bad mergeinfo */
+ SVN_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
+ SVN_ERR(svn_fs_txn_root(&txn_root, txn, pool));
+ SVN_ERR(svn_fs_change_node_prop(txn_root, "/bar", "svn:mergeinfo", bad_mergeinfo, pool));
+ SVN_ERR(svn_repos_fs_commit_txn(NULL, repos, &youngest_rev, txn, pool));
+ SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(youngest_rev));
+
+ /* Test that a dump completes without error. In order to exercise the
+ functionality under test -- that is, in order for the dump to try to
+ parse the mergeinfo it is dumping -- the dump must start from a
+ revision greater than 1 and must take a notification callback. */
+ {
+ svn_stringbuf_t *stringbuf = svn_stringbuf_create_empty(pool);
+ svn_stream_t *stream = svn_stream_from_stringbuf(stringbuf, pool);
+
+ SVN_ERR(svn_repos_dump_fs3(repos, stream, 2, SVN_INVALID_REVNUM,
+ FALSE, FALSE,
+ dump_r0_mergeinfo_notifier, NULL,
+ NULL, NULL,
+ pool));
+ }
+
+ return SVN_NO_ERROR;
+}
+
/* The test table. */
struct svn_test_descriptor_t test_funcs[] =
@@ -3306,5 +3365,7 @@ struct svn_test_descriptor_t test_funcs[
"test svn_repos_delete"),
SVN_TEST_OPTS_PASS(filename_with_control_chars,
"test filenames with control characters"),
+ SVN_TEST_OPTS_PASS(test_dump_r0_mergeinfo,
+ "test dumping with r0 mergeinfo"),
SVN_TEST_NULL
};
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/conflict-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/conflict-data-test.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/conflict-data-test.c Fri Apr 25 00:24:11 2014
@@ -740,7 +740,7 @@ test_prop_conflicts(const svn_test_opts_
svn_error_t *err;
const char *lock_abspath;
test_prop_conflict_baton_t *b = apr_pcalloc(pool, sizeof(*b));
- svn_wc_conflict_description2_t *desc = apr_pcalloc(pool, sizeof(*b));
+ svn_wc_conflict_description2_t *desc = apr_pcalloc(pool, sizeof(*desc));
SVN_ERR(svn_test__sandbox_create(&sbox, "test_prop_conflicts", opts, pool));
Modified: subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/utils.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/utils.c?rev=1589916&r1=1589915&r2=1589916&view=diff
==============================================================================
--- subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/utils.c (original)
+++ subversion/branches/1.8.x-r1579588/subversion/tests/libsvn_wc/utils.c Fri Apr 25 00:24:11 2014
@@ -23,6 +23,7 @@
#include "svn_error.h"
#include "svn_client.h"
#include "svn_pools.h"
+#include "private/svn_dep_compat.h"
#include "utils.h"