Markus Schaber <> (schabi)

Found Inspired Patch Suggested
r1702533, r1656713, r1551524, r1516816, r1492145, r1211483, r1162033, r1162024, r1160671 r1604047 r1604153, r1603750, r1557074, r1557072, r1494861, r1492985, r1492634, r1491756, r1356261, r1349288, r1296109, r1294161 r1550206

r1160671 | rhuijben | 2011-08-23 13:12:20 +0000 (Tue, 23 Aug 2011)

Resolve issue #3994, "Subversion working copies that contain 'svn lock'-style"
locks cannot be upgraded.

Do this by using a single sqlite handle for performing upgrades from entries to
the wc-ng format. This makes it possible to use the normal svn_wc__db api while

This api usage used to work correctly before we optimized the performance of
upgrades by using a transaction (r1136525).

Before this patch the repository lock handling in the working copy verified if
a node existed via one sqlite handle, but which was part of an uncommitted
transaction in the other handle. (This is the cause of issue #3994)

This moves more of the upgrade processing in a single transaction, so it might
also improve performance a bit.

* subversion/libsvn_wc/upgrade.c
  (svn_wc_upgrade): Update caller. Don't close the sqlite database directly
    as closing wc_db will do that now.

* subversion/libsvn_wc/wc_db.c
  (svn_wc__db_upgrade_begin): Store the new sqlite handle in the now passed
    wc_db to allow using the standard wc_db api on the same database handle.

* subversion/libsvn_wc/wc_db.h
  (svn_wc__db_upgrade_begin): Add some documentation. Update prototype.

Found by: Markus Schaber <msr{_AT_}>

r1162024 | rhuijben | 2011-08-26 08:32:38 +0000 (Fri, 26 Aug 2011)

Add reproduction recipe for a segfault using 'svn info' in 1.7.x. This same
segfault can also be triggered by just retrieving svn_wc_entry_t for this

* subversion/tests/cmdline/
  (binary_tree_conflict): New test.
  (test_list): Add binary_tree_conflict.

Found by: Markus Schaber <msr{_AT_}>
(reported via SharpSvn)

r1162033 | rhuijben | 2011-08-26 09:06:34 +0000 (Fri, 26 Aug 2011)

Resolve segfault when retrieving svn_wc_entry_t on a binary conflict. Also
fix a similar segfault in svn on printing conflicts. (Issue #3998)

* subversion/libsvn_wc/entries.c
  (read_one_entry): Assume that conflict paths can be NULL.

* subversion/svn/info-cmd.c
  (print_info): Assume that conflict paths can be NULL. Make conflict paths
    relative if possible.

* subversion/tests/cmdline/
  (binary_tree_conflict): Remove XFail. Add issue number and update the
    conflict path verification to make the test pass. Cleanup whitespace

Found by: Markus Schaber <msr{_AT_}>

r1211483 | rhuijben | 2011-12-07 15:54:10 +0000 (Wed, 07 Dec 2011)

Replace a segfault with a proper error code for a simple
$ svn mkdir svn://localhost -m ""

In Subversion 1.6 and earlier we just chopped of 'localhost'
and got an inresolvable url, which would return some proper error.

Found by: Markus Schaber <m.schaber{_AT_}>
(while using SharpSvn)

* subversion/libsvn_client/add.c
  (mkdir_urls): Don't try to calculate a uri above a uri root.

r1294161 | danielsh | 2012-02-27 14:02:00 +0000 (Mon, 27 Feb 2012)

Add an XFail test for issue #4128.

* subversion/tests/cmdline/
  (update_binary_file_3): New test.
  (test_list): Run it.

Patch by: Markus Schaber <>

r1296109 | danielsh | 2012-03-02 10:11:17 +0000 (Fri, 02 Mar 2012)

* subversion/tests/cmdline/README
  Mention that new python tests should be added to the end of the list.

Patch by: Markus Schaber <>

r1349288 | philip | 2012-06-12 12:08:04 +0000 (Tue, 12 Jun 2012)

Fix issue 4128: no conflict for identical files.

* subversion/libsvn_wc/merge.c
  (merge_file_trivial): Successful report merge_unchanged when incoming
   file is identical to existing, locally modified file.

* subversion/tests/cmdline/
  (update_binary_file_3): Tweak expectations, remove XFAIL marker.

Patch by: Markus Schaber <>

r1356261 | philip | 2012-07-02 14:34:11 +0000 (Mon, 02 Jul 2012)

Optimize merge_file_trivial() by avoiding to read the files twice by
using a new comparison function which compares 3 files at once. Also
add C tests for the new and existing file comparison functions in

* subversion/include/svn_io.h
  (svn_io_filesizes_three_different_p): Add new declaration
  (svn_io_files_contents_three_same_p): Add new declaration

* subversion/libsvn_subr/io.c
  (svn_io_filesizes_three_different_p): Add new function in analogy
   to svn_io_filesizes_different_p().
  (contents_three_identical_p): Add new function in analogy to
  (svn_io_files_contents_three_same_p): Add new function in analogy
   to svn_io_files_contents_same_p.

* subversion/libsvn_wc/merge.c
  (merge_file_trivial): Use the new three-file comparison functions to
   avoid reading files twice.

* build.conf
  (io-test): Add the new io-test.c file to the build configuration.

* subversion/tests/libsvn_subr:
  Add the executable and temporary test file folder to svn:ignore.

* subversion/tests/libsvn_subr/io-test.c
  (create_test_file): Helper function to create a test data file.
  (create_comparison_candidates): Helper function to create the full
   set of test data files.
  (test_two_file_size_comparison): Test function for
  (test_two_file_content_comparison): Test function for
  (test_three_file_size_comparison): Test function for
  (test_three_file_content_comparison): Test function for

Patch by: Markus Schaber <m.schaber{_AT_}>

r1491756 | rhuijben | 2013-06-11 11:48:45 +0000 (Tue, 11 Jun 2013)

Fix issue #4364: Correctly remove the stale entries from the lock table when
committing deletions.

* subversion/libsvn_client/commit.c
  (post_process_commit_item): always pass the flag to remove locks for deleted
    and replaced items.

* subversion/libsvn_wc/wc-queries.sql
  Add a new query which removes all lock rows recursively for a node.

* subversion/libsvn_wc/wc_db.h
  (svn_wc__db_base_remove): Add a new parameter remove_locks to recursively
    remove the lock rows.

* subversion/libsvn_wc/wc_db.c
  (svn_wc__db_base_remove): Forward the new remove_locks parameter to
  (db_base_remove): Add and implement remove_locks.
  (commit_node): Also remove the locks recursively for subnodes of the
    current node.
  (bump_node_revision): Pass FALSE for remove_locks to get the old default

* subversion/libsvn_wc/adm_ops.c
  (process_committed_leaf): In the shortcut for deleted nodes, pass TRUE to
    remove the locks recursively.

* subversion/libsvn_wc/crop.c
  (crop_children): Pass FALSE for remove_locks to get the old default

* subversion/libsvn_wc/externals.c
  (svn_wc__external_remove): Pass FALSE for remove_locks to get the old
    default behaviour.

* subversion/libsvn_wc/update_editor.c
   close_edit): Pass FALSE for remove_locks to get the old default behaviour.

* subversion/libsvn_wc/workqueue.c
  (run_base_remove): Pass FALSE for remove_locks to get the old default

* subversion/tests/libsvn_wc/op-depth-test.c
  (base_dir_insert_remove): Pass FALSE for remove_locks to get the old default

* subversion/tests/cmdline/
  (def drop_locks_on_parent_deletion): Provide a regression test which catches
    reappearing locks.

Patch by: Markus Schaber <m.schaber{_AT_}>
          (minor tweaks by me)

r1492145 | rhuijben | 2013-06-12 11:18:18 +0000 (Wed, 12 Jun 2013)

Make sure svn_io_read_length_line() can't get in an endless loop when neither
an EOL nor EOF is found before the buffer is filled. Add regression test.

* subversion/libsvn_subr/io.c
  (svn_io_read_length_line): If there is nothing to get, break.

* subversion/tests/libsvn_subr/io-test.c
  (read_length_line_shouldnt_loop): New function.
  (test_funcs): Add read_length_line_shouldnt_loop.

Found by: Markus Schaber <m.schaber{_AT_}>

r1492634 | breser | 2013-06-13 11:57:45 +0000 (Thu, 13 Jun 2013)

Fix for the README file for the cmdline tests

* subversion/tests/cmdline/README
  Fix the section about the contents of the svntest subdirectory
  to actually reflect the current contents of that directory.

Patch by: Markus Schaber <m.schaber{_AT_}>

r1492985 | schabi | 2013-06-14 07:49:37 +0000 (Fri, 14 Jun 2013)

* COMMITTERS : Add myself as a partial committer (testsuite)

r1494861 | schabi | 2013-06-20 05:48:52 +0000 (Thu, 20 Jun 2013)

* STATUS: Cast (non-binding) vote.

r1516816 | rhuijben | 2013-08-23 10:41:15 +0000 (Fri, 23 Aug 2013)

Make some 'svn mkdir' code use absolute paths internally, to avoid path length
limits on Windows.

* subversion/libsvn_client/add.c
  (svn_client__make_local_parents): Document as taking absolute paths, and
    don't hide errors.
  (svn_client_mkdir4): Make dirents absolute before passing them to

* subversion/libsvn_client/client.h
  (svn_client__make_local_parents): Tweak prototype.

Found by: schabi

r1550206 | rhuijben | 2013-12-11 17:52:47 +0000 (Wed, 11 Dec 2013)

Add support for walking externals to the api behind 'svn info', like how this
is implemented for 'svn status'.

* subversion/include/svn_client.h
  (svn_client_info4): New function.
  (svn_client_info3): Deprecate function.

* subversion/include/svn_wc.h
  (svn_wc_notify_action_t): Add svn_wc_notify_info_external value.

* subversion/libsvn_client/deprecated.c
  (svn_client_info3): New function.

* subversion/libsvn_client/info.c
  (includes): Put in understandable order. Add svn_sorts.h.
  (do_external_info): New function.
  (svn_client_info3): Rename to ...
  (svn_client_info4): ... this. Add argument. Handle externals for local info.

* subversion/svn/info-cmd.c
  (svn_cl__info): Update caller.

* subversion/svn/notify.c
  (notify): Add notification for svn_wc_notify_info_external.

* subversion/svn/svn.c
  ("info"): Support opt_include_externals.

Suggested by: schabi

r1551524 | rhuijben | 2013-12-17 12:08:54 +0000 (Tue, 17 Dec 2013)

Add regression test, for a missing lock on move problem.

* subversion/tests/cmdline/
  (move_to_from_external): New regression test.
  (test_list): Add test.

Found by: schabi

r1557072 | schabi | 2014-01-10 10:22:30 +0000 (Fri, 10 Jan 2014)

Revert the calls of the renamed svn_wc__get_wcroot back to svn_wc
__get_wc_root, so the fix compiles against SVN 1.7. (The function was 
renamed in r1427830.)

* subversion/libsvn_client/copy.c
  (do_wc_to_wc_moves): Fixed function name to svn_wc__get_wc_root.

Approved by: rhuijben

r1557074 | schabi | 2014-01-10 10:27:08 +0000 (Fri, 10 Jan 2014)

* STATUS: Cast (non-binding) vote.

r1603750 | schabi | 2014-06-19 08:18:39 +0000 (Thu, 19 Jun 2014)

Enhance the regression test added by Bert in r1603497 to check both revs.

* subversion/tests/cmdline/
  (lock_commit_bump): Add explicit check for both 'Revision' and
    'Last Changed Revision' not being bumped, as the implicit check
    performed after the commit only checks the first one.

r1604047 | danielsh | 2014-06-19 23:16:24 +0000 (Thu, 19 Jun 2014)

* subversion/libsvn_repos/repos.c
  (HOOKS_ENVIRONMENT_TEXT): Add details to the documentation embedded in hooks.

Inspired by: schabi

r1604153 | schabi | 2014-06-20 12:10:18 +0000 (Fri, 20 Jun 2014)

Fix issue 3046 by adding a statement about quoting of parameters and delimiting
argument lists. Also add a hint about peg revisions, while we are at it.

* subversion/libsvn_repos/repos.c
  (create_hooks): Add a hint about quoting of parameters and url
    handling to the hook templates.

Approved by: danielsh

r1656713 | rhuijben | 2015-02-03 12:50:10 +0000 (Tue, 03 Feb 2015)

Following up on r1296628, resolve a hang in svnserve<->libsvn_ra_svn
communication when calling svn_ra_get_dir2() on a non existing target without
obtaining its properties.

* subversion/svnserve/serve.c
  (get_dir): Fetch entries before starting the response, to allow sending
    errors that occured when fetching entries.

Found by: schabi

Reproducable by:
  apr_hash_t *tmp;

  SVN_ERR(svn_ra_get_dir2(ra_session, &tmp, NULL, NULL,
                          "non/existing/subdir", 1, SVN_DIRENT_KIND, pool));
which is not easy to integrate in our test suite.

r1702533 | rhuijben | 2015-09-11 18:30:19 +0000 (Fri, 11 Sep 2015)

Expose utf8proc version information in 'svn --version --verbose'.

Found by: schabi
(via SharpSvn)

* subversion/include/private/svn_utf_private.h
  (svn_utf__utf8proc_version): Separate into...
   svn_utf__utf8proc_runtime_version): These functions.

* subversion/libsvn_subr/sysinfo.c
  (includes): Add svn_utf_private.h.
  (svn_sysinfo__linked_libs): Expose utf8proc version.

* subversion/libsvn_subr/utf8proc.c
  (svn_utf__utf8proc_compiled_version): New function.
  (svn_utf__utf8proc_version): Rename to...
  (svn_utf__utf8proc_runtime_version): ... this.

* subversion/libsvn_subr/utf8proc/utf8proc.h
  (UTF8PROC_VERSION_*): Add definition in the same way as latest utf8proc
    defines these macros.