# To view a revision listed as (rXXXXXXX), visit:
#   https://svn.apache.org/rXXXXXXX
#
# To view an issue listed as (issue #XXXX), visit:
#   https://subversion.apache.org/issue-XXXX

Version 1.15.0
(?? ??? 20XX, from /branches/1.15.x)
https://svn.apache.org/repos/asf/subversion/tags/1.15.0
 User-visible changes:
  - Client-side improvements and bugfixes:
    * Support multiple working copy formats (1.8-onward, 1.15) (issue #????)

  - Other tool improvements and bugfixes:
    * When building on Unix, change default configure option to enable support
      for the simple (plaintext) credential store unless disabled at configure
      time with --disable-plaintext-password-storage. This reverts r1845377
      (r1909351).

Version 1.14.3
(20 Dec 2023, from /branches/1.14.x)
https://svn.apache.org/repos/asf/subversion/tags/1.14.3
 User-visible changes:
  - Client-side bugfixes:
    * Fix svn:mergeinfo diff parser bug when parsing forward merges (r1906502)
    * Fix redirected URL handling with file externals (r1908926, issue #4911)

  - Server-side bugfixes:
    (none)

 Developer-visible changes:
    * swig-rb: Fix uses of 'File.exist?', deprecated since Ruby 2.1 (r1904472)
    * Build: Fix uses of deprecated Python APIs (r1900882, issue #4899)
    * Build: Retain ability to build SWIG Python 2 bindings (r1900890)
    * Fix reading WC lock status with svn_wc_status2_t (r1904193, issue #4908)
    * JavaHL: Add @Deprecated to silence compiler warnings (r1904936)
    * JavaHL: Fix crash in case of null message in getMessage (r1904938)
    * Fix build breakage of release tarballs by installed swig (r1878379 et al)
    * Add regression test for issue #4711 "invalid xml file" (r1877310)
    * swig-py: Fix building with SWIG 4.1.0 (r1904167)
    * Makefile.in: Fix cleaning of __pycache__ dirs and *.pyc (r1903267)
    * swig-py: Avoid deprecated options to SWIG >= 4.1.0 (r1904198, r1904287)
    * swig-py: Use sysconfig to allow building with Python 3.12 (r1910098)
    * INSTALL: Document not to use SVN with APR 1.7.3 on Windows (r1911278)
    * Fix test suite broken by syntax error when --enable-sasl (r1907124)
    * swig-py: Fix issues #4916, #4917, #4918 (r1912500 et al)
    * swig-py: Improve error when no external diff (r1912724, -743, issue #1778)
    * autogen.sh: Fix building when Python is not named "python" (r1903245)

Version 1.14.2
(12 Apr 2022, from /branches/1.14.x)
 User-visible changes:
  - Client-side bugfixes:
    * Fix -r option documentation for some svnadmin subcommands (r1896877)
    * Fix error message encoding when system() call fails (r1887641, r1890013)
    * Fix assertion failure in conflict resolver (r1892470, -471, -541)

  - Server-side bugfixes:
    * Fix CVE-2021-28544: authz protected copyfrom paths regression (r1899227)
    * Fix CVE-2022-24070: use-after-free in mod_dav_svn (issue #4880)
 
 Developer-visible changes:
    * Add test coverage for CVE-2020-17525 (r1883838 et al)
    * Fix «make davautocheck» failure due to unbuilt dependency (r1891908)
    * Follow up to r1866587, r1866588: Unbreak a msgid. (r1887704)
    * swig-py: Fix double-free with cyclic garbage collector (r1889487)
    * swig-py: Skip some tests on Python2 if encoding is 'utf-8' (r1885199)
    * swig-py: Fix dependency of make copy-swig-py target (r1886708)
    * Document how the port number is passed to custom tunnels (r1889629)
    * tests: Include additional information in an error message (r1897449)
    * Fix an error message when running make davautocheck (r1892121)
    * Use the APR-1.4+ API for flushing file contents to disk (r1883355)
    * JavaHL: Fix RequestChannel_nativeRead_AfterException failure (r1898633)

Version 1.14.1
(10 Feb 2021, from /branches/1.14.x)
 User-visible changes:
  - Client-side improvements and bugfixes:
    * Fix non-deterministic generation of mergeinfo (issue #4862)
    * Fix merge removing a folder with non-inheritable mergeinfo (issue #4859)
    * Do not suggest --help -v for commands which do not support -v (r1882157)
    * Fix invalid SQL quoting in working copy upgrade system (r1879198)
    * Fix problems in human-readable file size formatting (r1878909, -18, -50)
    * Improve an error message from svnmucc (r1877072)
    * Fix 'svn info --xml' gives wrong 'source-right' of conflict (issue #4869)
    * Fix filename encoding/quoting when invoking editor on Windows (r1885953)
    * Convert filename for editor from UTF-8 to the locale's encoding (r1882234)

  - Server-side improvements and bugfixes:
    * Fix authz doesn't combine global and repository rules (issue #4762)
    * Make the hot-backup.py script work with Python 3 (r1878855, r1878859)
    * Fix an uninitialized read in FSFS (r1880374)
    * Make mailer.py work properly with Python 3 (r1884427 et al)
    * Fix CVE-2020-17525: NULL dereference in mod_authz_svn (r1886019)

 Developer-visible changes:
  - General:
    * Restore support for building with APR 1.4 (r1881958, r1882128)
    * Rewrite internal test data to avoid literal trailing spaces (r1875675)
    * Remove use of os.dup2() from tests for Python 3.6 on Windows (r1883337)
    * Note in INSTALL that non-release mode is required for Python 2 (r1877960)
    * Make gen-make.py --debug work with Python 3 (r1876906)
    * Make test suite run correctly with Python 3 on Windows (r1876707 et al)
    * Fix compilation errors with Visual Studio 2008 (r1877259)
    * Use Doxygen comment leader for comments with doxygen syntax (r1877794)
  - Bindings:
    * Fix win-tests.py to load Python 3 bindings with debug config (r1884642)
    * Fix C4204 errors building swig-py with Python 3.9 on Windows (r1883570)
    * Fix unable to load *.pyd files with Python 3.8.x on Windows (r1883335)
    * Add SWIG4 support for SWIG Python binding on Windows (r1877338)
    * Fix incorrect cache in JavaHL SVNBase::createCppBoundObject (r1882115)
    * Fix crash in JavaHL JNI wrapper caused by object lifetimes (r1880886)
    * autogen.sh: Remove .swig_*_checked files from release tarballs (r1878413)
    * Avoid version check for Python if --without-swig is used (r1876662)
    * swig-py: Fix a syntax error for Python 3.6 and later (r1885112)
    * Fix several crashes and JNI warnings in javahl TunnelAgent (r1886029)

Version 1.14.0
(27 May 2020, from /branches/1.14.x)
https://svn.apache.org/repos/asf/subversion/tags/1.14.0

 User-visible changes:
  - Minor new features and improvements:
    * Experimental shelving feature is now disabled by default (r1875039)
    * Reinstate support for experimental shelving v2 from SVN 1.11 (r1875037)
    * Introduce 'svnadmin build-repcache' command (r1875921 et al)

  - Client-side improvements and bugfixes:
    * Add 'changelist' option to 'svn info --show-item' (r1869481)
    * Allow simultaneous use of 'svn log' --quiet and --diff options (r1871916)
    * Fix 'svn info' for file that was inside replaced directory (issue #4837)
    * Don't abort if the server redirects to a non-canonical URL (r1873375)
    * Fix merge assertion failure in svn_sort__array_insert (issue #4840)
    * Escape filenames when invoking $SVN_EDITOR (r1874057 et al)
    * Small performance optimization for FSFS rep-cache.db (r1875918)
    * Fix a crash seen when using git-svn with kwallet (r1875680)

  - Server-side improvements and bugfixes:
    * Fix 'svnadmin load --normalize-props' for versioned properties (r1868203)
    * mailer.py: prevent SMTP errors from impeding later emails (issue #1804)
    * mailer.py: Add option to specify the SMTP port to connect to (r1872398)
    * Make svn-backup-dump.py work on Python 3 
    * validate-files.py: Fix handling for non-ASCII characters (r1874393)
    * Fix an undefined behavior problem in FSFS caching code (r1876054)

 Developer-visible changes:
    * Require at least version 1.5 of APR (r1874094)
    * Support Python3 in the py-swig bindings; requires py3c (r1869354 et al)
    * Support building with SWIG 4 on Python 3.x (r1869853)
    * Fix svnserveautocheck for Python 3 (r1868151)
    * contribulyze.py: Support Python 3 in addition to Python 2 (r1871211)
    * Fix Proc.new warnings in Ruby bindings with Ruby >= 2.7 (r1876020)

Version 1.13.0
(30 Oct 2019, from /branches/1.13.x)
https://svn.apache.org/repos/asf/subversion/tags/1.13.0

 User-visible changes:
  - Minor new features and improvements:
    * New 'svnadmin rev-size' command to report revision size (r1857624)
    * In 'svn help', hide experimental commands and global options (issue #4828)
    * Add a hint about mod_dav_svn misconfiguration (r1866738)
    * Performance improvement for 'svn st' etc., in WC SQLite DB (r1865523)

  - Client-side bugfixes:
    * Windows: avoid delays in SSL certificate validation override (r1863018)
    * Fix 'svn patch' setting mode 0600 on patched files with props (r1864440)
    * Fix "svn diff --changelist ARG" broken in subdirectories (issue #4822)
    * Fix misleading 'redirect cycle' error on a non-repository URL (r1866899)

  - Server-side bugfixes:
    * svnserve: Report some errors that we previously ignored (r1866062)
    * Make server code more resilient to malformed paths and URLs (r1866318 et al)
    * Make dump stream parser more resilient to malformed dump stream (r1866951)
    * mod_dav_svn: Fix missing Last-Modified header on 'external' GET requests (r1866425)

  - Client-side and server-side bugfixes:
    * Fix excessive memory usage in some cases reading binary data (r1866950)
    * Win32: fix svn_io_file_rename2() spinning in a retry loop (r1865518)

  - Other tool improvements and bugfixes:
    * svn_load_dirs.pl: do not show password; fix cleanup (r1863262, r1863392)

 Developer-visible changes:
    * New svn_fs_ioctl() API for FSFS stats, dump/load index, rev-size (r1857435)


Version 1.12.2
(24 Jul 2019, from /branches/1.12.x)
https://svn.apache.org/repos/asf/subversion/tags/1.12.2

 User-visible changes:
    * Fix conflict resolver bug: local and incoming edits swapped. (r1863285)
    * Fix memory lifetime problem in a libsvn_wc error code path. (r1863287)
    * Faster Windows file existence checks, improving 'svn st' etc. (r1863289)

 Developer-visible changes:
    * Allow generating Visual Studio 2019 projects (r1863286)
    * Fix build with APR 1.7.0. (r1860377)
    * Fix building Subversion with Visual Studio 2005 and 2008. (r1863288)
    * Allow svnserve's 'get-deleted-rev' API to return 'not deleted'. (r1863290)


Version 1.12.1
(Not released; see changes for 1.12.2.)


Version 1.12.0
(12 Apr 2019, from /branches/1.12.x)
https://svn.apache.org/repos/asf/subversion/tags/1.12.0

 User-visible changes:
  - Major new features:

  - Minor new features and improvements:
    * 'move vs. move' merge conflicts can now be resolved (r1846851, r1851913)
    * 'svn --version --verbose' shows loaded libraries on Linux (r1843774)
    * 'svnrdump' can read/write a file instead of stdin/stdout (r1844906)
    * 'svn list' tries to not truncate the author's name (r1847384 et al.)
    * 'svn list' can show sizes in base-2 unit suffixes (r1847384 et al.)
    * 'svn info' shows the size of files in the repository (r1847441 et al.)
    * 'svn cleanup' can remove read-only directories (#4806, r1854072 et al.)

  - Client-side bugfixes:
    * Repos-to-WC copy with --parents works with absent target (r1843888)
    * Repos-to-WC copy from foreign repo with peg/operative revs (#4785)

  - Server-side bugfixes:
    * Ignore empty group definitions in authz files (#4802, r1851687)

  - Client-side and server-side bugfixes:

  - Other tool improvements and bugfixes:
    * svnauthz: warn about empty groups in authz files (#4803, r1851823)
    * Storing passwords in plain text on disk is disabled by default (r1845377)

 Developer-visible changes:
  - General:
    * Updated the required libtool version to 2.x (r1845716)
    * get-deps.sh: Remove references to Googlemock and Googletest (r1849200)
    * All C++ code is compiled in C++11 mode by default (r1849202)

  - Bindings:
    * JavaHL: Fixed potential core dump in ISVNClient.diff (r1845408)
    * JavaHL: Let clients decode file contents from ISVNClient.blame (r1851333)


Version 1.11.1
(11 Jan 2019, from /branches/1.11.x)
http://svn.apache.org/repos/asf/subversion/tags/1.11.1

 User-visible changes:
  - Minor new features and improvements:
    * Conflict resolver support for added vs unversioned file (r1845577)
    * Conflict resolver support for unversioned directories (r1846299)
    * Improve help for 'svn add' and the '-N' option (r1842814 et al.)
    * Improve display of Mac OS name in 'svn --version --verbose' (r1842334)

  - Client-side bugfixes:
    * Fix: repos-to-WC copy with --parents doesn't create dirs (#4768)
    * Fix: foreign repo copy with peg/operative revisions (#4785)
    * Fix: foreign repo copy of file adding mergeinfo (#4792)
    * Fix: assertion failure using -rPREV on a working copy at r0 (#4532)
    * Fix: tree conflict message ends a sentence with a colon (#4717)

  - Server-side bugfixes:
    * Fix CVE-2018-11803: malicious SVN clients can crash mod_dav_svn
    * Fix: unexpected SVN_ERR_FS_NOT_DIRECTORY errors (#4791)
    * Fix: mod_dav_svn's SVNUseUTF8 had no effect in some setups (r1844882)
    * Fix crash in mod_http2 (#4782)

  - Other tool improvements and bugfixes:
    * svndumpfilter: Clarify error messages by including node path (r1845261)

  - Bindings bugfixes:
    * JavaHL: Fix crash in client code when using external diff (r1845408)

 Developer-visible changes:
  - General:
    * Fix build on systems without python in $PATH (r1845555)
    * Fix compiler warnings about indentation (r1845556 et al.)

  - API changes:
    (none)


Version 1.11.0
(30 Oct 2018, from /branches/1.11.x)
http://svn.apache.org/repos/asf/subversion/tags/1.11.0

 User-visible changes:
  - Major new features:
    * Shelving is no longer based on patch files (experimental) (issue #3625)
    * Checkpointing (experimental) (issue #3626)
    * Viewspec output command (experimental) (issue #4753)

  - Minor new features and improvements:
    * Improvements to tree conflict resolution (issue #4694 #4766 ...)
    * 'patch' can now read non-pretty-printed svn:mergeinfo diffs (r1822151)
    * Better error when http:// URL is not a Subversion repository (r1825302)
    * Add 'schedule' and 'depth' items to 'svn info --show-item' (r1827032)
    * Allow the client cert password to be saved (r1836762)

  - Client-side bugfixes:
    * Fix a crash in a repo:WC summary diff of a local copy (r1835218)
    * Fix double diff headers (r1836746)
    * Tree conflict resolver: avoid endless scan in some cases (r1839662)

  - Server-side bugfixes:
    * svnadmin dump shouldn't canonicalize svn:date (issue #4767)
    * 'svnadmin verify --keep-going --quiet' shows an error summary (r1837790)
    * Let 'svnadmin recover' prune the rep-cache even if disabled (r1838813)

  - Client-side and server-side bugfixes:
    * Fix pattern-matching of top level path in listing with search (r1830599)
    * Allow commands like 'svn ci --file X' to work when X is a FIFO (r1836306)

  - Other tool improvements and bugfixes:
    * tools/client-side/bash_completion: Add '--password-from-stdin' (r1820045)

 Developer-visible changes:
  - General:
    * new tool: tools/dist/edit-N-log-messages (r1819207)
    * tools/dev/unix-build/Makefile.svn: various fixes
    * Expose the diff option 'pretty_print_mergeinfo' in APIs (r1822014)
    * In 'revert' APIs, choose whether to delete schedule-add nodes (r1822534)

  - Bindings:
    * Fix Python binding fs.FileDiff behaviour with python-future (r1823802)
    * Fix Python unit test, fs.SubversionFSTestCase, on Windows (r1824410)
    * Bump minimum JDK version required for JavaHL to 1.8 (r1831895)
    * Enable building against Java 10 (r1841180 et al)
    * Fix a potential crash in JavaHL (issue #4764)

Version 1.10.8
(12 Apr 2022, from /branches/1.10.x)
 User-visible changes:
  - Client-side bugfixes:
    * Fix merge assertion failure in svn_sort__array_insert (issue #4840)

  - Server-side bugfixes:
    * Fix CVE-2021-28544: authz protected copyfrom paths regression (r1899227)
    * Fix CVE-2022-24070: use-after-free in mod_dav_svn (issue #4880)
    * Fix authz doesn't combine global and repository rules (issue #4762)

 Developer-visible changes:
    * Add test coverage for CVE-2020-17525 (r1883838 et al)
    * Fix «make davautocheck» failure due to unbuilt dependency (r1891908)
    * Follow up to r1866587, r1866588: Unbreak a msgid (r1887704)
    * Remove incorrect include paths from svn_cv_ruby_includes (r1875602)

Version 1.10.7
(10 Feb 2021, from /branches/1.10.x)
 User-visible changes:
  - Client-side bugfixes:
    * Fix 'svn patch' setting mode 0600 on patched files with props (r1864440)
    * Fix invalid SQL quoting in working copy upgrade system (r1879198)
    * Fix non-deterministic generation of mergeinfo (issue #4862)
    * Fix a crash seen when using git-svn with kwallet (r1875680)
    * Fix merge removing a folder with non-inheritable mergeinfo (issue #4859)
    * Fix 'svn info --xml' gives wrong 'source-right' of conflict (issue #4869)

  - Server-side bugfixes:
    * mod_dav_svn: install cleanup handler for FS warning logging (r1865266)
    * mod_dav_svn: Fix missing Last-Modified header on 'external' GET requests (r1866425)
    * Fix formatting type size mismatches in FSFS (r1865987, -8)
    * Fix an undefined behavior problem in FSFS caching code (r1876054)
    * Fix CVE-2020-17525: NULL dereference in mod_authz_svn (r1886019)

 Developer-visible changes:
    * Fix Requires(.private) fields in pkg-config files (r1863987, -90)
    * Fix crash in JavaHL JNI wrapper caused by object lifetimes (r1880886)
    * Fix an EOL issue in tests on Windows (r1881985 et al)

Version 1.10.6
(24 Jul 2019, from /branches/1.10.x)
https://svn.apache.org/repos/asf/subversion/tags/1.10.6

 User-visible changes:
    * Allow the use of empty groups in authz rules. (r1854883)
    * Fix conflict resolver case with move vs move conflicts. (r1863297)
    * Fix #4760: Missing children in svnadmin dump --include/exclude. (r1863298)
    * Fix #4793: authz rights from inverted access selectors. (r1854882)
    * Fix conflict resolver bug: local and incoming edits swapped. (r1863300)
    * Fix #4806: Remove on-disk trees with read-only dirs. (r1863299)
    * Fix memory lifetime problem in a libsvn_wc error code path. (r1863302)
    * No tree conflict when 'svn up' deletes unmodified dir with unversioned items. (r1863296)
    * Remove a useless common ancestor search from conflict resolver. (r1863294)

 Developer-visible changes:
    * Allow generating Visual Studio 2019 projects (r1863304)
    * Fix a use-after-free in mod_dav_svn's logging of FS warnings. (r1863292)
    * Fix "unused static function" warning in release-mode builds. (r1854884)
    * Fix build with APR 1.7.0. (r1863303)
    * Fix issue #4804: spurious SQLite-related test failures. (r1863295)
    * Allow svnserve's 'get-deleted-rev' API to return 'not deleted'. (r1863305)
    * Silence a deprecation warning from amalgamated SQLite on macOS. (r1863291)


Version 1.10.5
(Not released; see changes for 1.10.6.)


Version 1.10.4
(11 Jan 2019, from /branches/1.10.x)
http://svn.apache.org/repos/asf/subversion/tags/1.10.4

 User-visible changes:
  - Minor new features and improvements:
    * Conflict resolver support for added vs unversioned file (r1845577)
    * Conflict resolver support for unversioned directories (r1846299)

  - Client-side bugfixes:
    * Fix: repos-to-WC copy with --parents doesn't create dirs (#4768)
    * Fix: foreign repo copy with peg/operative revisions (#4785)
    * Fix: foreign repo copy of file adding mergeinfo (#4792)
    * Fix: assertion failure using -rPREV on a working copy at r0 (#4532)
    * Fix: tree conflict message ends a sentence with a colon (#4717)

  - Server-side bugfixes:
    * Fix CVE-2018-11803: malicious SVN clients can crash mod_dav_svn
    * Fix: unexpected SVN_ERR_FS_NOT_DIRECTORY errors (#4791)
    * Fix: mod_dav_svn's SVNUseUTF8 had no effect in some setups (r1844882)
    * Fix crash in mod_http2 (#4782)

  - Other tool improvements and bugfixes:
    * svndumpfilter: Clarify error messages by including node path (r1845261)

  - Bindings bugfixes:
    * JavaHL: Fix crash in client code when using external diff (r1845408)

 Developer-visible changes:
  - General:
    * Fix build on systems without python in $PATH (r1845555)

  - API changes:
    (none)


Version 1.10.3
(10 Oct 2018, from /branches/1.10.x)
http://svn.apache.org/repos/asf/subversion/tags/1.10.3

 User-visible changes:
  - Minor new features and improvements:
    * Store the HTTPS client cert password (r1842578)

  - Client-side bugfixes:
    * Fix shelving when custom diff command is configured (issue #4758)
    * Fix conflict resolver crashes (issue #4744, r1842581, r1842582, r1842583)
    * Fix conflict resolver endless scan in some cases (r1842586)
    * Fix "Accept incoming deletion" on locally deleted file (issue #4739)
    * Fix "resolver adds unrelated moves to move target list" (issue #4766)

  - Server-side bugfixes:
    * Reject bad PUT before CHECKOUT in v1 HTTP protocol (r1841281)
    * Let 'svnadmin recover' prune the rep-cache even if disabled (r1842585)

  - Client-side and server-side bugfixes:
    * Allow commands like 'svn ci --file X' to work when X is a FIFO (r1841282)

  - Other tool improvements and bugfixes:
    * 'svnadmin verify --keep-going --quiet' shows an error summary (r1842584)
    * Fix error in german translation for 'svn help merge' (r1837038)

 Developer-visible changes:
  - General:
    * Python tests use the current python executable (r1842626)


Version 1.10.2
(20 Jul 2018, from /branches/1.10.x)
http://svn.apache.org/repos/asf/subversion/tags/1.10.2

 User-visible changes:
  - Client-side bugfixes:
    * Correctly claim to offer Gnome Keyring support with libsecret (r1831142)
    * Fix segfault using Gnome Keyring with libsecret (r1835782)
    * Fix JavaHL local refs capacity warning when unparsing externals (r1831143)
    * Since on Windows Subversion does not handle symlinks, never check for reparse points (r1835701)
    * Prune externals after 'update --set-depth=exclude' (r1835702)
    * Fix issue #4740, "conflict resolver searches too far back ..." (r1835703)
  - Server-side bugfixes:
    * Fix regression issue #4741: authz group refers to multiple groups (r1831220)

 Developer-visible changes:
  - General:
    * Regression test and FSFS checksum test, part of issue #4722 (r1828043)
    * Explicit error on configure --without-lz4 or --without-utf8proc (r1831604)
    * configure.ac: Fix regression relating to path to 'rdoc' (r1833486)
    * Ensure consistent use of $PYTHON during build and test (r1833487)
    * Fix libsvn_auth_gnome_keyring.pc when built using libsecret (r1835781)
  - Bindings:
    * Fix regression in use of pre-generated Swig bindings in release builds (r1833488)


Version 1.10.1
(Not released; see changes for 1.10.2.)


Version 1.10.0
(13 Apr 2018, from /branches/1.10.x)
http://svn.apache.org/repos/asf/subversion/tags/1.10.0

See the 1.10 release notes for a more verbose overview of the changes since
the 1.9 release:  https://subversion.apache.org/docs/release-notes/1.10.html

 User-visible changes:
  - Major new features:
    * Better interactive conflict resolution for tree conflicts (r1687489 et al)
    * Wildcards and improved performance in path-based authorization (r1776832)
    * New experimental 'svn shelve' command (issue #3625)
  - Minor new features and improvements:
    * svnbench: Show time taken & bytes transferred (r1703383, r1710586)
    * New 'svnadmin dump' options to include/exclude paths (r1811992 et al)
    * New '--normalize-props' option for 'svnadmin dump' (r1807836 et al)
    * New 'svnadmin 'load-revprops', 'dump-revprops' subcommands (r1694191, -225)
    * New '--no-flush-to-disk' option for 'svnadmin load' (r1736357, -7357)
    * New '--file' option for several svnadmin subcommands (r1738021)
    * New '--max-request-size', '--max-response-size' options for svnserve (r1714330, -333)
    * New '-rN' option for 'svnadmin lstxns' (r1703699)
    * New '--search' option for fast 'svn ls' searches (r1767186 et al)
    * Add '--search' option support to 'svnbench null-list' (r1767202)
    * New '-M' option for 'svnlook tree' (r1708222)
    * New '--skip-unchanged' option for 'svnsync copy-revprops' (r1692655)
    * 'svn log --search' now ignores case and diacriticals (r1731300, r1735614)
    * Improved performance of server-side log processing (r1732768, r1731656)
    * diff3: Reduce processing time and memory usage (r1731659)
    * ra_serf: Adjustments for serf versions with HTTP/2 support (r1716400)
    * ra_serf: Send svndiff1 deltas during commit (r1704317, r1704613, r1791290)
    * ra_serf: Stream svndiff deltas w/o creating temporary files (r1803143 et al)
    * ra_serf: Don't necessarily request full MERGE responses (r1806017 et al)
    * 'svn patch': Parse binary diffs in git-style patches (r1703925)
    * 'svnadmin info' now reports latest revision in the repository (r1697953)
    * ra_svn: Various performance-related tweaks (r1694490)
    * Optimize svndiff parser (r1685063)
    * 'svn status' without -v: Stop showing uninteresting deletions (r1664533)
    * Save a few cycles in svn_stringbuf_set() (r1759177)
    * windows: Use the Unicode Windows API (r1756193)
    * windows: Distinguish out-of-memory error from abort() (r1724784, -809)
    * windows: Explicitly release file locks (r1702089)
    * windows: Correctly check result from LoadLibrary() call (r1755983)
    * Remove Windows-specific slowdown during pristine cleanup (r1701641)
    * FSFS: Optionally cache node properties without full-text cache (r1723715)
    * FSFS: Open transaction's proto revision in write-only mode (r1759135)
    * FSFS: Avoid checksum calculations if logical addressing is used (r1756377)
    * FSFS: Do not read very long change lists in block read mode (r1746012)
    * FSFS: Avoid double DAG lookup (r1711582)
    * FSFS: Avoid double cache lookups (r1681974, r1710370)
    * FSFS: Increase default revprop pack size from 4k to 16k (r1709799)
    * FSFS: Speed up revprop access (r1707986 et al)
    * FSFS: Disable representation sharing for directories (r1706619)
    * FSFS: Speed up transaction processing for large directories (r1706617)
    * FSFS: Tune format 7 pack ordering heuristics (r1706615)
    * FSFS: Reduce I/O overhead during history traversal (r1703237)
    * FSFS: Use native Windows API to guarantee data is flushed (r1701053)
    * FSFS: Warn if a possible rep-cache SHA1 collision is detected (r1674673)
    * FSFS: Optimize revprop cache filling strategy under high load (r1795324)
    * FSFS: New "verify-before-commit" fsfs.conf option (r1795351)
    * FSFS: New format 8 with various performance improvements (r1801940 et al)
    * FSFS/FSX: Chunked read support for changed paths lists (r1746026, -4987)
    * FSFS/FSX: Improvements to cache implementation (r1694489)
    * FSX: Add checksums to packed revprop manifests and files (r1713132, -9717)
    * FSX: Significantly reduce size of packed revprop manifest data (r1713109)
    * FSX: Improved on-disk representation of property lists (r1717427)
    * FSX: New in-repository representation of directories (r1712967)
    * FSX: Make 'svnadmin recover' discard all transactions (r1712937)
    * FSX: Reduce number of fsync operations (r1711354 et al)
    * mod_dav_svn: Improve performance and memory usage of PROPFIND (r1721732)
    * mod_dav_svn: Show process-id on Windows in /svn-status page (r1718567)
    * mod_dav_svn: Advertise svndiff1 support to clients (r1704891, r1791285)
    * mod_dav_svn: Remove disk I/O to TMPDIR during first commit (r1716240)
    * svnsync: Fix assertion failure with up-to-date repositories (r1727140)
    * ra_serf: Parallel requests for text and property changes (r1716575)
    * svnserve: Remove disk I/O to TMPDIR during first commit (r1716240)
    * Triple performance of URI escaping (r1710099, -103)
    * 'svn blame': Optimize a bit on the server side (r1711666)
    * 'svn cleanup': Add --vacuum-pristines option (r1802787 et al)
    * 'svn diff --git': Show diffs of symlinks like git and hg (r1706372)
    * 'svn patch': Capable of handling git-like symlink changes (r1706446)
    * 'svn patch': Improve detection of additions and deletions (r1706623)
    * 'svn patch': Handle zero-byte files vs deleted files (r1705856)
    * 'svn diff --git': Produce 'rename from/to' headers (r1706855)
    * 'svn diff --git': Produce proper mode headers (r1706041)
    * 'svn lock', 'svn unlock': Take the -q option (r1796288)
    * 'svn help': improved wording and consistency (r1802989 et al)
    * 'svn': Add a new '--accept recommended' option. (r1805623)
    * 'svn': --non-interactive uses recommended tree conflict resolution (r1805620)
    * Evaluate 'old mode' and 'new mode' lines from git-syle diffs (r1705391)
    * svnrdump, svndumpfilter: Enable buffered stdin (r1703074)
    * ra_serf: Receive svndiff1 and gzip compressed deltas (r1791282, -3, -4)
    * svnadmin: 'lock', 'unlock', 'rmlocks': Take the -q option (r1796406)
    * New svndiff2 binary delta format using lz4 compression (r1801938, et al)
    * gpg-agent: Support gpg ≥2.1.13 and unset GPG_AGENT_INFO (r1795087)
    * Add 'http-compression=auto' client config option as default (r1803899 et al)
    * Speed up processing of mergeinfo (r1802470 et al)
    * Check for invalid 'xt' fields in x509 certs (r1809290)
    * New '--password-from-stdin' option for 'svn' (r1819093)
  - Client-side bugfixes:
    * svnbench: Honour the '--with-no-revprops' option (r1709593)
    * ra_serf: Fix segfault when running over HTTP v1 (r1766089)
    * ra_serf: Keep small svndiffs in memory during commit (r1724455)
    * ra_serf: Improve error messages related to lock operations (r1716450)
    * ra_serf: Work around a bug in serf bucket handling (r1714806)
    * ra_serf: Fix lock token handling for file-path commits (r1815799 et al)
    * Raise a malfunction instead of segfaulting with corrupt wc.db (r1749887)
    * Fix check for unversioned obstructions blocking file externals (r1735932)
    * 'svn patch' bugfixes:
      + Fix behaviour if a reject file can't be created (r1725948)
      + Describe adds and removes in reject file headers (r1707034)
      + Detect recorded moves that are already applied (r1706893)
      + Detect already applied patches in edge cases (r1706687)
      + Fix handling of missing trailing context (issue #4609)
      + Fix interaction of moves and property changes (r1706875)
      + Fix output for reordered hunks (issue #4533)
      + Prevent from overwriting existing reject files (r1706600)
      + Improve handling of added properties (r1706598)
      + Improve handling of rejected file deletions (r1706221)
      + Fix --dry-run with replaced files (r1706217)
      + Fix applying prop changes which should conflict (r1705733)
      + Fix duplicate notifications when adding directories (r1704883)
      + Fix duplicate notifications when patching svn:executable prop (r1706078)
      + Fix notifications when adding/removing properties (r1705698)
      + Make handle already applied property patches (r1705692)
      + Change some notifications to 'U' instead of 'G' (r1706693)
      + Don't create file if git-style patch indicates modification (r1706005)
      + Parse any properties following svn:mergeinfo (r1706825)
      + Fix potential unbounded memory usage in parser (r1705979)
      + Fix problems with --git diffs applied in reverse (r1704854, -88)
      + Fix removal of EOL if final patch context line has no EOL (#4315)
    * 'svn diff --git': Fix file permission modes to match git and hg (r1695384)
    * 'svn diff --git': added/deleted filenames are never /dev/null (issue #4689)
    * Fix a problem with relocating some externals (r1723385)
    * Fix 'svn diff URL@REV WC' wrongly looks up URL@HEAD (issue #4597)
    * Fix 'svn diff --no-diff-added' shows properties as added (issue #4596)
    * Properly raise text merge conflicts with file externals (r1680245) 
    * Fix 'svn diff' with local directories marked incomplete (r1674413 et al)
    * ra_svn/ra_serf: Make negative log limits work as documented (r1665530)
    * ra_svn: Eliminate unnecessary URL reparenting (r1779611, r1779611)
    * ra_svn: Use svndiff2 deltas when supported on both ends (r1803269 et al)
    * Handle invalid revision numbers consistently across RA layers (r1665328)
    * Handle commits to revs > HEAD consistently across RA layers (r1664698)
    * Eliminate one client/server roundtrip from checkouts of HEAD (r1779620)
    * Expose some error messages generated by github's SVN server (r1707164)
    * 'svnfsfs stats': Show average lengths of delta chains (r1705739)
    * svnmucc: Fix crash during application teardown (r1795727)
    * Fix assertion when exporting a working copy containing relative externals
      (r1802316)
  - Server-side bugfixes:
    * Fix checksum validation error due to data eviction from cache (r1781694)
    * FSFS pack: Use unbuffered file streams in a couple of places (r1759405)
    * FSFS: Reduce excessive amount of read and seek syscalls (r1758979, -9399)
    * FSFS: Reduce memory footprint of cached directories (r1725179)
    * FSFS: Add various checks for integer overflows (r1714372, -32, -34)
    * FSFS: Detect a very unlikely case of item index corruption (r1716973)
    * FSFS: Make handling of revprop size information more resilient (r1716784)
    * FSFS: Don't re-parse a directory which just got committed (r1706679)
    * FSFS: Handle some known quirks in committed node revisions (r1673875)
    * FSFS format 7: Verify item types more thoroughly (r1796160)
    * FSFS: Fix false positive "Not a directory" error involving file moved and
      replaced by dir (issue #4677)
    * FSFS: Fix crash accessing revprops with --memory-cache-size=0 (r1795164)
    * FSFS: Fix issue #4623 for FSFS. (r1813794 et al)
    * mod_dav_svn: Omit Cache-Control HTTP header for HEAD URLs (issue #4514)
    * mod_dav_svn: Reduced memory consumption for DAV merge responses (r1727790)
    * mod_dav_svn: Don't set a Last-Modified header in GET responses (r1724790)
    * mod_dav_svn: Actually use FSFS transaction directory cache (r1723720)
    * mod_dav_svn: Do not insert newlines in base64 encoded responses (r1712223)
    * Fix insertion of very large items into the membuffer cache (r1717337, -8)
    * Fix capacity check of the membuffer cache's prefix pool (r1714356)
    * Prevent paths containing newlines from being committed (r1662585)
    * Fix for properties: Null updates break last-changed-revision (issue #4700)
    * 'svnfsfs stats': Fix false positive checksum errors reading old revisions
      (r1785904)
    * 'svnfsfs stats': Fix support for pre-v4 FSFS repositories. (r1816966)
    * svnadmin, svnfsfs: Detect invalid arguments to -M (r1787023, r1787045)
    * svnlook, svnserve: Detect invalid arguments to -M (r1787023, r1787045)
    * svnadmin: Output locked paths in canonical form (r1796420)
    * svnadmin: Output locked paths correctly encoded (r1797122)
    * svn: propdel, propset: Transcode property names on output (r1797186)
    * svnserve: Make use-sasl=true a fatal error in SASL-less builds. (r1803188)
  - Client-side and server-side bugfixes:
    * Fix integer overflow check with >= 1G mergeinfo ranges per path (r1714380)
    * Fix integer overflow checks on WoW64 platforms (r1714372)
    * Fix bug with canonicalizing Window-specific drive-relative URL (r1692262)
    * In file:// URLs, allow '\' directly after Windows drive letter (r1692259)
    * Fix segfault with recursive configuration value definitions (issue #4543)
    * FSFS: Improve error messages when DAG lookup fails (r1795120)
    * Transcode command-line arguments to UTF-8 (r1797190, r1797362, et al)
    * Fix segfault on x509 certificate with empty name (r1798157)
    * Fix segfault with invalid URLs in svn:externals (r1803471)
    * Windows: Failure to write files might remain undetected (r1806014)
  - Other tool improvements and bugfixes:
    * New svn-mergeinfo-normalizer tool (r1695992 et al)
    * Allow configuring mailer.py to use SMTP SSL (r1777846)
    * svnmucc can now delete directories with deleted children (issue #4666)
    * svn-vendor.py: Minor enhancements, mostly in treating symlinks (r1732669)
    * bash_completion: Better URL completion (r1701494)
    * bash_completion: Complete arguments to 'svn info --show-item' (r1698276)
    * fsfs-stats: New 1.8-compatible wrapper for 'svnfsfs stats' (r1802032)
    * Drop support for upgrading working copies created with Subversion 1.7
      (r1807584 et al)

 Developer-visible changes:
  - General:
    * windows: Removed support for building with Visual Studio 6.0 (r1703419)
    * Fix .py scripts throughout the source tree for Python 3 (r1741723 et al)
    * Support memcached on Windows with APR-util 1.3 or later (r1674626 et al)
    * Don't require GNU-specific sed(1) extensions during the build (r1693159)
    * get-deps.sh: download Googlemock and Googletest from GitHub (r1746303)
    * windows: Add autodetection for 'zlibstat.lib' (r1783704)
    * windows: Compile libsvn_fs_* as DLLs (r1696758, -83)
    * windows: Allow building against OpenSSL 1.1.0 (r1814724 et al)
    * OS X: Silence compile-time deprecation warnings with SASL (r1739649)
    * OS X: Silence ranlib warnings about disabled WIN32 code (r1809792)
    * 'make check GLOBAL_SCHEDULER=1' will run many tests in parallel (r1716399)
    * unix: New '--enable-apache-whitelist' configure script option (r1732294)
    * OS X: Support 'configure --enable-runtime-module-search' (r1677273)
    * tests: Allow tests to be run over HTTP/2 (r1710707)
    * tests: httpd compile-time and run-time version may differ (r1808955 et al)
    * tests: Add pre-cooked repos for all FSFS versions. (r1816402 et al)
    * tests: Add FSFS_DIR_DELTIFICATION option. (r1813897)
    * Add basic tests for svn_xml_parser_t API (r1765214)
    * Unbreak the test suite on Python 3 (r1743034, -81, et al)
    * Make the test suite work when checked out of a git repository (r1771118)
    * Allow Apache HTTPD with mod_deflate in testsuite on Windows (r1758776)
    * Support modern utilities for finding free TCP ports for tests (r1684649)
    * The C test scheduler is more efficient in SMP environments (r1775555)
    * The C tests convert paths from/to UTF-8 more efficiently (r1775642)
    * Add INSTALL instructions for building with OpenSSL 1.1.0 (r1778313)
    * Improved INSTALL instructions for Windows (r1703470, -2, -3, -4, et al)
    * Updated INSTALL instructions (r1691712)
    * windows: Support Visual Studio 2017 (r1786653, r1786669)
    * gnome-keyring: Support libsecret in preference to libgnome-keyring
      (r1798004)
    * kwallet: Support KDE 5 in preference to KDE 4 (r1798731)
    * kwallet: Fix KDE5 support with clang 3.8 (r1802536 et al)
    * kwallet: Add --with-kwallet=INCDIR:LIBDIR build option (r1802646)
    * Rename cxxhl bindings 'make tests' to avoid confusion with 'make test'
      (r1800849)
    * 'make check': Allow testing with FSFS compression (r1801936)
    * svnserveautocheck.sh: Support out-of-tree builds when running a single
      test file (r1802081)
    * Distribution artifacts now prepared with swig 3.0.10 (r1802135)
    * SQLite: Use https:// links to download amalgamation sources (r1817043)
    * Create reproducible tarballs (r1804618 et al)
    * Disable static builds of the apache and auth provider modules (r1802612)
    * utf8proc: Update to version 2.1.0 (r1809090 et al)
    * utf8proc: Build against the system library by default (r1803210 et al)
  - API changes:
    * New svn_client_conflict_* API functions for the new conflict resolver.
    * New svn_repos_fs_get_mergeinfo2() with streamy access (r1780810 et al)
    * New streamy svn_repos_get_logs5() API function (r1730389, -1163)
    * New streamy svn_fs_paths_changed3() API function (r1727822, r1745055)
    * New svn_client_list4() API function (r1767186)
    * New svn_ra_list() API function (r1767190)
    * New svn_repos_list() API function (r1765088)
    * New svn_stream_contents_checksum() API function (r1755486, -6651)
    * New svn_io_file_get_offset() API function (r1719269)
    * New svn_base64_encode2 API function (r1711517)
    * New svn_fs_create2() API function (r1710631)
    * New svn_string_from_stream2() API function (r1710065)
    * New svn_io_write_atomic2() API function (r1703142)
    * New svn_stream_for_stdin2() API function (r1702983)
    * New svn_io_file_rename2() API function (r1701017)
    * New svn_error_quick_wrapf() API function (r1662668)
    * New svn_repos_path_change_t type (r1802114)
    * New svn_repos_log_entry_t type (r1802114)
    * New svn_cstring_join2() API (r1806041)
    * New svn_txdelta_to_svndiff_stream() API (r1803140 et al)
    * svn_repos_parse_dumpstream3() now accepts NULL pointers (r1700180)
    * Return resettable streams from svn_stream_checksummed2(). (r1804807)
    * Fix svnserveautocheck&davautocheck when time is only a built-in (r1665652)
  - Bindings:
    * Configure the swig bindings only if swig has been enabled (r1751167)
    * Error if 'configure --with-swig' is used and swig is not found (r1700844)
    * Perl: Fix build with libraries in non-standard LD_LIBRARY_PATH (r1781588)
    * JavaHL can now get revision properties along with log messages (r1780819)
    * JavaHL: Allow access to constructors of a couple JavaHL classes (r1739704)
    * JavaHL: Correct some JNIEntry method names (r1706738)
    * Allow swig bindings scripts to configure the FSFS cache (r1709922)
    * Disable some swig wrappers that aren't working (r1700966)
    * JavaHL: Make StringArray nullable (r1785429)
    * JavaHL: Add missing exception checks (r1801108)
    * Ruby: Fix handling of NULL MD5 digests (r1811786)
    * Ruby: Detect versions up to 2.4 (r1806570)


Version 1.9.12
(24 Jul 2019, from /branches/1.9.x)
https://svn.apache.org/repos/asf/subversion/tags/1.9.12

 User-visible changes:
    * No tree conflict when 'svn up' deletes unmodified dir with unversioned items. (r1863309)

 Developer-visible changes:
    * Allow generating Visual Studio 2019 projects (r1863311)
    * Fix a use-after-free in mod_dav_svn's logging of FS warnings. (r1863307)
    * Fix "unused static function" warning in release-mode builds. (r1854881)
    * Fix build with APR 1.7.0. (r1863310)
    * Fix issue #4804: spurious SQLite-related test failures. (r1863308)
    * Allow svnserve's 'get-deleted-rev' API to return 'not deleted'. (r1863312)
    * Silence a deprecation warning from amalgamated SQLite on macOS. (r1863306)


Version 1.9.11
(Not released; see changes for 1.9.12.)


Version 1.9.10
(11 Jan 2019, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.10

 User-visible changes:
  - Client-side bugfixes:
    * Fix: repos-to-WC copy with --parents doesn't create dirs (#4768)
    * Fix: foreign repo copy with peg/operative revisions (#4785)
    * Fix: assertion failure using -rPREV on a working copy at r0 (#4532)
    * Fix: german translation for 'svn help merge' (r1837037)
    * Fix: prune externals after 'update --set-depth=exclude' (r1830883 et al.)
    * Fix: detection of GPG-agent (r1794166 et al.)
    * Fix: null updates don't update last-changed-revision (#4700)
    * Fix: merge "Unable to parse reversed revision range" (#4686)

  - Server-side bugfixes:
    * Fix: unexpected SVN_ERR_FS_NOT_DIRECTORY errors (#4791)
    * Fix: mod_dav_svn's SVNUseUTF8 had no effect in some setups (r1844882)
    * Fix: crash in mod_http2 (#4782)
    * Fix: 'svnadmin upgrade' of BDB: Error out on too-new formats (r1804013)
    * Fix: Enforce v1 HTTP protocol: error if PUT before CHECKOUT (r1833465)
    * Fix: Let 'svnadmin recover' prune rep-cache even if disabled (r1838813)
    * Add test and FSFS checksum verification for issue #4722 (r1826720 et al.)

  - Other tool improvements and bugfixes:
    * Install 'fsfs-stats' wrapper for 1.8 compat (r1802032 et al.)
    * Note that 'tools/client-side/detach.py' doesn't work on 1.8+ (r1696722)

  - Bindings bugfixes:
    * JavaHL: Fix crash in client code when using external diff (r1845408)
    * JavaHL: SSL server trust prompt: allow accepting temporarily (r1820718)

 Developer-visible changes:
  - General:
    (none)

  - API changes:
    (none)


Version 1.9.9
(20 Jul 2018, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.9

 User-visible changes:
  - Client-side bugfixes:
    * Fix SEGV for 'svn export -rN WC' with relative externals (r1803755)
    * Fix issue #4677: 'svn up' after a directory replaced a file (r1814248)
    * Fix segfault when no home directory is available (r1819199)
    * Performance: Make 'svn info' fast on old repository revisions (r1827690)
    * Fix RA-serf problem with proxy username and password (r1833571)

  - Server-side bugfixes:
    * svnadmin: Fix false errors on some valid LOCK_PATH arguments (r1803754)
    * Fix crash when exiting 'svnserve --config-file' (r1824405)
    * Fix issue #4722: false "filesystem is corrupt" error on commit (r1827688)
    * Reword confusing "nested" wording in an httpd.conf warning (r1835700)

  - Bindings bugfixes:
    * swig-py: svn.core.Stream supports raw binary file-like objects (r1820620)
    * swig-rb: Don't crash if svn_md5_digest_to_cstring returns NULL (r1823805)

 Developer-visible changes:
  - General:
    * Fix CVE-2017-9800: Malicious server can execute arbitrary command on client (r1804698)
    * Fix test failure if compile- and run-time HTTPD versions differ (r1820523)

  - API changes:
    (none)


Version 1.9.8
(Not released; see changes for 1.9.9.)


Version 1.9.7
(10 Aug 2017, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.7

 User-visible changes:
  - Client-side bugfixes:
    * Fix arbitrary code execution vulnerability CVE-2017-9800
        See <https://subversion.apache.org/security/CVE-2017-9800-advisory.txt>
        for details.

  - Server-side bugfixes:
    (none)

  - Bindings bugfixes:
    (none)

 Developer-visible changes:
  - General:
    (none)

  - API changes:
    (none)


Version 1.9.6
(5 Jul 2017, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.6

 User-visible changes:
  - Client-side bugfixes:
    * cp/mv: improve error message when target is an unversioned dir (r1779948)
    * merge: reduce memory usage with large amounts of mergeinfo (issue #4667)

  - Server-side bugfixes:
    * 'svnadmin freeze': document the purpose more clearly (r1774109)
    * dump: fix segfault when a revision has no revprops (r1781507)
    * fsfs: improve error message upon failure to open rep-cache (r1781655)
    * fsfs: never attempt to share directory representations (r1785053)
    * fsfs: make consistency independent of hash algorithms (r1785737 et al)
	This change makes Subversion resilient to collision attacks, including
	SHA-1 collision attacks such as <http://shattered.io/>.  See also our
	documentation at <https://subversion.apache.org/faq#shattered-sha1> and
	<https://subversion.apache.org/docs/release-notes/1.9#shattered-sha1>.

  - Client-side and server-side bugfixes:
    * work around an APR bug related to file truncation (r1759116)

  - Bindings bugfixes:
    * javahl: follow redirects when opening a connection (r1667738, r1796720)

 Developer-visible changes:
  - General:
    * win_tests.py: make the --bin option work, rather than abort (r1706432)
      (regression introduced in 1.9.2)
    * windows: support building with 'zlibstat.lib' in install-layout (r1783704)

  - API changes:
    (none)


Version 1.9.5
(29 Nov 2016, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.5

 User-visible changes:
  - Client-side bugfixes:
    * fix accessing non-existent paths during reintegrate merge (r1766699 et al)
    * fix handling of newly secured subdirectories in working copy (r1724448)
    * info: remove trailing whitespace in --show-item=revision (issue #4660)
    * fix recording wrong revisions for tree conflicts (r1734106)
    * gpg-agent: improve discovery of gpg-agent sockets (r1766327)
    * gpg-agent: fix file descriptor leak (r1766323)
    * resolve: fix --accept=mine-full for binary files (issue #4647)
    * merge: fix possible crash (issue #4652)
    * resolve: fix possible crash (r1748514)
    * fix potential crash in Win32 crash reporter (r1663253 et al)

  - Server-side bugfixes:
    * fsfs: fix "offset too large" error during pack (issue #4657)
    * svnserve: enable hook script environments (r1769152)
    * fsfs: fix possible data reconstruction error (issue #4658)
    * fix source of spurious 'incoming edit' tree conflicts (r1760570)
    * fsfs: improve caching for large directories (r1721285)
    * fsfs: fix crash when encountering all-zero checksums (r1759686)
    * fsfs: fix potential source of repository corruptions (r1756266)
    * mod_dav_svn: fix excessive memory usage with mod_headers/mod_deflate
      (issue #3084)
    * mod_dav_svn: reduce memory usage during GET requests (r1757529 et al)
    * fsfs: fix unexpected "database is locked" errors (r1741096 et al)
    * fsfs: fix opening old repositories without db/format files (r1720015)

  - Client-side and server-side bugfixes:
    * fix possible crash when reading invalid configuration files (r1715777)

  - Bindings bugfixes:
    * swig-pl: do not corrupt "{DATE}" revision variable (r1767768)
    * javahl: fix temporarily accepting SSL server certificates (r1764851)
    * swig-pl: fix possible stack corruption (r1683266, r1683267)

 Developer-visible changes:
  - General:
    * add zlib discovery through pkg-config (issue #4655)
    * fix potential build issue with invalid SVN_LOCALE_DIR (issue #4653)
    * ruby: fix test failures with ruby >= 2.2 (r1766240)
    * fix link error with --disable-keychain on OS X (r1761755)
    * swig: enable building with SWIG >= 3.0.6 (r1721488 et al)
    * swig: fix building with -Wdate-time in $CPPFLAGS (r1722164)
    * update serf download URI in build scripts (r1700130 et al)
    * raise minimal httpd version from 2.0 to 2.2 (r1754190)


Version 1.9.4
(28 Apr 2016, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.4

 User-visible changes:
  - Client-side bugfixes:
    * diff: support '--summarize --ignore-properties' (part of issue #4567)
    * checkout: fix performance regression on NFS (r1710167)
    * gpg-agent: properly handle passwords with percent characters (issue #4611)
    * svn-graph.pl: fix assertion about a non-canonical path (r1729060 et al)
    * hot-backup.py: better input validation (r1721174, r1721175)
    * commit: abort on Ctrl-C in plaintext password prompt (issue #4624)
    * diff: produce proper forward binary diffs with --git (r1704292, r1704573)
    * ra_serf: fix deleting directories with many files (issue #4557)

  - Server-side bugfixes:
    * mod_authz_svn: fix crash in COPY/MOVE authorization check (CVE-2016-2168)
    * svnserve/sasl: fix authenticating users with wrong realm (CVE-2016-2167)
    * improve documentation for AuthzSVNGroupsFile and groups-db (r1730856)
    * fsfs: reduce peak memory usage when listing large directories (r1725180)
    * fsfs: fix a rare source of incomplete dump files and reports (r1717876)

  - Client-side and server-side bugfixes:
    * update INSTALL documentation file (r1703470 et al)
    * fix potential memory access bugs (r1722860 et al)
    * fix potential out of bounds read in svn_repos_get_logs5() (r1738259)

  - Bindings bugfixes:
    * ignore absent nodes in javahl version of svn status -u (r1720643)

 Developer-visible changes:
  - General:
    * fix ruby test suite to work with test-unit gem (r1714790)
    * allow building against KDE4 without conflict with KDE5 (r1734926)
    * fix update_tests.py#76 with SVNPathAuthz short_circuit (r1736432)
    * tweak getting symbolic error names in maintainer mode (r1735179)
    * fix inconsistent behavior of inherited property API (r1717874 et al)

  - API changes:
    * properly interpret parameters in svn_wc_get_diff_editor6() (r1728308)


Version 1.9.3
(15 Dec 2015, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.3

 User-visible changes:
  - Client-side bugfixes:
    * svn: fix possible crash in auth credentials cache (r1705328)
    * cleanup: avoid unneeded memory growth during pristine cleanup (r1706241)
    * diff: fix crash when repository is on server root (r1705060 et al)
    * fix translations for commit notifications (r1709389, r1709562)
    * ra_serf: fix crash in multistatus parser (r1706323, r1706324)
    * svn: report lock/unlock errors as failures (r1701598 et al)
    * svn: cleanup user deleted external registrations (r1705843, r1710558)
    * svn: allow simple resolving of binary file text conflicts (r1703581)
    * ra_serf: report built- and run-time versions of libserf (r1704847)
    * ra_serf: set Content-Type header in outgoing requests (r1715224 et al)
    * svn: fix merging deletes of svn:eol-style CRLF/CR files (r1703689 et al)
    * ra_local: disable zero-copy code path (r1718167)

  - Server-side bugfixes:
    * mod_dav_svn: fix heap overflow with skel-encoded requests (CVE-2015-5343)
    * mod_authz_svn: fix authz with mod_auth_kerb/mod_auth_ntlm (issue #4602)
    * mod_dav_svn: fix display of process ID in cache statistics (r1709553)
    * mod_dav_svn: use LimitXMLRequestBody for skel-encoded requests (r1687812)
    * svnadmin dump: preserve no-op changes (r1709388 et al, issue #4598)
    * fsfs: avoid unneeded I/O when opening transactions (r1715793)
    * svnlook: properly remove tempfiles on diff errors (r1711346)

  - Client-side and server-side bugfixes:
    * fix heap overflow in svn:// protocol parser (CVE-2015-5259)

  - Bindings bugfixes:
    * javahl: fix ABI incompatibilty with 1.8 (r1710104)
    * javahl: allow non-absolute paths in SVNClient.vacuum (r1710215, r1710290)

 Developer-visible changes:
  - General:
    * fix patch filter invocation in svn_client_patch() (r1706783)
    * add @since information to config defines (r1706983, r1706999)
    * fix running the tests in compatibility mode (r1706375)
    * clarify documentation of svn_fs_node_created_rev() (r1717154)

  - API changes:
    * fix overflow detection in svn_stringbuf_remove and _replace (r1714358)
    * don't ignore some of the parameters to svn_ra_svn_create_conn3 (r1714314)


Version 1.9.2
(30 Sep 2015, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.2

 User-visible changes:
  - Client-side bugfixes:
    * svn: fix crash when saving credentials in kwallet (r1700740, r1700951)
    * checkout/update: fix "access denied" error on Windows (r1701064 et al)
    * update: fix crash when updating a conflicted tree (r1702198, r1702200)
    * commit: fix possible crash (r1702231)
    * ra_serf: do not crash on unexpected 'X-SVN-VR-Base' headers (r1702288)
    * merge: fix crash when merging to a local add (r1702299 et al)
    * svnmucc: fix error during propset+put for existing file (r1702467 et al)
    * update: fix crash without .svn/tmp folder (r1701838, r1702203)
    * checkout: remove unnecessary I/O operation (r1701638)
    * merge: fix possible crash (r1701997)
    * update: fix crash with some of the incoming deletes (r1702247)
    * upgrade: fix crash for pre-1.3 wc with externals (r1702218 et al)
    * revert: fix crash when reverting the root of a move (r1702237 et al)
    * svn: do not crash upon specific database corruptions (r1702974, r1702991)
    * svn: show utf8proc version in svn --version --verbose (r1702533, r1702891)

  - Server-side bugfixes:
    * fix reporting for empty representations in svnfsfs stats (r1698312 et al)

 Developer-visible changes:
  - General:
    * fix svnfsfs_tests.py in fsfs-v4 and fsfs-v6 modes (r1700215 et al)

  - API changes:
    * disable unsupported operations for standard streams (r1701633 et al)


Version 1.9.1
(02 Sep 2015, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.1

 User-visible changes:
  - Client-side bugfixes:
    * Fix crash with GPG-agent with non-canonical $HOME (r1691928, issue #4584)
    * Fix checkout errors with svn+ssh:// on Windows (r1696222, r1696225)
    * svn: expose expat and zlib versions in svn --version --verbose (r1696387, r1697664)
    * svn: improve help text for 'svn info --show-item' (r1698106)

  - Server-side bugfixes:
    * svnserve: fixed minor typo in help text (r1694023)
    * Enable caching with memcached on Windows (1674626, r1674785)
    * Fix an error leak in FSFS verification (r1693886)
    * Fix incomplete membuffer cache initialization (r1695022)
    * svnfsfs: fix some bugs and inconsistencies in load-index (r1697381 et al.)

  - Client-side and server-side bugfixes:
    * Fix alignment fault in ra_svn on 32 bit SPARC machines (r1697914)

  - Bindings bugfixes:
    * Fix memory corruption in copy source SWIG bindings (r1694929)

 Developer-visible changes:
  * Better configure-time detection of httpd version and authz fix (r1687304 et al.)
  * Correct a parameter name in svn_repos_get_fs_build_parser5 (r1694194)
  * Resolve circular library reference in libsvn_fs_x (r1696695)
  * Fix Unix build on systems without GPG agent (r1694481, r1697824)

Version 1.9.0
(5 Aug 2015, from /branches/1.9.x)
http://svn.apache.org/repos/asf/subversion/tags/1.9.0

 User-visible changes:
  - General:
    * make all commands provide brief description in help output (r1522518)
    * flush stdout before exiting to avoid information being lost (r1543868)

  - Major new features:
    * fsfs: new format 7 with more efficient on-disk layout (r1547045 et al)
    * blame: support showing prospective as well as previous changes
    * info: support printing of individual values with --show-item (r1662620)
    * svn auth: new subcommand to manage cached credentials and certs
    * svnserve: cache config and authz to lower resource usage and be able to
      serve large numbers of connections with a limited number of threads
    * membuffer: quadruple the maximum cacheable directory size (r1545948 et al)
    * new filesystem fsx (faster, smaller); experimental - see release notes

  - Minor new features and improvements:
    * new 'diff-ignore-content-type' runtime configuration option
    * new option for 'svnadmin verify': --check-normalization
    * new option for 'svnadmin verify': --keep-going
    * svnadmin info: new subcommand to print info about a repository
    * print summary of conflicts before/after interactive conflict resolution
    * import: reduce number of connections to the server needed (r1482962)
    * membuffer: rework cache eviction heuristics (r1476664 et at)
    * membuffer: improved cache usage statistics (r1489883)
    * mergeinfo: new '--log' option (r1492168)
    * svnadmin upgrade: progress and cancellation support (r1495545, r1495566)
    * cleanup: add '--remove-unversioned' and '--remove-ignored' (issue #3549)
    * cleanup: add '--include-externals' option (issue #2325)
    * cleanup: add '--quiet' option (r1498661)
    * svnadmin load: speedup by setting revprops in one call (r1504079)
    * svnadmin load: set svn:date revprop in the initial commit (r1504951)
    * reimplement UTF-8 fuzzy conversion using utf8proc (r1511676)
    * svnadmin verify: speed up for repos with large directories (r1520419)
    * svn merge: interactive conflict resolver tries external tools (r1524145)
    * minor speed up in string to time conversion (r1533387)
    * windows: speed up console output (r1533994)
    * update: optimize wc db usage when obtaining children (r1537065 et al)
    * decreased overhead for case-sensitive configuration access (r1538068)
    * avoid re-opening repo for in-repo authz if already open (r1538120)
    * svnserve: output errors in a more standard way (r1544250)
    * faster parsing of config file comments (r1544716)
    * avoid trying to open the hooks-env file when it doesn't exist (r1544721)
    * svnserve: provide the same logging detail in "run once" mode as provided
      in the log file (r1544731)
    * svnserve: reduce connection latency (r1544732)
    * wc: reduce the number of locks and transactions required (r1545127 et al)
    * cat: add '--ignore-keywords' option (r1547517)
    * merge and mergeinfo: use fewer RA sessions (r1552265)
    * fsfs: limit delta chains from crossing too many shards (r1554942)
    * fsfs: option to configure compression level in deltas (r1559748)
    * fsfs: enable dir and prop deltas by default for formats that support
      it (r1555286)
    * fsfs: avoid out of date errors from files in a directory changing when
      you change a property on the directory (issue #2118)
    * fsfs: temporary transaction properties are preserved when commit is
      interrupted (r1549907 et al)
    * fsfs: speed up transaction creation (r1544719)
    * fsfs: avoid trying to open lock digest files that don't exist (r1544721)
    * fsfs: reduce internal overhead by using sorted array instead of hash for
      directory representation (r1554711)
    * fsfs: skip decoding txdelta windows that are already cached (r1555284)
    * fsfs: avoid constructing fulltext when delta we need is stored (r1555297)
    * fsfs: improvements to format 6 reading/writing (r1517479)
    * fsfs: reduce overhead of parsing noderev structures (r1544717)
    * fsfs: speed up node relation comparison (r1554807)
    * fsfs: speed up critical open_path() call (r1483301 et al)
    * fsfs: speed up node verification (r1520421 et al)
    * fsfs: speed up serialization into cache buffer format (r1505056)
    * fsfs: avoid caching intermediate fulltexts (r1565100)
    * fsfs: reduce lock contention on txn-list-lock (r1569549)
    * svnadmin: don't display warnings as errors (r1556297)
    * ra_serf: avoid caching properties in the update editor (r1557538)
    * ra_serf: decrease latency of requests to get directory contents by
      pipelining requests, speeds up 'svn ls --include externals' and
      some cases of multi-url diff, including merge (r1557548)
    * ra_serf: spool small update reports in memory to avoid making temp files
      for small requests (r1557599)
    * ra_serf: allow the reuse of serf connections after an error (r1553341)
    * ra_serf: improve many error messages (r1551910 et al)
    * ra_serf: pipeline lock/unlock requests (r1551918, r1551993, r1552008)
    * ra_serf: pipeline requests for inherited properties against old servers
      that don't support the faster REPORT (r1552455, r1552475)
    * ra_serf: allow reuse of sessions after a canceled request (r1557686)
    * ra_serf: reduce memory usage when retrieving revision props (r1557689)
    * mod_dav_svn: make out of date error message consistent with generic repos
      logic (r1558247)
    * allow SQLite to optimize functions that are deterministic (r1559352)
    * speed up delta calculations on non-deltifyable sections (r1559767)
    * ra_serf: improve memory usage in commit processing (r1520028)
    * report progress as cumulative across all sessions (issue #3260)
    * ra_serf: don't send DAV headers with GET requests (r1517472)
    * mod_dav_svn: SVNCacheTextDeltas defaults to on (r1517479)
    * fs: improve scalability of fs_open and similar functions (r1523450 et al)
    * svnserve: improve performance and scalability (r1523465 et al)
    * svnadmin verify: output progress messages to stdout (r1471095)
    * svnadmin crashtest: make output less misleading (r1486046) 
    * mod_dav_svn: discover copy to src earlier in some cases (r1537440)
    * speed up mergeinfo parsing (r1483292, r1483309 et al)
    * optimize hash lookups used in mergeinfo and caching (r1483434 et al)
    * log: optimize string handling in repos layer (r1483570, r1483572)
    * ask disk hardware to sync instead of only syncing to hardware buffers
      when OS supports it (r1484439, r1484445)
    * optimize diff code to avoid unneeded comparisons (r1485488)
    * optimize check if relpaths are canonical (r1485496, r1489828)
    * ra_svn: reduce protocol implementation overhead (r1485499, r1485504 et al)
    * optimize file translation without keyword substitution (r1486058)
    * optimize config file parsing by using unbuffered I/O (r1486897)
    * patch: apply ignore settings when deciding to delete dirs (r1490378)
    * use a cheaper RA operation for common client calculation (r1496468 et al)
    * ra_svn: avoid unnecessary work when doing a blame (r1503046)
    * optimize reading files into memory if size is known (r1505068)
    * copy: do not error on properties when doing a foreign copy (r1563361)
    * membuffer: reduce memory usage by using shorter lived pools (r1564217)
    * svnadmin load: add '--ignore-dates' option (r1564789)
    * update: reduce sessions used with '--parents' option (r1565920)
    * diff: report properties on deleted nodes (r1569320, r1570055)
    * diff: switch to diff processor APIs instead of old style callbacks, step
      towards resolving long standing bugs and feature requests (r1569551 et al)
    * diff: use the proper revision in headers for addition and deletion
      of files (r1570053)
    * svnadmin lslocks: add cancellation (r1571992)
    * svn --version: list available authentication credential caches (r1572106)
    * fs: improved detection of changes between two nodes, this should reduce
      the number of out of date errors clients see (r1572336)
    * allow the use of libmagic to be configured via subversion configuration
      file or SVN_CONFIG_OPTION_ENABLE_MAGIC_FILE env variable (r1572916)
    * new '--pin-externals' option for svn copy (issue #1258)
    * the '--strict' option was renamed '--no-newline' (r1662224)
    * merge/update: switch to three-way text conflict markers
      (r1591951, r1595522)
    * patch: handle renames in git formatted patches (r1594636)
    * svnfsfs: new expert tool (r1594860)
    * mod_dav_svn: allow server admin to GET the FSFS global cache stats
      (r1595160)
    * diff: support git-like binary file diffs with '--git' (r1599552)
    * diff: support arbitrary context size for internal diff tool with
      '-U' option (r1603847, 1603871)
    * commit: print progress notification between client finishing
      transmitting text deltas and asking server to commit (r1604179)
    * fsfs: optimize log commands for repos on Windows by not
      using a locale specific function to parse ids (r1605123)
    * fsfs: reduce memory usage of reading/writing changed paths caches
      (r1605188 et al)
    * mod_dav_svn: log post-commit errors to httpd error log as well
      as returning them to client (r1606004)
    * make server config groups work with svn:// URLs (issue #4512)
    * svnadmin hotcopy: report progress when copying revisions and packed
      shards for FSFS repositories (r1613339)
    * info: show revisions for missing tree conflicts (r1617932)
    * fsfs: avoid shared data clashes due to multiple distinct repositories
      having identical UUIDs (r1618138 et al)
    * status: ignore thumbs.db files by default (r1620955)
    * fsfs: harden parsers against data corruption (r1622931, r1622937,
      r1622942)
    * diff: respect svn:keywords and svn:eol-style when doing arbitrary
      diffs (r1623820)
    * ra_serf: reduce size of XML generated for reports (r1627333)
    * replace generic --trust-server-cert with more specific options to
      override specific certificate failures (r1630117 et al)
    * commit: improve speed of commits with many files (r1630312 et al)
    * svnadmin setrevprop: add '--transaction' option (r1631435)
    * svnadmin delrevprop: new subcommand (1592723)
    * svnadmin verify: validate the index data against checksums (r1631598)
    * svnadmin verify: new option '--metadata-only' (r1593753)
    * cp: improve performance of local copies (r1632284, et al)
    * fsfs: speed up operations that use revision properties (r1634875,
      r1634879)
    * checkout/update: use fewer RA sessions (r1635753 et al)
    * log: do less work when '--with-no-revprops' is used (r1642231)
    * patch: improve command to be more capable as compared to GNU patch
      (issue #4533)
    * limit server caches to avoid running out of memory if server admin
      configured caches larger than supported by the platform (r1645572)
    * mod_authz_svn: log implicit read access failures with INFO log level;
      Explicit read access failures are still logged with ERROR log level
      (r1653032)
    * ra_serf: reduce memory usage by removing some extra intermediary state
      (r1654681, r1654690)
    * revert: improve performance on large working copies without changes
      (r1657083)
    * ra_svn: improve efficiency of editor processing (r1658194 et al)
    * merge: provide different conflict reasons for local additions and 
      unversioned obstructions (r1659381)
    * windows: improve checkout performance on windows by using sqlite truncate
      journal mode rather than delete (r1659426)
    * status: now accept '-r' argument (r1671164, 1672578, 1673228)
    * ls: improve performance of '-v' on tag directories (r1673153)
    * resolve: improve conflict prompts for binary files (r1667228 et al)
    * fsfs: improve error messages for parsing errors (r1678147, r1678149)
    * warn when the '--config-option' FILE:SECTION:OPTION combination may
      be invalid. (r1674301 et al)
    * ensure full key matching in membuffer cache (r1678950 et al)
    * mod_dav_svn: expose cache statistics via HTTP (r1595160)

  - Client-side bugfixes:
    * export: fix problem exporting symlinks on windows (r1476093)
    * fix non-ascii character handling of command line options (r1476461)
    * log: strip EOL marker only after converting to UTF-8 (r1476608)
    * ra_serf: avoid dropping errors when making a lock request (r1489526)
    * ra_serf: fix an error leak in update logic (r1499686)
    * windows: fix issues with wcs in symlinked folders (r1501251)
    * fix regression that broke parallel nested checkouts (issue #4390)
    * svnmucc: ignore leading r in revision number arguments to -r (r1502636)
    * mkdir: use absolute paths to avoid Windows path length limits (r1516816)
    * avoid encoding support code when C runtime doesn't support it (r1530582)
    * ra_svn: add check against dirents with path separators (r1533812)
    * properly delete temporary files when atomic write fails (r1537466)
    * wc: fix corner cases in move-update tree conflicts (r1538639 et al)
    * windows: fix crash report indentation for x64 reports (r1543589)
    * mergeinfo: allow to work on a moved target (issue #4301)
    * windows: avoid delay when no homedir is available (r1546814)
    * status: report externals in a deterministic way (r1550200)
    * copy: avoid an unneeded extra RA session for wc to repo case (r1551564)
    * ra_serf: show pre-revprop-change failure on revprop delete (issue #3086)
    * svnsync: avoid extra request at end of every revision sync (r1553370)
    * ra_serf: fix replace + propset of locked file failures (issue #3674)
    * ra_serf: prevent overwriting directory during copy (issue #3314)
    * commit: limit number of temporary files open at same time (issue #4172)
    * ra_serf: verify incoming integers are really integers (r1557709 et al)
    * log: -g --xml doesn't differentiate between forward and reverse merges
      (issue #4463)
    * windows: improve update and checkout speed (issue #4450)
    * log: reduce performance penalties of using -g (r1559912)
    * blame: reduce performance penalties of using -g (r1560112)
    * ra_local: set svn:txn-user-agent for consistency (r1498608)
    * ra_svn: use the stream API properly for communications (r1562072)
    * update: provide error when none of targets are wcs (r1565388)
    * wc: reduce dependence on unspecified SQLite behavior (r1567080 et al)
    * diff: fix diffing directory without permissions to read parent (r1569265,
      r1569290)
    * diff: improve resolving peg revisions (r1570205 et al)
    * diff: fix bug in calculating header paths (r1570584)
    * ra_serf: add SSL certificate issuers common name to output (r1573728)
    * updates keywords in files not modified during 'svn switch' (issue #1975)
    * svnmucc: Normalize line endings with '-F' and '-m' options
      (r1592148, r1592150)
    * fix problems with read-only authentication caches (issue #4504)
    * commit: don't bump just locked files (r1603617)
    * log: reduce memory with '-v' (r1604569 et al)
    * diff: fix diffing locally deleted nodes under copied directories
      (r1605832)
    * diff: fix missing node error when diffing a replaced node (r1605866)
    * propget: forbid using 'show-inherited-properties' with 'strict' (r1611698)
    * windows: avoid delay when user profile isn't writable (r1617926)
    * merge: display the correct node kinds for tree conflicts (r1618024,
      r1619418, r1619717)
    * diff: show the correct revisions in the header (r1619452)
    * diff: fix missing header for files with only property changes (r1619476)
    * update: raise a tree conflict rather than an obstruction when an
      incoming server-excluded node conflicts with a locally added node
      (r1619495)
    * update: improve tree conflict reason and action descriptions (r1619777)
    * ra_serf: fix stalls during checkout/update over http/https (r1621596)
    * svnmucc: don't crash when '--version' is used with other arguments
      (r1625496)
    * checkout: report svn:externals failures via the exit code as other
      commands already do (r1628398)
    * svn & svnlook: use the right error code when fputs() fails (r1630369)
    * export: reject peg specifiers on local destination path (r1635085)
    * don't reject command-line arguments in the form of ".@abc", where
      "abc" is a peg specifier that may be empty (r1635118)
    * fix directory externals not following history (issue #4529)
    * remove 'df' and 'm' options from the interactive conflict resolver for
      binary files (r1645578)
    * mergeinfo parsing: allow source path to be empty (issue #4537)
    * mkdir: when using '--parents' don't add entire contents recursively if
      target already exists (r1649951)
    * resolve errors with move of a nested delete (r1651980, r1651997)
    * update: prevent breaking a working copy when a directory is replaced
      with an external to a foreign repository (issue #4550)
    * update: prevent an invalid wc state when applying a move (r1652184 et al)
    * resolve: fix a segfault when breaking a move inside a delete (issue #4491)
    * ra_serf: don't handle a commit that didn't produce a new revision as
      a successful commit (r1653532)
    * export: fix the lack of notifications when starting to handle externals
      (issue #4527)
    * update: fix a case where we reported an error rather than a tree conflict
      (r1655017)
    * info: Use local platform style paths in all cases (r1659283)
    * handle lack of a configuration file properly (r1660369)
    * update: resolve issues with tree conflicts caused by an incoming
      delete removing a mixed revision tree (r1660742)
    * don't hold onto locks of deleted paths in the client on commit (r1661363)
    * info: fix url calculation for a few statuses (r1661476)
    * update: when using '--set-depth' avoid removing local changes (r1661585)
    * update: fix tree conflict detection on unversioned nodes that exist where
      there used to be a deleted node (r1661664)
    * status: display tree conflicts even if the node with the tree conflict is
      shadowed by a file (r1662331)
    * pre-1.6 wc compatibility: fix with obstructed working copies (r1662412)
    * resolve: allow directly resolving tree conflicts (r1658435)
    * copy: when copying from a wc to a url show all the changes (r1655729)
    * info: provide results in a stable order (r1662030)
    * revert: allow depth limited reverts of nodes that only have not-present
      and/or excluded child nodes (r1662091)
    * wc: fix calculating repo path after commits of nodes that shadow a
      switched (not-present) node (r1663991, r1666258, r1674032)
    * update: resolve assertion on bad update report involving incomplete
      status (r1663671, r1666832)
    * update: allow a real file to replace a file external (r1664035)
    * merge: raise a tree conflict on root of obstructing dir (r1666690)
    * cp: fix 'svn cp ^/A/D/H@1 ^/A' to properly create A (r1674455, r1674456)
    * status: fix incorrect output with file externals (issue #4580)
    * merge: fix part of issue #4582 (r1686175, r1687029, r1688258)

  - Server-side bugfixes:
    * svnserve: don't ignore socket initialization errors (r1544253)
    * svnserve: don't hide fatal errors in inetd and tunnel modes (r1544256)
    * fsfs: log repo path in local style for cache init failure (r1494314)
    * fsfs: fix potential transaction corruption (r1519624)
    * svnserve: fix logging in multi-threaded servers (r1523502)
    * fsfs: don't report out of date errors due to FS corruption (r1527084)
    * svnadmin verify: detect inconsistencies that prevent loading (r1536854)
    * mod_dav_svn: use 404 status for errors caused by invalid URIs (r1542063)
    * mod_dav_svn: use 404 when the repository doesn't exist (r1544259)
    * mod_dav_svn: use 'dav_svn:' prefix for filename instead of 'svn:'
     (r1544711)
    * mod_dav_svn: XML escape lock tokens (r1547427)
    * hotcopy: don't create config files when copying pre-1.5 repos (r1547454)
    * hotcopy: preserve the rep-cache.db permissions when hotcopying (r1547877)
    * mod_dav_svn: fix SVNCacheTextDeltas and SVNAdvertisV2Protocol directive
      merging (r1548124)
    * mod_dav_svn: always produce an error text even when text specifies
      the default message to make diagnosing issues easier (r1553441)
    * mod_dav_svn: fix some pool lifetime issues with error messages (r1553868)
    * mod_dav_svn: avoid setting option headers multiple times (r1557103)
    * fsfs: prevent some commits that could cause future corruption (r1560673)
    * cache: fix premature eviction due to 64-bit underflows (r1567996 et al)
    * svnserve: fix potential integer overflow in Cyrus SASL support (r1570434)
    * bdb: fix potential integer overflow and underflow (r1570701)
    * bdb: prevent silent propagation of some corruption (r1570778)
    * svnadmin hotcopy: do not corrupt db/current contents when copying old
      FSFS repos (r1603485)
    * svnadmin hotcopy: don't produce broken copies when a concurrent pack
      happens (r1605633)
    * log: reduce memory consumption of '-v' (r1605195)
    * mod_dav_svn: fix performance issue on Windows with named atomics
      (r1611379)
    * log: fix a segfault in handling changed paths (r1615364)
    * mod_dav_svn: properly forward post-lock/post-unlock failures (r1622235)
    * diff: fix handling of depth empty in added directories (r1622024)
    * fix a segfault with corrupted changed path lists that try to add root
      nodes (r1622944)
    * svnadmin verify: report errors nicely rather than possibly aborting
      (r1622955)
    * svnlook propget: report transaction name rather than revision number in
      errors if run with '-t' option (r1623317)
    * svnadmin verify: prevent stack overflow conditions in corrupted
      repositories (r1623398)
    * fsfs upgrade: fix an issue that could block an upgraded format 1 or 2
      repository from being committed to (r1624011)
    * fs backends: fix memory lifetime issue (r1632646)
    * bdb: output correct checksum in error message about corruption (r1640707)
    * fsfs: fix a pool lifetime error related to transaction local caches
      (r1643139, 1643233)
    * fsfs: avoid "random DAG walks" during checkout over ra_serf (r1645567)
    * fsfs/bdb: reduce memory use during tree deletions (r1647820, r1655022)
    * mod_authz_svn: fix unbounded memory use when SVNPathAuthz short_circuit
      is used (r1647887)
    * fsfs: reduce memory use when walking back in history (r1648230)
    * dump: remove incorrect kind header on replaced nodes (issue #4553)
    * dump: remove duplicate headers for replace-with-copy (issue #4552)
    * mod_dav_svn: don't send XML-unsafe characters in svn:author
      (issue #4415)
    * dump: don't write broken dump files in some ambiguously encoded fsfs
      repositories (issue #4554)
    * mod_dav_svn: provide a more intuitive error message to the client when
      trying to create a directory that already exists (issue #2295)
    * fsfs: fix uninitialized memory use in lock/unlock code (r1657525)
    * fix a segfault executing a pre-commit hook with legacy locks (r1657893)
    * mod_dav_svn: do not ignore skel parsing errors (r1658168)
    * fsfs: fix multiple reporting of the same lock (r1658482)
    * fsfs: fix pool lifetime issue in lock handling (r1659314)
    * mod_dav_svn: properly log assertions and malfuctions (r1660480)
    * svnadmin load/dump: preserve deletion of svn:date from r0 (issue #4563)
    * svnrdump: don't provide HEAD+1 as base revision when loading deletes
      (r1664684)
    * mod_dav_svn: improve error message sent with a 405 status code
      (r1665195, r1666096, r1666379)
    * make detection of invalid base revision on commit behave the same on
      all RA layers (r1664664, r1664672, r1664674)
    * mod_dav_svn: emit the first few log items as soon as they are available
      (r1666965, r1667120)
    * mod_dav_svn: prevent a tree walk on copy sources (issue #4351)
    * fsfs: fix 'EOF found' error when reading repo (issue #4577)
    * svnadmin freeze: unlock rep-cache.db as part of unfreezing
      (r1679169, r1679287)
    * fsfs: improve stability in the presence of power or network
      disk failures during 'svnadmin pack' (r1683378)
    * detect invalid svndiff data earlier (r1684077)

  - Client-side and server-side bugfixes:
    * use less memory when retrieving extension from filename (r1548480)
    * use more optimal code path with old txdelta v1 data (r1485480)
    * windows: allow opening SQLite databases on long paths (r1564338)
    * fix an out-of-bounds read in the delta combiner (r1569415)
    * fix a number of cases of undefined behavior when passing invalid
      arguments to memcpy() (r1632530, et al)
    * windows: avoid a 12 second delay due to a retry loop in some error
      conditions when opening a file (r1657583)

  - Other tool improvements and bugfixes:
    * windows: add build-svn-deps-win.pl tool to build dependencies (r1467715)
    * svnpubsub: add support for revprop changes (r1486463)
    * svnpubsub: do not pass svn commands through shell (r148466, r1486467)
    * svnpubsub: hooks exit with an error if they fail (r1486500, r1486597)
    * svnpubsub: hooks use "--" to signal end of arguments (r1486513)
    * mailer: properly encode mail headers per RFC2047 (r1487532)
    * svnwcsub: add a pre-update hook, which can deny update (r1494542 et al)
    * fsfs-stats: count file nodes that are added without history (r1519283)
    * fsfs-stats: replaced by 'svnfsfs stats' (r1594860)
    * fsfs-access-map: count empty reads and unnecessary seeks (r1523441)
    * fsfs-access-map: generate scaled/rectangular heatmaps (r1505065)
    * fsfs-access-map: deal with strace format issues (r1505065)
    * fsfs-access-map: update to know about index files (r1505065)
    * svnbench: renamed from svn-bench (r1659226)
    * svnbench: add null-info command (r1532196)
    * svnlook.py: made usable as a library by adding getter methods (r1541558)
    * svnbench, svnraisetreeconflict, svnauthz, svn-rep-sharing-stats: More
      consistent error reporting, following pattern of core command-line
      programs (r1544194)
    * which-error.py: allow which-error.py to be run from symlink (r1547977)
    * bash_completion: add svnlook filesize command and options to svn cat,
      info, and mergeinfo commands (r1569021)
    * new '--conflict-style' option to standalone diff3 tool (r1591750)
    * update standalone diff3 tool so it can be used with --diff-cmd
      directly (r1591871, r1591876)
    * bash_completion: support for auth command (r1596841)
    * diff: support '-U' option (r1618618)
    * svn-rep-sharing-stats: replaced by 'svnfsfs stats' (r1618861)
    * add svn-vendor.py as an alternative to svn_load_dirs.pl that can
      auto-detect renames and copies (r1623660)
    * svnpredumpfilter.py: fix a scalability problem that made run time
      increase greatly on large repositories (r1625674 et al)
    * svnpredumpfilter.py: detect copies of copies and handle properly
      (r1626182)
    * bash_completion: add svnadmin delrevprop (r1631473)
    * showchange.pl: removed, obsoleted by 'svn log --diff' (r1631686)
    * bash_completion: add new trust options (r1660373)
    * bash_completion: add '--pin-externals' (r1662250)
    * bash_completion: stop offering deprecated options (r1662291)
    * bash_completion: add '--show-item' and '--no-newline' (r1662622)
    * svnbench: add null-blame command (r1673785, r1673803, r1674015)
    * svnbench: install with default 'make install' (r1685085)

 Developer-visible changes:
  - General:
    * require Python 2.7+ for development and testing (r1691712, r1691713, r1692448)
    * include symbolic names for error codes in maintainer mode (r1467643)
    * include symbolic names for warning codes in maintainer mode (r1469855)
    * support YouCompleteMe vim plugin (r1476374 et al)
    * cache: add pretend_empty mode for maintainers (r1461689, et al)
    * allow tests to be run with exclusive wc locks (r1496475)
    * fix check for Microsoft C/C++ compiler (r1503148)
    * improve windows build to use pre-built dependencies
    * optimize ramdrive usage in the windows test runner (r1504511)
    * SVN_CMDLINE_DISABLE_CRASH_HANDLER env var added for Windows (r1506507)
    * gen-make.py: support Visual Studio 2013 by --vsnet-version=2013 (r1533907)
    * windows: don't require APR source when building (r1534037, et al)
    * don't compile SQLite amalgamation twice (r1536364)
    * make C tests use same temp path as Python tests (r1536700)
    * davautocheck: access log logs the r->filename now (r1538048)
    * added test to detect duplicate SQL queries (r1538962)
    * windows test runner: copy additional apr dlls (r1539300)
    * support for debug logging that should be available in serf 1.4.0 (r1541561)
    * OS X: fix build when Gnome is installed (r1541698)
    * properly detect if expat is libexpat.lib or xml.lib on windows (r1541981)
    * doc-clean target works properly with separate build dir (r1542303)
    * don't break entire test run if cleaning temp directory failed but return
      an error anyway (r1542817)
    * windows tests: find java.exe via the sdk if not found via PATH (r1543876)
    * fix davautocheck with httpd 2.3.x+ and worker/prefork MPMs (r1544302-3)
    * add parallel mode for C tests (r1545334 et al)
    * use --bin path for svnrdump when running Python tests (r1548706)
    * remove unused --with-openssl option from configure (r1548714)
    * tests: stop rewriting shared authz file for every sandbox (r1552064 et al)
    * fix unnecessary aborts in maintainer mode on sqlite errors (r1536325)
    * new --sqlite-logging option for C tests (r1560409)
    * allow building with APR-2 (r1560586)
    * remove support for ASM Zlib from Windows build system (r1560864)
    * gen-make.py: new -D option (r1567046)
    * improve how we fetch the version of Windows (r1568798, 1568806)
    * move common code in python tests to library files to avoid side effects of
      having tests depending on each other (r1570654)
    * disable compiling on platforms where int is shorter than 32-bits and add
      the SVN_ALLOW_SHORT_INTS compile definition to override (r1570882)
    * disable building *.sbr files with Visual C++ 2010 or later (r1571020)
    * require serf 1.3.4 (r1572261)
    * require APR and APR-Util 1.3.x (r1572261)
    * add mod_dontdothat to davautocheck.sh (r1572312)
    * require Apache httpd 2.2.x (r1572339)
    * support pkg-config for serf when using a prefix (r1572762)
    * don't depend on stdbool.h and inttypes.h for utf8proc (r1573069 et al)
    * avoid non-portable find extensions so the build works on Solaris (r1573780)
    * Allow PARALLEL value to specify the number of threads to run tests with,
      PARALLEL=1 means to use the default (r1573320)
    * pkg-config support for libsvn_* libraries (issue #4435)
    * binaries built on Mac OS X 10.6+ will not run on older versions (r1651549)
    * fix random failure of Makefile-based parallel builds on Unix
      when the amalgamated SQLite is being used (r1658357)
    * C tests only run with ra_local to avoid duplicate testing (r1609477)
    * allow skipping the C tests for any RA method (r1609489)
    * new tools for benchmarking on Windows (r1610264)
    * svnbench: no longer part of tools but main subversion (r1618860)
    * improve detection for libtool (r1627276)
    * check the runtime version of the fs_util library in the fs backends
      (r1651567)
    * properly initialize the src_kind value to avoid problems for other API
      users during a copy (r1655723)
    * try to improve reliability of applications that do not call
      svn_dso_initialize2() right after apr_initialize() (r1659604)
    * add svn-wc-db-tester tool for testing working copies (r1660874)
    * fix bugs and performance issues using svn_wc_walk_entries3() (r1661110)
    * support using Python 3 for building (r1661247)
    * don't add -lstdc++ on FreeBSD 10 (r1662329)
    * add build support for Visual Studio 2015 (r1663183, r1663184, r1689721 et al.)
    * fix test failures when running from a directory whose name contains
      characters that must be escaped when used in a URL. (r1664997)
    * fix breakage of the serf ra session with svn_ra_get_dir2() and
      svn_ra_get_log2().  (r1665213, r1665259, r1665609)
    * resolve a race condition in some test suite cleanup code (r1683303)
    * fix some tests on non-US default locale on Windows (r1684034)
    * document the meaning of "XFAIL" for users building from source (r1683071)

  - API changes:
    * new RA callbacks for managing ra_svn tunnels:
      svn_ra_callbacks2_t::check_tunnel_func,
      svn_ra_callbacks2_t::open_tunnel_func and
      svn_ra_callbacks2_t::close_tunnel_func
    * new API for retrieving info about a file system: svn_fs_info()
    * new API svn_io_file_flush() that wraps apr_file_flush()
    * new API svn_io_write_atomic(), that writes, sync and renames a file
    * new API svn_compat_log_revprops_out_string()
    * deprecate unused datatype svn_ra_get_latest_revnum_func_t
    * new API svn_client_cleanup2() (r1496954 et al)
    * new API svn_stringbuf_create_wrap() (r1502248)
    * new API svn_io_file_aligned_seek() (r1502539)
    * ra_svn: fix svn_ra_get_log*() to apply limit when server can't (r1503043)
    * svn_client_commit6: notify which path prevents a mv commit (r1503662)
    * new APIs svn_io_file_create_empty() and svn_io_file_create_bytes()
      (r1505006)
    * new API svn_ver_check_list2() (r1502267)
    * new API svn_stringbuf_from_stream() (r1532193)
    * svn_auth_get_platform_specific_client_providers() now includes ssl
      providers (r1534153)
    * change dav_svn_split_uri() repos_path argument (r1537812)
    * new API svn_repos_fs_type() returns filesystem type (r1538585)
    * svn_client__get_inheritable_props() clears wcroot_iprops when revision is
      not valid (r1538602)
    * SVN_VA_NULL: New macro which is null-pointer constant (r1536307)
    * SVN_NEEDS_SENTINEL_NULL: New macro to mark functions that require final
      NULL sentinel value, so compilers can warn when missing (r1543394)
    * platform specific svn_auth_get_* functions are deprecated, use the
      svn_auth_get_platform_specific_provider() function instead (r1543992)
    * SVN_INT_ERR macro is deprecated; use svn_handle_error2() or
      svn_cmdline_handle_exit_error() instead (r1544142)
    * new API svn_client_cat3() allow disabling keyword expansion and retrieving
      props (r1544182)
    * svn_auth_first_credentials(): provides an error rather than crashing if
      auth_baton is NULL (r1544320)
    * svn_auth_set_parameter(): Do nothing if auth_baton is NULL (r1544320)
    * new API svn_relpath_prefix which returns a relpath with a maximum number
      of path components (r1545123, r1673282)
    * svn_fs_initialize() is now threadsafe (r1546409)
    * svn_checksum_kind_t has two new FNV-1a checksums (r1546699)
    * svn_fs_lock: control characters are not allowed in lock tokens (r1547445)
    * new API svn_wc_cleanup4() makes some functionality optional and adds
      notifications (r1548075 et al)
    * new API svn_client_info4() supports walking externals (r1550206 et al)
    * new flag for svn_fs_begin_txn2() SVN_FS_TXN_CLIENT_DATE to allow client
      to set the final svn:date (r1550228)
    * new APIs for easier RA commits svn_client_mtcc_* (r1550758 et al)
    * new API svn_ra_session_dup() (r1552324 et al)
    * svn_ra_stat() now handles compatibility with 1.0-1.1 svnserve (r1552441)
    * new error code SVN_ERR_COMPOSED_ERROR added to allow detection of
      composed errors by API consumers (r1553266)
    * new error code SVN_ERR_RA_DAV_PRECONDITION_FAILED (r1553668)
    * new error code SVN_ERR_RA_CANNOT_CREATE_SESSION (r1554027)
    * new API svn_fs_node_relation() (r1554800)
    * SVN_EXPERIMENTAL to mark functions that might change in future (r1526012)
    * fix bug in svn_client_get_merging_summary() with some params (r1532396)
    * new error code SVN_ERR_XML_UNEXPECTED_ELEMENT (r1498938)
    * extend stream API to also support incomplete reads (r1561688 et al)
    * new API svn_wc_add_from_disk3() (r1563361)
    * new API svn_client_revert3() to allow clearing changelists and to have
      a metadata_only flag (r1568635, r1657026)
    * svn_rangelist_inheritable2(): don't change inheritabilty of remaining
      ranges (r1569731)
    * svn_rangelist_inheritable2() and svn_mergeinfo_inheritable2(): fix a
      pool lifetime issue (r1569764)
    * new APIs to support cancellation during unified diff output and
      allow the context size to be specified (r1570149 et al)
    * APIs related to retrieving logs are now documented to be unlimited when
      a negative value is passed for the limit (r1570330, 1570335)
    * new APIs: svn_fs_props_different() and svn_fs_contents_different()
      (r1572363, r1573111)
    * expose SVN_CONFIG_AUTHN_* macros in public API (r1572640)
    * add SVN_CONFIG_OPTION_SQLITE_TIMEOUT to allow SQLite busy timeout
      to be configured by clients (r1592093)
    * add new notification between transmitting deltas and finalizing
      commit as svn_wc_notify_commit_finalizing (r1603388)
    * svn_client_cat3() API no longer returns entry or WC props (r1603501)
    * properly handle canonical paths in svn_io_start_cmd3() (r1604761)
    * add SVN_FS_CONFIG_FSFS_BLOCK_READ to control FSFS format 7 block
      read feature (r1604933)
    * new API svn_cstring_skip_prefix() (r1612823)
    * new API svn_diff_mem_string_output_merge3() (r1618599)
    * extend svn_wc_info_t with conflicts2 (r1618643)
    * new API svn_diff_mem_string_output_unified3() (r1618839)
    * new API svn_diff_file_output_merge3() (r1618857)
    * svn_fs_props_changed() and svn_fs_contents_changed() no longer return
      false positives (r1618880)
    * new API svn_wc_conflict_description2_dup() (r1618883)
    * extend svn_wc_conflict_description2_t with prop_reject_abspath field
      (r1619096)
    * extend svn_wc_conflict_description2_t with property values as
      svn_string_t's (r1619122)
    * fix svn_client_import5() to use absolute paths (r1623974)
    * fix a few cases of invalid filling of svn_client_commit_item3_t (r1623981)
    * add SVN_FS_CONFIG_FSFS_SHARD_SIZE to allow creation of repositories with
      a custom shard size (r1624512)
    * new API svn_cmdline_create_auth_baton2 (r1630117)
    * make svn_string_*() and svn_stringbuf_*() functions handle C strings
      of NULL with 0 length (r1632530, et al)
    * fix svn_stream_compressed() for streams without partial read support
      (r1639626)
    * do not segfault on svn_stream_read_full() or svn_stream_skip() are called
      for a no-op stream created via svn_stream_create() (r1639637)
    * add SVN_FS_CONFIG_FSFS_LOG_ADDRESSING to control logical addressing
      feature of fsfs format 7 (r1640915)
    * rename the 'parent_directory' parameter of
      svn_wc_parse_externals_description3() to 'defining_directory' and improve
      the documentation (r1642690)
    * new API svn_repos_get_fs_build_parser5() (r1647563)
    * SVN_VERSION_BODY changed so that it is embedded into libraries, ultimately
      allowing SVN_VER_TAG constant to be modified by patches (r1651565)
    * rename repos_url to repos_url_deocded argument to
      svn_repos_get_commit_editor5() to clairfy usage (r1653609)
    * make svn_io_set_file_read_only() and svn_io_remove_dir2() ignore
      ENOTDIR when ignore_enoent argument is set so the behavior is consistent
      across platforms (r1653680)
    * make svn_ra_open4() return the documented error when a repository
      should be opened in a different location (r1655648)
    * no longer return an error when using svn_ra_get_lock() and the path does
      not exist (r1656875)
    * svn_string_dup() will accept a NULL pointer and return a NULL (r1657254)
    * svn_ra_get_file_revs2() now handles SVN_INVALID_REVNUM as HEAD (r1660463)
    * new API svn_error_quick_wrapf() (r1662668)
    * new API svn_fs_node_has_props() (r1673170, r1673172, r1673692, r1673746)
    * new API svn_repos_verify_fs3() (r1492651 ... r1687769)

  - Bindings:
    * javahl: add support for the RA layer (r1494650 et al)
    * javahl: add ignore-keywords knob to ISVNCLient.doExport (r1494936)
    * javahl: improve performance of rev_range_vector_to_apr_array (r1496243)
    * javahl: provide whole stack of errors from native exceptions (r1496353)
    * javahl: new framework for manipulating in-memory config data (r1497746)
    * javahl: add methods to set config change handler callback (r1497753)
    * javahl: add inheritance info to JavaHL's RevisionRange type (r1499308)
    * swig-rb: fixes to building on Windows (1505406 et al)
    * libsvn_swig_*libraries now work as proper shared librares (r1506520 et al)
    * swig-py: 'import svn.core.*' imports libsvn_subr public symbols (r1507860)
    * javahl: expose the svn_rangelist operations (r1509025)
    * javahl: new utility class SVNUtil (r1512354)
    * javahl: serialize init of native library (r1519803)
    * javahl: fix value truncation checks (r1519913)
    * javahl: add ISVNClient.info which exposes svn_client_info4 (r1603481)
    * javahl: include name of exception class in error messages (r1532117)
    * javahl: simplify JNI environment handling (r1533804)
    * javahl: Revsion.UNSPECIFIED added as alias to Revision.START (r1533928)
    * javahl: do not require JUnit to build javahl; only to test (r1535603)
    * javahl: update Action enum with new entries added in 1.9 (r1536319)
    * javahl: expose node property validation utility (r1538133)
    * javahl: new style JNI wrapper (r1539114 et al)
    * javahl: new utility API to parse/unparse svn:externals (r1539130 et al)
    * javahl: allow tests to be run from a RAM disk (r1539215 et al)
    * javahl: expose and use the url member of svn_wc_notify_t (r1539601)
    * javahl: expose a utility API to resolve relative externals (r1540921)
    * javahl: new utility API for file content translation (r1542401)
    * javahl: throw NullPointerException when sources is empty (r1543328)
    * swig-pl: fix compilation against perl 5.18 on Windows (r1543980)
    * javahl: implement streamed file contents translation (r1543985)
    * javahl: enable warnings with javac (r1544163, r1544169)
    * javahl: cleanup warnings (r1544578 et al)
    * javahl: add common utilities for new-style map iterations (r1545925)
    * javahl: add an API to get runtime version of native libs (r1545945)
    * javahl: use default cache size instead of no cache (r1547248)
    * swig-py: add typemap for hunks field of svn_patch_t (r1548379)
    * javahl: don't ignore difference between NULL and empty changelist in
      ISVNClient.getChangelists (r1553254)
    * swig-pl: fix pool issues with setting dates as revisions (r1553822)
    * swig-pl: make svn_auth_set_parameter() usable (r1553823)
    * javahl: expose inheritiable property names (r1560338)
    * javahl: fix bug in parsing single revision merginfo data (r1563140)
    * javahl: create JVM crashlogs from svn malfunctions (r1563927, r1564252)
    * javahl: avoid problems when building without NLS support (r1566578 et al)
    * javahl: expose --alow-mixed-revisions merge option (r1567602)
    * javahl: support incomplete reads from streams (r1569631)
    * javahl: allow revert API to take a set of paths (r1571461)
    * javahl: improve authentication callback (r1597758 et al)
    * javahl: load (most) classes on demand (r1602822)
    * javahl: expose confg file keys in JavaHL (r1604448)
    * javahl: update ISVNClient.info, ISVnClient.cleanup and add
      ISvnClient.vacuum (r1604449)
    * javahl: update ISVNRepos.hotcopy (r1618894)
    * swig-py: Add close to the core.Stream class (r1619077)
    * javahl: add example clients that use the authn API (r1640533)
    * swig-py: implement dump stream parser (r1642813)
    * swig-pl: remove some unneeded cleanup code that triggered a cleanup
      failure on windows (r1643072)
    * swig-pl: make cancel_func, cancel_baton parameter pairs work (r1648852)
    * javahl: expose whitespace diff parameters to blame method (issue #4475)
    * javahl: update ConflictDescriptor (r1655842)
    * javahl: update FileRevision to provide textDelta (r1656911)
    * swig-pl: install into prefix (r1658459)
    * javahl: expose the metadataOnly option to copy support (r1661451)
    * swig-py: add support for svn_fs_lock_many(), svn_fs_unlock_many(),
      svn_repos_fs_lock_many() and svn_repos_fs_unlock_many() (r1662867)
    * swig-py: fix support for svn_ra_lock() and svn_ra_unlock() (r1662891)
    * javahl: allow java callbacks to throw errors back to the svn code
      (r1664938, r1664939, r1664940, r1664978, r1664984)
    * swig-pl: fix some stack memory problems (r1668618, 1671388)
    * swig: warn on using SWIG 3.x as we have compatibility problems
      with newer versions of SWIG (1675149)
    * javahl: requires Java 1.6 (r1677003)
    * javahl: on OS X use /usr/libexec/java_home to find the JDK (r1675774)
    * javahl: allow compiling with a C++11 compiler (r1684412)


Version 1.8.19
(10 Aug 2017, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.19

 User-visible changes:
  - Client-side bugfixes:
    * Fix arbitrary code execution vulnerability CVE-2017-9800
        See <https://subversion.apache.org/security/CVE-2017-9800-advisory.txt>
        for details.

  - Server-side bugfixes:
    (none)

  - Bindings bugfixes:
    (none)

 Developer-visible changes:
  - General:
    (none)

  - API changes:
    (none)


Version 1.8.18
(10 Jul 2017, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.18

 User-visible changes:
  - Server-side bugfixes:
    * fsfs: never attempt to share directory representations (r1785053)
    * fsfs: make consistency independent of hash algorithms (r1785737 et al)
	This change makes Subversion resilient to collision attacks, including
	SHA-1 collision attacks such as <http://shattered.io/>.  See also our
	documentation at <https://subversion.apache.org/faq#shattered-sha1> and
	<https://subversion.apache.org/docs/release-notes/1.8#shattered-sha1>.

  - Client-side and server-side bugfixes:
    * work around an APR bug related to file truncation (r1759116)

 Developer-visible changes:
  - General:
    * update serf download URI in build scripts (r1700130 et al)


Version 1.8.17
(29 Nov 2016, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.17

 User-visible changes:
  - Client-side bugfixes:
    * fix handling of newly secured subdirectories in working copy (r1724448)
    * ra_serf: fix deleting directories with many files (issue #4557)
    * gpg-agent: properly handle passwords with percent characters (issue #4611)
    * merge: fix crash when merging to a local add (r1702299 et al)

  - Server-side bugfixes:
    * fsfs: fix possible data reconstruction error (issue #4658)
    * svnlook: properly remove tempfiles on diff errors (r1711346)

  - Client-side and server-side bugfixes:
    * fix potential memory access bugs (r1722860 et al)

  - Bindings bugfixes:
    * javahl: fix temporarily accepting SSL server certificates (r1764851)
    * swig-pl: do not corrupt "{DATE}" revision variable (r1767768)
    * swig-pl: fix possible stack corruption (r1683266)

 Developer-visible changes:
  - General:
    * fix inconsistent behavior of inherited property API (r1717875, r1717878)
    * fix patch filter invocation in svn_client_patch() (r1706783)
    * fix potential build issue with invalid SVN_LOCALE_DIR (issue #4653)


Version 1.8.16
(28 Apr 2016, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.16

 User-visible changes:
  - Server-side bugfixes:
    * mod_authz_svn: fix crash in COPY/MOVE authorization check (CVE-2016-2168)
    * svnserve/sasl: fix authenticating users with wrong realm (CVE-2016-2167)
    * mod_authz_svn: fix authz with mod_auth_kerb/mod_auth_ntlm (issue #4602)
    * dump: don't write broken dump files in some ambiguously encoded fsfs
      repositories (issue #4554)

  - Client-side and server-side bugfixes:
    * update INSTALL documentation file (r1703470, r1703475)

 Developer-visible changes:
  - General:
    * fix javahl test suite to work on a symlinked RAM disk (r1539230)
    * fix ruby test suite to work with test-unit gem (r1714790)


Version 1.8.15
(15 Dec 2015, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.15

 User-visible changes:
  - Client-side bugfixes:
    * gpg-agent: fix crash with non-canonical $HOME (r1691928, issue #4584)

  - Client-side and server-side bugfixes:
    * fix a segfault with old style text delta (r1618472 et al)

  - Server-side bugfixes:
    * mod_dav_svn: fix heap overflow with skel-encoded requests (CVE-2015-5343)
    * fsfs: reduce memory allocation with Apache (r1591005 et al)
    * mod_dav_svn: emit first log items as soon as possible (r1666965 et al)
    * mod_dav_svn: use LimitXMLRequestBody for skel-encoded requests (r1687812)

  - Bindings bugfixes:
    * swig: fix memory corruption in svn_client_copy_source_t (r1694929)

 Developer-visible changes:
  - General:
    * better configure-time detection of httpd authz fix (r1687304 et al)
    * fix compilation with apr 1.2.x (r1701237)


Version 1.8.14
(5 Aug 2015, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.14

 User-visible changes:
  - Client-side bugfixes:
    * document svn:autoprops (r1678494 et al.)
    * cp: fix 'svn cp ^/A/D/H@1 ^/A' to properly create A (r1674455, r1674456)
    * resolve: improve conflict prompts for binary files (r1667228 et al.)
    * ls: improve performance of '-v' on tag directories (r1673153)
    * improved Sqlite 3.8.9 query performance regression on externals (r1672295 et al.)
    * fixed issue #4580: 'svn -v st' on file externals reports "?" instead
      of user and revision after 'svn up' (r1680242)

  - Server-side bugfixes:
    * mod_authz_svn: do not leak information in mixed anonymous/authenticated
      httpd (dav) configurations (CVE-2015-3184)
    * do not leak paths that were hidden by path-based authz (CVE-2015-3187)
    * mod_dav_svn: do not ignore skel parsing errors (r1658168)
    * detect invalid svndiff data earlier (r1684077)
    * prevent possible repository corruption on power/disk failures (r1680819)
    * fixed issue #4577: Read error with nodes whose DELTA chain starts with
      a PLAIN rep (r1676667, r1677267)
    * fixed issue #4531: server-side copy (over dav) is slow and uses
      too much memory (r1674627)

 Developer-visible changes:
  - General:
    * support building on Windows with Visual Studio 2015 (r1692785)
    * avoid failing some tests on versions of Python with a very old sqlite (r1674522)
    * fix Ruby tests so they don't use the users real configuration (r1597884)

  - Bindings:
    * swig-pl: fix some stack memory problems (r1668618, 1671388)

Version 1.8.13
(31 Mar 2015, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.13

 User-visible changes:
  - Client-side bugfixes:
    * ra_serf: prevent abort of commits that have already succeeded (r1659867)
    * ra_serf: support case-insensitivity in HTTP headers (r1650481, r1650489)
    * better error message if an external is shadowed (r1655712, r1655738)
    * ra_svn: fix reporting of directory read errors (r1656713)
    * fix a redirect handling bug in 'svn log' over HTTP (r1650531)
    * properly copy tree conflict information (r1658115, r1659553, r1659554)
    * fix 'svn patch' output for reordered hunks (issue #4533)
    * svnrdump load: don't load wrong props with no-deltas dump (issue #4551)
    * fix working copy corruption with relative file external (issue #4411)
    * don't crash if config file is unreadable (r1590751, r1660350)
    * svn resolve: don't ask a question with only one answer (r1658417)
    * fix assertion failure in svn move (r1651963 et al)
    * working copy performance improvements (r1664531, r1664476, et al)
    * handle existing working copies which become externals (r1660071)
    * fix recording of WC meta-data for foreign repos copies (r1660593)
    * fix calculating repository path of replaced directories (r1660646)
    * fix calculating repository path after commit of switched nodes (r1663991)
    * svnrdump: don't provide HEAD+1 as base revision for deletes (r1664684)
    * don't leave conflict markers on files that are moved (r1660220, r1665874)
    * avoid unnecessary subtree mergeinfo recording (r1666690)
    * fix diff of a locally copied directory with props (r1619380 et al)

  - Server-side bugfixes:
    * fsfs: fix a problem verifying pre-1.4 repos used with 1.8 (r1561419)
    * svnadmin freeze: fix memory allocation error (r1653039)
    * svnadmin load: tolerate invalid mergeinfo at r0 (r1643074, issue #4476)  
    * svnadmin load: strip references to r1 from mergeinfo (issue #4538)
    * svnsync: strip any r0 references from mergeinfo (issue #4476)
    * fsfs: reduce memory consumption when operating on dag nodes (r1655651)
    * reject invalid get-location-segments requests in mod_dav_svn and
      svnserve (r1667233)
    * mod_dav_svn: reject invalid txnprop change requests (r1667235)

  - Client-side and server-side bugfixes:
    * fix undefined behaviour in string buffer routines (r1650834)
    * fix consistency issues with APR r/w locks on Windows (r1611380 et al)
    * fix occasional SEGV if threads load DSOs in parallel (r1659013, r1659315)
    * properly duplicate svn error objects (r1651759)
    * fix use-after-free in config parser (1646785, r1646786, r1646797)

 Developer-visible changes:
  * add lock file config for testing against HTTPD 2.4+ (r1544302, r1544303)
  * make sqlite amalgamated build work with sqlite 3.8.x+ (r1659399)
  * fix build with Ruby 2 (r1596882)
  * process 'svnadmin dump' output as binary in the test suite (r1592987)
  * simplify Windows resource compilation to avoid warnings (r1532287)


Version 1.8.12
(Not released, see changes for 1.8.13.)


Version 1.8.11
(15 Dec 2014, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.11

 User-visible changes:
  - Client-side bugfixes:
    * checkout/update: fix file externals failing to follow history and
      subsequently silently failing (issue #4185)
    * patch: don't skip targets in valid --git difs (r1592014, r1592034)
    * diff: make property output in diffs stable (r1589360)
    * diff: fix diff of local copied directory with props (r1619380, r1619393)
    * diff: fix changelist filter for repos-WC and WC-WC (r1621978, r1621981)
    * remove broken conflict resolver menu options that always error out
      (r1620332)
    * improve gpg-agent support (r1600331, r1600348, 1600368, r1600563,
      r1600781)
    * fix crash in eclipse IDE with GNOME Keyring (issue #3498)
    * fix externals shadowing a versioned directory (issue #4085)
    * fix problems working on unix file systems that don't support
      permissions (r1612225)
    * upgrade: keep external registrations (issue #4519)
    * cleanup: iprove performance of recorded timestamp fixups (r1633126)
    * translation updates for German

  - Server-side bugfixes:
    * disable revprop caching feature due to cache invalidation problems
      (r1543594, r1619774, r1619105, r1619118, r1619153, r1619802)
    * skip generating uniquifiers if rep-sharing is not supported (r1561426)
    * mod_dav_svn: reject requests with missing repository paths (r1643409)
    * mod_dav_svn: reject requests with invalid virtual transaction names
      (r1643437)
    * mod_dav_svn: avoid unneeded memory growth in resource walking
      (issue #4531)

 Developer-visible changes:
  - General:
    * make sure all members of the repos layer notify struct are valid,
      fixes crashes in API users using all members (r1616131)
    * properly generate a version resource when building on Windows (r1542610,
      r1564576, r1568180)
    * fix LIBTOOL_M4 and LIBTOOL_CONFIG variable not be evaluated properly
      during a unix build (r1637826)
    * allow the use of libtool 2.4.3 (r1640862, r1640873, r1643793)


Version 1.8.10
(11 Aug 2014, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.10

 User-visible changes:
  - Client-side bugfixes:
    * guard against md5 hash collisions when finding cached credentials
        (r1550691, r1550772, r1600909)
    * ra_serf: properly match wildcards in SSL certs. (r1615211, 1615219)
    * ra_serf: ignore the CommonName in SSL certs where there are Subject Alt
        Names (r1565531, r1566503, r1568349, r1568361)
    * ra_serf: fix a URI escaping bug that prevented deleting locked paths
        (r1594223, r1553501, r1553556, r1559197, issue #3674)
    * rm: Display the proper URL when deleting a URL in the commit log editor
        (r1591123)
    * log: Fix another instance of broken pipe error (r1596866, issue #3014)
    * copy: Properly handle props not present or excluded on cross wc copy
        (r1589184, r1589188)
    * copy: Fix copying parents of locally deleted nodes between wcs
        (r1589460, r1589486)
    * externals: Properly delete ancestor directories of externals when
        removing the external by changing svn:externals. (r1600311, 1600315,
        r1600323, r1600393)
    * ra_serf: fix memory lifetime of some hash values (r1606009)

  - Server-side bugfixes:
    * fsfs: omit config file when creating pre-1.5 format repos (r1547454,
        r1561703)

 Developer-visible changes:
  - General:
    * fix improper linking when serf is in the same prefix as existing svn
        libraries. (r1609004)
    * use proper intermediate directory when building with VS 2003-2008
        (r1595431)
    * support generating VS 2013 and later project files.

  - Bindings:
    * ruby: removing warning about Ruby 1.9 support being new. (r1593992)
    * python: fix notify_func callbacks (r1594794, r1594814, r1594834, r1595061)


Version 1.8.9
(07 May 2014, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.9

 User-visible changes:
  - Client-side bugfixes:
    * log: use proper peg revision over DAV (r1568872)
    * upgrade: allow upgrading from 1.7 with exclusive locks (r1572102 et al)
    * proplist: resolve inconsistent inherited property results (r1575270 et al)
    * increase minimal timestamp sleep from 1ms to 10ms (r1581305 et al)
    * merge: automatic merge confused by subtree merge (issue #4481)
    * propget: report proper error on invalid revision for url (r1586255)
    * commit: fix an assertion when committing a deleted descendant
      (r1571747, r1571787, r1571795)
    * merge: resolve segfault when '--force' merges a directory delete
      (r1577812, r1577813, r1579429)
    * resolve: prevent interactive conflict resolution when nothing has been
      done to resolve the conflict (r1577294)
    * update: fix locks lost from wc with pre-1.6.17 servers (issue #4412)
    * merge: honor the 'preserved-conflict-file-exts' setting (r1577151)
    * list: fix '--verbose' against older servers (r1591111)
    * unlock: fix ability to remove locks with timeouts (r1579588)
    * copy: fix 'svn copy URL WC' on relocated working copies
      (r1580626, r1580650)
    * export: allow file externals to be exported (issue #4427)
    * move: fix working copy db inconsistency in cert scenarios (issue #4437)
    * commit: fix an issue where mixed revision copy with non copy descendants
      that shadow a not present node couldn't be committed (r1518942 et al)
    * delete: properly remove move_to info when the node in its original
      location is removed (r1538812 et al)
    * status; fix an issue where output would vary based on if the target
      was the node itself or its parent (r1544597 et al)

  - Server-side bugfixes:
    * ensure proper access synchronization in fsfs on Windows (r1568953 et al)
    * svnadmin dump: don't let invalid mergeinfo stop dump (r1574868 et al)
    * svnserve: resolve performance regression caused by iprops (r1578853 et al)
    * reduce size of memory buffer when reading config files (r1581296)
    * remove dead transaction if commit was blocked by hook (r1583977)
    * svnrdump load: fix crash when svn:* normalization (issue #4490)
    * fix memcached support (issue #4470)
    * svndumpfilter: fix order of node record headers (r1578670 et al)
    * mod_dav_svn: blacklist building with broken versions of httpd; 2.2.25,
      2.4.5 and 2.4.6 (r1545835)
    * mod_dav_svn: allow generic DAV clients to refresh locks (issue #3515)
    * mod_dav_svn: detect out of dateness correctly during commit (issue #4480)

 Developer-visible changes:
  - General:
    * improve consistency checks of DAV inherited property requests (r1498000)
    * fix occasional failure in autoprop_tests.py (r1567752)
    * avoid duplicate sqlite analyze information rows (r1571214)
    * add Mavericks to our sysinfo output (r1573088)
    * bump copyright years to 2014 (r1555403)
    * unbreak test suite when running as root (r1583580)
    * resolve buffer overflow in testcode (r1481782)
    * fix libmagic detection with custom LDFLAGS (r1577200)
    * fix an out of scope variable use in merge (r1587946)
    * javahl: fix crash from resolve callback throwing an exception (r1586439)
    * ruby: fix two memory lifetime bugs (r1586052, r1586467)
    * fix a missing null byte when handling old pre-1.4 deltas (r1587968)
    * fix building with APR 0.9.x (r1585499)
    * make svn_ra_get_locks() and svn_ra_get_lock() report not locked nodes
      with a NULL svn_lock_t *, as documented (r1578273, r1578311, r1578326)
    * fix tests for compiler flags (r1573106)


Version 1.8.8
(19 Feb 2014, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.8

 User-visible changes:
  - Client-side bugfixes:
    * use CryptoAPI to validate intermediary certificates on Windows (r1564623)
    * fix automatic relocate for wcs not at repository root (r1541638 et al)
    * diff: fix when target is a drive root on Windows (r1541635)
    * wc: improve performance when used with SQLite 3.8 (r1542765)
    * copy: fix some scenarios that broke the working copy (r1560690)
    * move: fix errors when moving files between an external and the parent
      working copy (r1551524, r1551579)
    * log: resolve performance regression in certain scenarios (r1553101 et al)
    * merge: decrease work to detect differences between 3 files (r1548486)
    * checkout: don't require flush support for symlinks on Windows (r1547774)
    * commit: don't change file permissions inappropriately (issue #4440)
    * commit: fix assertion due to invalid pool lifetime (r1553376 et al)
    * version: don't cut off the distribution version on Linux (r1544878 et al)
    * flush stdout before exiting to avoid information being lost (r1499470)
    * status: fix missing sentinel value on warning codes (r1543145)
    * update/switch: improve some WC db queries that may return incorrect
      results depending on how SQLite is built (r1567109)

  - Server-side bugfixes:
    * reduce memory usage during checkout and export (r1564215)
    * fsfs: create rep-cache.db with proper permissions (issue #3437)
    * mod_dav_svn: prevent crashes with SVNListParentPath on (CVE-2014-0032)
    * mod_dav_svn: fix SVNAllowBulkUpdates directive merging (r1548105)
    * mod_dav_svn: include requested property changes in reports (r1557522)
    * svnserve: correct default cache size in help text (r1563110)
    * svnadmin dump: reduce size of dump files with '--deltas' (r1554978)
    * resolve integer underflow that resulted in infinite loops (r1567985)

 Developer-visible changes:
  - General:
    * fix occasional failure of check_tests.py 12 (r1496127 et al)
    * fix failure with SQLite 3.8.1-3.8.3 when built with
      SQLITE_ENABLE_STAT3/4 due to bug in SQLite (r1567286, r1567392)
    * specify SQLite defaults that can be changed when SQLite is built
      to avoid unexpected behavior with Subversion (r1567064)

  - API changes:
    * numerous documentation fixes
    * svn_client_commit_item3_dup() fix pool lifetime issues (r1550803)
    * ra_serf: properly ask multiple certificate validation providers for
      acceptance of certificate failures (r1535532)
    * release internal fs objects when closing commit editor (r1555499)
    * svn_client_proplist4() don't call the callback multiple times for
      the same path in order to deliver inherited properties (r1549858 et al)

  - Bindings:
    * javahl: make test suite run without installing on OS X (r1535115)
    * swig: fix building out of tarball on OS X (r1555654)
    * swig-pl: fix with --enable-sqlite-compatibility-version (r1559009)
    * swig: fix building bindings on OS X when APR has the -no-cpp-precomp
      flag in the apr-config --cppflags output. (r1535610)
    * swig: fix building from tarball with an out-of-tree build (r1543187)


Version 1.8.7
(Not released, see changes for 1.8.8.)

Version 1.8.6
(Not released, see changes for 1.8.8.)


Version 1.8.5
(25 November 2013, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.5

 User-visible changes:
  - Client-side bugfixes:
    * fix externals that point at redirected locations (issues #4428, #4429)
    * diff: fix assertion with move inside a copy (issue #4444)

  - Server-side bugfixes:
    * mod_dav_svn: Prevent crashes with some 3rd party modules (r1537360 et al)
    * mod_dav_svn: canonicalize paths properly (r1542071)
    * mod_authz_svn: fix crash of mod_authz_svn with invalid config (r1541432)
    * hotcopy: fix hotcopy losing revprop files in packed repos (issue #4448)
 
  - Other tool improvements and bugfixes:
    * mod_dontdothat: Fix the uri parser (r1542069 et al)

 Developer-visible changes:
  - General:
    * fix compilation with '--enable-optimize' with clang (r1534860)
    * fix compilation with debug build of BDB on Windows (r1501656, r1501702)
    * fix '--with-openssl' option when building on Windows (r1535139) 
    * add test to fail when built against broken ZLib (r1537193 et al)

  - Bindings:
    * swig-rb: fix tests to run without installing on OS X (r1535161)
    * ctypes-python: build with compiler selected via configure (r1536537)


Version 1.8.4
(29 October 2013, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.4

 User-visible changes:
  - Client- and server-side bugfixes:
    * fix assertion on urls of the form 'file://./' (r1516806)
    * stop linking against psapi.dll on Windows (r1534102)
    * translation updates for Swedish

  - Client-side bugfixes:
    * revert: fix problems reverting moves (issue #4436)
    * update: fix assertion when file external access is denied (issue #4422)
    * merge: reduce network connections for automatic merge (r1468980 et al)
    * merge: fix path corruption during reintegration (r1523666)
    * mergeinfo: fix crash (r1519955)
    * ra_serf: verify the result of xml parsing (r1501199 et al)
    * ra_serf: improve error messages during commit (r1526439)
    * ra_local: fix error with repository in Windows drive root (r1518184)
    * fix crash on windows when piped command is interrupted (r1522892)
    * fix crash in the crash handler on windows (r1532023)
    * fix assertion when upgrading old working copies (r1520529)

  - Server-side bugfixes:
    * hotcopy: cleanup unpacked revprops with '--incremental' (r1512300 et al)
    * fix OOM on concurrent requests at threaded server start (r1527103 et al)
    * fsfs: improve error message when unsupported fsfs format found (r1534158)
    * fix memory problem in 3rd party FS module loader (r1519615 et al)

 Developer-visible changes:
  - General:
    * allow compiling against serf 1.3 and later on Windows (r1517123)

  - Bindings:
    * javahl: canonicalize path for streamFileContent method (r1524869)


Version 1.8.3
(29 August 2013, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.3

 User-visible changes:
  - Client- and server-side bugfixes:
    * translation updates for Swedish
    * enforce strict version equality between tools and libraries (r1502267)
    * consistently output revisions as "r%ld" in error messages (r1499044 et al)

  - Client-side bugfixes:
    * status: always use absolute paths in XML output (issue #4398)
    * ra_serf: 'svn log -v' fails with a 1.2.x server (issue #4044)
    * ra_serf: fix crash when committing cp with deep deletion (issue #4400)
    * diff: issue an error for files that can't fit in memory (r1513119 et al)
    * svnmucc: generate proper error for mismatched URLs (r1511353)
    * update: fix a crash when a temp file doesn't exist (r1513156)
    * commit & update: improve sleep for timestamps performance (r1508438)
    * diff: continue on missing or obstructing files (issue #4396)
    * ra_serf: use runtime serf version for User-Agent (r1514315, r1514628)
    * ra_serf: ignore case when checking certificate common names (r1514763)
    * ra_serf: format distinguished names properly (r1514804)
    * ra_serf: do not retry HTTP requests if we started to parse them (r1503318)
    * ra_serf: output ssl cert verification failure reason (r1514785 et al)
    * ra_serf: allow session reuse after SVN_ERR_CEASE_INVOCATION (r1502901)
    * ra_serf: include library version in '--version' output (r1514295 et al)
    * info: fix spurious error on wc root with child in conflict (r1515366)

  - Server-side bugfixes:
    * svnserve: fix creation of pid files (r1516556)
    * svnadmin: fix output encoding in non-UTF8 environments (r1506966)
    * svnsync: fix high memory usage when running over ra_serf (r1515249 et al)
    * mod_dav_svn: do not map requests to filesystem (r1512432 et al)
    * svnauthz: improve help strings (r1511272) 
    * fsfs: fixed manifest file growth with revprop changes (r1513874)
    * fsfs: fix packed revprops causing loss of revprops (r1513879 et al)
  
  - Other tool improvements and bugfixes:
    * svnwcsub/irkerbridge: fix symlink attack via pid file (r175 from upstream)

 Developer-visible changes:
  - General:
    * describe APR unimplemented errors as coming from APR (r1503010 et al)
    * mod_dav_svn: update INSTALL to reflect configure defaults (r1515141)
    * davautocheck: use the correct apxs binary by default (r1507889, r1507891)

  - API changes:
    * svn_config_walk_auth_data() config_dir arg: permit NULL (r1507382 et al)

  - Bindings:
    * swig-pl: fix SVN::Client not honoring config file settings (r150744)
    * swig-pl & swig-py: disable unusable svn_fs_set_warning_func (r1515119)


Version 1.8.2
(Not released, see changes for 1.8.3.)
 
 
Version 1.8.1
(23 July 2013, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.1

 User-visible changes:
  - Client- and server-side bugfixes:
    * translation updates for German and Simplified Chinese
    * improve sqlite error message output (r1497804)
    * support platforms lacking mmap (r1498136)
    * allow configuration files to start with UTF-8 BOM (r1499100 et al)
    * don't fail on UTF-8 data when encoding conversion not available (r1503009)
    * improve error messages when encoding conversion fails (r1503010)

  - Client-side bugfixes:
    * merge: rename 'automatic merge' to 'complete merge' (r1491432)
    * mergeinfo: reduce network usage for '--show-revs' (r1492005)
    * ra_serf: improve http status handling (r1495104)
    * merge: avoid unneeded RA session (r1493475)
    * merge: reduce network usage (r1478987)
    * merge: remove duplicated ancestry check (r1493424, r1495597)
    * ra_serf: fix 'Accept-Encoding' header for IIS interoperability (r1497551)
    * svn status: improve documentation for lock columns (r1497318, r1497319)
    * ra_serf: fix support for 'get-file-revs-reversed' capability (r1498456)
    * log: reduce network usage on repository roots (r1496957)
    * diff: avoid temporary files when calling external diff (issue #4382)
    * upgrade: fix notification of 1.7.x working copies (r1493703, r1494171)
    * fix crash during tree conflict resolution (issue #4388)
    * interactive file merge: add two additional choices (r1491816, r1494089)
    * diff: use local style paths in error messages (r1500680)
    * resolve: improve the interactive conflict resolution menu (r1491739 et al)
    * switch: use local style path in error message (r1500074)
    * ra_serf: improve error output when receiving invalid XML (r1498851)
    * svn cleanup: explain what the command does in help output (r1497310)
    * blame: error on -r M:N where M>N unless server supports (r1498449 et al)
    * gpg-agent auth: don't try to use agent when unavailable (r1500762 et al)
    * gpg-agent auth: don't require GPG_TTY or TERM env vars (r1500801)
    * update: fix some tree conflicts not triggering resolver (r1491868 et al)
    * commit: remove stale entries from wc lock table when deleting (r1491756)
    * merge: fix --record-only erroring out on renamed path (issue #4387)
    * svnmucc: fix 'make install' symlink to work when DESTDIR is set (r1501072)
    * wc: fix crash when target is symlink to a working copy root (issue #4383)
    * ra_serf: change "internal malfunction" errors to normal errors (r1502577)
    * ra_serf: handle proxies not supporting chunked requests (r1502401 et al)

  - Server-side bugfixes:
    * fsfs: resolve endless loop problem when repos/db/uuid has \r\n (r1492145)
    * fsfs: remove revision property buffer limit (r1491770)
    * mod_dav_svn: better status codes for anonymous user errors (r1495918)
    * mod_dav_svn: better status codes for commit failures (r1490684)
    * fix performance regression in 'svn log' against root (r1494913)
    * allow deleting non-user-visible 'svn:' properties (r1495432)
    * fsfs: fix crash on strict-alignment architectures (r1495806, r1495985)
    * svnadmin upgrade: fix error of non-sharded fsfs repositories (r1494287)
    * svnadmin create: deny '--fs-type=fsfs --compatible-version=1.0' (r1494223)
    * svnadmin upgrade: fix data loss when cancelling in last stage (r1494298)
    * mod_dav_svn: fix incorrect path canonicalization (r1503528)
            See CVE-2013-4131, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2013-4131-advisory.txt

  - Other tool improvements and bugfixes:
    * fsfs-stats (tool): resolve segfault when passing invalid path (r1492164)
    * svn-bench: fix help output (r1493951)
    * svnpubsub: add version header to server (r1491707)

 Developer-visible changes
  - General:
    * ra_serf: fix some test runner issues on Windows (r1490679)
    * fix two issues in reverse svn_ra_get_file_revs() (r1492148, et al)
    * handle --compatible-version=1.8 in the C tests (r1494342)
    * improve clang compatibility (r1480080 et al)
    * use proper cancel baton when handling conflicts (r1495850)
    * fs: BDB: provide proper error value from BDB (r1495428)
    * ra_serf: tweak connection failed error value (r1496132, et al)
    * svn_client_log5: resolve possible segfault (r1496110)
    * fix metadata_only move to work when target is unversioned node (r1498564)
    * ra_svn: fix segfault with a NULL commit message (r1498550, r1499727)
    * Ev2: correctly initialize node kind in shims' change table (r1501058)
    * Ev2: fix copyfrom URL construction in shims (r1500226)
    * fs: improve test against newlines in filenames (r1498483 et al)
    * make building with BDB 6 an opt-in feature (r1499438)
    * sqlite: allow placing amalgamation in build dir (r1499034, r1500175) 
    * ra_svn: make sessions usable after log callback early out (r1503554)

  - Bindings:
    * swig-rb: fix tests with out-of-tree-builds (r1492295)
    * javahl: fix encoding of error messages produced by javahl (r1492264) 
    * swig-pl: silence compiler warnings (r1487094)
    * swig-pl: improve documentation (r1488693, r1490721, r1500904)


Version 1.8.0
(18 Jun 2013, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.0

 User-visible changes:
  - General:
    * require serf as client-side http library (neon support removed) (r1349694)
    * deprecate the Berkeley DB FS backend (libsvn_fs_base) (r1464985 et al)

  - Major new features:
    * working copy records moves as first-class operation (issue #3631, #4232)
    * merge uses reintegrate mode automatically when needed (r1369896 et al)
    * FSFS: Packing of revision property shards (issue #3944)
    * support inheritable properties (r1395109)
    * repository can suggest config for autoprops and ignores (r1401908)
    * support gpg-agent for password caching (r1151069)
    * authz rules can be stored inside the repository (r1424780)

  - Minor new features and improvements (client-side):
    * doubled svn:// protocol throughput (r1325899)
    * optimize file/dir truename checks on Windows (r1435527)
    * new 'commit --include-externals' option (related to issues #1167, #3563)
    * new --include-externals option for 'svn list' (issue #4225)
    * remove extraneous externals output from 'svn status -q' (issue #1935)
    * reject some attempts to merge between unrelated branches (r1215273)
    * new --ignore-properties option for 'svn diff' (r1239553, -617)
    * new --properties-only option for 'svn diff' (r1336110)
    * new --patch-compatible option for 'svn diff' (r1239561)
    * new --no-diff-added option for 'svn diff' (r1433958)
    * new w/c subtree duplication tool (tools/client-side/detach.py)
    * new mergeinfo fixup tool (tools/client-side/mergeinfo-sanitizer.py)
    * 'svn diff' can compare arbitrary files and directories (r1310291, et al)
    * ra_serf avoids re-downloading content present in pristine store (r1333936)
    * 'svn mergeinfo' now honors the --revision (-r) option (issue #4199)
    * 'svn mergeinfo' now shows a summary graph by default (issue #4239)
    * new --search and --search-and options for 'svn log' (r1354666, -83518)
    * 'svn log' reports the node kind even for pre-1.6 revision files (r1242958)
    * sort path list generated by "svn log -v --xml" (r1299323)
    * new built-in interactive text conflict merge tool (r1357864, et al)
    * 'svn --version' shows build system info (r1368662)
    * 'svn --version --verbose' shows runtime environment info (r1370813 et al)
    * 'svn' is now non-interactive when not run in a terminal device (r1424037)
    * 'svn propset' checks spelling of reserved property names (r1470781)
    * improve working copy performance on network disks (issue #4176) 
    * support for custom keyword definitions in svn:keywords (issue #890)
    * svn:ignore __pycache__ directories by default (r1150073)
    * 'svn diff --git' include copyfrom revision in "copied" headers (r1155279)
    * svn:mergeinfo related operations now use much less memory (r1149519 et al)
    * get list of supported schemes for RA libraries (r1148134)
    * 'svn checkout' skips file externals from other repositories (r1153110)
    * 'svn resolve' exits non-zero if conflicts could not be resolved (r1150439)
    * let HTTPv2-aware clients fetch v2-style resources (r1161202)
    * 'svn status' with better NLS support (r1157537, -682)
    * better tracking of shallow-yet-complete merges (issues #4056, #4057)
    * make 'svn status --quiet' w/ externals quieter still (issue #1935)
    * ensure that conflict paths are shown relative-ized (r1337520)
    * improve performance of local multi-target deletions (r1195873)
    * various interactive conflict resolver improvements in 'svn' (r1440421 etc)
    * improved tree diff implementation for diff and merge (r1440599 et al)
    * tree conflicts on directories detected better during merges (issue #3150)
    * allow reverting unmodified copies with 'svn remove' (r1442611)
    * make 'svn diff' with mixed URL and local path targets work (r1442640)
    * make 'svn patch' re-add deleted directories if needed (r1445333)
    * make repos-wc diffs fully ancestry-aware (r1445904)
    * 'svn diff --git' now implies 'svn diff --show-copies-as-adds' (r1446279)
    * 'svn diff --show-copies-as-adds' now implies --notice-ancestry (r1446279)
    * improved tree-conflict detection for 'svn switch' (r1449413, r1450582)
    * allow up to 8 revision number digits in 'svn status -v' output (r1428637)
    * show node kind (file or dir) in tree conflict descriptions (r1429907)
    * restore deleted switched paths upon next update (issue #4295)
    * add support for copying paths from foreign repositories (issue #3590)
    * fix merge -cA,B with --accept option aborts if rA conflicts (issue #4238)
    * 'svn resolve' interactive support; no longer requires --accept (r1336929)
    * notify when removing externals leaves behind modified files (r1366021)
    * new 'http-max-connections' configuration option for serf (r1421559)
    * new 'http-bulk-updates' configuration option for serf (r1421490)
    * 'svn cleanup' now runs SQLite "vacuum" to reclaim space (r1418459)
    * 'svn info' displays repository-relative URL (r1415365)
    * fix serf memory leak on checkout (issue #4194)
    * detect duplicate paths setting svn:externals (issue #4227)
    * make ra_serf work over HTTP/1.0 proxies (issue #3979)
    * make ra_serf accept gzip compression for all responses (r1407454)
    * double ra_serf performance for checkout and export (r1407545)
    * improve network and disk i/o interleaving in ra_serf (r1407934)
    * avoid assert in ra_serf when REPORT response was truncated (r1407935)
    * rewrite ra_serf XML parser (r1409259 et al)
    * ra_serf can create transaction with inline txnprops (r1375167)
    * partially fix replace+propset of locked file fails over DAV (issue #3674)
    * fix ra_serf doesn't handle bad baseline error from server (issue #4127)
    * decreased default http timeout for ra_serf (issue #3968)
    * prevent ra_serf from corrupting the working copy (issue #3993)
    * ra_serf transmits property changes inline to reduce requests (r1378927)
    * by default avoid SSL certificate prompts in client (issue #2410)
    * improve interactive resolution of property conflicts (r1387678 et al)
    * make ra_serf raise an error upon delta-base mismatch (issue #4235)
    * tune ra_svn transmit buffer handling (r1391788)
    * make 'svnrdump' work with serf (issue #4116)
    * fix 'svnrdump' on path below repository root (issue #4101)
    * support ipv6 in URLs (e.g. http://[::1]/svn/repos) (r1454047)
    * conflict resolver now iterates paths in a sorted order (r1461820)
    * mod_dav_svn does keyword expansion with 'kw=1' query arg (r1466055)

  - Minor new features and improvements (server-side):
    * improve performance of config file parsing (r1344347 et al)
    * new 'svnadmin load --revision' load filtering support (issue #3734)
    * new 'svnadmin hotcopy --incremental' support for FSFS (issue #3815)
    * new 'svnadmin lock' / 'svnadmin unlock' subcommands (issue #3942, #4092)
    * new SVNUseUTF8 configuration option for mod_dav_svn (issue #2487)
    * new SVNHooksEnv configuration option for mod_dav_svn (r1239966)
    * new SvnPubSub distributed commit hooks (tools/server-side/svnpubsub)
    * new light-weight benchmarking client (tools/client-side/svn-bench)
    * svndumpfilter dependency analysis (tools/server-side/svnpredumpfilter.py)
    * new automatic working copy updater (tools/server-side/svnpubsub)
    * new 'svnadmin freeze' subcommand (r1376228)
    * 'svndumpfilter' now supports --delta dumpfiles (r1351009, -3745)
    * new --drop-all-emtpy-revs option for 'svndumpfilter' (issue #3681)
    * client version info now reported to commit hooks (issue #4124)
    * txn name now reported to post-commit hooks (r1240856)
    * support for server-side keyword expansion in mod_dav_svn (r1466055)
    * FSFS now able to cache revision properties (r1326307)
    * FSFS cache for changed-paths increases 'svn log' performance (r1378358)
    * FSFS cache mergeinfo requested during 'log -g' (r1395439)
    * many FSFS caching improvements (r1390435, r1390447)
    * directory and property deltification option in FSFS (issue #4084)
    * fine-grained control deltification behavior via fsfs.conf (r1311476)
    * FSFS de-duplication ("rep sharing") now works within a revision (r1397773)
    * FSFS de-duplication now works for properties as well (r1243312)
    * read FSFS data using fewer fopen calls (issue #3372)
    * 'svnadmin verify' will now check meta data (issues #3956, #4211)
    * 'svnadmin verify' now checks for issue #4129 style corruption (r1304656)
    * new --client-speed option for svnserve (r1391788)
    * new --single-threaded option in svnserve (r1296018)
    * hook script templates are now marked as executable (r1153414)
    * error out on non-canonical fspaths in the authz file (r1166111)
    * improve path lookup performance in FSFS (r1442088)
    * svnserve now logs explicit path and reason for authz failures (r1446542)
    * validate offsets from rep-cache to prevent FSFS corruption (issue #4277)
    * new AuthzSVNGroupsFile option to store authz groups separately (r1438407)
    * new 'SVNAllowBulkUpdates prefer' option for mod_dav_svn (r1417642, et al)
    * new 'SVNMasterVersion' option for mod_dav_svn (r1398962)
    * added virtual-host support to 'svnserve' (r1401296)
    * new fsfs-stats tool which prints FSFS repository stats (r1410995)
    * new fsfs-reorg tool to optimize FSFS packing (r1383214, r1385395)
    * new --compatible-version option for 'svnadmin create' (r1407279 )
    * new --ignore-properties option for 'svnlook diff' (r1407905)
    * new --properties-only option for 'svnlook diff' (r1407905)
    * new --diff-cmd option for 'svnlook diff' (r1413449)
    * allow leading "r"'s in http: ?p= and ?r= query parameters (r1221463)
    * faster 'svn ls' for large directories (r1296627)
    * mod_dav_svn now advertises supported POST types (r1375123)
    * mod_dav_svn can create transaction with inline txnprops (r1375167)
    * run start-commit hook after transaction creation (r1376201)
    * avoid byte-for-byte comparison where it can be avoided (r1390641)
    * various server-side performance improvements for 'log -g' (r1395442 et al)
    * allow up to 10Gbit throughput with svnserve (r1391788)
    * install mod_dontdothat correctly (r1454450)
    * svnadmin verify can now verify transactions (r1462353)
    * FSFS verifies revisions as they are added (r1462409)

  - Client-side bugfixes:
    * fix inconsistent 'svn log' output for empty revisions (issue #3964)
    * fix mis-ordered text output of 'svn log --diff' on Windows (r1220783)
    * fix 'svn log --diff' on moved file (issue #4153).
    * fix 'svn revert' of 'svn move' (issue #876)
    * fix file externals wrongly "resurrecting" a deleted file (#4017)
    * fix reporting of corrupted 1.6 w/cs by 'svn upgrade' (r1182904, -9)
    * fix bug caused by URI-decoding local merge source paths (r1210539)
    * fix properties out of sync with repos after merge and revert (issue #4305)
    * fix merge of replacement on local delete fails (issue #4011)
    * fix replacements on deletes produce wrong tree conflicts (issue #3806)
    * made ra_serf handle location headers that are not RFC-compliant (r1443906)
    * merge no longer errors out after resolving all conflicts (issue #4316)
    * fix svn blame mis-categorizing file type as binary (issue #2089)
    * fix externals not removed when working copy is made shallow (issue #3741)
    * fix update under add with not-present parent (issue #4111)
    * fix revert of files with svn:needs-lock under copied dirs (r1343168)
    * fix repos->wc diff of local copied/moved-here directories (r1341927)
    * fix repos->wc diff of local copied/moved-here files (r1341544)
    * fix "svn diff -cN PATH" where PATH was deleted in rN (r1338708)
    * fix dependency on APR hash order in several logic paths (r1338350 et al)
    * fix path inconsistencies in 'svn diff' output (r1338291)
    * fix misleading error message printed by 'svn switch' (issue #2337)
    * fix bug in mergeinfo recording during foreign-repos merge (r1430310)
    * fix spurious merge conflicts for binary files with keywords (issue #4221)
    * fix patching symlinks with 'svn patch' (issue #4273)
    * make 'svn switch' refresh lock information (issue #3378)
    * fix 'svn diff' output doesn't apply as patch without fuzz (issue #3362)
    * fix mergeinfo recording for multiple-revision-range merge (issue #4306)
    * fix diffs shown by 'show-diff' conflict prompt option (r1438879)
    * don't print an update summary header with no content (r1439480)
    * make 'svn rm' remove externals registrations below its targets (r1361256)
    * fix crashes in ra_serf where AVG 2012 Surf-Shield is in use (issue #4175)
    * don't raise conflicts on identical binary files (issue #4128)
    * improve error messages when wc.db missing (issue #4118)
    * fix 'svn diff' showing wrong text change (issue #4270)
    * fix 'svn diff -rN' failing to show local replace (issue #3797)
    * fix 'svn diff' showing wrong revision (issue #4010)
    * fix 'svn merge' showing spurious notifications (issue #2910)
    * parse '.@HEAD' correctly (issue #3606)
    * fix 'svn revert' after conflict in sparse working copy (issue #4168)
    * fix bug in global/per-server config handling in serf (r1421516)
    * properly display errors from serf (r1398742)
    * fix crash in ra_serf (r1408291)
    * fixed svnmucc propset and propdel on repository root (issue #3663)
    * fix 'svn info' output with ancient svnserve servers (pre-1.2) (r1409732)
    * ra_serf shows error message for 408 Request Timeout response (r1410983)
    * fix handling of "\ No newline ..." in diff/patch (r1411723, r1412382)
    * allow infinite http timeout in ra_serf (r1411976)
    * using unknown svn: property names now requires --force (issue #4261)
    * fix handling of case insensitive configuration files (r1215089)
    * properly handle errors during password caching (r1380695)
    * fix svnversion output not always a number (issue #4226)
    * fix conflict resolver losing executable bit of a file (r1391019)
    * fix redundant notifications when merging with ra_serf (issue #3802)
    * fix 'svn add --force /path/to/wcroot' should work (issue #4241)
    * fix file permissions changed after commit (issue #4331)
    * improve handling of http errors in ra_serf (1452792, 1452870)
    * include checksum of missing pristines in error message (r1452800)
    * fix an assert when merging against a replaced source (issue #4132)
    * fix replacement in merge source has incorrect notification (issue #4138)
    * improve performance of checkout (r1453791)
    * fixed documentation regarding merge source (issue #3247)
    * fix merge errors out after resolving conflicts (issue #4316)
    * fix delete/move with file external in unversioned dir (issue #4293)
    * fix resolving tree conflict with local node missing (r1461848)
    * fix invalid read during diff suffix scanning (issue #4339)
    * fix assertion when running 'svn log <SOME_URL>@PREV' (r1462134)
    * optimize enumerating configuration options (r1464478)
    * revert will now sleep for timestamps if using commit times (r1464769)
    * don't allow externals to be deleted with 'svn rm' (r1464992)
    * improved memory usage in ra_serf and ra_local (r1465280)
    * replace some assertions with more helpful error messages (r1465975)
    * fixed long keyword expansion truncated (issue #4349)

  - Server-side bugfixes:
    * SVNParentPath / repository listing now authz-filtered (r1408184)
    * user/group names in the authz config file are case-sensitive (r1475772)
    * limit commit runtime for nodes with very deep histories (r1224836)
    * 'svnadmin recover' truncates rep-cache at the right point (issue #4077)
    * fix crashes in dumpstream loading with skipped revs (r1214202, r1214216)
    * fix 'svn log -g' incorrectly treating rename as merge (issue #4022)
    * fix bug where fsfs file-hinting fails (issue #4320)
    * don't leak path of repository on server's disk to clients (r1330906)
    * remove spurious is-fresh-txn-root from empty revision files (issue #4031)
    * fix a stdout handling problem in 'svnlook diff' (r1411971)
    * fix erratic behaviour in 'svnlook diff' showing property diffs (r1412224)
    * fix inconsistent authz error messages in 'svn log' in svnserve (r1292462)
    * fix svndumpfilter for empty paths in included or excluded lists (r1294583)
    * make fsfs packing threadsafe (r1376011)
    * don't error out on intermittent memcached failures (r1394470)
    * fix a ra_svn deadlock with zero-copy server option (r1465622)

  - Other tool improvements and bugfixes:
    * 'svnmucc' promoted to first-class supported utility (issue #3308, #4279)
    * make 'svnmucc' prompt for log messages (issue #3418)
    * rename 'svnauthz-validate' to 'svnauthz' (issue #4284)
    * make 'svnauthz' optionally validate user/path access (r1197588)
    * fix mailer.py test suite problems (r1449582)
    * fix mailer.py not showing dirs with property deletions (r1449582)
    * make mailer.py generate Date and Message-ID headers (r1449592)
    * new '-?' option support for 'svnmucc' (r1339428)
    * provide the repository name to mailer.py (r1439592)
    * add '--force-interactive' to svnmucc (r1457789)
    * add '--trust-server-cert' to svnmucc (r1458995)
  
 Developer-visible changes:
  - General:
    * now require Python 2.5 for tests and dev tools (r1243627)
    * now require bzip2 for tests and dev tools (r1148512)
    * configure defaults to --without-apache-libexecdir (r1469862)
    * support builds with APR pool debugging (r1176894)
    * 'make extraclean' is more thorough now (r1149460)
    * support for Serf 2 (r1147538)
    * introduction of editor v2 (via private APIs only) (r1166332 et al)
    * improve SQLite setup for compatibility with OS X 10.7. (r1181666)
    * rework switch statement to accommodate OWC compiler limitations (r1204407)
    * new --enable-sqlite-compatibility-version configure option (r1201421)
    * make test suite LD_LIBRARY_PATH include just-built auth plugins (r1200474)
    * packages/ directory removed, contents were outdated and unused (r1442167)
    * rename 'makefile.ezt' to 'build-outputs.mk.ezt' (r1444822)
    * use expensive compiler optimizations with --enable-optimize (r1445063)
    * in Visual C++ builds, move temp files to different directory (r1446416)
    * remove --with-ssl and --with-gssapi configure options (r1449023)
    * require at least serf 1.2.0 as build dependency (issue #4296)
    * fix error tracing to record file/line properly (r1331242)
    * add --log-level argument to win-tests.py (r1335461)
    * improve GDB pretty-printing of svn types (r1351336, r1364750, r1365035)
    * load third-party FS modules (if --enable-runtime-module-search) (r1362434)
    * enable running the regression tests over https (r1349699)
    * support 'make davautocheck' on OS X (r1421583)
    * new '--enable-gcov' configure option (r1416646)
    * fix build with Apache HTTPD 2.5 (r1408985)
    * allow running the test suite through a http proxy (r1410195)
    * don't use non-constant initializers in struct variables (r1412911)
    * allow generation of Visual Studio 2012 compatible projects (r1245152)
    * nicer pretty-printing of Subversion data types in gdb (r1367262 et al)
    * teach serf build on Windows to use static APR/Util and OpenSSL (r1371338)
    * add --ssl-cert option to win-tests.py to run tests over https (r1372760)
    * don't strip Content-Type header form .po files on Windows (r1380056)
    * configure now script auto-detects GNOME keyring (r1387230)
    * allow configure to detect BDB on Debian-based Linux distros (r1390633)
    * auto-detect serf via pkg-config (r1391662)
    * improve queries for compatibility with SQLite 3.7.16 (r1455239)
    * remove support for in-tree apr, apr-util and apr-memcache (r1456924)
    * FSFS caching supports prefixes now (r1462436)
    * maintainer mode now prints symbolic error codes (r1465157)
    * don't require NLS support for kwallet support (r1466445)
    * make Julian happy (r1413030)

  - API changes:
    * fix inconsistent handling of log revs without changed paths (issue #3694)
    * deprecated SVN_ERR_SQLITE_UNSUPPORTED_SCHEMA (r1173240)
    * provide API to clear cached auth credentials (issue #2775)
    * improve repository location information in various APIs (issue #4170)
    * major rewrite of conflict storage and handling APIs (r1354973 et al)
    * hide (deprecate) svn_wc APIs that use editors (r1243339)
    * svn_stringbuf_ensure() allocates an extra byte for terminator (r1308966)
    * switch and update apis are now more consistent (r1465292)
    * deprecated svn_client_merge_reintegrate (r1466742)
    * deprecated low level ra_svn apis (r1466907)

  - Bindings:
    * star-imports in swig-py only import 'svn_*' symbols (r1303375)
    * fix compilation of Perl bindings on Mandriva 2007 (issue #2617)
    * new JavaHL testing targets (r1182983)
    * enable returning an error on malfunctions for JavaHL (r1366215)
    * MacOS X build fix to cope with missing GNOME keyring (r1397844)
    * fix swig bindings tests on MacOS X (r1397846)
    * fix assertion failure in JavaHL error reporting (r1405922)
    * support ruby 1.9 (r1407206)
    * JavaHL: Include OSGI Manifest information in svn-javahl.jar (r1234864)
    * new svn_auth_set_gnome_keyring_unlock_prompt_func function (r1241554)
    * fix svn_txdelta window ops for python bindings (r1389054)
    * fix build of Perl bindings with newer versions of SWIG (r1389658)
    * add missing API functions to Perl bindings (issue #2646)
    * add missing API functions to Python bindings (r1392038 et al)
    * add missing API functions to JavaHL bindings (issue #4326)
    * fix some reference counting bugs in swig-py bindings (r1464899, r1466524)

Version 1.7.22
(12 Aug 2015, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.22

 Developer-visible changes:
  - General:
    * fix the regression test suite which was broken in 1.7.21 (r1694012)

Version 1.7.21
(5 Aug 2015, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.21

 User-visible changes:
  - Client-side bugfixes:
    * cp: fix 'svn cp ^/A/D/H@1 ^/A' to properly create A (r1674455, r1674456)
    * fix issue #4551: svnrdump load commits wrong properties, or fails, on a
      non-deltas dumpfile (r1652182 et al.)

  - Server-side bugfixes:
    * mod_authz_svn: do not leak information in mixed anonymous/authenticated
      httpd (dav) configurations (CVE-2015-3184)
    * do not leak paths that were hidden by path-based authz (CVE-2015-3187)
    * fix 'svnadmin recover' for pre-1.4 FSFS repositories (r1561419)

 Developer-visible changes:
  - General:
    * support building on Windows with Visual Studio 2012, 2013 and 2015 (r1687158, r1692783)

  - Bindings:
    * swig-pl: fix some stack memory problems (r1668618, 1671388)

Version 1.7.20
(31 Mar 2015, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.20

 User-visible changes:
  - Client-side bugfixes:
    * fix 'svn patch' output for reordered hunks (issue #4533)

  - Server-side bugfixes:
    * reject invalid get-location-segments requests in mod_dav_svn and
      svnserve (r1667233)
    * mod_dav_svn: reject invalid txnprop change requests (r1667235)

  - Client-side and server-side bugfixes:
    * properly duplicate svn error objects (r1651759)
    * fix use-after-free in config parser (1646785, r1646786, r1646797)

 Developer-visible changes:
  * add lock file config for testing against HTTPD 2.4+ (r1544302, r1544303)
  * fix build with absolute path to neon install (r1664789)


Version 1.7.19
(15 Dec 2014, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.19

 User-visible changes:
  - Client-side bugfixes:
    * rm: display the proper URL in commit log editor (r1591123)
    * diff: fix invalid read during suffix scanning (issue #4339)
    * fix crash in eclipse IDE with GNOME Keyring (issue #3498)
    * checkout/update: fix file externals failing to follow history and
      subsequently silently failing (issue #4185)

  - Server-side bugfixes:
    * svnadmin dump: don't let invalid mergeinfo prevent a dump (issue #4476)
    * mod_dav_svn: reject requests with missing repository paths (r1643409)
    * mod_dav_svn: reject requests with invalid virtual transaction names
      (r1643437)
    * mod_dav_svn: avoid unneeded memory growth in resource walking
      (issue #4531)

 Developer-visible changes:
  - General:
    * properly generate a version resource when building on Windows (r1542610,
      r1564576, r1568180)
    * fix a problem with the unix build that could result in linking to the
      wrong Subversion libraries at build or at run time (r1594157)
    * use a proper intermediate directory when building with Visual Studio
      2003-2008 (r1595431)
    * fix LIBTOOL_M4 and LIBTOOL_CONFIG variable not be evaluated properly
      during a unix build (r1637826)
    * allow the use of libtool 2.4.3 (r1640862, r1640873, r1643793)


Version 1.7.18
(11 Aug 2014, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.18

 User-visible changes:
  - Client-side bugfixes:
    * guard against md5 hash collisions when finding cached credentials
        (r1550691, r1550772, r1600909)
    * ra_serf: properly match wildcards in SSL certs. (r1615211, 1615219)
    * ra_serf: ignore the CommonName in SSL certs where there are Subject Alt
        Names (r1565531, r1566503, r1568349)

 Developer-visible changes:
  - General:
    * fix occasional failure in checkout_tests.py test 12. (r1496127)
    * disable building ZLib's assembly optimizations on Windows.


Version 1.7.17
(07 May 2014, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.17

 User-visible changes:
  - Client-side bugfixes:
    * log: use proper peg revision over DAV (r1568872)
    * move: fix errors when moving files between an external and the parent
      working copy (r1551579)
    * copy: fix 'svn copy URL WC' on relocated working copies
      (r1580626, r1580650)

  - Server-side bugfixes:
    * mod_dav_svn: blacklist building with broken versions of httpd; 2.2.25,
      2.4.5 and 2.4.6 (r1545835)
    * mod_dav_svn: detect out of dateness correctly during commit (issue #4480)

 Developer-visible changes:
  - General:
    * fix libmagic detection with custom LDFLAGS (r1577200)
    * fix a missing null byte when handling old pre-1.4 deltas (r1587968)
    * support building with Serf 1.3.x (r1517123, r1535139)

  - Bindings:
    * javahl: fix crash from resolve callback throwing an exception (r1586439)


Version 1.7.16
(26 Feb 2014, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.16

 User-visible changes:
  - Client-side bugfixes:
    * copy: fix some scenarios that broke the working copy (r1560690)
    * diff: fix regressions due to fixes in 1.7.14 (issue #4460)

  - Server-side bugfixes:
    * mod_dav_svn: prevent crashes with SVNListParentPath on (CVE-2014-0032)
    * reduce memory usage during checkout and export (r1564215)

 Developer-visible changes:
  - General:
    * fix failure in checkout_tests.py
    * support compiling against Cyrus sasl 2.1.25 (r1404912, r1413402)
    * support compiling against neon 0.30.x (r1566320)


Version 1.7.15
(Not released, see changes for 1.7.16.)


Version 1.7.14
(25 Nov 2013, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.14

 User-visible changes:
  - Client- and server-side bugfixes:
    * fix assertion on urls of the form 'file://./' (r1516806)

  - Client-side bugfixes:
    * upgrade: fix an assertion when used with pre-1.3 wcs (r1530849)
    * ra_local: fix error with repository in Windows drive root (r1518184)
    * fix crash on windows when piped command is interrupted (r1522892)
    * fix externals that point at redirected locations (issues #4428, #4429)
    * diff: fix incorrect calculation of changes in some cases (issue #4283)
    * diff: fix errors with added/deleted targets (issues #4153, #4421)

  - Server-side bugfixes:
    * mod_dav_svn: Prevent crashes with some 3rd party modules (r1537360 et al)
    * fix OOM on concurrent requests at threaded server start (r1527103 et al)
    * fsfs: limit commit time of files with deep change histories (r1536790)
    * mod_dav_svn: canonicalize paths properly (r1542071)

  - Other tool improvements and bugfixes:
    * mod_dontdothat: Fix the uri parser (r1542069 et al)

 Developer-visible changes:
  - Bindings:
    * javahl: canonicalize path for streamFileContent method (r1524869)


Version 1.7.13
(29 Aug 2013, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.13

 User-visible changes:
  - General
    * merge: fix bogus mergeinfo with conflicting file merges (issue #4306)
    * diff: fix duplicated path component in '--summarize' output (issue #4408)
    * ra_serf: ignore case when checking certificate common names (r1514763)

  - Server-side bugfixes:
    * svnserve: fix creation of pid files (r1516556)
    * mod_dav_svn: better status codes for commit failures (r1490684)
    * mod_dav_svn: do not map requests to filesystem (r1512432 et al)

 Developer-visible changes:
  - General:
    * support linking against gssapi on Solaris 10 (r1515068)
    * don't use uninitialized variable to produce an error code (r1482282)

  - Bindings:
    * swig-pl: fix SVN::Client not honoring config file settings (r150744)
    * swig-pl & swig-py: disable unusable svn_fs_set_warning_func (r1515119)


Version 1.7.12
(Not released, see changes for 1.7.13.)
 
 
Version 1.7.11
(23 Jul 2013, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.11

 User-visible changes:
  - General
    * translation updates for Simplified Chinese

  - Server-side bugfixes:
    * mod_dav_svn: fix incorrect path canonicalization (r1503528)
            See CVE-2013-4131, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2013-4131-advisory.txt

  - Other tool improvements and bugfixes:
    * fix argument processing in contrib hook scripts (r1485350)
            See CVE-2013-2088, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2013-2088-advisory.txt

 Developer-visible changes:
  - Bindings:
    * javahl: fix bug in error constructing code (r1405922)


Version 1.7.10
(30 May 2013, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.10

 User-visible changes:
  - Client-side bugfixes:
    * fix 'svn revert' "no such table: revert_list" spurious error (issue #4168)
    * fix 'svn diff' doesn't show some locally added files (issue #3797)
    * fix changelist filtering when --changelist values aren't UTF8 (r1475724)
    * fix 'svn diff --git' shows wrong copyfrom (issue #4294)
    * fix 'svn diff -x-w' shows wrong changes (issues #4133 and #4270, r1427278)
    * fix 'svn blame' sometimes shows every line as modified (issue #4034)
    * fix regression in 'svn status -u' output for externals (r1434750)
    * fix file permissions change on commit of file with keywords (issue #4331)
    * improve some fatal error messages (r1465975)
    * fix externals not removed when working copy is made shallow (issue #3741)

  - Server-side bugfixes:
    * fix FSFS repository corruption due to newline in filename (issue #4340)
            See CVE-2013-1968, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2013-1968-advisory.txt
    * fix svnserve exiting when a client connection is aborted (r1482759)
            See CVE-2013-2112, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2013-2112-advisory.txt
    * fix svnserve memory use after clear (issue #4365)
    * fix repository corruption on power/disk failure on Windows (r1483781)

 Developer-visible changes
  - General:
    * make get-deps.sh compatible with Solaris /bin/sh (r1451678)
    * fix infinite recursion bug in get-deps.sh (r1421541, r1424977)
    * fix uninitialised output parameter of svn_fs_commit_txn() (r1461743)

  - Bindings:
    * fix JavaHL thread-safety bug (r1476359)


Version 1.7.9
(04 Apr 2013, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.9
 User-visible changes
  - Client-side bugfixes:
    * improved error messages about svn:date and svn:author props. (r1440620)
    * fix local_relpath assertion (issue #4257)
    * fix memory leak in `svn log` over svn:// (r1458341)
    * fix incorrect authz failure when using neon http library (issue #4332)
    * fix segfault when using kwallet (r1421103)
    
  - Server-side bugfixes:
      See CVE-2013-1845, CVE-2013-1846, CVE-2013-1847, CVE-2013-1849,
      and CVE-2013-1884, and descriptive advisories at
            https://subversion.apache.org/security/
    * svnserve will log the replayed rev not the low-water rev. (r1461278)
    * mod_dav_svn will omit some property values for activity urls (r1453780)
    * fix an assertion in mod_dav_svn when acting as a proxy on / (issue #4272)
    * improve memory usage when committing properties in mod_dav_svn (r1443929)
    * fix svnrdump to load dump files with non-LF line endings (issue #4263)
    * fix assertion when rep-cache is inaccessible (r1422100)
    * improved logic in mod_dav_svn's implementation of lock. (r1455352)
    * avoid executing unnecessary code in log with limit (r1459599)

 Developer-visible changes:
  - General:
    * fix an assertion in dav_svn_get_repos_path() on Windows (r1425368)
    * fix get-deps.sh to correctly download zlib (r13520131)
    * doxygen docs will now ignore prefixes when producing the index (r1429201)
    * fix get-deps.sh on freebsd (r1423646)

  - Bindings:
    * javahl status api now respects the ignoreExternals boolean (r1435361)


Version 1.7.8
(17 Dec 2012, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.8
 User-visible changes
  - Client- and server-side bugfixes:
    * Fix typos in pt_BR, es and zh_TW translations (r1402417, r1402421)

  - Client-side bugfixes:
    * fix crash with --username option on Windows (r1396285)
    * add missing attributes to "svn log -v --xml" output (r1398100)
    * fix svn patch ignoring hunks after no trailing newline (r1399174)
    * fix hang with ra_serf during error processing (r1403583)
    * ignore file externals with mergeinfo when merging (r1401915)
    * fix "svnmucc cp" segfault with a missing last argument (issue #4079)
    * fix conflict handling on symlinks (issue #4091)
    
  - Server-side bugfixes:
    * properly detect threading availability (r1398325)
    * fix "svnadmin load --bypass-prop-validation" (r1237779)
    * fix parsing of [groupsfoo] sections in authz file (issue #3531)
    * add Vary: header to GET responses to improve cacheability (r1390653)
    * fix fs_fs to cleanup after failed rep transmission (r1403964, et al)
    * fix mod_dav_svn to complain about revisions > HEAD (r1403588)

 Developer-visible changes:
  - General:
    * fix incorrect status returned by 1.6 API (r1403258)
    * fix compilation with g++ 4.7 (r1345740)
    * fix svn_uri_get_file_url_from_dirent on Windows (r1409146)


Version 1.7.7
(09 Oct 2012, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.7
 User-visible changes
  - Client- and server-side bugfixes:
    * fix memory read bug (r137614)
    * update Chinese translation

  - Client-side bugfixes:
    * fix issues with applying Git patch files (r1374800, et al)
    * fix status does not descend into dir externals after upgrade (issue #4016)
    * fix file externals don't update with old mod_dav_svn (issue #4224)
    * fix external diff tool duplicates Index: lines with 'svn diff' (r1380697)
    * fix GNOME keyring library fails with very old glib (r1378847)
    * fix unknown password stores in config file cause error (r1375052)
    * fix assertions in ra_serf running against server root (r1365519, et al)
    * fix ra_serf checkout/export aborts early on Windows (issue #4174)
 
  - Server-side bugfixes:
    * fix an assert with SVNAutoVersioning in mod_dav_svn (issue #4231)
    * fix unbounded memory use with SVNPathAuthz short_circuit (r1387943)
    * fix svndumpfilter exclude --targets requires leading slash (issue #4234)
    * fix connection ttl for memcache should be 50 seconds (r1391641)
    * stabilize order of paths in dumpfiles with APR 1.4.6 (r1344864, et al)

 Developer-visible changes:
  - General:
    * print "All tests successful" at the end of 'make check' (r1375089)
    * fix sandbox violation in a test (r1371282)
    * fix tests fail when running within a format 30 WC (r1391188, et al)
    * fix return value of svn_client_update4() incorrect (r1380295)
    * fix make check summary missing test failures (r1390965)
    * fix build does not fail when apache httpd is not available (r1374198)

  - Bindings:
    * fix swig-pl build fails with swig 2.0.7 and newer. (r1389658)
    * fix swig-py runtime problems with swig 2.0.5 and newer (r1351117)


Version 1.7.6
(15 Aug 2012, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.6

 User-visible changes:
  - Client- and server-side bugfixes:

  - Client-side bugfixes:
    * Fix "svn status -u --depth empty FILE" (r1348822, r1349215)
    * Fix example output of 'svn help status' (issue #3962)
    * propset of svn:eol-style might not notice related text changes (r1353572)
    * sort output of 'svn propget -R' (r1355699)
    * sort output of 'svn proplist' (r1355698)
    * sort output of 'svn status' (r1341012)
    * avoid a filestat per working copy find operation (r1340556)
    * optimize 'svn upgrade' performance on large working copies (r1342984)
    * allow 'file:///C:\repos' style arguments on Windows, like 1.6 (r1346765)
    * fix ra_serf against Subversion 1.2 servers (r1349367)
    * fix 'svn upgrade' on working copies with certain tree conflicts (r1345482)
    * avoid workqueue references to system temp dir (r1367854)
    * allow non-existent canonical paths (r1367853)
    * fix 'svn revert --depth files' to operate on files (r1365554)
    * fix ra_serf XML namespace handling against malicious server (r1337441)
    * fix relocate with server-relative externals (issue 4216)
    * change two asserts into errors for TortoiseSVN (r1368128, r1368065)
    * don't attempt to anchor an operation outside a wc root (r1361341)

  - Server-side bugfixes:
    * partial sync drops properties when converting to adds (issue #4184)
    * replaying a copy and delete of an unreadable child fails (issue #4121)
    * allow svnlook to operate on r0 (r1362508)
    * make FSFS revision files independent of APR hash order (r1367498)

  - Other tool improvements and bugfixes:
    * move mod_dontdothat to install-tools (r1307177)

 Developer-visible changes:
  - General:
    * fix running tests against httpd 2.4 (r1291594)
    * use constant struct initialisers for C89 compatibility (r1352068)

  - Bindings:
    * JavaHL: Don't assert on some invalid input (r1354626, r1354652)
    * JavaHL: Add missing new in 1.7 notifications (r1351772)


Version 1.7.5
(17 May 2012, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.5

 User-visible changes:
  - Client- and server-side bugfixes:
    * http: report deleted-revision upon delete during update (r1327474)

  - Client-side bugfixes:
    * avoid potential segfault when canonicalizing properties (r1296369)
    * improve memory and file-handle management with externals (issue #4130)
    * serf: convert assertions to "MERGE failed" errors (r1302417)
    * fix undefined behaviour during multi-segment reverse merges (issue #4144)
    * fix potential use of already freed memory during diff operation (r1311935)
    * improve performance of scan for the working copy root (r1306334)
    * cmdline: fix segfault during 'svn diff' argument processing (r1311702)
    * fix regression from 1.6 in update with --depth option (issue #4136)
    * propset: avoid undefined behaviour in error path (r1325361)
    * reset sqlite statements, partly for sqlite-3.7.11 compat (r1328846, et al)
    * fix assertion during 'svn diff -r BASE:HEAD ^/trunk' (issue #4161)
    * notify upon 'update' just removing locks on files (r1329876)
    * neon: fix potential use of freed memory during commits (r1329388)
    * 'status --xml' doesn't show repository deletes correctly (issue #4167)
    * fix assert on svn:externals with drive letter on Windows (issue #4073)
    * fix 'svn update --depth=empty' against 1.4 servers (issue #4046)
    * handle missing svn:date reported by svnserve gracefully (r1306111)
    * fix merges which first add a subtree and then delete it (issue #4166)
    * fix a regression with checkout of file externals (issue #4087)
    * don't add spurious mergeinfo to subtrees in edge-case merge (issue #4169)
    * improve performance of status on large working copies (issue #4178)

  - Server-side bugfixes:
    * fix non-fatal FSFS corruption bug with concurrent commits (issue #4129)
    * mod_dav_svn: raise an error on MERGE of non-existent resource (r1298343)
    * mod_dav_svn: support compiling/running under httpd-2.4 (r1232267)
    * mod_dav_svn: forbid BDB repositories under httpd's event MPM (issue #4157)

  - Other tool improvements and bugfixes:
    * emacs support: updates to dsvn.el and vc-svn.el (r1200896, et al)

 Developer-visible changes:
  - General:
    * windows example distribution scripts: include svnrdump (r1295007)
    * fix running the test suite with jsvn (r1335555)

  - Bindings:
    * swig-py tests: avoid FAILs on APR hash order (r1296137, r1292248)
    * swig-rb tests: avoid FAILs on APR hash order (r1310535, r1310594)
    * swig-pl: Improved perl detection in gen-make.py (r1291797, r1291810)


Version 1.7.4
(08 Mar 2012, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.4

  User-visible changes:
    * fix 'svn log --diff' for moved paths (r1210147, et al)
    * fix ra_serf problem with reading directory entries via HTTPv2 (r1238121)
    * prepend "sqlite:" to error messages from SQLite (r1245738, -817)
    * fix randomly missing "Merged via" notifications in 'svn log -g' (r1293229)
    * fix spurious conflict when merging deleted symbolic link (issue #4052)
    * fix URL-to-WC copy of externals on Windows (issue #4123)
    * improve an FSFS sanity-check error message (r1294470)
    * fix regressions with symlinks pointing at externals (issue #4102)
    * fix 'svn log --diff' output ordering issue on Windows (r1295671)

  Developer-visible changes:
    * don't build mod_dontdothat if not building with httpd (r1243976)
    * fix the testsuite to avoid FAILs on APR hash order (r1230714, et al)


Version 1.7.3
(14 Feb 2012, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.3

  General:
    * ship mod_dontdothat with the standard release

  User-visible changes:
    * fix segfault on 'svn rm $ROOT_URL' (issue #4074)
    * replace a couple of assertions in favor of errors (r1207858, -949)
    * fix a server assert after being upgraded (r1210195)
    * fix segfault on 'svn mkdir svn://localhost' (r1211483)
    * make 'svnadmin recover' prune the rep cache (r1213331, et al)
    * make svnmucc use values from --config-dir option
    * update and clarify the merge help text (r1154121, et al)
    * replace wc assertion with informative error (r1222521, -693)
    * copy permissions correctly for FSFS dirs (r1229252)
    * improve 'svn log --with-all-revprops' over ra-dav (issue #4082)
    * fix segfault when remapping a file external (issue #4093)
    * fix segfault caused by obstructing unversioned dir (r1229677)
    * fix regression on first update of external dir with '-r' (issue #4053)
    * fix various EOL-handling problems in 'svn patch' (issues #3814, #3991)
    * fix segfault in 'svn revert' (r1229303)
    * improve correctness of 'svn patch --dry-run' (r1231944, -5)
    * enforce revisions given in 'svn:externals' (issue #4053)
    * fix potential corruption on 32-bit FSFS with large files (r1230212)
    * make 'svn status --xml' show new files (issue #4097)
    * fix 'svn mergeinfo' correctness (issue #4050)
    * return the correct status for non-present nodes (r1232202, -07, -21, -22)
    * improve SASL error messages (r1236343, et al)
    * improve server cert error code for ra_serf (r1232413)
    * fix SVNParentPath listings for parent path symlinks (r1221767, -80)
    * fix mod_dav_svn's handling of POST errors (issue #4086)
    * log some mod_dav_svn errors, rather than ignoring them (r1237720, -9596)
    * relax requirements for canonicalization in mod_dav_svn (r1236173)
    * fix a rare source of FSFS corruption (r1240752)
    * allow committing the result of some copy operations (issue #4059)
    * prevent one-byte buffer overflow in base64 decoding (r1242337)

  Developer-visible changes:
    * JavaHL: Add missing notify action, fixing an exception (r1221793)
    * fix swig-py memory leak (r1235264, -296, -302, -736)
    * fix spurious test suite failure (r1220742, -50)
    * allow running tests on UNC shares (r1225491)
    * bindings: see platform-specific password providers (r1242660, -1)
    * skip 'svnrdump dump' tests over ra_serf (r1242537)
    * convert a few ra_serf assertions to errors (r1242607)


Version 1.7.2
(02 Dec 2011, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.2

  User-visible changes:
   * fix working copy corruption after interrupted update/switch (issue #4040)
   * avoid segfaults against pre-1.5 servers (r1186928)
   * improve configure error message if apr-util uses old or no bdb (r1186784)
   * make 'svn patch' ignore '/dev/null' targets for compat with git (r1197998)
   * fix 'svn patch' segfault on patch that skips and deletes files (r1199950)
   * omit "Committed revision N." output from 'svn commit --quiet' (r1200837)
   * fix authz denial when svnserve root is a repository (issue #4060)
   * fix uninitialized memory read in client diff code (r1201002)
   * avoid potential segfault during merges (r1202807)
   * fix an assertion failure when a symlink is updated (r1186944, -81, -83)
   * make working copy operations fail if nodes have no base checksum (r1202630)
   * fix nested <Location>s when using v2 protocol (r1203546, -651, -653)
   * make mod_dav_svn ignore non-Subversion POST requests (r1187695)
   * avoid reading freed memory (r1204478)
   * recognize empty (only byte order mark) UTF-8 files as text (issue #4064)
   * fix 1.7 client regression when operating against a 1.0.x server (r1199876)
   * remove empty parent dirs of removed externals on update (issue #4044)
   * make 'svn diff -c N' work for files added in rN (issue #2873)
   * plug a memory leak in the bdb backend (r1205726)
   * fix 'svn import' with native eol-style and inconsistent EOLs (r1205193)
   * fix reading beyond the end of a string in bdb backend (r1205839, -48)
   * don't assert when committing an incomplete directory (issue #4042)

  Developer-visible changes:
   * JavaHL: allow 'status -u' to function properly (r1189190, -395)
   * don't put '\r' characters in our generate sql headers (r1189580)
   * properly define WIN64 on Windows x64 builds (r1188609)
   * better adherence to C89 in enum definitions (r1189665)
   * bump copyright year in Windows DLLs (r1189261)
   * log a better error when opening rep-cache.db fails (r1204610, -73)


Version 1.7.1
(24 Oct 2011, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.1

  User-visible changes:
   * improve performance of 'svn info' (r1164386)
   * improve hash table sorting performance (r1167659)
   * update bash completion for 1.7 (r1177001)
   * make 'svn ls' continue to work with 1.0-1.3 repos (r1154278, -379, -82)
   * improve handling of error messages generated by Cyrus SASL (r1179767)
   * update INSTALL documentation file (r1182115, and others)
   * error instead of assert when upgrading corrupt WCs (r1182904, -9)
   * improve memory usage in merge (r1176915)
   * fix an invalid assertion in merge (r1149103, -35)
   * improve performance of 'merge --reintegrate' in edge-case (r1167681)
   * fixed: 'svn mergeinfo' shows wrong revisions for added nodes (issue #3791)
   * make 'svn add --parents D/file' work if D is deleted (r1185222)
   * improve performance of trivial text file merges (issue #4009)
   * add FSFS sanity check to prevent corruption seen in the wild (r1178280)
   * improve correctness/performance of recursive info and proplist (r1164426)
   * fix memory leak in 'merge --reintegrate' (r1180154)
   * fix handling of directories after 'update --set-depth=empty' (r1185911)
   * fix 'checksum != NULL' assertions in some upgraded WCs (r1177732)
   * fix upgrading of WCs containing authz-restricted dirs (r1185738)
   * make the server tolerate svn:mergeinfo with malformed paths (r1182771)
   * fix some erroneous warning messages from the svn client (r1185746)
   * fix WC upgrade with replaced nodes in edge-case (issue #4033)

  Developer-visible changes:
   * fix object lifetime issues in the JavaHL bindings (r1175888)
   * fix org.tigris JavaHL wrappers to avoid double finalize (r1179680)
   * don't write to const memory (r1177492)
   * improve zlib configuration (r1174761, -98, -806)
   * improve SQLite runtime init for OS X 10.7 compat (r1181666)
   * improve test suite correctness (r1174111)
   * fix potential segfault seen by TSVN (r1183263)
   * fix backward compat crashes in JavaHL (r1183054, -347)
   * fill in repos_* fields of svn_wc_status3_t for repos-only nodes (r1181609)
   * disable the SQLite shared process cache (r1185242, r1185280)


Version 1.7.0
(11 Oct 2011, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.0

See the 1.7 release notes for a more verbose overview of the changes since
the 1.6 release:  https://subversion.apache.org/docs/release-notes/1.7.html

 User-visible changes:
  - General:
    * No longer including contrib/ in the release tarballs (r877798)

  - Major new features:
    * Less verbose HTTP-based repository access protocol (issue #1161, #3371)
    * Rewritten working copy metadata storage (issue #3357)
    * New 'svn patch' subcommand (issue #511)
    * Rewritten FSFS in-memory caching for better performance
    * New remote repository dump/load client 'svnrdump'

  - Minor new features and improvements:
    * Better handling of HTTP redirects (issue #2779)
    * Improved and much more consistent path handling (issue #2028, and others)
    * 'svnadmin load' rewrites changed revnums in mergeinfo (issue #3020)
    * Error message and help text improvements
    * 'svn log' can print unidiff of changes made in a revision (issue #2909)
    * 'svn diff' can print git-style unidiff annotations 
    * svnsync can now steal locks on a mirror repository (issue #3309)
    * display the wc root in the output of 'svn info' (issue #3355)
    * add 'svnlook filesize' (issue #3509)
    * add 'svn upgrade' command for upgrading working copies (r877675)
    * add 'svnsync --disable-locking' (issue #3545)
    * subtree merges don't unconditionally stop reintegrate merge (issue #3577)
    * 'svn relocate' replaces 'svn switch --relocate'  (r1026475)
    * 'svn relocate' updates relative externals (issue #3597)
    * allow svnsync users to specify the source repo (issue #3637)
    * remove redundant mergeinfo notifications for 2-URL merges (issue #3671)
    * 'svn export' into the current directory (issue #3727)
    * added '--parents' to 'svn update' (issue #3748)
    * allow configurable connection timeout in ra_serf (r876161)
    * add digest authentication in ra_serf (r876405)
    * add extensive caching support to servers (r1067669, -75, -72302)
    * add configurable caching to svnadmin (r1078357)
    * make server-side network data compression rate configurable (r1072288)
    * added support for auto-detecting mime-types with libmagic (r1131120)
    * 'svn rm url1 url2 url3' uses single txn per repo (issue #1199)
    * don't leave unversioned files when reverting copies (issue #3101)

  - Client-side bugfixes:
    * 'svn cp A B; svn mv B C' is equivalent to 'svn cp A C' (issue #756)
    * revert fetches missing directories from the server (issue #1040)
    * allow subdirs of moved dirs to be moved and committed (issue #1259)
    * improved performance of 'svn mv' with whole directories (issue #1284)
    * 'svn rm B; svn cp A B' now works (issue #1516)
    * 'svn diff URL1 URL2' now reverse of 'svn diff URL2 URL1' (issue #2333)
    * error if relocating to an unused URL (issue #2531)
    * 'svn blame -rWORKING' is now supported (issue #2544)
    * improve correctness of commit on a relocated wc over ra_dav (issue #2578)
    * add early error to 'svn add --auto-props' with mixed eols (issue #2713)
    * allow 'svn diff' to accept symlinks as targets (issue #2716)
    * don't lose props for replaced items (issue #2743)
    * handle mergeinfo for subtrees removed outside of svn (issue #2915)
    * add ability to force 'svn diff' to use internal diff (issue #3701)
    * correctly recover a schedule-for-delete rm'd outside of svn (issue #3106)
    * don't create self-referential mergeinfo from own history (issue #3157)
    * improve 'svn log -g' handling of bad mergeinfo source paths (issue #3270)
    * better conflict stat printing (issue #3342, issue #3594)
    * 'svn update' restores excluded files (issue #3544)
    * allow reintegrate merges into WCs with missing subtrees (issue #3603)
    * more gracefully error when given back cmdline input (issue #3620)
    * update exit codes to reflect command failure (issue #3622)
    * don't double-update file externals (issue #3665)
    * improve output of multi-target update (issue #3693, #3746)
    * make 'svn up --set-depth=exclude FILE' work (issue #3736)
    * return correct error code for 'svn cat' on nonexisting file (issue #3713)
    * support svn:externals on locally added directories (issue #2267)
    * use installed GSSAPI lib for Kerberos in ra_serf (r877381)
    * allow 'svn info' to run on an excluded item (issue #3792)
    * improve 'log -g' output with reverse merges (issue #3176)
    * don't print error message if stdout is a pipe and is closed (issue #3014)
    * removed special copy-handling during updates added in 1.5.0 (issue #3711)
    * fix warning about copies committed with non-infinity depth (issue #3752)
    * can now commit multiple wc paths lacking a common parent (issue #2381)
    * 'svn export --depth $WC' now works correctly (issue #3800)
    * added support for case-only renames on Windows (issue #3702)
    * 'svn delete --force' removes tree conflicts (issue #3805)
    * don't throw an error when skipping tree conflicts in update (issue #3329)
    * don't break commits of wc->wc copies with file externals (issue #3589)
    * allow 'svn info' to work on symlinks to working copies (issue #2305)
    * allow 'svn st --show-updates' to work across symlinks (issue #3117)
    * 'svn revert' shouldn't loop on symlinks (issue #3972)
    * fixed: wc-to-wc copy of a switch source (issue #1802)
    * fixed: 'svn st' reports symlinks as obstructed items (issue #2284)
    * fixed: 'cd e:\; svn up e:\' fails (issue #2556)
    * fixed: svn aborts on committing from root dir on windows (issue #3346)
    * fixed: removing a dir scheduled for deletion corrupts wc (issue #2741)
    * fixed: 'svn cleanup' fails on obstructed paths (issue #2867)
    * fixed: case-only renames resulting from merges don't work (issue #3115)
    * fixed: 'svn mergeinfo' ignores peg rev for wc target (issue #3180)
    * fixed: unable to merge to wc of deleted branch (issue #3221)
    * fixed: move via merge leaves behind versioned move source (issue #3324)
    * fixed: ra_serf does not honor http-proxy-exceptions (issue #3428)
    * fixed: 'svn mv A B; svn mv B A' loses history (issue #3429)
    * fixed: ra_serf doesn't support http-auth-types config (issue #3435)
    * fixed: merge sets incorrect mergeinfo on skipped paths (issue #3440)
    * fixed: ra_serf inconsistent handling of cached authn creds (issue #3450)
    * fixed: ra_serf segfault with using NTLM or Negotiate auth (r876910)
    * fixed: excluded subtrees are not detected by svnversion (issue #3461)
    * fixed: submitting a changelist while obstructed item exists (issue #3484)
    * fixed: crash when changing an external's URL (issue #3530)
    * fixed: target moved after branching breaks reintegrate (issue #3640)
    * fixed: potential race condition in svnsync (issue #3546)
    * fixed: spurious merge conflicts with pre-1.7 mod_dav_svn (issue #3657)
    * fixed: repeat merge is not a no-op (issue #3564)
    * fixed: inheritance results in self-referential mergeinfo (issue #3668)
    * fixed: inheritance results in nonexistent mergeinfo sources (issue #3669)
    * fixed: memory leaks in ra_serf (issue #3684)
    * fixed: corruption of 'svn pg' output for large properties (issue #3721)
    * fixed: 'svnsync copy-revprops' doesn't sync revprop dels (issue #3728)
    * fixed: executable flag not correctly set on merge (issue #3686)
    * fixed: 'svn rm' fails on multiple URLs with encoded spaces (issue #3839)
    * fixed: children of replaced dirs cannot be deleted (issue #3468)
    * fixed: executable flag of binary file lost during merge (issue #3686)
    * fixed: merging a symlink-turned-regular-file breaks the wc (issue #2530)
    * fixed: can't remove file externals (issue #3351)
    * fixed: 'svn unlock' attempts to unlock wrong token on DAV (issue #3794)
    * fixed: forced DAV 'svn unlock' results in 403, not warning (issue #3801)
    * fixed: rm -> ci -> cp = missing directory (issue #2763)
    * fixed: 'svn info' returns parent info on missing dirs (issue #3178)
    * fixed: spurious prop conflict with 'merge --reintegrate' (issue #3919)
    * fixed: 'svn --version' fails with non-existent $HOME (issue #3947)
    * fixed: unforced export silently overwrites existing file (issue #3799)
    * fixed: reverse merge which adds subtree mergeinfo fails (issue #3978)
    * fixed: 'svn up -r{R>HEAD}' hangs client over ra_svn (issue #3963)
    * fixed: 'svn up' updates file externals in target siblings (issue #3819)
    * many other minor bugfixes, optimizations, plugs of memory leaks, etc
  
  - Server-side bugfixes:
    * mod_dav_svn is less strict about auto-merging for commits (issue #1704)
    * allow SVNListParentPath to be used with authz (issue #2753)
    * allow nav to repo list from repo top with SVNListParentPath (issue #3159)
    * allow repositories in the root of a drive on windows (issue #3535)
    * don't destroy mergeinfo with 'svnadmin load --parent-dir' (issue #3547)
    * fixed: 'svnadmin hotcopy' does not duplicate symlinks (issue #2591)
    * fixed: post-revprop-change errors cancel commit (issue #2990)
    * fixed: mod_dav_svn runs pre-revprop-change hook twice (issue #3085)
    * fixed: mod_dav_svn doesn't return stderr to user on failure (issue #3112)
    * fixed: hotcopy may corrupt target rep-cache.db (issue #3596)
    * fixed: mod_dav_svn can cause spurious merge conflicts (issue #3657)
    * fixed: DAV can overwrite directories during copy (issue #3314)
    * fixed: 'svn log' returns log of unrelated path (issue #3931)
    * match paths against authz rules in case sensitive way (issue #3781)
    * svnserve can now force usernames to upper/lower case (issue #3726)
    * reduce duplicate log messages in 'log -g' (issue #3650)
    * svnserve: don't crash on shutdown with SASL in inetd mode (issue #3664)
    * disallow arbitrary HTTP headers from committers (issue #2872)
    * limit FSFS memory consumption (issue #3478, #3593)
    * many other minor bugfixes too numerous to list here

  - Other tool improvements and bugfixes:
    * svnsync now takes the '--config-option' argument (issue #2027)
    * svnsync can translate non-UTF-8 properties to UTF-8 (issue #3817)
    * svnadmin now errors on non-UTF-8 revision properties (issue #3755)
    * svnadmin verify now errors on non-UTF-8 paths (r1129641)

 Developer-visible changes:
  - General:
    * improved output of 'make check'
    * introduce scratch_pool/result_pool parameter paradigm
    * improved error tracing (r877208, -736)
    * improve building with sqlite on Windows (issue #3364)
    * allow mod_dav_svn to compile against Apache 2.4 (issue #3548)
    * support running tests against older servers (r876016)
    * notification of unversioned obstructions (r877344)
    * removed virtually all abort() calls (issue #2780)
    * don't include client-specific suggestions in error msgs (issue #3887)

  - API changes:
    * don't crash svn_client_copy if ctx->log_msg_func is NULL (issue #3234)
    * much improved ra_serf error handling (issue #3375)
    * provide clients with old and new revision on update (r876515)
    * close both files, even on error in svn_stream_copy3() (r887262)
    * added 'work-in-progress' XFail test status (r876549)
    * notifications sent when mergeinfo changes (r877588)
    * add information on text and property mods in log APIs (r877688)
    * fixed: svn_ra_local__get_file() leaks file descriptors (issue #3290)
    * svn_ra_neon__get_dir() returns correct dir set for URLs (issue #3093)
    * swig-py: always set ChangedPath.path (also for deletes) (issue #2630)
    * improve conflict resolver API for a specific direction (issue #3049)

  - Bindings:
    * New JavaHL package: org.apache.subversion
    * Deprecate the SVNClientSynchronized class in JavaHL (issue #2755)
    * fixed setting binary properties in JavaHL (issue #3770)
    * fix type mapping of svn_txdelta_window_t in python bindings (issue #3688)


Version 1.6.23
(30 May 2013, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.23

 User-visible changes
  - Server-side bugfixes:
    * fix FSFS repository corruption due to newline in filename (issue #4340)
    * fix svnserve exiting when a client connection is aborted (r1482759)
            See CVE-2013-2112, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2013-2112-advisory.txt

  - Other tool improvements and bugfixes:
    * fix argument processing in contrib hook scripts (r1485350)


Version 1.6.22
(Not released, see changes for 1.6.23.)


Version 1.6.21
(04 Apr 2013, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.21

 User-visible changes
  - Server-side bugfixes:
    * mod_dav_svn will omit some property values for activity urls (r1453780)
    * improve memory usage when committing properties in mod_dav_svn (r1443929)
    * fix mod_dav_svn runs pre-revprop-change twice (issue #3085)
    * fixed: post-revprop-change errors cancel commit (issue #2990)
    * improved logic in mod_dav_svn's implementation of lock. (r1455352)

 Developer-visible changes:
  - General:
    * fix a compatibility issue with g++ 4.7 (r1345740)


Version 1.6.20
(04 Jan 2013, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.20

 User-visible changes
  - Client- and server-side bugfixes:
    * Fix typos in pt_BR, es and zh_TW translations (r1402417)

  - Server-side bugfixes:
    * add Vary: header to GET responses to improve cacheability (r1390653)
    * fix fs_fs to cleanup after failed rep transmission (r1403964, et al)
    * fix an assert with SVNAutoVersioning in mod_dav_svn (issue #4231)


Version 1.6.19
(10 Sep 2012, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.19

  - Client-side bugfixes:
    * handle missing svn:date reported by svnserve gracefully (r1306111)

  - Server-side bugfixes:
    * fix possible server hang if a hook script fails to start (r1330410)
    * fix write-through proxy commit regression introduced in 1.6.17 (r1088602)
    * partial sync drops properties when converting to adds (issue #4184)

  - Developer-visible changes:
    * fix the testsuite to avoid FAILs on APR hash order (r1230714, et al)


Version 1.6.18
(29 Mar 2012, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.18

  User-visible changes:
    * reject invalid svn:mergeinfo at commit time over DAV (issue #3953) 
    * fix reintegrate merge regression introduced in 1.6.13 (issue #3957)
    * make the stderr output of the post-commit hook XML-safe (r893478)
    * fix a rare source of FSFS corruption (r1240752)
    * plug a memory leak in the bdb backend (r1205726)
    * server-side performance fix for "log -g" (r1152282)
    * fix description of svndumpfilter's --targets option (r1151911)
    * fix datastream corruption during resumed transfer in ra_serf (r1154733)
    * fix a crash in ra_svn SASL authentication (r1166555, -678)
    * fix potential corruption on 32-bit FSFS with large files (r1230212)
    * make website links point to subversion.apache.org (r896893, -901, r915036)
    * fix non-fatal FSFS corruption bug with concurrent commits (issue #4129)

  Developer-visible changes:
    * fix sqlite distfile retrieval in get-deps.sh (r1134734)
    * fix swig-py memory leak (r1235264, -296, -302, -736)
    * allow passing --with-jdk to gen-make.py on Windows (r966167)


Version 1.6.17
(01 Jun 2011, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.17

  User-visible changes:
    * improve checkout speed on Windows (issue #3719)
    * make 'blame -g' more efficient with large mergeinfo (r1094692)
    * avoid some invalid handle exceptions on Windows (r1095654)
    * preserve log message with a non-zero editor exit (r1072084)
    * fix FSFS cache performance on 64-bit platforms (r1103665)
    * make svn cleanup tolerate obstructed directories (r1091881)
    * fix deadlock in multithreaded servers serving FSFS repositories (r1104093)
    * detect very occasional corruption and abort commit (issue #3845)
    * fixed: file externals cause non-inheritable mergeinfo (issue #3843)
    * fixed: file externals cause mixed-revision working copies (issue #3816)
    * fix crash in mod_dav_svn with GETs of baselined resources (r1104126)
            See CVE-2011-1752, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2011-1752-advisory.txt
    * fixed: write-through proxy could directly commit to slave (r917523)
    * detect a particular corruption condition in FSFS (r1100213)
    * improve error message when clients refer to unknown revisions (r939000)
    * bugfixes and optimizations to the DAV mirroring code (r878607)
    * fixed: locked and deleted file causes tree conflict (issue #3525)
    * fixed: update touches locked file with svn:keywords property (issue #3471)
    * fix svnsync handling of directory copyfrom (issue #3641)
    * fix 'log -g' excessive duplicate output (issue #3650)
    * fix svnsync copyfrom handling bug with BDB (r1036429)
    * server-side validation of svn:mergeinfo syntax during commit (issue #3895)
    * fix remotely triggerable mod_dav_svn DoS (r1130303)
            See CVE-2011-1783, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2011-1783-advisory.txt
    * fix potential leak of authz-protected file contents (r1130303)
            See CVE-2011-1921, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2011-1921-advisory.txt

  Developer-visible changes:
    * fix reporting FS-level post-commit processing errors (r1104098)
    * fix JVM recognition on OS X Snow Leopard (10.6) (r1028084)
    * allow building on Windows with recent Expat (r1074572)


Version 1.6.16
(02 Mar 2011, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.16

  User-visible changes:
   * more improvement to the 'blame -g' memory leak from 1.6.15 (r1041438)
   * avoid a crash in mod_dav_svn when using locks (r1071239, -307)
            See CVE-2011-0715, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2011-0715-advisory.txt
   * avoid unnecessary globbing for performance (r1068988)
   * don't add tree conflicts when one already exists (issue #3486)
   * fix potential crash when requesting mergeinfo (r902467)
   * don't attempt to resolve prop conflicts in 'merge --dry-run' (r880146)
   * more fixes for issue #3270.

  Developer-visible changes:
   * ensure report_info_t is properly initialized by ra_serf (r1058722)
   * locate errors properly on a malfunction (r1053208)
   * fix output param timing of svn_fs_commit_txn() on fsfs (r1051751)
   * for svn_fs_commit_txn(), set invalid rev on failed commit (r1051632, -8)
   * fix sporadic Ruby bindings test failures (r1038792)
   * fix JavaHL JVM object leak when dumping large revisions (r947006)
   * use Perl to resolve symlinks when building swig-pl (r1039040)
   * allow Perl bindings to build within a symlinked working copy (r1036534)
   * don't overwrite the LD_LIBRARY_PATH during make check-swig-pl (r946355)
   * improve unit tests for some fs functions (r1051744, -5, -3185, -241)


Version 1.6.15
(26 Nov 2010, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.15

  User-visible changes:
   * hide unreadable dirs in mod_dav_svn's GET response (r996884)
   * make 'svnmucc propsetf' actually work (r1005446)
   * limit memory fragmentation in svnserve (r1022675)
   * fix 'svn export' regression from 1.6.13 (r1032970)
   * fix 'svn export' mistakenly uri-encodes paths (issue #3745)
   * fix server-side memory leaks triggered by 'blame -g' (r1032808)
            This has been tracked as CVE-2010-4644
   * prevent crash in mod_dav_svn when using SVNParentPath (r1033166)
            This has been tracked as CVE-2010-4539
   * allow 'log -g' to continue in the face of invalid mergeinfo (issue #3270)
   * filter unreadable paths for 'svn ls' and 'svn co' (r997026, -070, -474)
   * fix abort in 'svn blame -g' (issue #3666)
   * fix file handle leak in ruby bindings (issue #3512)
   * remove check for 1.7-style working copies (issue #3729)

  Developer-visible changes:
   * improve some swig parameter mapping (r984565, r1035745)
   * improve test accuracy over dav (r991534, r877814)
   * create fails.log for test runs (r964349)
   * improve detection of 'svnversion' when building (r877219, et al)
   * don't violate API layering in dumpstream logic (issue #3733)
   * don't report working copy installs as switched (r1033921)


Version 1.6.14
(Not released, see changes for 1.6.15.)


Version 1.6.13
(01 Oct 2010, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.13

  User-visible changes:
   * don't drop properties during foreign-repo merges (issue #3623)
   * improve auto-props failure error message (r961970)
   * improve error message for 403 status with ra_neon (r876615)
   * don't allow 'merge --reintegrate' for 2-url merges (r959004)
   * improve handling of missing fsfs.conf during hotcopy (r980811, -1449)
   * escape unsafe characters in a URL during export (issue #3683)
   * don't leak stale locks in FSFS (r959760)
   * better detect broken working copies during update over ra_neon (r979045)
   * fsfs: make rev files read-only (r981921)
   * properly canonicalize a URL (r984928, -31)
   * fix wc corruption with 'commit --depth=empty' (issue #3700)
   * permissions fixes when doing reintegrate merges (related to issue #3242)
   * fix mergeinfo miscalculation during 2-url merges (issue #3648)
   * fix error transmission problems in svnserve (r997457, -66)
   * fixed: record-only merges create self-referential mergeinfo (issue #3646)
   * fixed: 'SVNPathAuthz short_circuit' unsolicited read access (issue #3695)
            See CVE-2010-3315, and descriptive advisory at
            https://subversion.apache.org/security/CVE-2010-3315-advisory.txt
   * make 'svnmucc propset' handle existing and non-existing URLs (r1000607)
   * add new 'propsetf' subcommand to svnmucc (r1000612)
   * warn about copied dirs during 'svn ci' with limited depth (r1002094)

  Developer-visible changes:
   * make ruby bindings compatible with Ruby 1.9 (r957507)
   * use the repos verify API in JavaHL (r948916)
   * teach ra_serf to parse md5 checksums with update editors (r979429)
   * let ra_serf work with current serf releases (r879757, r880320, r943796)


Version 1.6.12
(21 Jun 2010, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.12

  User-visible changes:
   * further improvements for issue #3242
   * allow deletion of uris which need character escaping (issue #3636)
   * fix errors with 'svn mkdir --parents' (issue #3649)
   * update address to which crash reports are sent (r901304)
   * check for server certificate revocation on Windows (r898048)
   * disable custom file mutexes on Windows (r879902, -16)
   * fix handling of peg revision'd copy targets (issue #3651)
   * more improvements to 'svn merge --reintegrate' (r935631)
   * allow copying of broken symlinks (issue #3303)
   * improve rep-sharing performance on high-concurrency repos (issue #3506)
   * fixed: added subtrees with mergeinfo break reintegrate (issue #3654)
   * fixed: assertion triggered by tree-conflicted externals (issue #3469)

  Developer-visible changes:
   * give windows devs more flexibility with sqlite versions (r944635)
   * allow the pack tests to work with low file descriptor limits (r937610)
   * improve exception handling on Windows Vista and 7 (r878447, -910, -916)


Version 1.6.11
(19 Apr 2010, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.11

 User-visible changes:
  * fix for repositories mounted via NFS (issue #3501)
  * enable TCP keep-alives in svnserve (r880552)
  * tighten restrictions on revprops for 'svnadmin verify' (r904594)
  * make ra_serf give better out-of-date information (issue #3561)
  * improve error message upon connection failure with svn+ssh:// (r922516)
  * allow 'svn log' on an uncommitted copy/move destination (r901752)
  * make 'svnadmin hotcopy' copy the fsfs config file (r905303)
  * mergeinfo improvements with non-inheritable mergeinfo (issue #3573)
  * make mergeinfo queries not require access to the repo root (issue #3242)
  * update URLs to refer the new apache.org repository (r904301, -94)
  * update relative externals during a switch (issue #3390)
  * fix 'merge --reintegrate' with self-referential mergeinfo (r892050, -85)
  * improve wc-ng working copy detection (r929382)
  * improve handling of mergeinfo when using serf (r880461)
  * fixed: 'svnlook plist --revprop' with '-t TXN_NAME' (r917640, -8211)
  * fixed: file external from URL cannot overwrite existing item (issue #3552)
  * fixed: potential memory error in 'svn status' (r923674, -9)
  * fixed: merge records mergeinfo from natural history gaps (issue #3432)
  * fixed: theoretical possibility of DB corruption (r926151, -67)

 Developer-visible changes:
  * disable checks for wc-ng working copies when running the test suite
  * on Windows, don't ignore move operation error codes (r896915)
  * more precise reporting of errors occurring with sqlite init (r927323, -8)
  * ensure rangelist APIs are commutative (r923389, -91)


Version 1.6.10
(Not released, see changes for 1.6.11.)


Version 1.6.9
(25 Jan 2010, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.9

 User-visible changes:
  * allow multiple external updates over ra_svn (issue #3487)
  * fix a segmentation fault when using FSFS (r881905)
  * support Berkeley DB 4.8 (r879688)
  * various autoprop improvements (r880274, -5)
  * improve usage of svn+ssh:// on Windows (issue #2580)
  * teach 1.6.x to recognize 1.7 working copies (1.6.x-future-proof branch)
  * update help text for 'svn update' and 'svn switch' (r886164, -97)
  * make 'svnadmin load --parent-dir' create valid mergeinfo (r888979, -9081)
  * tolerate relative merge source paths in mergeinfo (r889840)
  * teach mod_dav_svn to support the Label header (issue #3519)
  * fixed: svnsync leaves stale sync-locks on mirrors (r884842)
  * fix applicability of 'svn resolve --accept=theirs-conflict' (r880525, -6)
  * fixed: segfault in 'svn resolve' (r896522, -47)
  * fix commit failure against an out-of-date mirror (r900797)

 Developer-visible changes:
  * update ruby bindings test expectation (r880162)
  * don't allow rangelist and mergeinfo API to modify input args (r879093)


Version 1.6.8
(Not released, see changes for 1.6.9.)


Version 1.6.7
(Not released, see changes for 1.6.9.)


[ Note: All revision numbers for versions prior to 1.6.7 reference the
  original repository on svn.collab.net.  For more information see:
  http://svn.apache.org/repos/asf/subversion/README ]


Version 1.6.6
(22 Oct 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.6

 User-visible changes:
  * fix crash during 'svn update' (r39673)
  * respect Apache's ServerSignature directive (r40008, -21, -31)
  * don't add a file with mixed line endings, and then abort (issue #2713)
  * support Neon 0.29.
  * fix a crash in 'svn rm --force' (r37953)
  * handle tree conflicts involving replacements (issue #3486)
  * allow non-threadsafe sqlite if APR has no threads (r39301)
  * print newline before plaintext SSL cert / password prompts (r38982, r39302)
  * improve merge performance with implicit subtree mergeinfo (issue #3443)
  * fix "libsvn_ra_svn/marshal.c assertion failed (opt || cstr)" (issue #3485)
  * make file externals work for binary files (issue #3368)
  * perform MIME type matching case-insensitively (issue #3479)
  * do not treat non-existent revisions as HEAD in 'svn export' (issue #3400)
  * revert r36720's default MIME type change back to "text/plain" (issue #3508)
  * improve "tree conflict already exists" error message (r38872)
  * fix failure to commit replacement of a directory (issue #3281)
  * fix mod_dav_svn parent dir links to preserve peg revisions (issue #3425)

 Developer-visible changes:
  * fix 2 failing tests in ruby bindings (r38886)
  * do not require GNU grep for build (issue #3453)
  * use '$SED' instead of 'sed' in build scripts (issue #3458)
  * add svn.client.{log5,merge_peg3} to python bindings (r39635, -6, -7)
  * include the time of a test run in tests.log (r39887)


Version 1.6.5
(22 Aug 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.5

 User-visible changes:
  * fix mod_dav_svn directory view links to preserve peg revisions (r38021)
  * do not error on Windows when ALLUSERPROFILE dir nonexistent (r38053, -5, -7)
  * properly escape lock comments over ra_neon (r38101, -2)
  * allow syncing copies of '/' over ra_neon and ra_serf (issue #3438)
  * make 'svnlook diff' show empty added or deleted files (r38458)
  * fix building with Apache 2.4 (r36720)
  * fix possible data loss on ext4 and GPFS filesystems (issue #3442)
  * resolve symlinks when checking for ~/.subversion (r36023)
  * don't let svn+ssh SIGKILL ssh processes (issue #2580)
  * allow PLAIN and LOGIN mechanisms with SASL in svnserve (r38205)
  * fix peg revision parsing in filenames like 'dir/@file.txt' (issue #3416)
  * fix detection of Apache <2.0.56 (r38290, -3, -4)
  * don't pretend to do tree conflict resolution (r38799, -801, -805)
  * fix data corruption when syncing from svnserve to mod_dav_svn (r38686, -7)
  * fix GNOME Keyring with '--non-interactive' option (r38222, -3, -61, -410)
  * fixed: false "File '...' already exists" error during commit (issue #3119)

 Developer-visible changes:
  * avoid referencing uninitialized variables (r38388)
  * plug a couple of error leaks (r38572)
  * improve windows test output (r38616, -7, -9, -49)


Version 1.6.4
(06 Aug 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.4

 User-visible changes:
  * fixed: heap overflow vulnerability on server and client
           See CVE-2009-2411, and descriptive advisory at
           https://subversion.apache.org/security/CVE-2009-2411-advisory.txt


Version 1.6.3
(22 Jun 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.3

 User-visible changes:
  * fix segfault in WC->URL copy (r37646, -56)
  * let 'svnadmin load' tolerate mergeinfo with "\r\n" (r37768)
  * make svnsync normalize svn:* props to LF line endings (issue #3404)
  * better integration with external merge tools (r36178)
  * return a friendly error message for 'svn diff' (r37735)
  * update dsvn.el for 1.6 (r37774)
  * don't allow setting of props on out-of-date dirs under neon (r37745)
  * improve BASH completion (r36450, -52, -70, -79, -538)
  * always show tree conflicts with 'svn st' (issue #3382)
  * improve correctness of 'svn mergeinfo' (issue #3126)
  * decrease the amount of memory needed for large commits (r37894, -6)
  * work around an APR buffer overflow seen by svnsync (r37622)
  * ra_svn clients now use TCP keep-alives if available (issue #3347)
  * improve 'svn merge' perf by reducing server contact (r37491, -593, -618)
  * stop propagating self-referential mergeinfo in reintegrate merges (r37931)
  * fix NLS detection where -liconv is required for bindtextdomain() (r37827)
  * don't delete unversioned files with 'rm --keep-local' (r38015, -17, -19)
  * bump apr and apr-util versions included in deps to latest. (r37941)
  * avoid temp file name collisions with ra_serf, ra_neon (r37972)
  * fixed: potential segfault with noop file merges (r37779)
  * fixed: incorrect output with 'svn blame -g' (r37719, -23, -41)
  * fixed: bindings don't load FS libs when module search enabled (issue #3413)
  * fixed: DAV RA layers not properly handling update/switch working copy
    directory to revision/place in which it doesn't exist (issue #3414)
  * fixed: potential abort() in the working copy library (r37857)
  * fixed: memory leak in hash reading functions (r37868, -979)

 Developer-visible changes:
  * improve memory usage in file-to-stringbuf APIs (r37907)
  * reduce memory usage for temp string manipulation (r38010)


Version 1.6.2
(11 May 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.2

 User-visible changes:
  * vastly improve memory usage with 'svn merge' (issue #3393)
  * make default depth for merge 'infinity' (r37156)
  * make 'status --quiet' show tree conflicts (issue #3396)
  * allow '--set-depth infinity' to expand shallow subtrees (r37169)
  * return an error if attempting to reintegrate from/to the repo root (r37385)
  * don't store bogus mergeinfo for '--ignore-ancestry', foreign merges (r37333)
  * don't allow merge of difference between two repos (r37519)
  * avoid potential segfault with subtree mergeinfo (r36613, -15, -31, -41)
  * recommend sqlite 3.6.13 (r37245)
  * avoid unnecessary server query for implicit mergeinfo (r36509)
  * avoid unnecessary server query during reverse merges (r36527)
  * set depth=infinity on 'svn add' items with restricted depth (r37607)
  * fixed: commit log message template missing paths (issue #3399)
  * fixed: segfault on merge with servers < 1.6 (r37363, -67, -68, -79)
  * fixed: repeat merge failures with non-inheritable mergeinfo (issue #3392)
  * fixed: another memory leak when performing mergeinfo-aware merges (r37398)
  * fixed: incorrect mergeinfo on children of shallow merges (issue #3407)
  * fixed: pool lifetime issues in the BDB backend (r37137)

 Developer-visible changes:
  * don't fail if an embedding app has already initialized SQLite (issue #3387)
  * resolve naming collisions with static stat() function in svnserve (r37527)
  * fix an expectation for a failing dirent windows test (r37121)


Version 1.6.1
(9 Apr 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.1

 User-visible changes:
  * recommend Neon 0.28.4. (r36388)
  * improve performance of 'svn merge --ignore-ancestry' (r36256)
  * improve 'svn merge' performance with subtree mergeinfo (r36444)
  * correctly proxy LOCK and UNLOCK requests (r36159)
  * prevent a crash when updating old working copies (r36751)
  * don't let svnmerge.py delete a nonexistent property (r36086, -767, -769)
  * don't fail when upgrading pre-1.2 repositories (r36851, -7)
  * allow escaping of separator characters in autoprops (r36763, -84)
  * improve tempfile creation robustness on Windows (r36442, -3)
  * fix change-svn-wc-format.py for 1.6.x working copies (r36874, -5)
  * improve configure's detection of Berkeley DB (r36741, -2)
  * don't allow foreign merges to add foreign mergeinfo (issue #3383)
  * improve performance of 'svn update' on large files (r36389, et. al.)
  * fixed: error leak and potential crash (r36860)
  * fixed: parent directory handling on Windows (r36049, -50, -51, -131)
  * fixed: uninitialized memory errors (r36252, -3)
  * fixed: potential working copy corruption (r36714)
  * fixed: working copy upgrade error (r36302)
  * fixed: pointer dereference error (r36783)
  * fixed: error diff'ing large data with ignored whitespace (r36816)
  * fixed: potential hang in ra_serf (r36913)
  * fixed: problem with merge and non-inheritable mergeinfo (r36879)
  * fixed: repeated merging of conflicted properties fails (issue #3250)
  * fixed: excluding an absent directory segfaults (issue #3391)

 Developer-visible changes:
  * ensure svn_subst_translate_cstring2() properly flushes data (r36747)
  * make serf report a base checksum to apply_textdelta (r36890)
  * syntax updates for strict C89 compilers (r36799)
  * update RPM scripts for RHEL4 (r36834)
  * allow tests to be run with Python 2.6.1 on Windows (r36149, -50, -51, -56)
  * allow building JavaHL with Visual Studio 2008 (r36954)
  * stop setting default translation domain in JavaHL (r36955)
  * fixed: warning with Python 2.6 and ctypes bindings (r36559)
  * fixed: undefined references to svn_fs_path_change2_create() (r36823)


Version 1.6.0
(20 Mar 2009, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.0

 User-visible changes:
  - General:
    * Now require Windows 2000 or newer on Windows (r33170)

  - Major new features:
    * identical files share storage space in repository (issue #2286)
    * file-externals support for intra-repository files (issue #937)
    * "tree" conflicts now handled more gracefully (issue #2282, #2908)
    * repository root relative URL support on most commands (issue #3193)

  - Minor new features and improvements:
    * pre-lock hook can now specify lock tokens via stdout (r32778)
    * svnmucc: support '--with-revprop' (r29492)
    * merge: log include-descendants in operational log (r30426, r30428)
    * improved operational logging for 'svn switch' (r30517)
    * new 'Header' keyword, similar to 'Id' but with full URL (r35386)
    * warn/disallow when storing plain-text passwords (r31046)
    * support KWallet and GNOME keyring for password storage (r31241, -337)
    * client now caches SSL client cert passphrases (issue #2489)
    * add '--prefix-file' option to 'svndumpfilter' (issue #2697)
    * add '--ignore-externals' option to 'svn cp' (issue #3365)
    * add '--with-no-revprops' to 'svn log' (issue #3286)
    * new 'svnadmin pack' command to compress FSFS filesystems
    * new SVNAllowBulkUpdates mod_dav_svn directive (issue #3121)
    * new public mod_dav_svn URI syntax:  path?[p=PEG][&r=REV] (r34076)
    * new 'svnsync info' command to show synchronization information (r35053)
    * conflict resolver supports display-conflict, mine-conflict and theirs-conflict

  - Client-side bugfixes:
    * faulty reflexive merges (issue #2897)
    * buffer overflow on a 0 byte string buffer (r35968, -74)
    * conflict resolver needed more useful 'diff' option (issue #3048)
    * disable username assumption (issue #2324)
    * more accurate usage message for 'svn log' (r30449)
    * do not repeat merge if target has explicit mergeinfo (issue #2821)
    * corruption when filtering self-referential mergeinfo (r30467)
    * filter empty mergeinfo with self-referential mergeinfo (r30510)
    * pay attention to partial replay from the server in svnsync (r30440)
    * improved property name handling in svnsync (r30480)
    * properly recognize the file:/// in repository with svnsync (r30482)
    * svn+ssh SIGKILLs ssh processes (issue #2580)
    * 'svn up'/'svn co' early abort with svn:externals (issue #3148)
    * improve tempfile names for conflict resolver (issue #3166)
    * ra_serf: 'svn merge' aborts (issue #3212)
    * 'svn cleanup' failed on non-ASCII characters (issue #3313)
    * 'svn update' fails on moved, modified file with local mods (issue #3354)
    * easier use of NTLM for proxy with ra_neon (r29874)
    * 2-url merge from DAV-accessed foreign repo makes bad wcprops (issue #3118)
    * can't add .svn (and children) to your wc via '--parents' (r35819)
    * improved performance removing unversioned directories (r36111)
    * 'svn cp --parents' had path URL encoding issues (issue #3374)
    * support shell quoting rules in externals definitions (issue #2461)
    * new SVN_LOCALE_DIR environment variable for localization (issue #2879)
    * scheme and domain name in urls handled case insensitive (issue #2475)
    * merge: pick default revisions with peg revision in single url (r30455)
    * many other minor bugfixes, optimizations, plugs of memory leaks, etc
 
  - Server-side bugfixes:
    * mod_dav_svn runs pre-revprop-change twice (issue #3085)
    * mod_dav_svn ignores pre-revprop-change failure on delete (issue #3086)
    * mod_dav_svn prevented lock breaks from being propagated to client (r29914)
    * non-UTF8 filenames could enter repository (issue #2748)
    * 'svnlook proplist' xml output (issue #2809)
    * don't let mod_dav_svn hide errors from client (issue #3102)
    * ra_serf failure during update (issue #3113)
    * ra_serf comply with RFC 2617 in handling authentication headers (r35981)
    * use both SHA1 and MD5 in the FS backends (r34388)
    * many other minor bugfixes too numerous to list here

  - Contributed tools improvements and bugfixes:
    * commit-email.pl: Deprecated; use mailer.py instead (r31755, -67)
    * svnmerge.py migration tool munged svn:mergeinfo ordering (issue #3302)
    * And other random sundry stuff

 Developer-visible changes:
  - General:
    * serf 0.3.0 required, when building with serf (r35586)
    * require SQLite 3.4.0 or newer (r33520)
    * allow the use of an in-tree SQLite amalgamation (r35263)
    * svn_log_changed_path_t now includes a 'kind' field (issue #1967)
    * BDB `changes' table inconsistency when APIs are misused (issue #3349)
    * configure should prefer apr-1 over apr-0 if both are present (issue #2671)
    * make 'Not Found' errors consistent between RA layers (issue #3137)
    * fix a potential buffer overrun (r34374)
    * many bug fixes and improvements to the test suite

  - API changes:
    * notification system for properties and revision properties (issue #783)
    * make ra_svn's merge commit-revprops public (r30462, r30453)
    * mod_dav_svn operational logging compatible with svnserve logging (r30518) 
    * improve speed of svn_client__get_copy_source() (issue #3356)
    * if fsfs commit fails return SVN_INVALID_REVNUM (r35950)

  - Bindings:
    * new: ctypes python bindings
    * many improvements to all bindings (Java, Perl, Python, and Ruby)
    * respect CFLAGS in SWIG bindings (r35879)
    * fix building Ruby bindings with Ruby 1.9 (r35852, r35883)


Version 1.5.9
(06 Dec 2010, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.9

 User-visible changes:
  * fix proxying of LOCK and UNLOCK requests with WebDAV proxies (r36159)
  * improve performance of --ignore-ancestry merges (r36256)
  * avoid crash with when using subtree mergeinfo (r36613, -13, -31, -41)
  * improve merge correctness with non-inheritable mergeinfo (r36789)
  * fixed: repeated mergeinfo of conflicting properties fails (issue #3250)
  * fix segfault in wc->URL copy (r37646, -56)
  * make 'svn up --set-depth infinity' expand shallow subtrees (r37169)
  * resolve symlinks when checking for ~/.subversion (r36023)
  * make default depth of 'svn merge' infinity (r37156)
  * don't allow foreign merges to add foreign mergeinfo (issue #3383)
  * error if attempting to reintegrate to/from the repo root (r37385)
  * let 'svnadmin load' tolerate mergeinfo with "\r\n" (r37768)
  * improve memory performance in 'svn merge' (issue #3393)
  * fixed: 'SVNPathAuthz short_circuit' unsolicited read access (issue #3695)
           See CVE-2010-3315, and descriptive advisory at
           https://subversion.apache.org/security/CVE-2010-3315-advisory.txt
  * prevent crash in mod_dav_svn when using SVNParentPath (r1033166)
  * limit memory fragmentation in svnserve (r1022675)
  * fix server-side memory leaks triggered by 'blame -g' (r1032808)
  * perform MIME type matching case-insensitively (issue #3479)
  * respect Apache's ServerSignature directive (r880082)
  * error early if attempting to use Serf >= 0.4.0 (r1041545)

 Developer-visible changes:
  * fix pointer dereference (r36783)
  * fix error leak (r36860)
  * make basic_tests 12 compatible with Windows and Python 2.5+ (r35930)


Version 1.5.8
(Not released, see changes for 1.5.9.)


Version 1.5.7
(06 Aug 2009, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.7

 User-visible changes:
  * fixed: heap overflow vulnerability on server and client
           See CVE-2009-2411, and descriptive advisory at
           https://subversion.apache.org/security/CVE-2009-2411-advisory.txt


Version 1.5.6
(26 Feb 2009, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.6

 User-visible changes:
  * allow colons within mergeinfo path names (r35040)
  * make it impossible to add .svn to wc via 'svn add --parents' (r35143, -5)
  * copy properties of added but uncommitted files (r32448)
  * speedup JavaHL bindings on Windows (r35733)
  * improve performance of log operation on < 1.5 servers (r35566)
  * allow commits over Neon of files >2GB (POSIX only) (r34919, -24)
  * allow serf from behind MS ISA proxy servers (r35981)
  * prevent svnmerge-migrate-history.py from committing bogus mergeinfo (r35516)

 Developer-visible changes:
  * fix error handling in mod_dav_svn (r35250, -86)
  * support --server-minor-version in windows testsuite (r31393)
  * fix depth_tests.py 23 on Windows with a BDB repo (r34875)
  * allow svn_mergeinfo_parse() to tolerate unordered mergeinfo (r35297, -367)
  * allow overlapping rangelists into svn_mergeinfo_parse() (r35466, -712, -713)


Version 1.5.5
(22 Dec 2008, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.5

 User-visible changes:
  * allow prop commits on dirs with modified children (r34487, -92, -94)
  * make Cyrus auth implementation always prefer EXTERNAL to ANONYMOUS (r33866)
  * do not create mergeinfo for wc-wc moves or copies (r34184, -585)
  * do not autoupgrade old BDB filesystems to 1.5 or 1.4 format (r34653, -6)
  * return mergeinfo to prior state during reverse merges (r30257, r33024, -6)
  * remove mergeinfo deleted by merge (issue #3323)
  * make proxy slaves pass through txn GET and PROPFIND requests (issue #3275)
  * merge can now use targets with inconsistent newlines (issue #3262)
  * don't allow empty-string changelists (issue #3344)
  * remove false positive ra_neon mergeinfo errors (r34822)
  * improve performance of 'svn merge --reintegrate' (r34091, -4, and others)
  * fixed: foreign merges keep UUID of foreign repository (r34050, -1, -3)
  * fixed: properly encode diff headers used in conflict resolution (r34171)
  * fixed: segfault in 'svn cp --parents' (r31311, -4)
  * fixed: mergeinfo for '...' maps to empty revision range (issue #3312)
  * fixed: segfault in BDB backend node-origins cache (r34506)
  * fixed: broken merge if target's history includes resurrections (r34385, -93)
  * fixed: invalid mergeinfo created on a subtree during merge (r34560, -2)

 Developer-visible changes:
  * fixed: svn_repos_get_logs() chokes on some revision arguments (r33873, -4)


Version 1.5.4
(24 Oct 2008, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.4

 User-visible changes:
  * Properly handle explicit mergeinfo added in merge source (r32968, -75)
  * fixed: merging of paths containing spaces (r33641, -44)
  * fixed: regression in mergeinfo-aware merges against 1.5.3 (r33693, -704)


Version 1.5.3
(10 Oct 2008, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.3

 User-visible changes:
  * Allow switch to continue after deleting locally modified dirs (issue #2505)
  * Update bash_completion to be compatible with 1.5 (r32900, -11, -12)
  * Improve 'svn merge' execution time by 30% on Windows (r33447)
  * Reuse network sessions during 'svn merge', improving performance (r33476)
  * Improve temp file creation time on Windows (r33464)
  * Greatly improve merge performance (r29969, r32463, r33013, -016, -022, -112)
  * Improve file IO performance on Windows (r33178, -85)
  * fixed: merging files with spaces in name (r33109, -121, -369)
  * fixed: incorrect relative externals expansion (r33109, -121, -369)
  * fixed: 'svn mv' hangs and consumes infinite memory (r33201, -12)
  * fixed: correctness regression in 'svn log -g' (issue #3285)
  * fixed: current early bailout of 'svn log -g' (r32977)

 Developer-visible changes:
  * Allow the tests to run as non-administrator on Windows Vista (r31203)
  * Allow out-of-tree build of bindings on BSD (r32409)
  * Translate messages in svn_fs_util.h (r32771)
  * fixed: bindings test for Perl 5.10 (r31546)
  * fixed: building bindings and C API tests with VS2008 (r32012)
  * fixed: svn_ra_replay API over ra_serf (r33173)


Version 1.5.2
(30 Aug 2008, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.2

 User-visible changes:
  * Set correct permissions on created fsfs shards (r32355, -7)
  * Pass client capabilities to start-commit hook (issue #3255)
  * Disallow creating nested repositories (issue #3269)
  * Support Neon 0.28.3
  * Properly canonicalize URIs with an empty hostname (issue #2116)
  * Improved merge performance for superfluous ranges (r32643)
  * Better error message for 'Malformed URL for repository' (r31867, r32365)
  * Improved svn:externals parsing (r32672, -673, -674, -739)
  * fixed: improper ordering in 'svnlook diff' output (r32019)
  * fixed: mod_dav_svn memory leak with 'SVNPathAuthz short_circuit' (r32360)
  * fixed: duplicate svn:externals targets fail on co/up (issue #3246)
  * fixed: 'svn merge --depth' inconsistencies (issue #2825)
  * fixed: ra_serf test failures (1.5.x-ra_serf-backports branch)
  * fixed: memory leak and crashes in FS (r32545, -58, -82)
  * fixed: core dump with relative externals (issue #3237)
  * fixed: 'svn copy' working copy corruption (r32467, -70)
  * fixed: perl bindings errors in non-English locale (issue #3258)
  * fixed: 'svn merge' incorrectly reverses previous merges (r32494, -522, -523)
  * fixed: 'svn merge' errors with subtree mergeinfo (issue #3067)

 Developer-visible changes:
  * make libsvn_ra_neon initialization thread-safe (r32497, r32510)
  * respect LDFLAGS in SWIG bindings (r32416, r32421, r32442)
  * fixed: test failures in non-English locales (r32491)


Version 1.5.1
(26 Jul 2008, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.1

 User-visible changes:
  * mergeinfo on switched subtrees should elide in repos (issue #3188)
  * Add support for --config-dir to svnmerge.py (r31727)
  * improve performance of bdb post-commit deltification (r31820, -59)
  * return faster when there is nothing to be merged (r30748)
  * don't commit an add of a missing item (issue #3198)
  * don't create unneeded self-referential mergeinfo (issue #3157)
  * support 'http-library' (if --enable-runtime-module-search) (r31425, -722)
  * support Berkeley DB 4.7 (r32017, -29)
  * fixed: make serf usable with root-level authz (r31464)
  * fixed: 'svndumpfilter' partial-path matching bug (r31833)
  * fixed: crash on invalid dates in 'log' and 'blame' (issue #2721)
  * fixed: 'svn status --xml' outputting invalid XML (issue #2887)
  * fixed: 'svn merge' prints incorrect range (r30746, -47)
  * fixed: using neon/serf, can not replace branch (issue #2939)
  * fixed: 'file not found' error when merging to a broken symlink (r31159, -79)
  * fixed: using serf, crash or endless loop fetching authn data (r31619)
  * fixed: ArrayIndexOutOfBoundsException in JavaHL bindings (r31719, -806)
  * fixed: authn password lookup used wrong username (issue #2242)
  * fixed: unbounded memory usage in wc-to-wc copy and move (r31868)
  * fixed: subtree merges broken for non-intersecting ranges (issue #3199)
  * fixed: invalid XML from 'svn log --xml' against pre-1.2 servers (r31875)
  * fixed: 'svnlook diff' ignores --diff-copy-from for properties (issue #3248)
  * fixed: 'svnlook diff' doesn't report that binary files differ (issue #3249)
  * fixed: bogus results from commits to subtrees added by merge (issue #3240)
  * fixed: non-existent subtree in destination breaks the merge (issue #3067)
  * fixed: serf merge bug too complex to describe here (r32056)
  * fixed: 'svn log -g' correctness and speed (issue #3220, issue #3235)
  * fixed: merge chokes on renamed subtrees (issue #3174)

 Developer-visible changes:
  * export svn_path_is_url() to the bindings (r31603)
  * don't clobber LDFLAGS in configure when given '--with-zlib' (r31825)
  * make libsvn_ra depend on libsvn_delta unconditionally (r31852)
  * correctly set the peg revision for copy in JavaHL (r31994)
  * 'svn mergeinfo' handles wc paths (r31023, -873, -874, -929, -930, -038)
  * fixed: crash when when svn_ra_open3() is passed a bogus URL (r31223)
  * fixed: JavaHL compilation on Windows (r31737)
  * fixed: crash in calling apr_pstrcat (affects TortoiseSVN) (r32080)


Version 1.5.0
(19 Jun 2008, from /branches/1.5.x)
http://svn.apache.org/repos/asf/subversion/tags/1.5.0

 User-visible changes:
  - Major new features:
    * Merge Tracking [foundational] (issue #820)
    * Sparse checkouts (see new '--depth' option) (issue #695)
    * Interactive conflict resolution (r25670 et al)
    * svn:externals handles relative URLs (issue #1336) and peg URLs
    * Changelist support
    * WebDAV transparent write-through proxy
    * Better support for large FSFS deployments (via sharding & partitioning)
    * Cyrus SASL support for ra_svn and svnserve (issue #1144)

  - Minor new features and improvements:
    * 'svn resolve' (with '--accept' option) replaces "resolved" (issue #2784)
    * 'svn move file1 file2 ... dir' now moves the files into dir (issue #747)
    * 'svn mkdir' and 'svn copy' now take '--parents' option (issue #1776)
    * 'svn delete' now takes '--keep-local' to not remove working copy files
    * 'svn copy', 'move' now support peg revisions (issue #2546; also r26484)
    * 'svn copy A B ; svn move B C' now the same as 'svn copy A C' (issue #756)
    * 'svn copy -rBASE' now works in a working copy (issue #1643)
    * 'svn import' now takes '--force' (issue #2806)
    * 'svn status -u' now shows of locally deleted directories (issue #2420)
    * 'svn switch' now takes '--force' (issue #2392)
    * 'svn switch' now takes '--ignore-externals' option (issue #2189)
    * 'svn switch' now supports peg revisions (issue #2545)
    * 'svn checkout' now takes '--force' option (issue #1328)
    * 'svn proplist' and 'svn propget' now support peg revisions (issue #3070)
    * 'svn propget' now takes '--xml' option (issue #2696)
    * 'svn propedit' now support URLs (issue #2238, but see issue #2923)
    * 'svn proplist --quiet' no longer prints extra info (issue #1547)
    * 'svn diff --summarize' now takes '--xml' option (issue #2967)
    * 'svn diff -x' now takes '-p' extension option (issue #2995)
    * 'svn log' now takes '-c' option (r27933)
    * 'svn log' now takes '-l' as short form of '--limit' (r25829)
    * 'svn log --xml' now takes '--with-revprop' option (issue #2850)
    * 'svn diff'/'svnlook diff' now show property actions better (issue #3019)
    * 'svn merge' now has informative messages on reverse merges (issue #2848)
    * 'svn merge FILE' now honors '--ignore-ancestry' (issue #2853, r25891)
    * 'svn merge' handles multiple notifications for single items (issue #2828)
    * 'svn merge' handles skipped path better (issue #2829)
    * 'svn merge' handles merges from foreign repositories more completely
    * 'update', 'checkout', 'switch' now handle obstructions gracefully (r22257)
    * 'svn update' now takes '--force' (issue #2392)
    * 'svn update' now sometimes copies or moves local files, for efficiency
    * 'svnadmin lslocks' now accepts path within repository (issue #2965)
    * 'svnadmin recover' now supports FSFS repositories (issue #2992)
    * 'svnadmin verify' now has '-q' and '-r' options (r22103)
    * 'svnadmin setrevprop' command added (r21736)
    * 'svnadmin setuuid' command added (r28511)
    * 'svnsync sync' now shows commit progress like 'svn commit'
    * 'svnsync' now takes '-q, --quiet' option (r26465)
    * 'svnsync' now supports separate authn for source/target (issue #2717)
    * 'svnsync copy-revprops' now supports revision ranges (r23498)
    * 'svnsync copy-revprops' now supports "HEAD" revision alias (r23500)
    * 'svnmucc' is new name for contrib tool formerly called 'mucc'
    * 'svnmucc' now has propset and propdel subcommands (issue #2758)
    * 'svnmucc' now has more authentication options
    * 'svnmucc' now now takes '--non-interactive' option (r25977)
    * 'svnmucc' now takes a global base revision, for extra safety (r23764)
    * 'svnlook' now takes '--extensions' option (issue #2912)
    * 'svnlook' now takes '-N' option (issue #2663)
    * 'svnlook history' now takes '-l' / '--limit' option (r25843)
    * 'svnserve' now takes '--config-file' option (r24119)
    * 'mod_dav_svn' now uses Apache default mime-type for files (issue #2304)
    * new '--with-revprop' option on all commands that commit (issue #1976)
    * now accept "peg dates" (URL@{DATE}), behaving like peg revs (issue #2602)
    * easier to try out experimental ra_serf http:// access module
    * select ra_neon vs ra_serf on a site-by-site basis in config (r25535)
    * client-side post-commit processing now more efficient (issue #2607)
    * windows binaries now use a custom crash handler (issue #1628)
    * add vim swap file patterns to default global-ignores (r24348)
    * add "*.pyc" and "*.pyo" patterns to default global-ignores (issue #2415)
    * add unix/libtool library patterns to default global-ignores (issue #2415)
    * naming scheme for conflict files is now configurable (issue #2474)
    * removed svn-ref.tex as it's extremely out of date (issue #2762)
    * improved cancellation response in many situations
    * support Neon up to 0.28
    * character set conversion now uses native API on Windows (r25650)
    * HTTP authn protocol now configurable (for Neon 0.26 and higher) (r21531)
    * http:// (over Neon) supports HTTP redirection / relocation (issue #660)
    * support PKCS#11-provided (smartcard) SSL client certs with Neon (r29421)
    * authz now supports aliases (r21982)
    * authz token rules for authenticated-only, anonymous, and inverse (r23750)
    * mailer.py now supports properties in commit messages (r21684)
    * ra_serf now supports NTLM/SSPI authentication (issue #2900)
    * warn if try to turn off boolean property via propset/propedit (r25486)
    * display repository basename in XML and HTML index views (r25837, r25838)
    * config 'http-auth-type' can be overridden to force BASIC auth (r23900)
    * translation updates for all languages, as usual
    * Revamp mod_dav_svn logging; see tools/server-side/svn_dav_log_parse.py
    * misleading configure arg --enable-dso now --enable-runtime-module-search

  - Client-side bugfixes:
    * 'svn revert' of missing scheduled addition broke wc (issue #2425)
    * 'svn export' should export svn:externals from local copies (issue #2429)
    * 'svn status -uN' should show status of files (issue #2468)
    * 'svn update' overwrote if local timestamp unchanged (issue #2746)
    * 'svn update -N' errored when receiving a deletion (issue #3039)
    * 'svn merge' would delete locally modified props (issue #2857)
    * 'svn log --xml' could output invalid XML (issue #2866)
    * 'svn copy' on URL with spaces made wrong WC file name (issue #2955)
    * 'svn diff' was failing w/ large diffs on Windows (issue #1789)
    * 'svn delete' no longer deletes locally-modified files (issue #1808)
    * 'svn move' moved files to wrong directory on Windows (issue #1869)
    * 'svn revert' mistakenly used leftover .svn-revert files (issue #2927)
    * 'svn diff' output now shows relative paths (issue #2723)
    * 'svn diff' wasn't ignoring all EOLs (issue #2920)
    * 'svn cleanup' no longer fails on a missing .svn/tmp dir (r23370)
    * infinite loop in UTF conversion in non-C locale (issue #2577)
    * interrupting "svn status" could make svn crash (issue #2623)
    * commit-email.pl date header output now RFC2822-compliant (issue #2633)
    * authz write access to folder wasn't permitting locking (issue #2700)
    * stop complaining just because $HOME is unreadable (issue #2363)
    * do not display unescaped characters in error message (issue #2471)
    * propchange received on subdir merge causes conflict (issue #2969)
    * revert replaced-with-history files should restore checksum (issue #2928)
    * catch improper arguments to diff (issue #2996)
    * handle URLs like http://hostname (i.e. no path part) (issue #1851)
    * config autoprops honored regardless of case of entry (issue #2036)
    * "Cannot replace a directory from within" error now rarer (issue #2047)
    * handle _svn/.svn as part of a path (issue #3026)
    * make permissions changes on symlinks a no-op (issue #2581)
    * error usefully if asked to update a URL (r22296)
    * fixed infinite loop on Windows if fail to find repository root (r22483)
    * 'svn info $REPO_ROOT' now supports pre-1.2 svn:// servers (r26264)
    * be more resilient in the face of faulty .svn/entries files (r26482)
    * 'svn diff -x --ignore-eol-style' failed to ignore all EOLs (r27094)
    * rare property dataloss bug now fixed (issue #2986, see also r29538)
    * fixed faulty status reporting for some missing directories (issue #2804)
    * 'svn diff --summarize' showed wrong output paths (issue #2765)
    * propset and move interaction could cause property weirdness (r25833)
    * 'svn propget <propname> .@HEAD' now works (issue #3012)
    * 'svnsync' had bug with replaced+modified rev over serf (issue #2904)
    * 'svnsync --config-dir' sometimes ignored, thus tunnel agent bug (r27056)
    * update/merge safely receives file on top of schedule-add file (r23506)
    * http:// (over Neon) reports progress while disk-spooling delta (r26271)
    * print "Out of memory" before dying from memory shortage (issue #2167)
    * warn when used on old checkout without a repository root entry (r25168)
    * merge to missing file target wrongly appeared to succeed (issue #2782)
    * 'svn merge URL PATH -cX' could cause property corruption (issue #2781)
    * URL parsing now consistently checks for error earlier (issue #2207)
    * security hole: files could be created above cwd (r26047, CVE-2007-3846)
    * local property mods to replaced-with-history file could be lost (r26364)
    * revert of replaced-with-history path left copyfrom info (r23452)
    * character encoding translation could hang (r23492)
    * un-substituting keywords was buggy ($Id$ vs. $Id:$) (issue #2640)
    * ra_neon and ra_serf lost pre-revprop-change hook output (issue #443)
    * merge of non-empty subdir could be committed incorrectly (issue #1962)
    * many other minor bugfixes, optimizations, plugs of memory leaks, etc

  - Server-side bugfixes:
    * segfault in svnserve and svnversion commands fixed (issue #2757)
    * segfault when stopping httpd (if BDB repository) fixed (issue #2732)
    * 'svnadmin dump' had a path ordering bug (issue #2641)
    * better FSFS support for NFS v3 and lower (r24470)
    * better FSFS support for some buggy NFS clients (r29448)
    * authentication and authz bugs w.r.t. anonymous access (issue #2712)
    * inconclusive authz result should deny, not allow (r23815)
    * better reporting of problems parsing authz files (r22329)
    * set svn:date revprop even if dumpstream does not (issue #2729)
    * http:// commit can now create empty files properly (r25471, r25474)
    * squelch not-a-directory errors in both FS backends (issue #2549)
    * segfault on update-report response without base revision (issue #3023)
    * 'svnserve --root PATH' checks that PATH exists (r22580, r22701)
    * 'svnlook propget -t TXN_NAME' reports errors better (r22772)
    * make location of mod_dav_svn activity database configurable (r24873)
    * select only paths that are proper children of requested path (r25231)
    * http:// commit error could leave empty transactions behind (r23594)
    * 'svn switch --relocate' now works against unreadable repos root (r23848)
    * many other minor bugfixes too numerous to list here

  - Contributed tools improvements and bugfixes:
    * svn_load_dirs.pl:
      - Support global-ignores list (issue #2470)
      - Allow "@" in filenames (r22203, Debian bug 359145)
      - Add -no_auto_exe option (r26399)
    * svnmerge.py:
      - fixed: Always get end_rev from source instead of target (issue #2863)
      - fixed: 'init' now chooses a better default revision range (issue #2810)
      - fixed: Consider revs changing blocking status as reflected (issue #2814)
      - Performance inmprovement (issue #2812)
      - initialized revisions can be excluded (issue #2851)
    * new 'svn-populate-node-origins-index' tool (issue #3024)
    * new 'svn-merge-vendor.py' to assist in merging vendor branches (r23030)
    * 'svn2rss.py' is now called 'svn2feed.py'
    * svn2cl: New release 0.9 (r24498)
    * commit-email.pl: various improvements (r22971, r22589)
    * commit-email.rb: various improvements
    * psvn.el: too many improvements and new features to list them all here
    * dsvn.el: improve XEmacs compatibility (r24337)
    * svn-tweak-author.py: make NEWAUTHOR argument optional (r24387)
    * And more stuff that we just didn't have time to list.  Enjoy.

 Developer-visible changes:
 * General:
   - libsvn_ra_neon is new name for libsvn_ra_dav (to accommodate ra_serf)
   - many abort() calls removed, replaced with error returns
   - client and server now do capabilities exchange (r29358 et al)
   - gen_win.py: auto-detect the path to the JDK on Windows (r24333)
 * API changes:
   - many, many new APIs and types as part of the new features in 1.5.0
   - APIs to allow retrieving multiple revprops in one fetch (issue #2850)
   - basic progress reporting for ra_svn (issue #901)
   - new APIs for creating and using iterators (r26533)
   - svn_fs_node_origin_rev finds line of history origin (issue #3017, #3024)
   - svn_revnum_parse for parsing revision numbers (r26195)
   - svn_path_is_canonical for validating paths (r26481)
   - new API svn_fs_txn_root_base_revision() (r22610)
   - pass individual arguments rather than config objects (r25182, r25190)
   - clients can now extend HTTP User-Agent header (r28613)
   - SVN_ERR_RA_DAV_PATH_NOT_FOUND is deprecated and no longer raised
 * Bindings:
   - Many improvements to all bindings (Java, Perl, Python, and Ruby)


Version 1.4.6
(21 Dec 2007, from /branches/1.4.x)
http://svn.apache.org/repos/asf/subversion/tags/1.4.6

 User-visible changes:
  - Client:
    * fixed: unbounded memory use in "svn cat" over ra_svn (r26964, -8)
    * fixed: 'svn diff --summarize file' displays erroneous output (issue #2765)
    * fixed: 'svn status' wrong on previously-reverted deleted dir (issue #2804)
    * fixed: 'svn up' can delete unversioned symlinks (issue #1808)
    * fixed: use correct properties for locally replaced files (issue #2743)
    * fixed: 'svn info -R $REPO_ROOT' w/ pre-1.2 svnserve broken (r26264)
    * fixed: svnsync ignores '--config-dir' (r27056)
    * datestamps can be localized (r26156)
    * fixed: text base not updated when merging a replaced file (issue #2698)
    * fixed: inverted 'switch --relocate' error message (r22355)
    * fixed: sporadically failing file and directory removal on Windows (r25520)
    * fixed: property file handling for schedule-delete files (r25833)
    * fixed: allow invalid svn:eol-style values (r28331)
    * fixed: 'svnadmin rmlocks' should error when no path provided (r28431)
    * support neon 0.26.4 (r26077)

  - Server:
    * fixed: authz granted if calculation inconclusive (r23815)
    * fixed: svndumpfilter crashes on Windows (r23494)
    * fixed: wrong pointer type used for memset (r27263)
    * fixed: invalid FSFS directory cache can corrupt repository (r27256)
    * fixed: dir props on FSFS filesystem root never conflict (issue #2608)

  - Client and Server:
    * fixed: "No newline at end of file" message translated (issue #2906)
    * use compressed delta encoding for 'svn blame' in svnserve (r26115)
    * translation updates for Simplified Chinese

 Developer-visible changes:
 * svnserveautocheck.sh script is executable (r23942)
 * add RHEL5 RPM (r25593)
 * test suite passes with trunk servers (forwards-compatibility) (r25607)
 * javahl bindings:
     - improve error reporting from native code (r25208)


Version 1.4.5
(27 Aug 2007, from /branches/1.4.5)
http://svn.apache.org/repos/asf/subversion/tags/1.4.5

 User-visible changes:
 * fixed: file placement vulnerability (Win32 clients only)
          See CVE-2007-3846, and descriptive advisory at
          https://subversion.apache.org/security/CVE-2007-3846-advisory.txt


Version 1.4.4
(30 May 2007, from /branches/1.4.x)
http://svn.apache.org/repos/asf/subversion/tags/1.4.4

 User-visible changes:
  - Client:
    * fixed: 'svn up' of replaced file without history fails (issue #2618)
    * fixed: 'svn export' succeeds on non-existent URL (r23191, -3, -5, -200)
    * fixed: 'svn diff' fails writing large hunks to Win console (issue #1789)
    * fixed: 'svn merge' shows 'G' notifications for unchanged files (r24483)
    * fixed: svnsync cannot sync unreadable modified dir copies (issue #2705)
    * fixed: ra_dav litters empty transactions if initial setup fails (r23594)
    * fixed: inconsistent expansion of revision number keywords (issue #1743)

  - Server:
    * fixed: rare dirprop dataloss leading to BDB repo corruption (issue #2751)
    * fixed: race condition when changing FSFS revprops (r23439, r23440)
    * fixed: 'svnadmin load' invents svn:date if none exists (issue #2729)
    * fixed: svnserve can't commit locked file if root unwritable (issue #2700)
    * fixed: 'svnadmin dump' output invalid for non-ASCII paths (issue #2641)
    * fixed: security flaw in 'svn prop*' commands [CVE-2007-2448] 
          (r25095, -099, -104, -105, -10)

  - Client and Server:
    * fixed: hang during character translation (r23491, r23492)
    * translation updates for Simplified Chinese, Japanese, and Norwegian

 Developer-visible changes:
 * new "make svnserveautocheck" testing target (r23558)
 * fixed: ra_serf fails checkout if access to repos root is forbidden (r23846)
 * fixed: svn_client_cat2() doesn't accept WORKING as a revision (r23556)
 * javahl bindings:
     - fixed: potential segfault in initialisation (r23383)
     - fixed: SVNClientSynchronized.logMessages() isn't synchronised (r23978)
     - fixed: SVNClient.info2() misreports itself as unlock in errors (r24219)
 * SWIG/perl bindings:
     - fixed: ra_do_{update,switch,status} don't work with Perl delta editors
           (r20667, r22311)
 * SWIG/python bindings:
     - fixed: memory leak whenever C APIs returned errors (r23521)
 * SWIG/ruby bindings:
     - fixed: typos in method Svn::Wc#merge_prop_diffs and docs (r23405, -6)


Version 1.4.3
(18 January 2007, from /branches/1.4.x)
http://svn.apache.org/repos/asf/subversion/tags/1.4.3

 User-visible changes:
  - Client:
    * fixed: crash using automatic auth protocols with Neon 0.26 (r22440, -61)
    * fixed: svn_load_dirs.pl cannot import file names containing '@' (r22203)
    * fixed: error when committing replaced directories (r22991, -8)
    * fixed: inability to change file perms due to existing file perms (r23018)
    * include newest version of svn-graph.pl (r22969)

  - Server:
    * fixed: incorrectly reporting authz circular dependencies (issue #2684)
    * fixed: potential filesystem memory leak in commit finalisation (r22729)

  - Client and Server:
    * fixed: crash in character translation, particularly on Windows (r22417)
    * fixed: potential string corruption when resizing string buffers (r22689)
    * translation updates for Korean, Spanish, Italian, Simplified Chinese,
          and Japanese (fixing issues #2649 and #2681)

 Developer-visible changes:
 * support Neon 0.26.2 (issue #2666)
 * update (experimental) ra_serf repository access module for DAV (r22872)
 * Windows installer improvements (r21516, r22155, r22224)
 * fixed: svn_{ra,repos}_replay() doesn't send checksums (r22346, -51, -52)
 * fixed: error when calling svn_repos_replay2() with a txn root (r22609)
 * fixed: Solaris packaging script broken (issue #2669)
 * javahl bindings:
     - fixed: auth cache is created in the current directory (r22780)
     - fixed: SVNAdmin's setLog() method always fails (r22387)
     - fixed: target dependency order in generated build scripts (r22209)
 * SWIG/perl bindings:
     - fixed: memory leak when calling methods on a Perl commit editor (r22332)


Version 1.4.2
(2 November 2006, from /branches/1.4.x)
http://svn.apache.org/repos/asf/subversion/tags/1.4.2

 User-visible changes:
  - Client:
    * new "notes/svnsync.txt" file explains common svnsync usage
    * install a manpage for svnsync (r21403)
    * install/package svnsync on Windows (r21387, r21424)
    * translation updates for all languages
    * dramatically speed up commit of wc-to-wc copy (r21471)
    * fixed: support 'svn co URL@{DATE}' (issue #2602)
    * fixed: cannot access repositories with spaces via svn:// (issue #2612)
    * fixed: passing full URL in some DAV requests, breaking proxies (r21526)
    * fixed: history-tracing can fail for renamed directories (issue #2600)
    * fixed: crash if interrupted while opening a working copy (r21792)
    * fixed: 'svn merge' should notify about conflicted files (issue #2584)
    * fixed: 'svn revert' should notify about prop-only reverts (issue #2517)
    * fixed: 'svn status -u' not showing props changed on wc root (issue #2533)
    * fixed: 'svn status -u' fails in a read-only working copy (r21904, -19)
    * fixed: 'svn up' failing with checksum mismatch error (issue #2618)
    * fixed: 'svnsync sync' copying missing implicit revprops (issue #2613)
    * fixed: svnsync unable to synchronise copies of URL-unsafe paths (r22092)
    * svnshell tool: support "setrev head" (r20992)
    * include newest version of svnmerge.py

  - Server:
    * FSFS: improve detection of disk write errors (r21346)
    * FSFS: prevent API violation from corrupting repository (issue #2467)
    * improved error checking when running hook scripts, etc (r21483)
    * mailer.py: new commit_url option links to web page for a commit (r21333)

 Developer-visible changes:
 * support Neon 0.26.0 and 0.26.1 (r21289, r21293, r21956)
 * support current CVS versions of libtool (post-1.5.22) (r22120)
 * now compiles on architectures without APR_HAS_DSO (e.g. RISC OS) (r21473)
 * fixed: build error on FreeBSD due to missing svnsync manpage (r21403)
 * RHEL3 RPM package requires correct version of Apache httpd (r21974)
 * numerous improvements to coverage of the test suite
 * javahl bindings:
     - compile Java bytecode for Java 1.2 VM (r21765, -7, r21814)
     - fixed: crash if using 1.4.x bindings with older libraries (r21316, -429)
     - fixed: crash when empty destination path passed to checkout (r21770)
 * SWIG/ruby bindings:
     - fixed: accept nil for Svn::Repos#load_fs's parent_dir argument (r21793)
 * SWIG/python bindings:
     - fixed: crash when using an apr_hash_t typemap (issue #2606)
     - fixed: in tests, use URLs that work on Windows (r21392)
 * SWIG/perl bindings:
     - fixed: ra_replay works with Perl delta editors (r20666)


Version 1.4.1
(Not released, see changes for 1.4.2.)


Version 1.4.0
(10 September 2006, from /branches/1.4.x)
http://svn.apache.org/repos/asf/subversion/tags/1.4.0

 User-visible changes:
  - Client:
    * new 'svnsync' commandline tool for repository replication
    * numerous working copy improvements (WARNING! upgrades to new format!):
      - improved performance when detecting modified files (r18628 -56)
      - new property storage is faster and uses less disk space (r17583)
      - internal wcprops take up less space (r19433 -37)
      - large file commit speedups (r17861 -73 18867 -918 -29 -44 -45 -48 -49)
      - reduce memory usage for large working copies (r19183 -538)
      - increased working copy stability with merge, copy and move:
            (fixes issues #845, #1516, #1553, #2135, #2144, #2148)
    * new switches added:
      - 'svn blame --force' (issue #2509)
      - 'svn diff/merge -c/--change' (r17054 -6 -68 18568 -741)
      - 'svn diff --summarize' (issue #2015)
      - 'svn merge/blame -x' (r18716 -20) (r18602 -857)
    * 'svn log' now supports peg revisions (issue #2287)
    * 'svn export' now creates intermediate directories if needed (r20030)
    * use switch/relocate when svn:externals updated (issue #2209)
    * internal diff can ignore whitespace and eol style changes (issue #2121)
    * conflict markers now match the file's eol style (issue #1325)
    * new svn2cl, svn-viewdiff and svn-resolve contrib scripts
    * numerous improvements to svnmerge.py, vc-svn and psvn
    * translation updates for all languages
    * Mac OS X: store cached passwords encrypted in Keychain (r17619 -43)
    * fixed: 'svn ls' slow over ra_dav (issue #2151)
    * fixed: 'svn import' not handling eol-style correctly (issue #2433)
    * fixed: 'svn blame' should default operative rev range to peg rev (r18400)
    * fixed: 'svn blame' ignores eol-style (issue #2431)
    * fixed: 'svn checkout' should default operative rev to peg rev (r18422)
    * fixed: 'svn diff' supports all eol styles (r17624 -8 -61 18195 -392)
    * fixed: 'svn diff' multi-target memory leak (r17518)
    * fixed: 'svn merge' showing wrong status with external diff3 (issue #1914)
    * fixed: 'svn merge' not merging added dir into deleted dir (issue #2515)
    * fixed: 'svn rm' of non-existent item should fail (issue #2440)
    * fixed: 'svn status' should skip unversioned files (issue #2030)
    * fixed: 'svn status' shows added and conflicted files as added (r20382)
    * fixed: 'svn switch --relocate' may set wrong repos root (r17031)
    * fixed: 'svn switch --relocate' memory leak (r19535)
    * fixed: 'svn switch --relocate' not caching passwords (issue #2360)
    * fixed: 'svn info' not showing locks sometimes (r19777)
    * fixed: incorrect merge of add of binary file already in WC (issue #2403)
    * fixed: possible dataloss if editing immediately after merge (r20609 -12)
    * fixed: lots of diff wc<->repos bugs
    * fixed: unfriendly error message on propget on nonexistent path (r19399)
    * fixed: spurious revert report after manual conflict removal (issue #2517)
    * fixed: don't allow -rPREV on schedule add path (issue #2315)
    * fixed: keywords with dollar signs cause badness (issue #1780)
    * fixed: really revert file with locally modified keywords (issue #1663)
    * fixed: deleting schedule add file leaves working props file (issue #2419)
    * fixed: svn:needs-lock and read-only-ness not always in sync (issue #2306)
    * fixed: post-commit error output not sent to the client (issue #443)
    * fixed: not locked error on commit of switched path (issue #2353)
    * fixed: svn_apply_autoprops.py should trim whitespace from props (r20790)
    * fixed: show locking notifications in local path style (r20927)
    * fixed: encoding error on error messages from invalid options (r20883)

  - Server:
    * support for new 'svnsync' repository mirroring utility
    * support for BDB 4.4, including automatic recovery (issue #2449)
    * new contrib hook scripts:
      - enforcer
      - detect-merge-conflict.sh
      - case-insensitive.py
    * new tools script svn-backup-dumps.py
    * new tools hook script log-police.py
    * svnserve improvements:
      - can now run as a native Windows service (r18855)
      - new option --pid-file (r17836)
      - allow the password database to be read-only (r16840)
    * mod_dav_svn improvements:
      - fixed: error conversion crash (r19516)
      - fixed: unfriendly error when locking already locked path (issue #2275)
      - fixed: xml escaping bugs (r19760 -85 -86)
    * authorization improvements:
      - new mod_dontdothat apache module (r19531)
      - new mod_authz_svn directive AuthzSVNNoAuthWhenAnonymousAllowed (r18680)
      - error out when authz rules contain unexpected characters (r19471)
    * support .wsf hook scripts on Windows (r18972, 19076)
    * lots of improvements to mailer.py and commit-email.pl
    * FSFS back-end performance improvements (r17125 19119 -456 -58 -59)
    * fixed: 'svnadmin verify' output not in native encoding (issue #1997)
    * fixed: uuid file in FSFS could be destroyed on write error (issue #2193)
    * fixed: FSFS path encoding bug (r17774)
    * fixed: don't crash on corrupt repositories (r17625)
    * fixed: expect error output from hook scripts in native encoding (r17101)
    * fixed: catch errors starting hook scripts (r16891 17041 -81)
    * fixed: svnserve and authz can cause broken WCs (issue #2566)
    * fixed: the default hook script templates should be vanilla sh (r20796)

  - Both:
    * delta compression improvements:
       - new delta encoding reduces size (r18363 -94 -66 -78 -98 -99 -457 -950)
       - xdelta algorithm speed improvements (r18986, 19047)
    * don't bail on invalid locale (r19445)
    * improve speed of non-verbose svn ls (r17067 -71)
    * fixed: delta combiner reading past EOF (r17743)

 Developer-visible changes:
 * require APR >= 0.9.7 to improve error detection for FSFS repos (r19915)
 * require zlib, for svndiff1 delta encoding (r18363)
 * support SWIG 1.3.29 (r19968)
 * support autoconf 2.60-dev (r19919 20632 -36)
 * removed no-longer-supported Red Hat 7.x RPMs (r20462)
 * add support for building RPMs for x86-64 architecture (r20548 -552)
 * numerous improvements to gen-make.py build system, especially on win32
 * removed Visual Studio.NET APR 0.9 project files (r20170)
 * numerous improvements to the test suite
 * new public APIs:
     - keyword / eol translation helpers and generic streams (see svn_subst.h)
     - new generic stream helpers (see svn_io.h)
     - authn providers made available to other clients (see svn_auth.h)
     - svn_cmdline_setup_auth_baton
     - svn_dso_initialize, svn_dso_load
     - svn_client_diff_summarize and svn_client_diff_summarize_peg
     - svn_client_list
     - svn_config_has_section
     - svn_txdelta_compose_windows and svn_txdelta_apply_instructions
     - svn_txdelta_stream_create
     - svn_diff_file_options_create and svn_diff_file_options_parse
     - svn_err_best_message
     - svn_compat_wrap_commit_callback
     - svn_uuid_generate
     - svn_user_get_name and svn_user_get_homedir
     - svn_io_get_dir_filenames
     - svn_ra_reparent
     - svn_ra_replay
     - svn_wc_revision_status
     - several rev'd APIs, see doxygen docs
 * flush stdout after each status/notification line (r19476 -656)
 * new (experimental) ra_serf repository access module for pipelined DAV
 * .svn/entries use a less verbose non-xml format (r19420)
 * make recursive 'svn ls' streamy (issue #1809)
 * remove svn-config script
 * empty-file and README.txt removed from WC admin areas (r17181 -268 -364)
 * replace cmdline client XML DTDs with RNG schemas (r16379 -80 -93 -571 17248)
 * fixed: log --limit against old svnserve leaves unusable session (r19638)
 * fixed: Solaris build problems (r19636)
 * fixed: blame of WORKING revision shouldn't give BASE (r19558)
 * fixed: svn_client_copy and _move should fail if target exists (issue #2188)
 * fixed: svn_io_file_rename and readonlyness on Windows and UNIX (r17366 -69)
 * fixed: ra_dav memory leak when reusing session (issue #2247)
 * fixed: console character encoding problems when built with VS2005 (r20108)
 * fixed: various problems with --enable-dso and global pools (r20996, r20999)
 * fixed: installer file syntax error in new versions of Inno Setup (r21022)
 * SWIG bindings:
     - SWIG/python bindings:
       - new support for svn_client_info (r19413)
     - SWIG/ruby bindings:
       - full support for Subversion 1.4 APIs, including :
         svn_ra_replay and svn_diff_summarize
       - numerous bug fixes
       - add ruby documentation (make install-swig-rb-doc) (r20166)
       - add APIs for adding a provider (r21079)
     - SWIG/perl bindings:
       - new support for svn_client_info (r18758)
       - minor corrections to SVN::Fs (r19312)
 * javahl bindings:
     - APIs to get version info for the native libraries  (r17604 -07)
     - API for path validation (r18989, r19079)
     - C++/Java code refactoring, cleanup, and consolidation
     - fixed: handle possible errors from date/time conversions (r17213)
     - fixed: SVNClient username/password JVM crash on null input (r19803 -13)
     - fixed: specify default UUID load action (r18030)
     - fixed: compile error on Visual Studio 2005 (r18054)


Version 1.3.2
(23 May 2006, from /branches/1.3.x)
http://svn.apache.org/repos/asf/subversion/tags/1.3.2

 User-visible changes:
  - Client:
    * fixed: 'svn st -u' crash on missing subdirs (r19348, -71, issue #2551)
    * fixed: leaving stray working copy locks on cancellation (r18893)
    * fixed: svn_load_dirs.pl trying to import .svn and _svn dirs (r18549)
    * svn_load_dirs.pl symlink support (issue #2478)
    * translation updates to Japanese, Traditional Chinese.

  - Server:
    * fixed: mod_dav_svn memory leak when listing large dirs (r19528)
    * fixed: mod_dav_svn crash on valid request (r19520)
    * fixed: svnserve protocol error in lock, causing client hang (issue #2548)
    * mailer.py: add Content-Transfer-Encoding header (r19319)
    * mailer.py: fixed: named substitutions incorrectly ignored (r18114, -681)
    * fixed: authz requires read access for root for writes (issue #2486)
    * svnauthz-validate: add config file validation tool (r18504, -09)

 Developer-visible changes:
 * fixed: tests don't catch repository creation failure properly (r19149,-51)
 * support SWIG 1.3.28
 * support APR 0.9.x >= 0.9.10 (r19039, -57, -60)
 * python bindings:
     - fixed: link error on OpenBSD (r18983)
 * ruby bindings:
     - fixed: memory leak (r19493)
     - fixed: NULL argument conversion bug (r19543)


Version 1.3.1
(25 March 2006, from /branches/1.3.x)
http://svn.apache.org/repos/asf/subversion/tags/1.3.1

 User-visible changes:
  - Client:
    * fixed: segfault moving unversioned files (issue #2436)
    * fixed: verbose list broken over ra_dav (issue #2442)
    * fixed: 'svn ci -m path_name' not requiring '--force-log' (r17956)
    * fixed: crash on mixed-case https URL scheme (r18042)
    * fixed: crash in status with ignored directories (r18291)
    * fixed: strip peg rev from default checkout directory (r18416)
    * fixed: diff crash with non-recursive checkout (r17231, 18539, -41)
    * fixed: 'svn ls' URL encoding bug with locks (r18665, -68)
    * fixed: unlock circumvents lock token check (r18691, -94)
    * fixed: repos-to-repos copy crash (r18451)
    * fixed: 'svnmerge' utility improvements (r18811)
    * translation updates for German, Swedish and Norwegian

  - Server:
    * fixed: set svn:date at the end of commit in fsfs (r18078)
    * fixed: don't wait for hook script background jobs (r18146)
    * fixed: mod_dav_svn should log the whole error chain (r18211)
    * fixed: uncomment section headers in repos config files (r18247, -50)
    * fixed: log scalability issues with many paths (r18395, -404)
    * fixed: better path input validation in mod_dav_svn (r18660)
    * fixed: assert in copy in fsfs and bdb (issue #2398)
    * fixed: RPM package bad interaction with NFS servers (issue #1456)

  - Both:
    * fixed: copyright years updated to include 2006 (r18021, -127)

 Developer-visible changes:
 * fixed: missing #include (r18065)
 * fixed: allow building with Neon 0.25.5 (r18215)
 * fixed: error leaks (18196, -249)
 * javahl bindings:
     - fixed: compile error on Visual Studio 2005 (r18054, -55)
 * python bindings:
     - fixed: libsvn_swig_py link problem on Solaris 10 (r17910)
     - fixed: pool lifetime bug (r17992)
     - fixed: memory leak (r18230)
     - fixed: race condition during application pool initialization (r18721)
     - fixed: Make pool parameters optional (issue #2444)
 * ruby bindings:
     - fixed: pool management issue (r17795, -811)
     - fixed: protect baton from garbage collection (r17627)
     - fixed: conversion bug (r17726, -925)
     - fixed: compile errors with SWIG 1.3.24 (r18456, -58)


Version 1.3.0
(30 December 2005, from /branches/1.3.x)
http://svn.apache.org/repos/asf/subversion/tags/1.3.0

 User-visible changes:
  - Client:
    * 'svn ls -v' now shows remote locks (issue #2291)
    * 'svn status' speedup (r15061, r15103)
    * 'svn blame' speedup on files with long history (issue #1970)
    * 'svnversion' now assumes default argument of '.' (r14892)
    * support for neon 0.25.x, which fixes http:// control-c bug (issue #2297)
    * support for more ISO-8601 date formats, compatible with GNU date (r14428)
    * support for single-digit date components (r15459)
    * on Windows, '_svn' admin dir now toggled by runtime env. variable (r16244)
    * working copy size with empty propfiles reduced (r16855, see releasenotes)
    * new switches added:
       - 'svn blame --xml [--incremental]' (r14690)
       - 'svn status --xml [--incremental]'  (issue #2069)
       - 'svn info --xml [--incremental]'
       - 'svn add/import --no-ignore'  (issue #2105)
       - 'svnlook tree --full-paths'  (r13976)
       - 'svnlook diff --diff-copy-from'  (r14855)
       - 'svnlook changed --copy-info' (r16681)
    * fixed: 'svn copy wc URL' might include deleted items (issue #2153)
    * fixed: 'svn copy wc wc' allows cross-repository copies (issue #2404)
    * fixed: 'svn up/merge' major property-merging bugs (issue #2035)
    * fixed: 'svn merge' insisting on write access to '.' (issue #2411)
    * fixed: 'svn merge' cross-device move problems (r16293, -329, -330)
    * fixed: 'svn diff' outputs headers in wrong encoding (issue #1533)
    * fixed: 'svn proplist/add/cat' dies on unversioned items (issue #2030)
    * fixed: 'svn add' not honoring svn:ignore property (issue #2243)
    * fixed: 'svn log -rN:M --limit X' error over http:// (issue #2396)
    * fixed: 'svn switch --relocate' failure on 'deleted' dir (r16673)
    * fixed: 'svn info' not always showing repos lock (issue #2276)
    * fixed: 'svn info' might show lock on wrong path (r16626)
    * fixed: 'svnlook' chokes on logs with inconsistent newlines (r14573)
    * fixed: 'svnlook propget --revprop -t' failure (r15203)
    * fixed: 'svnversion' wrongly traverses into externals (r15161)
    * fixed: incorrect URI encoding passed to svn+ssh:// (issue #2406)
    * fixed: properly handle filenames containing '@' (issue #2317)
    * fixed: '--non-interactive' now suppresses launch of $EDITOR (r15277)
    * fixed: conflict markers not in current encoding (r14621)
    * fixed: commands ignoring extraneous -m or -F switches (issue #2285)
    * fixed: poor error-checking when using revprops (r15542)
    * fixed: stack-smashing bugs (r15948, r16037)
    * fixed: incorrect parsing of mod_dav_svn XML responses (r17589)
    * translation updates for all languages

  - Server:
    * svnserve improvements:
       - can now restrict read/write access by path (see releasenotes)
       - undeprecation of the --read-only (-R) option (r17614)
    * mod_dav_svn improvements:
       - 'SVNListParentPath on' shows all repositories in web browser (r16158)
       - ability to log high-level client operations (see releasenotes)
       - sets svn:mime-type on autoversioning commits (r14359)
    * 'svn log' performance improvement (r14722)
    * fixed: fs history algorithm might return wrong objects (issue #1970)
    * fixed: repos deadlock when hooks output too much (issue #2078)
    * fixed: mod_dav_svn displays errors with sensitive paths (r14792)
    * fixed: anonymous reader could create empty commits (issue #2388)
    * fixed: possible segfault to callers of trace_node_locations() (r16188)
    * fixed: BDB-style locking actions on FSFS repositories (r16295, r16297)
    * fixed: numerous bugs running BDB commands on FSFS (issue #2361, r16388)
    * fixed: svndumpfilter incorrectly remapping dropped revs (issue #1911)

  - Both:
    * faster multiple (un)locks in a single svn:// request (issue #2264)
    * the Subversion Book is no longer bundled (r17466)

 Developer-visible changes:
 * reorganization of automated tests, including ability to run on ramdisk
 * lots of Doxygen/API documentation cleanup
 * numerous improvements to gen-make.py build system, especially on win32
 * working copy is now storing repos_root as separate field (issue #960)
 * keywords are now stored in an internal hash (issue #890)
 * client status APIs now makes more server-side info available (r16344)
 * new public APIs:  
     - new transfer progress callback for DAV (r15948)
     - svn_ra_initialize(), svn_client_open_ra_session()
     - svn_fs_closest_copy(), svn_fs_type()
     - several rev'd APIs, see doxygen docs
 * SWIG bindings: No more compile-time or runtime SWIG dependencies
     - SWIG/python bindings:
        - automatic memory management: APIs no longer require pool arguments!
        - improved stability, as shown by our new testsuite
        - better error messages
     - SWIG/ruby bindings:
        - complete API coverage!
        - automatic memory management
        - greatly expanded test suite
     - SWIG/perl bindings:
        - new accessors for svn_lock_t, svn_fs_access_t
        - a number of bugfixes
 * javahl bindings:
     - add streamy API for fetching file contents (r15584) 
     - fixed: let tests run before bindings are installed (issue #2040)
     - fixed: lock command not raising errors properly (issue #2394)
     - fixed: ignored errors from svn_client_blame2() (r16434)


Version 1.2.3
(19 August 2005, from /branches/1.2.x)
http://svn.apache.org/repos/asf/subversion/tags/1.2.3

 User-visible changes:
  - Client:
    * fixed: 'svn status -u' fails against pre-1.2 mod_dav_svn (r15359, r15423)
    * fixed: 'svn export' segfault (r15516)
    * fixed: 'svn merge' memory leak (r15233)
    * fixed: horrible rename-tracing performance against 1.0 servers (r15315)
    * fixed: 'svn cat' over file:// -- small leak  (r15253)
    * fixed: crash with "svn lock" and authentication (r15703)
    * improvements to 'svnmerge' utility (r14008,-458,-587,-632, r15329,-340)
    * translation updates for French, German, Polish, Norwegian, Swedish,
      Korean

  - Server:
    * fixed: mod_authz_svn being overly restrictive (r15463)
    * fixed: fsfs directory caching bug (r15705, r15742)

  - Both:
    * fixed: crash when >50 options passed to any commandline app (r15251)
    * fixed: memory leak in character translation handle caching (r15379,-398)

 Developer-visible changes:
 * fixed: crash when calling svn_client_(un)lock with no targets (r15734)
 * rhel-4 RPM bugfix for python bindings (r15616)
 * missing #include in SWIG bindings (r15683)
 * javahl bindings:
     - fixed: JNI library loading bug (r15552)
     - fixed: JNI stack-name cut and paste error (r15337)
     - fixed: crash when revisions have no dates (r15737)
 * perl bindings:
     - now compatible with SWIG 1.3.25 (r15248)
     - allow SVN::Pool to be used as pool parameter (r15450)
     - make SVN::Delta::Editor friendlier for debugging (r15609)
     - fixed: wrap svn_ra_stat properly (r15713)
     - fixed: bug in SVN::Core::Stream's read function (r15698, r15700)
 * ruby bindings:
     - now compatible with SWIG 1.3.25 (r14980, r15361)


Version 1.2.2
(Not released, see changes for 1.2.3.)


Version 1.2.1
(5 July 2005, from /branches/1.2.x)
http://svn.apache.org/repos/asf/subversion/tags/1.2.1

 User-visible changes:
  - Client:
    * fixed: 'svn lock' on switched file locks wrong thing (issue #2307)
    * fixed: 'svn (un)lock' errors on multiple targets (r14736, 14775)
    * fixed: 'svn (un)lock' problems with URI-unsafe names (issue #2314)
    * fixed: 'svn (un)lock' not caching authentication (r15088)
    * fixed: 'svn unlock' loses executable bit (r14859, r14923, r14939)
    * fixed: 'svn unlock URL' segfault (r14893)
    * fixed: 'svn commit' failure on XML-unsafe locked paths (issue #2335)
    * fixed: recursive directory copy bug (issue #2343)
    * fixed: don't initialize RA library in 'svnversion' (r14755)
    * fixed: svn-push segfault (r14732)
    * various translation updates for localized client messages

  - Server:
    * fixed: 'svn log' performance regression, general (r14116, 14772, 14759)
    * fixed: 'svn log -v' performance regression, FSFS-specific (r15016)
    * fixed: mod_dav_svn bug sets content-type incorrectly (r15046)

 Developer-visible changes:
 * fixed: win32 innosetup's add/repair/remove features (r14830)
 * fixed: OBOE with 'limit' parameter of svn_repos_get_logs3(). (r15119)
 * redhat RPM fixes (r15050)
 * perl bindings:
     - accessors for svn_lock_t (r15082)
     - call utf_initialize, adjust global pool usage (r15076, r15080,
                                                      r15081, r15117)


Version 1.2.0
(21 May 2005, from /branches/1.2.x)
http://svn.apache.org/repos/asf/subversion/tags/1.2.0

See the 1.2 release notes for a more verbose overview of the changes since
the 1.1 release:  https://subversion.apache.org/docs/release-notes/1.2.html

 User-visible changes:
  - Client:
    * add peg-rev syntax to co/blame/cat/ls/pget/plist/export (issue #1093)
    * 'svn info' now works on URLs (r13123, 13144)
    * 'svn* --version' now shows available repository back-ends (r13761)
    * new fixed-length keywords (for placement in binary files) (issue #2095)
    * on Windows, disk-cached passwords are now encrypted (r13888)
    * performance improvements:
       - 'svn status' does much less disk parsing (r11677, 11704)
       - 'svn st -u' no longer asks server to generate textdeltas (issue #2259)
       - 'svn revert -R' doing much less work (r13883)
       - utf8<->native conversions are faster now (issue #2016)
    * new switches added:
       - 'svn commit --no-unlock           - retain lock in wc upon commit
       - 'svn log --limit N'               - show only first N log messages
       - 'svn info --revision'             - show info on older object (r13265)
       - 'svn list --xml'                  - output listing in XML
       - 'svn propset --force'             - allow unusual propsets (#2065)
       - 'svn diff --force'                - show diffs on binary files (#2099)
       - 'svn co/up/st --ignore-externals' - skip over externals (#2189)
       - 'svn export --non-recursive'      - don't export subdirs (issue #2228)
       - 'svnversion --help'               - show help (r13128)
    * fixed: 'svn merge' fails to add symlinks or expand keywords (issue #2064)
    * fixed: 'svn merge --dry-run' shows spurious 'skip' messages (issue #1943)
    * fixed: 'svn merge' file-not-found' error (issue #1673)
    * fixed: 'svn merge' of propchanges into deleted file (issue #2132)
    * fixed: 'svn merge' on implicit target with space (r13010)
    * fixed: 'svn merge/diff URL URL' can cause httpd timeout (issue #2048)
    * fixed: 'svn switch/update' failure might corrupt wc (issue #1825)
    * fixed: 'svn up' should rm before add, helps case-insensitivity (r12616)
    * fixed: 'svn up -rX' causes file to be unrestorable (issue #2250)
    * fixed: 'svn copy wc wc' should keep .svn/ hidden (issue #1739)
    * fixed: 'svn copy wc wc' of deleted=true doesn't delete (issue #2101)
    * fixed: 'svn copy' shouldn't copy into schedule-delete area (issue #2020)
    * fixed: 'svn copy dir dir' infinite recursion (issue #2224)
    * fixed: 'svn log' throws error on unversioned target (issue #1551)
    * fixed: 'svn log' in r0 working copy shows r1 log msg (issue #1950) 
    * fixed: 'svn export' bugs on deleted dirs or nonexistents (#2226, r13226) 
    * fixed: 'svn export' on single file from working copy (issue #1708)
    * fixed: 'svn import' creating an empty revision (r14293)
    * fixed: 'svn commit' ignores --encoding when editing externally (#2244)
    * fixed: 'svn commit' log message lost if utf8-conversion failure (r13230)
    * fixed: 'svn diff' output encoding bug (r11461)
    * fixed: 'svn diff' showing prop-diffs on repos root dir (r13381-2)
    * fixed: 'svn diff' label reversal (issue #2033)
    * fixed: 'svn propget' prints extra newline in --strict mode (r14505)
    * fixed: 'svn propset' should skip unversioned files (#2030)
    * fixed: 'svn rm URL1 URL2 URL3...' huge memory usage (issue #2218)
    * fixed: 'svn mkdir' cleanup after failure (r11883)
    * fixed: 'svn status -u' crash in non-recursive wc's (issue #2122)
    * fixed: 'svn revert' should skip unversioned items (issues #2030, 2133)
    * fixed: 'svn revert' should suggest --recursive (issue #2114)
    * fixed: 'svn add/import' better detects invalid paths (issue #1954)
    * fixed: 'svn cleanup' should repair timestamps (r12012)
    * fixed: 'svn cat -rBASE' contacts repository (issue #1361)
    * fixed: fuzzily escape control-characters when sending over dav (#2147)
    * fixed: prevent client from manipulating svn:wc:* properties (r12523)
    * fixed: allow portnumber in svn+ssh://user@host:port/ URLs (r14373)
    * fixed: xml-escaping bugs over dav (r11090)
    * fixed: store symlinks as utf8, always work in non-utf8 locale (r11358-9)
    * fixed: bug in special-file detranslation (r11441)
    * fixed: show paths in local-style where we weren't (issue #1538)
    * fixed: detect invalid propnames better (issue #1832)
    * fixed: entire error stack not being printed (issue #1822)
    * fixed: improper utf8 conversion of revision strings (issue #1999)
    * fixed: use-commit-times timestamp bug (r12906)
    * fixed: don't comment out section-names in default config file (r11771)
    * more support for user-cancellation (r13083-4, 13086)
    * improved error messages (r12920, 11392, 11599, 11913, #2154, #2214)

   - Server:
    * mod_dav_svn autoversioning feature now complete (see release notes)
    * 'svnadmin create' now creates FSFS repositories by default (r13624)
    * new pre/post-revprop hook argument to describe propchange (r12162)
    * mod_authz_svn groups can now contain other groups (issue #2085)
    * 'svnadmin recover' now creates default svnserve passwd file (r11589)
    * increase default BDB cache size in DB_CONFIG (r13030)
    * new switches added:
       - 'svnlook diff --no-diff-added'        - suppress added files (#2180)
       - 'svnlook propget/proplist --revprop'  - show revision props (#2181)
       - 'svnadmin load --use-pre-commit-hook'  
         'svnadmin load --use-post-commit-hook'- invoke hooks when loading
    * fixed: FSFS race condition on posix platforms (issue #2265)
    * fixed: change FSFS revprops atomically and safely (issue #2193)
    * fixed: FSFS should verify checksums (issue #2253)
    * fixed: FSFS crash bug (r14333)
    * fixed: 'svnadmin create' should clean up when it fails (r13200)
    * fixed: 'svnadmin load' compatibility on pre-0.14 dumpfiles (r12075)
    * fixed: 'svnadmin load' crashes on contentful rev 0 (issue #1674)
    * fixed: 'svnadmin dump' should write in console encoding (issue #1997)
    * fixed: check for null-streams in dump/load code (r10510)
    * fixed: hook script ignored when symlink is broken (issue #1700)
    * fixed: hook script may inherit server's stdin stream (r12155)
    * fixed: potential svnserve segfault (r13199)
    * fixed: svnserve handling mutually-exclusive options (issue #2251)
    * fixed: mod_authz_svn should log errors to httpd errorlog (issue #2182)
    * fixed: 'svnadmin hotcopy' failed to copy format files (r14678, r14683)
    * mailer.py: add win32 compatibility, plus other bugfixes

   - Both:
    * new 'locking' feature (issue #1478, see release notes for details):
        - new: 'svn lock/unlock', 'svnadmin lslocks/rmlocks', 'svnlook lock'
        - new: 'svn:needs-lock' property to enable communication         
        - 'svn st [-u]' shows local or remote lock overview
        - 'svn info wc | URL'  shows local or remote lock details
        - 'svn commit' sends locks, 'svn up' removes stale locks
        - new hook scripts: pre-lock, pre-unlock, post-lock, post-unlock
    * speedups for 'svn blame' and other commands (see xdelta in release notes)
    * fixed: make both svnserve and svn:// urls work with IPv6 (r13235-6)
    * fixed: updating xml-unsafe dirname over http (issue #2268)
    * new translation of localized messages: French
    * continued improvement of localized message translations:
        - German, Spanish, Polish, Brazilian Portuguese, Norwegian Bokmål,
          Swedish, Traditional Chinese, Simplified Chinese, Korean, Japanese
        - more localized messages in all svn-related binaries

 Developer-visible changes:
 * binary diff algorithm now defaults to xdelta instead of vdelta
 * huge number of new APIs:
     - new locking APIs in svn_client.h, svn_ra.h, svn_repos.h, svn_fs.h
     - new 'flattened' svn_ra.h API, which imitates svn_fs.h  (issue #1931)
     - new notification API in svn_client.h, svn_wc.h
     - http://svn.haxx.se/dev/archive-2005-04/0319.shtml has all API changes
 * fs now has its own 'format' file, independent of repos 'format' (r13387)
 * improve efficiency of delta combining algorithm (r13016, r13063)
 * make all BDB apis take explicit pool parameters (r13198, r13205)
 * remove libsvn_fs_base caching of node revisions (r13299)
 * libsvn_repos commit editor can now take incoming txn (r13733)
 * fixed: mod_dav_svn sending illegal editor-drive (issue #2258)
 * pool usage improvements (r12954, 12852, r13386, issue #1310)
 * SWIG bindings:  better API coverage overall.
     - new ruby bindings!
     - remove bitrotting swig-java bindings
     - perl and python bindings:  numerous improvements, see their own logs.
     - bindings tests now within svntest framework
 * javahl bindings:   numerous improvements, see its own logs.
 * many improvements to mailer.py and commit-email.pl
 * rewrite/improvements to gen-make build system, including VS.NET support
 * many improvements to the automated python testsuite (issue #2257)
 * book moved to separate repository (http://svn.red-bean.com/svnbook)


Version 1.1.4
(1 April 2005, from /branches/1.1.x)
http://svn.apache.org/repos/asf/subversion/tags/1.1.4

 User-visible changes:
  - Client:
    * fixed: win32 not ignoring versioned symlinks (issue #2173)
    * fixed: 'svn merge' can cause broken working copy (issue #2222)
    * fixed: 'svn commit' fails when schedule-delete dir has local mod (r11980)
    * fixed: 'svn st -u nonexistent_file' segfault (issue #2127)
    * fixed: 'svn cp wc wc' utf8 conversion error (r13111)
    * fixed: confusing error message about "wc not locked" (issue #2174)
    * many translation updates for localized client messages

  - Server:
    * fixed: nasty (though unusual) performance bug in FSFS commits (r13222-3)
    * fixed: FSFS memory leak when auto-merging large tree (r13193)
    * fixed: FSFS memory leak in 'svnadmin hotcopy' (r13218, 13465, 13468)
    * fixed: FSFS segfault when encountering empty data reps (r13683)
    * fixed: two dataloss bugs in svndumpfilter (r12630, r12636)
    * fixed: wasteful memory usage in svndumpfilter (r12637, r12640)
    * fixed: mod_dav_svn segfaults when client sends bogus paths (issue #2199)
    * make mailer.py work on win32 (r12499, r12542, r12670)

  - Both:
    * fixed: (win32) retry file operation if sharing violation (r12983, r12986)

 Developer-visible changes:
 * add SWIG 1.3.24 and .25 compatibility (r12551, r12717-9, r12722, r13504)
 * fixed: JavaHL run-time link error (r12576), path/url cleanups (r13090)
 * fixed: python bindings log_receiver failure with SWIG 1.3.24 (r13487)
 * build system tweaks: add install dependencies for fs & fs_base (r11050)


Version 1.1.3
(14 January 2005, from /branches/1.1.x)
http://svn.apache.org/repos/asf/subversion/tags/1.1.3

 User-visible changes:
  - Client:
    * translation updates for localized client messages.
    
 Developer-visible changes:
 * Fix a compile error in the Perl bindings.

 
Version 1.1.2
(20 December 2004, from /branches/1.1.x)
http://svn.apache.org/repos/asf/subversion/tags/1.1.2

 User-visible changes:
  - Client:
    * fixed: 'svn switch' interruption can break working copy (issue #1826)
    * fixed: 'svn switch' memleak over ra_dav (issue #2106)
    * fixed: 'svn blame' algorithm bug (r11527)
    * fixed: invoke external diff/diff3 with local-style paths (r11689)
    * fixed: 'svn status' handling of missing subdirs (r11936)
    * fixed: 'svn ls -v' encoding bug (r11740)
    * fixed: 'svn ls "file with space"' bug (r12273, r12393)
    * fixed: 'svn merge' should URI-encode copyfrom URLs (issue #1905)
    * fixed: 'svn merge' deletion output formatting (r12100, r12111, r12114)
    * fixed: 'svnversion --version .' crash (r11438)
    * fixed: UNC paths on Cygwin (issue #2108)
    * fixed: win98 iconv bug -- uninitialized variable (issue #2091)
    * improved 'svn status' performance:
        - do fewer check_path calls (r11592)
        - 'svn status file' shouldn't recursively lock tree (r11439, r11669)
    * translation updates for localized client messages.

  - Server:
    * fixed: 'svnadmin load' race condition (r12327)
    * fixed: fsfs memleak in commit finalization (r11706)
    * fixed: fsfs memleak in inefficient directory removal (r11701)
    * fixed: fsfs commits use insert-only perms on db/revs/ (r11665)        
    * fixed: fsfs creates lockfile at creation time, not at 1st commit (r12172)
    * fixed: svndumpfilter mislabeling output as version 3 (issue #2142)
    * fixed: 'svnserve -h' encoding bug (part of issue #1997)
    * fixed: prevent cross-repository copies (r12003)
    * fixed: increase log-region max size in default DB_CONFIG (issue #2159)

  - Both:
    * fixed: 'svn switch' quietly corrupting working copy (issue #2124)
    * fixed: canonicalize paths sent by ra_svn/svnserve (issue #2119)
    * fixed: memleak into UTF8 translation routines (r11689)

 Developer-visible changes:
 * add support for BerkeleyDB 4.3 (if using a compatible apr-util)
 * add support for any apr/apr-util 1.X
 * disallow incompatible SWIG versions (r12450)
 * fixed: slight API/ABI incompatibility between 1.0.9 and 1.1.x (r12102)
 * fixed: perl bindings pool usage & object refcounts (r11451, r11630)
 * fixed: perl bindings pool usage and potential memleak (r12397)
 * fixed: javahl crash trying to fetch nonexistent property (r12184)
 * fixed: javahl build can fail due to missing dirs (issue #2032)
 * fixed: RPM build breakage (issue #2111)
 * fixed: i18n issues for windows installer (r11685)
 * allow build system to update single .po file (r11763)
 

Version 1.1.1
(22 October 2004, from /branches/1.1.x)
http://svn.apache.org/repos/asf/subversion/tags/1.1.1

 User-visible changes:
  - Client:
    * fixed: 'svn status' win32 performance regression (issue #2016)
    * fixed: 'svn ls' dying on non-ascii paths over DAV (issue #2060)
    * fixed: allow URI-encoded colon or pipe on win32 (issue #2012)
    * fixed: broken win32 UNC paths (issue #2011)
    * fixed: memory bloat when committing many files over DAV (r11284, -321)
    * fixed: eol-style translation error for 'svn propget' (r11202, -243)
    * fixed: 'svn propedit' does EOL conversion properly (issue #2063)
    * fixed: 'svn log --xml' shouldn't be locale-dependent. (r11181)
    * fixed: 'svn export' of symlinks with 'use-commit-times' (r11224)
    * fixed: 'svn export -rBASE' when WC has added items (r11296, -415)
    * many translation updates for localized client messages.

  - Server:
    * fixed: 'svn ls' HTTP performance regression (r11211, -232, -285)
    * fixed: make it possible to set "SVNPathAuthz off" in httpd.conf (r11190)
    * fixed: fsfs validating revisions when accessing revprops (issue #2076)
    * fixed: 'svn log -v' hiding too much info on 'empty' revisions. (r11137)
    * fixed: encoding bug with 'svnlook log'/'svnlook author' (r11172)
    * fixed: allow mod_authz_svn to return '403 Forbidden', not 500 (r11064)
    * fixed: XML-escape author and date strings before sending (issue #2071)
    * fixed: invalid XML being sent over DAV (issue #2090)

 Developer-visible changes:
 * fixed: IRIX compile error (issue #2082)
 * fixed: error in perl bindings (r11290)
 * fixed: error leaks in mod_dav_svn (r11458)
 * fixed: javahl should use default config directory (r11394)


Version 1.0.9
(13 October 2004, from /branches/1.0.9)
http://svn.apache.org/repos/asf/subversion/tags/1.0.9

 User-visible changes:
  - Server:
    * fixed: 'svn ls' HTTP performance regression (r11211, -232, -285)
    * fixed: 'svn log -v' hiding too much info on 'empty' revisions. (r11137)

 Developer-visible changes:
 * fixed: make redhat 7/8 rpm scripts build the book correctly (11143)


Version 1.1.0
(29 September 2004, from /branches/1.1.x)
http://svn.apache.org/repos/asf/subversion/tags/1.1.0

See the 1.1 release notes for a more verbose overview of the changes since
1.0.x: https://subversion.apache.org/docs/release-notes/1.1.html

 User-visible changes:
 * new non-database repository back-end (libsvn_fs_fs)
 * symlinks can now be placed under version control (unix systems only)
 * cmdline client now supports psuedo-IRIs and autoescapes chars (issue #1910)
 * 'svnadmin recover' no longer waits forever for a lock (new '--wait' option)
 * new $Revision$ synonym for $Rev$ and $LastChangedRevision$
 * new runtime option 'store-passwords = ' gives finer control (r10794)x
 * fixed: working copies now shareable by multiple users (issue #1509)
 * fixed: diff and other subcommands correctly follow renames (issue #1093)
     - new 'peg' syntax for diff/merge:  'svn diff -r X:Y TARGET@REV'
     - now able to compare working copy with URL: 'svn diff --old WC --new URL'
 * new framework for localized error/info/help messages, initial translations:
     - German, Polish, Swedish, Norwegian Bokmål, Traditional Chinese,
       Japanese, Brazilian Portuguese.
 * speed improvements:
     - faster 'svn up' on complex working copies -- no more repos txns (r8840)
     - faster 'svn status' -- fewer stat() calls (r9182)
     - faster 'svn checkout' -- fewer sleep() calls (r9123)
     - faster 'svn blame' -- new RA->get_file_revs() func (issue #1715)
 * new switches added:
     - 'svn blame --verbose'            - show extra annotation info
     - 'svn export --native-eol TYPE'   - export using TYPE line-endings
     - 'svn add --force'                - recurse into version-controlled dirs
     - 'svnadmin dump --deltas'         - include binary diffs in dumpfile
     - 'svnadmin create --fs-type fsfs' - create fs_fs repos (default is bdb)
     - 'svnserve --tunnel-user=NAME'    - assume authenticated NAME over tunnel
     - 'svndumpfilter [cmd] --quiet'    - less chatty dumpfiltering
     - 'svnserve --version'             - show program's version
       'svnversion --version'
       'svndumpfilter --version'
 * svnadmin dump/deltify now understand -r{DATE} (r9805)
 * allow update of non-existent target entry (partial issue #1902 fix)
 * 'svnadmin create' now sets sgid bit on repos/db/  (unix systems only)
 * increase default neon (ra_dav) timeout from 120 to 3600 seconds (r9568)
 * print verbose BDB error messages (r10557, r10566)
 * fixed: don't bail when 'svn up' refuses to delete local mods (issue #1806)
 * fixed: process svn:externals in defined order (issue #1788)
 * fixed: pass new propval to stdin of pre-revprop-change hook (issue #952)
 * fixed: svndumpfilter logic/memory/display bugs (r8691, 8831, 9061)
 * fixed: 'svnadmin hotcopy PATH .' (r8659)
 * fixed: copy crash bug (r8863)
 * fixed: 'svn st -u' crash bug (r10841)
 * fixed: 'svn commit' segfault (r10676)
 * fixed: allow cleanup on .svn/ dirs containing KILLME file (r8891)
 * fixed: 'svn revert' detects corrupted text-base (r8897)
 * fixed: 'svn status -N' no longer locks entire tree (r8906)
 * fixed: several different 'svn switch' bugs (r9192, 9203, 9238, 9698)
 * fixed: some 'svn copy' bugs (r9193, 9274)
 * fixed: obscure update-deletion bug (r8976)
 * fixed: utf8 conversion 'hang' (r9233)
 * fixed: missing UTF8->native recoding in 'svn log' output (r10652, 10673)
 * fixed: 'svn blame' now defaults to  rev (r9440)
 * fixed: 'svn blame' closing files before deleting them (issue #1969)
 * fixed: 'svn diff' shows truncated paths (r9693)
 * fixed: 'svn diff --notice-ancestry' bug (r9699)
 * fixed: 'svn subcommand -r{DATE} URL' works if URL not in HEAD (issue #1840) 
 * fixed: 'svn blame' on non-ascii path truncation (issue #1770)
 * fixed: svn:external 'wc not locked' bug (issue #1897)
 * fixed: proper mod_dav_svn html/xml escaping (issue #1209)
 * fixed: memleak in 'svn propset -R URL' (issue #1928)
 * fixed: stop 'svn up' from deleting schedule-add target dir (issue #1793)
 * fixed: 'svn merge' adding a directory already 'deleted' (issue #1769)
 * fixed: excessive memory use when fs deltifies revision 2^N (r10070)
 * fixed: disallow non-recursive directory commit (issue #1797)
 * fixed: allow propget of props with colon in name (issue #1807)
 * fixed: 'svnadmin load' computation of copyfrom-rev (issue #1795)
 * fixed: runtime config files created with proper line-endings (issue #1803)
 * fixed: make svnserve's authn work on usernames with spaces (r10385)
 * fixed: have svnserve use repos UUID as default authn realm (r10394)
 * fixed: segfault when history-following hits 'empty' revision (r10368)
 * fixed: overzealous out-of-dateness checks in 'svn cp wc URL' (issue 1994)
 * fixed: don't URI-encode path in mod_dav_svn XML listings (r10461)
 * fixed: 'svn info' should refuse URL targets (r10760)
 * fixed: incomplete-directory handling bug (r10956)
 * fixed: allow cancellation between files during recursive dir add (r10894)
 * general improvement and normalization of error messages
 * many improvements to contributed tools:  mailer.py, psvn.el, etc.

 Developer-visible changes:
 * libsvn_fs now loads either bdb (libsvn_fs_base) or fsfs (libsvn_fs_fs)
 * new console-printing API:  svn_cmdline_printf() family checks for errors.
 * new library-version querying API:
     - new svn_[libname]_version() in each library
     - svn_ver_*() family of functions
 * 2nd generation APIs, from svn_foo() --> svn_foo2().  old APIs deprecated.
     - svn_wc_adm_open2() & friends, svn_wc_export2(), svn_client_add2()
       svn_wc_parse_externals_description2(), svn_hash_read/write2(),
       svn_repos_dump/load_fs2() & friends, svn_wc_diff2(),
       svn_subst_copy_and_translate2()
 * other new APIs:
     - svn_stream_copy(), svn_txdelta_target_push(), svn_opt_parse_path(),
       svn_io_file_flush_to_disk, svn_repos_trace_node_locations(),
       svn_repos_get_file_revs(), RA->get_locations(), RA->get_file_revs,
       RA->get_version(), svn_sort_compare_paths(), svn_utf_initialize()
 * SVN_REVNUM_FMT_T usage replaced with %ld (r9691)
 * cache mod_authz_svn authz file per connection (r8867)
 * validate hex digits in % escape (issue #1947)
 * hashes now written to disk in sorted order (r9910)
 * do cancellation checks before loops, not after (r8918)
 * fixed: bug in svn_repos_dir_delta replacement logic (r8078)
 * fixed: tiny memory access bugs (r8229, 8230, 8313)
 * fixed: several commit buglets (r8955, 9658, 9757, 9855)
 * fixed: don't recursively lock all prop commands (r9172)
 * fixed: svnserve memory usage on many-file commits (r9185)
 * fixed: close svnserve child's listen-socket after forking (r10050)
 * fixed: 'svnadmin hotcopy' integrity improvements (issues #1817, #1818)
 * fixed: only verify media type of svn:mime-type, not encoding (r10126)
 * fixed: handle '//'  and '..' in svn_path_canonicalize (issue #1779)
 * fixed: double URI escaping (issue #1814)
 * fixed: editor-driver bug (don't delete before every copy) (r10851)
 * fixed: potential mod_dav_svn crashes/memleaks (r10478)
 * fixed: better 'svnadmin verify  verification (r10508, r10509)
 * fixed: encoding of get_repos_url_result (r10353, 10375)
 * fixed: prevent canonicalized URIs from ending in '/' (r10317)
 * stop using -std=c89 gcc flag (r11054)
 * sync with apr 1.0's find_apr.m4 and find_apu.m4 files (r10560)
 * win32 installer improvements (r10978)
 * huge improvements to python, perl, java bindings
 * huge changes to win32 build system


Version 1.0.8
(22 September 2004, from /branches/1.0.8)
http://svn.apache.org/repos/asf/subversion/tags/1.0.8

 User-visible changes:
 * fixed: mod_authz_svn path and log-message metadata leaks.
          See CAN-2004-0749, and descriptive advisory at 
          https://subversion.apache.org/security/CAN-2004-0749-advisory.txt


Version 1.0.7
(17 September 2004, from /branches/1.0.x)
http://svn.apache.org/repos/asf/subversion/tags/1.0.7

 User-visible changes:
 * fixed: win32 'file not found' error [issue #1862]
 * fixed: 'svn st -u' crash (r10841)
 * fixed: potential repos corruption; ensure stdin/out/err always open (r10819)
 * fixed: allow propnames containing ":" to be fetched via http:// (r10190)
 * fixed: allow user to interrupt between authentication prompts (see r11014)
 * fixed: work around +t directory-creation bug in APR (r10616, 10638, 10642)
 * various small fixes to Book

 Developer-visible changes:
 * fix library dependencies for bindings (r9338, 9340)
 * java bindings: fix a crash and other bugs (r9883, 9905, 8027)
 * perl bindings: various fixes (see r11023)


Version 1.0.6
(19 July 2004, from /branches/1.0.x)
http://svn.apache.org/repos/asf/subversion/tags/1.0.6

 User-visible changes:
 * fixed: crash in status command, caused by race (r10144)
 * fixed: crashes when deleting a revision-prop (r10148, r10185, r10192)
 * fixed: mod_authz_svn allows COPY method on repos with space in name (#1837)
 * fixed: mod_authz_svn COPY security hole:  authorize whole tree (issue #1949)
 
 Developer-visible changes:
 * neon 0.24.7 now required (fixes wire compression bugs) (r10159, 10176)


Version 1.0.5
(10 Jun 2004, from /branches/1.0.5)
http://svn.apache.org/repos/asf/subversion/tags/1.0.5

 User-visible changes:
 * fixed: security bug in svn protocol string parsing. (CAN-2004-0413)


Version 1.0.4
(21 May 2004, from /branches/1.0.x)
http://svn.apache.org/repos/asf/subversion/tags/1.0.4

 User-visible changes:
 * fixed: 'svn up' can delete unversioned data on win32 fs (issue #1854)
 * fixed: pool leaks in 'svnlook diff/changed/dirs-changed'
 * fixed: insecure script example in pre-commit-hook template
 * fixed: inability to do a checkout to '/'
 * officially recommend neon 0.24.6 in all docs.

 Developer-visible changes:
 * fixed: RPM build for Fedora & WBEL3/RHEL3
 * fixed: SWIG-java building problem
 * fixed: javahl bug which can crash JVM
 * fixed: change formatting codes in svn_swig_pl_callback_thunk
 * fixed: properly wrap svn_txdelta_parse_svndiff for perl


Version 1.0.3
(19 May 2004, from /branches/1.0.3)
http://svn.apache.org/repos/asf/subversion/tags/1.0.3

 User-visible changes:
 * fixed: security bug in date parsing. (CAN-2004-0397)


Version 1.0.2
(15 April 2004, from /branches/1.0.x)
http://svn.apache.org/repos/asf/subversion/tags/1.0.2

 User-visible changes:
 * fixed: segfault when remotely deleting svn:author property.
 * fixed: mod_dav_svn accepting too many authors. (issue #1786)
 * fixed: create runtime config files with native EOLs. (Issue #1802)
 * fixed: recursive propset can corrupt .svn/entries (issue #1794)
 * fixed: allow shared working copies [mostly working now] (issue #1509)
 * fixed: mod_authz_svn should ignore uri on MERGE request (partial #1821)
 * fixed: svnserve assertion failure on empty error messages
 * fixed: commit/update memory leaks when working on many targets (issue #1635)
 * fixed: don't display repos-paths or URLs with '\' on win32.
 * new example script:  svnserve 'sgid' wrapper.
 * minor book fixes, new 'best-practices' doc.

 Developer-visible changes:
 * fixed: deprecation warning from SWIG 1.3.20_
 * fixed: broken win32 python-swig bindings compilation.
 * fixed: bug in libsvn_fs changes-table change-folding code.
 * fixed: perl bindings: wrap root->paths_changed, apply_txdelta return values
 * added VC7 support and defines for including debug symbol files.


Version 1.0.1
(12 March 2004, from /branches/1.0.x)
http://svn.apache.org/repos/asf/subversion/tags/1.0.1

 User-visible changes:
 * allow anonymous access checking in mod_authz_svn
 * fixed: mod_authz_svn now works with SVNParentPath (issue #1588)
 * fixed: potential segfault in mod_dav_svn. 
 * fixed: improper BDB cursor shutdown in libsvn_fs, which can wedge repos.
 * fixed: allow checkout of repository with space in path. (issue #1694)
 * fixed: make 'svn propget URL' work correctly over svn://. (issue #1752)
 * fixed: failed 'svn merge URL' when URL contains user@host. (issue #1759)
 * fixed: invalid REPORT response when updating a deleted wc. (issue #1721)
 * fixed: allow deletes below copied wc dirs.
 * fixed: merge --dry-run bug on added-files with props. (issue #1738)
 * fixed: svnlook no longer requires write access to '.'
 * fixed: ensure 'svn blame' fails on files marked as binary. (issue #1733)
 * fixed: make failed direct-URL commits clean up their fs txns. (issue #1726)
 * fixed: obscure bugs in time/date string formatting. (issue #1692)
 * fixed: svn export doesn't export svn:externals. (issue #1750)
 * fixed: svn import doesn't handle EOL or keyword translation. (issue #1756)
 * fixed: svn status -v shows unwanted status of externals (issue #1741)
 * fixed: allow revert of schedule-replace file that has no props (issue #1775)
 * fixed: svnserve segfault on invalid --listen-host argument.
 * fixed: switch bug which caused wrong URL to be left in wc.
 * detect invalid UTF8 filenames when native locale is UTF8.
 * improve presentation of directory property conflicts.
 * improve presentation of errors from svnadmin & svnlook.
 * clarify output of 'svnadmin help deltify'.
 * augment copyright notice to --version output.
 * more book updates.

 Developer-visible changes:
 * remove obsolete auth provider examples.
 * prevent potential ra_dav commit race-condition.
 * fix svn_io_dir_walk 'dot-first' ordering required by 'svnadmin hotcopy'.
 * fix error leaks in dav_svn_convert_err()
 * upgrade win32 innosettup tools and redhat RPMs.
 * fix compile warning:  compressed streams on LP64 architecture.
 * use cpio to generate tarballs instead of GNU tar.
 * tweaks to dist.sh.
 * fix bindings on win32.
 * fix perl bindings build on OS X.
 * fix perl bindings:  bug which rejects string revnums.


Version 1.0.0
(branching 23 February 2004, from /branches/1.0.x)
http://svn.apache.org/repos/asf/subversion/tags/1.0.0

 User-visible changes:
 * fixes to the shbang lines in tools/hook-scripts/.
 * vast improvements to cvs2svn.py  (NOTE: now a separate project!)
 * general documentation cleanup:
     - clarify built-in help text for 'svn switch' and 'svn status'.
     - fix docs within the hook templates.
     - cleanups to README, INSTALL, HACKING, svn-ref.tex, bash_completion.
     - bring www/ pages up-to-date for 1.0.
     - many changes to the Book

 Developer-visible changes:
 * updates to the win32 installer packaging code.
 * cleanups to SWIG bindings:  
     - disable svn_io_* functions.
     - svn_filesize_t and apr_time_t fixes.
     - remove debugging print statements and various warnings.
     - make svn_repos_dir_delta() function correctly
     - add support for repos authz callback.


Version 0.37.0 [Beta Interim 2]
(branching 24 January 2004, from /branches/1.0-stabilization)
http://svn.apache.org/repos/asf/subversion/tags/0.37.0

 User-visible changes:
 * bugfix: buffer overflow for AIX client
 * 'svn merge' now notices ancestry by default. (r8390)
 * bugfix:  double Ctrl-C on windows no longer wedges repository.
 * New date formats (see API change: Rewrite of date parser below)
 * bugfix: Errors in authentication when --no-interactive is turned on (r8139)
 * bugfix: Fix some 'access denied' errors on Windows (r8341, r8352)

 Developer-visible changes:
 * API change: Rewrite of date parser (r8327, r8328, r8329) (issue #408)
 * bugfix: svn_fs__bdb_changes_fetch() fouls up change ordering (issue #1695)
 * require SWIG >=1.3.19 (issue #1690)
 * numerous changes to language bindings, to keep up with C API.
 * fix: apr build issues (r8279, r8280, r8318) (issue #1666)
 * changed the auth-provider C API to use 'realmstring' on all funcs
 * check the ra plugin ABI versions.
 * fix: ABI problem with blame.  (r8494) (issue #1705)
 * remove svn_io_file_printf from public API. (r8492) (issue #1653)
 * extensive changes in the perl client bindings. (r8270)
 * too many big and small internal code cleanups and fixes to mention here



Version 0.36.0 [Beta Interim 1]
(branching 13 January 2004, from /branches/1.0-stabilization)
http://svn.apache.org/repos/asf/subversion/tags/0.36.0

 User-visible changes:
 * add cancellation support to svnadmin and svnlook (r8222)
 * runtime 'store-password' option renamed to 'store-auth-creds' (r8014)
 * 'svn blame' changes:
    - now shows correct revision info (r8035-6)
    - responds to cancellation better (r8129)
 * svnserve changes:
    - added '--inetd' option;  now required to speak with stdin/stdout (r8205)
    - added '--listen-port' and '--listen-host' options  (r8001-2)
    - removed '-u' option (r8003)
    - ignore SIGPIPE (no more repos lockups when you terminate a pipe) (r8140)
 * lots of Book work (many newly-documented Apache and svnserve topics)

 Developer-visible changes:
 * bugfix: svnserve network crash (r8142)
 * bugfix: return result_rev from svn_client_checkout correctly (r8096)
 * bugfix: fs history harvesting code (r8154)
 * bugfix: memory leak in mod_dav_svn (r8223)
 * bugfixes in edge-cases of status and update (r8114-5)
 * make 'svn blame' work with 18n and uri-escaped filenames (r8023, 8030, 8040)
 * small bugfixes to authentication system (r8006, r8235)
 * standardize error message formatting (r8218)
 * load RA modules as foo.so.0, not foo.so  (r8098)
 * various core API changes:
    - use constructor for svn_client_cxt_t (r8053-4)
    - anchor/target may use NULL for target (r8216)
    - stop using apr_ symbols (r8219)
    - rename to 'svn_repos_authz_func_t' (r8213)
    - add pool parameter to finish_report and abort_report (r8215)
 * numerous changes to Perl and Java bindings, to keep up with C API.



Version 0.35.1 [Beta] (branching 19 December 2003, from /tags/0.35.0)
http://svn.apache.org/repos/asf/subversion/tags/0.35.1

                              NOTICES:

       This release is to correct for the problems in the 0.35.0
       release and affects Windows users only:

       * fix: file handle leak (r8048)
       * fix: UTF-8 path problem (issue #1660)


Version 0.35.0 (branching 12 December 2003, from revision 7994)
http://svn.apache.org/repos/asf/subversion/branches/0.35.0

                              NOTICES:

    1. As of this release, Subversion once again does deltification
       automatically.  This means that the deltification step most
       repositories introduced into their post-commit hooks as of
       release 0.33.0 should now be reverted.  Look for a line with
       "svnadmin deltify" in hooks/post-commit, and remove it.

    2. We now recommend using Berkeley DB 4.2.52 or higher for SVN
       repositories.  See http://sleepycat.com/download/index.shtml.

 User-visible changes:
 * BDB log files are automatically pruned, with BDB 4.2.50 and higher (#1615)
 * deltification is automatic again (issue #1601)
 * fix: svn diff -rX:Y wcpath' may lie (issue #1616)
 * fix: URI-decoding problem on 'svn import' (issue #1622)
 * many other enhancements, minor features, and bugfixes not listed here


 Developer-visible changes:
 * misc. improvements on Perl and Java bindings
 * improved diff handling (r7985)
 * many other changes not listed here


 Merged revisions after release branching:
 * r8009, r8010 and r8011 - Java bindings
 * r8041 - typo/bugfix


Version 0.34.0 (released 3 December 2003, from revision r7859)
http://svn.apache.org/repos/asf/subversion/tags/0.34.0

#####################################################################
##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##
#####################################################################
##                                                                 ##
## This release makes  an incompatible  change  to  the Subversion ##
## database.    Repositories created with versions  of  Subversion ##
## prior to 0.34 will not work with Subversion 0.34.               ##  
## To  upgrade,   first  use  'svnadmin dump'  with  your existing ##
## Subversion binaries.   Then upgrade your binaries to 0.34,  and ##
## use  'svnadmin load'  to  create  a  new  repository  from your ##
## dumpfile.                                                       ##
## Don't  forget  to  copy any custom configuration/hooks from the ##
## old to the new repository.                                      ##
##                                                                 ##
#####################################################################

 Please see notes/repos_upgrade_HOWTO for documentation on migrating
 pre-0.34.0 repos to 0.34.0.

 That document is also located here:
    http://svn.apache.org/repos/asf/subversion/trunk/notes/repos_upgrade_HOWTO

 User-visible changes:
 * fs schema change (#1578, #1595) **NOTE: repos dump/load cycle required!**
 * Berkeley DB 4.2.50 is now the recommended Berkeley version
 * Fix: 'svn status' thought replaced items were unversioned (#1609)
 * SSL server cert error prompt improvement (r7849)
 * many error message improvements (r7745, r7763, r7824 and 7827 - #897)
 * don't show update-completion message until all wc work completes (#1556)
 * many other enhancements, minor features, and bugfixes not listed here

 Developer-visible changes:
 * public client APIs changes (r7799) after fixing #1556
 * many improvements and fixes on Perl bindings (perl => 5.8.0 are required)
 * improvements, fixes on misc. test scripts
 * many other changes not listed here

 Merged revisions after release branching:
 * r7868 - Java bindings
 * r7888 - Security fix for svnserve


Version 0.33.1 (released 17 November 2003, revision r7782)
http://svn.apache.org/repos/asf/subversion/tags/0.33.1

    NOTICE: This is a bugfix release.  The bug is fixed if *either*
            the client or server uses the new code.

User-visible changes:
* major performance fix for updates


Version 0.33.0 (released 13 November 2003, revision r7737)
http://svn.apache.org/repos/asf/subversion/tags/0.33.0

                              NOTICES:

    1. This client may be incompatible with ra_dav servers <= 0.31.

    2. In order to make commits more responsive, repository
       deltification is no longer automatic.  However, you may want
       to run deltification as a background process in your repository
       post-commit hook.  For example, the new post-commit.tmpl file
       recommends 'nice -2 svnadmin deltify "$REPOS" -r "$REV" &'.

 User-visible changes:
 * now require APR/APU 0.9.5 (ships in Apache 2.0.48)
 * lose automatic deltification, but recommend it in post-commit (r7695, #1573)
 * new configuration and authn/authz support in ra_svn (r7604, r7601)
 * much faster checkouts and updates, over both svn:// and http:// (#1429)
 * new partial-authz feature: checkouts/updates just skip unauthorized items
 * new 'use-commit-times = yes' config option to use commit-time timestamps
 * new 'svnadmin hotcopy' command, like hot-backup.py (#1567)
 * fix Win32 "access denied" error in renames (r7598, #1576)
 * unnecessary working copy tree locks now avoided, to save time (#1245)
 * Compatibility changes:
    - lose ra_dav compatibility with servers 0.31 and earlier
    - lose support for working copy format "1" (not created for over a year)
 * 'svn diff' and other read-only actions now work in read-only working copies
 * 'svn blame -rX' now does the intuitive thing
 * 'svn log' output headers now say "rXXXX | " instead of "rev XXXX:  "
 * 'svnversion' no longer stymied by svn:externals
 * new 'svn pd' alias for 'svn propdel'
 * '-rCOMMITTED' keyword now works on more commands
 * minor changes to output of 'svn ls -v' and 'svn st -v' (r7530)
 * 'svn log --xml' now obeys the '-q' flag (r7555)
 * cvs2svn.py bugfixes, especially issue #1440
 * book and documentation updates
 * removed server config options ssl-ignore-invalid-date and
   ssl-override-cert-hostname (r7644)
 * many other enhancements, minor features, and bugfixes not listed here

 Developer-visible changes:
 * repair text- and prop-time in .svn/entries if spuriously wrong (r7565)
 * speed up keyword translation (r7502)
 * two new editor functions, absent_file() and absent_directory()
 * ra_dav checkouts/updates no longer do O(n) number of GET, PROPFIND requests
 * new svn_io_temp_dir function, will morph to apr_temp_dir_get soon
 * new svn_io_file_close wrapper for apr_file_close
 * tools/test-scripts/svntest/ scripts now support ra_dav and ramdisk
 * many other changes not listed here


Version 0.32.1 (released 23 October 2003, revision 7497)
http://svn.apache.org/repos/asf/subversion/tags/0.32.1

 NOTICE: This release is to correct for the problems in the 0.32.0
         release.  There are no user or developer changes in this release
	 other than the subversion/include/svn_version.h now reflects
	 the correct version number.

 NOTICE: This release of Subversion causes an ra_dav client/server
         compatibility break with Subversions older than 0.28.0.

Version 0.32.0 (released 22 October 2003, revision 7480)
http://svn.apache.org/repos/asf/subversion/tags/0.32.0

 NOTICE: This release of Subversion causes an ra_dav client/server
         compatibility break with Subversions older than 0.28.0.

 User-visible changes:
 * new 'svn blame' subcommand. (r7389, 7438, #508)
 * fix huge ra_dav 'svn import' memory leak. (r7381)
 * other bugfixes: proper line endings in diff headers (r7450, #1533),
   stop auto-props from removing all whitespace (r7358), 'svn st' UI
   consistency fix (r7364), various 'svn switch' fixes (r7366),
   mini-manpages for svnadmin, svnserve, svnversion (r7421), remove
   'P' field from 'svn ls -v' (r7432), 'svn merge' double-notification
   bug (r7447), prevent 'svn:externals' infinite loop (r7459), 'svn
   merge' segfault (r7458).

 Developer-visible changes:
 * 'svn diff' is now reasonably streamy. (r7393, 7439, #1481)
 * fix many ra_dav pool abuses. (r7370-3, 7380, 7368, 7400, ...)
 * fix mini leaks:  clear unused svn_error_t's. (r7378-9, 7405, 7408, 7429)
 * tons of code, doc, API cleanup. (from julianfoad!)
 * new RA->get_repos_root() API. (r7428)
 * swig/python, swig/perl and native JNI updates and improvements.
 * more work on build depenedency generator. (r7412-8)
 * svn_repos_finish_report() now aborts txns on error. (r7424)
 * remove crufty old ra_dav compatibility code (r7466, 7468)
 * other changes: new SVN_DEBUG_ERROR tool macro, new 'davautocheck'
   and 'contrib' makefile targets, new --enable-gprof configure option
   (r7437), new scramble-tree.py testing tool, auth provider
   reorganization, make RA->get_dir fetch props correctly over ra_dav
   (r7431), notice permission error when creating unique tmpfile (r7434).


Version 0.31.0 (released 08 October 2003, revision 7355)
http://svn.apache.org/repos/asf/subversion/tags/0.31.0

 User-visible changes:
 * new 'svnlook history' command (and removal of 'svnadmin lscr').
 * new 'auto-props' feature can set file properties during 'svn add/import'
 * win32 client now properly converts UTF8 to console-locale. (r7168, #872)
 * 'svn up' now notices when svn:externals value changes. (r7256, #1519)
 * authentication changes:
     - client caches auth-creds in memory for a single session (r7292, #1526)
     - SSL cert caches keyed on host+port, not any SSL connection. (r7174)
 * faster 'svn log' (see new fs-history algorithm) (#1499)
 * faster repos read-operations (caching gives ~20% speedup) (rXXXX, #1499)
 * faster updates (fewer entries-file writes gives ~20% speedup) (r7170, #1490)
 * more work on psvn.el and svn_load_dirs.pl
 * more cvs2svn bugfixes
 * obsolete manpages truncated to point to 'help' and book URLs. (r7340, #1508)
 * other bugfixes:  no more revision keywords "FIRST" or "CHANGED" (r7250),
   fix 'svn cp URL URL' $EDITOR msg generation (r7264), fix regression
   bug in 'svnadmin load' (r7273), 'svnadmin setlog' now triggers
   repository hooks (r7322), 'svn cp -rHEAD wc' now works correctly (r7331),
   post-commit-hook failures correctly ignored by client (r7342, #906)

 Developer-visible changes:
 * tons of filesystem improvements (#1499):
     - new fast fs-history algorithm: allows stable VR urls (r7283, #1499)
     - new dag-node caching (r7163)
     - skip-deltas now run in individual trails (r7138)
     - no-op svn_fs_copy()s don't write to the database (r7158)
 * mod_dav_svn MERGE response is faster (using svn_repos_replay()) (r7191)
 * ensure consistent wc 'dead entry' cleanup (r7197, r7204, #1075)
 * lots of work on gen_win.py, gen_make.py, gen_base.py tools
 * lots of work on making SWIG-java bindings build.
 * updates/improvements to javahl bindings and SWIG-perl bindings
 * updates/improvements to Mandrake RPM builds
 * other bugfixes:  python testsuite now uses local path separators (r7224),
   svn:externals no longer keeps connections open (r7312, #1448),
   UTF8-to-local date conversion (r7316, #1534), API consistification 
   changes (r7298, r7302, r7304, r7307).


Version 0.30.0 (released 24 Sep 2003, revision 7178)
http://svn.apache.org/repos/asf/subversion/tags/0.30.0

 User-visible changes:
 * SSL changes:  (r7134, #1330)
      - client now prompts to cache server certificates       
      - no more 'ssl-ignore-unknown-ca' option
      - 'ssl-ignore-host-mismatch' is renamed to 'ssl-override-cert-hostname'
      - new 'ssl-trust-default-ca' option to trust 'default' openssl CAs
 * 'svn log' no longer dies on unversioned args (r6989, #777)
 * local mods now obstruct 'svn up' deletions (r7050, #1196)
 * 'svnserve' now notices (unauthenticated) --username arg (r7060)
 * no more 'svnadmin createtxn' subcommand. (r7062)
 * 'svn ls -v' shows years when appropriate
 * document some new things in Book (r7014), plus minor technical fixes
 * website changes:  new sidebar, new 'svn links' page, new tigris.org!!
 * other bugfixes:  hooks use proper stdout handles on win32 (r7001),
   prevent copies of copies in wc (r7077, #1259), display failed
   revprop change over ra_dav (r7081, #1520), 'svn st -u' throws RA
   error properly (r7094, #1506)

 Developer-visible changes:
 * ra_dav now requires neon-0.24.X
 * many gen_make.py/gen-base.py improvements, especially for win32 builds
 * many improvements to swig/perl bindings
 * improvements to contrib/:  psvn.el, and new svn-push program.
 * more cvs2svn bugfixes:  issue #1504, #1421, #1514, and new --username arg.
 * python testsuite only raises exceptions, never status codes. (#1192)
 * various libsvn_fs re-org (prepwork) for issue #1499.
 * other bugfixes: code-complete timestamp feature (r6983, #1445), add
   op-counting features to trails (r6984, #655), fs UUID caching
   (r7037), almost finish win32 iconv issues (#872), restored-file
   entry-timestamp bugfix (r7090, #1523), always print CWD as '.' (r7097)


Version 0.29.0 (released 05 Sep 2003, revision 6976)
http://svn.apache.org/repos/asf/subversion/tags/0.29.0

 User-visible changes:
 * 'svn status' now streams its response.  (r6913, #1426)
 * 'svn status' now recurses into externals (r6913, #1428)
 * new 'svnadmin verify' command to verify repository data (r6851, #1074)
 * SSL changes:  (r6958, #1371)
     - dropped support for PEM-encoded client certs, only accept PKCS12 now.
     - 'ssl-authority-files' is now a list of CA files
     - no more 'ssl-client-cert-type' and 'ssl-client-key-file' variables.
 * new svndumpfilter option: '--preserve-revprops' to keep props on empty revs
 * mailer.py improvement:  handle multiple match groups (r6940)
 * remove in-repos/on-disk repository template features, till post-1.0 (r6965)
 * various cleanups to the Book
 * other bugfixes: switch deletion bug (r6890, #1496), status
   repos-delete bug (r6913, #1469), reversion of '.' (r6953, #854).

 Developer-visible changes:
 * GUI developers take note: prompting API changed (r6928, #1214)
 * now compile against neon-0.24; 0.23.9 support to be dropped soon. (r6958)
 * various improvements to Perl/SWIG bindings
 * tree re-org:  non-core utilities split into 'tools' and 'contrib' areas.
 * some gen_make.py/gen-base.py improvements
 * configure.in CFLAGS bugfix (r6963)
 * stop calling deprecated APIs in APR, in preparation for upcoming APR-1.0.


Version 0.28.2 (released 29 Aug 2003, revision 6946)
http://svn.apache.org/repos/asf/subversion/tags/0.28.2

 User-visible changes:
 * MAJOR BUGFIX:  revert revision 6764.

      The new history-searching code was over-stressing our use
      of BerkeleyDB transactions, causing checkouts to go
      twice as slow and lose all concurrent-client scalability.

      This is a temporary fix for a larger design problem.  See issue
      https://issues.apache.org/jira/browse/SVN-1499


Version 0.28.1
(released 28 Aug 2003,http://svn.apache.org/repos/asf/subversion/tags/0.28.1)

  There are no changes in this release.
  It is strictly an updated release, build with the correct version
  of autoconf; autconf-2.57


Version 0.28.0 (released 27 August 2003, rev 6894, branches/release-0.28)
(http://svn.apache.org/repos/asf/subversion/tags/0.28)

#####################################################################
##  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  WARNING  ##
#####################################################################
##                                                                 ##
##  This release makes an incompatible change to the Subversion    ##
##  repository filesystem schema.  Repositories created with       ##
##  Subversion code prior to this release will unable to operate   ##
##  with this new code.  To maintain the ability to use said       ##
##  repositories, you must use a version 'svnadmin dump' prior to  ##
##  this change to dump your repository to a dumpfile, then use    ##
##  this new Subversion code to create, and load your dumpfile     ##
##  a new repository using 'svnadmin load'.  And don't forget to   ##
##  copy over any custom configuration/hooks from the old to the   ##
##  new repository.                                                ##
##                                                                 ##
#####################################################################

 Please see notes/repos_upgrade_HOWTO for documentation on migrating
 pre-0.28.0 repos to 0.28.0.

 That document is also located here:
    http://svn.apache.org/repos/asf/subversion/trunk/notes/repos_upgrade_HOWTO

 User-visible changes:
 * fs schema change, see issue #1003 **NOTE: repos dump/load cycle required!**
 * command-line options
  - changed  'lsdblogs' is now 2 commands 'list-dblogs', 'list-unused-dblogs'
  - removed  '--only-unread' option 
  - new      'list-unused-dblogs'
  - new      '--config-dir' allows svn config to live outside ~/.subversion 
  - new      (r6811)
    - svn-status-get-specific-revision (interface to svn cat)
    - svn-ediff-with-revision (run ediff w/ a file wc and a specified rev)
 * fixed 'mod_dav_svn' segfault bug caused by foreign DeltaV requests (r6725)
 * fixed 'svn switch' bug which could result in corrupted repo (#1316,r6746)
 * fixed items now marked as 'deleted' if they no longer exist (#919,r6748)
 * fixed 'merge' no longer adds file/dir if scheme differs from wc. (#1321)
 * fixed Handle \r correctly when prompting on Windows. (r6792,#1307)
 * 'svn merge' now 'skip's when it hits unversioned obstructions (r6810,#1425)
 * fixed repos->wc of file w/ svn:keywords set caused segfault (r6818,#1473)
 * fixed 'svn diff -r PREV:HEAD' failed if tmp/ exists in cwd (r6838,#1487)

 Developer-visible changes:
 * database schema changed (see warning above!) (r6752,#1003,#1248,#1438)
 * svn Perl bindings are ready - see swig/INSTALL
 * internal changes to treat swig libraries more like normal libraries (r6761)
 * improved handling of errors opening a repository over ra_svn (r6841)



Version 0.27.0 (released 12 August 2003, rev 6707, branches/release-0.27.0)

 User-visible changes:
 * fixed ra_svn:
    - (r6588) avoid hangs due to ra_svn tunnel creation errors
    - (r6696, r6697, #1465) svnserve crash due to pre-commit hook failure
 * fixed 'svn log':
    - (r6642, #1423) log on a deleted path over ra-dav
    - (r6684, #1438) log performance bug
 * fixed 'svn diff' and 'svn merge':
    - (r6604, #1311) diff URL URL on files now works
    - (r6668, #1142) diff comparing wc to repos branch
    - (r6687, #1297) diff/merge interaction in file adds
    - (r6703, #1319) merge problem with adding subtrees
    - (#6607) new default ancestry-following behavior for diff, merge
 * fixed 'svn status':
    - (r6688, r6691, r6692, #1289) status on nodes deleted in repos
    - (r6637) status now always uses "I" for ignored directories
 * fixed 'svn copy':
    - (r6704, #1313) copy between 2 repositories errors cleanly now
    - (r6649, #1444) seg fault when copying empty dir from repos to wc
 * fixed 'svn export':
    - (r6652, #1461) exporting an empty directory
    - (r6664, #1296) path->path exports
 * fixed - gracefully handle failure to get uid on Win98 (r6695, #1470)
 * fixed - avoid spurious conflicts when merging binary files (r6621, #1319)
 * fixed - merge of a single file into implicit '.' (r6630, #1150)
 * fixed - various Win32 innosetup improvements/fixes (r6693, r6656, #1133)
 * fixed - disallow ".." in svn:externals target paths (r6639, #1449)
 * fixed - use 'env' instead of hard-coded paths in scripts (r6626, #1413)
 * fixed - bug in loading incremental dumpfiles (r6595)
 * fixed - performance issue in svn_load_dirs.pl fixed (r6623, r6627, #1455)
 * fixed - handle IPv6 addresses in URLs (r6638, r6654, #1338)
 * changed - 'svn resolve' renamed to 'svn resolved' (r6597)
 * changed - 'svnlook tree' takes new optional path-in-repos argument (r6583)
 * changed - renamed 'svnadmin archive' to 'svnadmin lsdblogs'; offer
             either all logs, or just the unused ones (r6661)  
 * changed - now offer full-text search in Windows documentation file (r6658)
 * changed - much documentation updated, especially the book
 * Many other fixes and changes, too numerous to mention individually.

 Developer-visible changes:
 * fixed - many improvements to Perl and Python bindings, including some
           Win32-specific improvements (r6619, r6686, r6590, r6580, r6579)
 * All other important dev changes are implied by the user-visible changes.


Version 0.26.0 (released 24 July 2003, revision 6550, branches/release-0.26.0)

 User-visible changes:
 * fixed - --parent-dir option to svnadmin load (r6436)
 * fixed - 'svnlook diff' now properly displays diffs  (r6408, #1241)
 * fixed - 'svn cat' no longer expands values from the wrong revision.
 * fixed 'svn merge':
    - (r6447,#1402) -r FOO:PREV works correctly
    - (r6452,#1379) no longer prints confusing no-op lines
    - (r6500/6503,#1399) warn user when a tree-delta chunk can't be applied
 * turn compression off to work around to mod_deflate timeouts (r6509)

 Developer-visible changes:
 * cvs2svn.py:  lots of bugfixing related to branch/tag support
 * diff code refactored to allow use by other tools (r6407)
 * make 'svn export' set commit-timestamps (not ready yet) (r6420)
 * fixed - memory leaks in libsvn_ra_dav commits (r6422)
 * fixed - cvs2svn.py handles branch files rooted in dead revs (r6482,#1417)
 * fixed - new lines now detected in svn:author property (r6497,#1401)
 * fixed - svn_load_dirs works w/ absolute paths (r6507, Debian bug #187331)
 * changed - build infrastructure now supports Perl SWIG bindings (r6441)
 * removed - PORTING document no longer necessary (r6472)


Version 0.25.0 (released 11 July 2003, revision 6394, branches/release-0.25.0)

 User-visible changes:
 * command line options:
    - new --force option for svn export (r6327,#1296)
    - new --force-log for commit, copy, delete, import, mkdir, move (r6294)
    - no longer need --force for commit
 * commands
    - new - svnadmin archive (r6310)
    - changed - svn import syntax now 'svn import [PATH] URL' (r6288,#933,#735)
    - fixed - Search PATH for external diff commands (r6373)
    - fixed - 'svn switch' memory bug (r6296)
    - fixed - 'svn mkdir' coredump (r6388,#1369)
 * python bindings now in -tools rpm for Mandrake 9.1 (r6374)
 * allow parent-into-child copies, provided they are not WC->WC. (r6348,#1367)
 * fixed - Apache module installation order (r6382-6,#1381)	
 * now require apache 2.0.47 (and apr 0.9.4)
 * fix 2 commit leaks
 * fix mod_dav_svn path-escaping bug

 Developer-visible changes:
 * Win32 build system
    - new - .vcproj files for svn_config project and APR (r6311)
    - fixed - SWIG bindings for Win32 (r6304)
    - vcproj generator now works (r6316)
    - swig's generated .c files now dependent on headers in .i files (r6379)
    - refactored code common to dsp & vcproj into gen_win.py (r6328)
 * fixed
    - SEGFAULTs in SWIG bindings (r6339)
    - potential SEGFAULTs in 'REPORT vcc' backward-compatibility code (r6377)
    - mod_dav_svn's autoversioning failure on PUT (r6312)
    - 'svn switch' memory bug (r6296)
 * changed - mailer.py now uses svn_repos_replay()


Version 0.24.2 (released 18 June 2003, revision 6284, branches/release-0.24.2)

 User-visible changes:
 * fix 'svn export' potential segfault
 * fix occasional diff test failures
 * fix 'svnadmin dump' memory hog
 * fix new-dir-with-spaces bug

 Developer-visible changes:
 * none


Version 0.24.1 (released 16 June 2003, revision 6249, branches/release-0.24.1)

 User-visible changes:
 * Fix bug in 'svn log'.

 Developer-visible changes:
 * none


Version 0.24.0 (released 15 June 2003, revision 6234, branches/release-0.24.0)

 User-visible changes:
 * new 'svn diff [--old OLD] [--new NEW]' syntax (#1142)
 * new --relocate option for svn switch (#951)
 * new --version option for svnadmin and svnlook
 * new path-based authorization module for apache
 * make 'svn checkout' and not just 'svn update' resume a checkout
 * .svn directories now hidden on Windows
 * config variable 'store-password = no' now actually works
 * fix 'svn merge --dry-run'
 * fix 'properties hanging after a rename' issue (#1303)
 * fix odd behavior of 'svn up -r PREV filename' (#1304)
 * fix delete-tracking bug (#1348)
 * fix dump and load corner cases (#1290)
 * ra_dav server more resilient for foreign deltaV clients
 * numerous ra_svn changes - must update clients and servers
 * fix export over ra_svn (#1318)
 * fix ra_svn error transmission bug (#1146)
 * fix ra_svn corruption in tunnel mode (#1145)
 * make svnserve multi-threaded on non-fork platforms (now works on Windows)
 * remove svnserve -F and -S options
 * various memory use improvements (#1323)
 * various performance improvements for all protocols
 * various performance improvements for 'svnadmin dump' and svnlook
 * various subversion book updates (you have read the book right?)
 * more cvs2svn.py improvements (and more to follow)
 * new debugging script normalize-dump.py to normalize dump output

 Developer-visible changes:
 * path-based editor drivers
 * no more RA->do_checkout()
 * update python and java bindings
 * various windows build fixes


Version 0.23.0 (released 16 May 2003, revision 5962, branches/release-0.23.0)

 User-visible changes:
 * 'svn cat' now performs keyword expansion (#399)
 * 'svn export' keyword expansion fixed
 * checkouts are now restartable (#730)
 * ssh ra_svn tunnel agent specified with svn+ssh://hostname/path syntax.
 * remove dependency on external diff program
 * don't error out early on unversioned files (#774)
 * fix commands where REPORT fails if item isn't in HEAD (#891)
 * updates now receive checksums like checkouts (#1101)
 * 'svn revert dir' now resets property timestamp (#1163)
 * fix instances of client showing help instead of error message (#1265)
 * fix incorrect path in 'not a working copy' error messages (#1291)
 * fix cvs2svn.py file added on branch problem (#1302)
 * fix various vc-svn.el problems (#1257, #1268)
 * fix various psvn problems (#1270)
 * various Win32 build fixes

 Developer-visible changes:
 * fix various gcc 3.3 warnings (#1031)
 * fix various memory errors/leaks
 * remove java/jni bindings


Version 0.22.2 (released 13 May 2003, revision 5918, branches/release-0.22.2)

 User-visible changes:
 * fix Win32 build
 * properly handle on-disk template errors
 * fix bogus uuid bug in cvs2svn.py

 Developer-visible changes:
 * none


Version 0.22.1 (released 9 May 2003, revision 5874, branches/release-0.22.1)

 User-visible changes:
 * fix shared library installation problem
 * update cvs2svn.py script

 Developer-visible changes:
 * none


Version 0.22.0 (released 7 May 2003, revision 5842, branches/release-0.22)

 User-visible changes:
 * svn diff -r BASE:HEAD and other edge cases fixed (#977)
 * svn diff and merge now have --ignore-ancestry option (#1034)
 * svn ci -N DIR no longer errors during post-commit (#1239)
 * ra_dav now optional (#617)
 * update vn-svn.el (#1250, #1253)
 * improvements to svn_load_dirs.pl (#1223, #1215)
 * misc ra_svn bug fixes and protocol change
 * log-encoding option now properly only applied to logs
 * fix mmap failures on HP-UX
 * fix some client memory leaks

 Developer-visible changes:
 * finish transition to new xml prop namespaces for mod_dav_svn (#840)
 * minimize full tree locks and number of system calls (#1245)
 * auto-generated .dsp files (#850)
 * fix ETag of directory (#1251)
 * added export editor (#1230)


Version 0.21.0 (released 15 Apr 2003, revision 5639, branches/release-0.21)

 User-visible changes:
 * SSL client and server certificate verification
 * authentication info now stored in ~/.subversion/auth/
 * svn diff on a copied file only shows local mods, not the whole file
 * svn propget now takes a --strict option to control output
 * svnadmin load now takes a --parent-dir option
 * added the new 'svndumpfilter' program
 * svnlook now has 'cat', 'propget', and 'proplist' commands to enable
   viewing this information on transactions
 * 'svn copy' from another repository now adds without history
 * tag/branch conversion disabled in cvs2svn until it gets fixed
 * the 'anonymous' user is no longer used; we simply avoid attaching an
   author property when an author is not available
 * improvements to ignored-file handling
 * Python ConfigParser-style variable expansion for config file (#1165)

 Developer-visible changes:
 * introduced the svn_filesize_t type (#639)
 * realmstring added to the svn_auth framework
 * the "result checksum" moved to the editor.close_file function
 * more checksumming here and there
 * initial work to enable binary properties via ra_dav
 * initial, internal support for compressed streams
 * test framework shifting to exception-based failure recording (#1193)
 * improved options and handling in the C test framework
 * java and python binding work
 * libsvn_auth folded into libsvn_subr
 * bug fixes: 'svnadmin load' parse bug; ra_svn crashes (#1160); 'svn
   log' on a switched wc (#1108); 'svn ci -N' on named files (#1195)


Version 0.20.1 (released 26 Mar 2003, revision 5467, branches/release-0.20.1)

 User-visible changes:
 * fix svnadmin load bug so that property deletions actually occur
 * fix checksum compatibility issue for older repositories

 Developer-visible changes:
 * none


Version 0.20.0 (released 20 Mar 2003, revision 5410, branches/release-0.20)

 User-visible changes:
 * new compatibility rule: require only that each interim release be
                           compatible with the one before it (see HACKING)
 * ra_svn is still new so above rule doesn't yet apply
   (i.e. 0.20 over ra_svn is NOT compatible with previous releases)
 * merge infers the target path (see book chapters 4 & 8)
 * merge continues in presence of missing target file
 * merge's add notifications are no longer duplicated
 * commands can be safely interrupted (Ctrl-C)
 * --encoding global default in ~/.subversion/config
 * new option --editor-cmd
 * begin multi-release transition to escape binary properties over DAV
 * misc performance improvements

 Developer-visible changes:
 * RA vtable functions take pool argument
 * svn-config --includes path fixed
 * uuid at creation now complete
 * start having test failures throw exceptions rather than return errors
 * test suite option --cleanup with --verbose being default mode
 * continued diff library development
 * minor revprop hook changes
 * bug fixes: no diff on binary files (#1019), consistent error messages
   (#1181), version numbers in hook scripts (#1182), win98 codepage (#1186)


Version 0.19.1 (released 12 Mar 2003, revision 5303, branches/release-0.19.1)

 User-visible changes:
 * fix svnserve tunnel mode pipe close bug

 Developer-visible changes:
 * none


Version 0.19.0 (released 10 Mar 2003, revision 5262, branches/release-0.19)

 User-visible changes:
 * svn ls works on wc paths (#1130)
 * new cvs2svn.py features and bug fixes (1105)
 * new svnlook subcommand 'uuid'
 * new svnadmin create option '--bdb-txn-nosync' (use with care)
 * fix svnserve help output
 * SVN_EDITOR now overrides svn-editor in ~/.subversion/config
 * miscellaneous performance improvements (memory and speed)
 * more work on the Book

 Developer-visible changes:
 * start implementing cancellation of long-running functions
 * misc windows build fixes and features (DSP generator)
 * -W and -P options to stress.pl
 * start adding support for multiple fs backends
 * work on bindings and bindings build system (#1132, #1149)
 * bug fixes: ra_dav import/checkout memory usage (#995), control chars
   in commit messages (#1025), svn merge memory usage (#1069, #1077),
   pre-existing ~/.subversion (#1121), keyword expansion (#1151), line
   number in config error message (#1157), svn-tunnel-agent in [default]
   (#1158), RA->close RIP (#1164), config-test non-source (#1172)


Version 0.18.1 (released 26 Feb 2003, revision 5118, branches/release-0.18.1)

 User-visible changes:
 * editor environment variables no longer incorrectly required
 * 'svn help import' now displays correct usage
 * fix crashes in the internal diff library and ra_dav
 * fix Win9x/Me console issue
 * cvs2svn.py api fix
 * hot_backup.py now correctly removes old backups

 Developer-visible changes:
 * various rpm package fixes


Version 0.18.0 (released 19 Feb 2003, revision 4968, branches/release-0.18)

 User-visible changes:
 * renamed the [default] section to [global] in the servers config file
 * compression option is now http-compression and lives in servers file
 * use internal diff by default rather than external program (#405 in progress)
 * symlinked hook scripts now run
 * read-only access flag (-R) for svnserve
 * quiet flag (--quiet) for svnadmin dump
 * --ignore-uuid and --force-uuid for svnadmin load
 * miscellaneous performance improvements
 * more work on the Book

 Developer-visible changes:
 * new authentication library libsvn_auth (#724)
 * new bdb table uuids
 * client context object in libsvn_client
 * more work on java and other language bindings
 * test framework now has a quiet option (-q)
 * miscellaneous small code cleanups
 * bug fixes: more valgrind memory bugs, apr xlate i18n mess (#872),
   non-existent URL checkout (#946), props on to-be-deleted files (#1066),
   ra_svn move/copy (#1084), eol translation (#1085), ra_svn
   checksumming (#1099), cat command corrupt output (#1104), cvs2svn
   memory consumption (#1107), merge of property add (#1109),
   '..' relative path (#1111), commit/cleanup/diff3 (#1119),
   .svn/entries checksum (#1120), svn commit in / (#1122),
   status on uncontrolled directory (#1124), commit message eol
   characters (#1126), cat -r PREV (#1134), ra_dav wcprops (#1136)
   split XML cdata/attribute encoding (#1118)


Version 0.17.1 (released 22 Jan 2003, revision 4503, branches/0.17.1)

 User-visible changes:
 * changed non-baseline build version number display.
 * compatibility change: make sure old clients can talk to newest servers.
 * some changes to the Book

 Developer-visible changes:
 * dumper/loader now use checksums (#1102)
 * miscellaneous small code cleanups
 * bug fixes:  eol-style timestamp changes (#1086), valgrind mem bug,
   better checksum error reporting, 


Version 0.17.0 (released 20 Jan 2003, revision 4468, branches/0.17)

 User-visible changes:
 * 'svn add' is now recursive by default, -N to disable (#1073)
 * new 'svnversion' program summarizes mixed-revs of a working copy
 * huge improvements to the mailer.py tool
 * more work on the Book and man page
 * default global-ignores now built-in, new runtime-config file commented out

 Developer-visible changes:
 * checksums, checksums everywhere (issues #649, #689):
    - filesystem stores them, and verifies them when reading/writing
    - working copy stores them, and verifies them when reading/writing
    - checksums transferred both ways over network, RA layers verify them
 * finish draft of internal diff/diff3 library -- ready for testing/optimizing
 * more utf8<->apr conversion work (#872)
 * more work on swig/python and ruby bindings
 * improvements to win32-innosetup package
 * 'svnserve' now has an official IANA-assigned portnumber.
 * mod_dav_svn now only sends/understands new xml prop namespaces (#840)
 * bug fixes:  stop needless fs rep data copies (#1067), wc auth
   caching bugs (#1064), use APR_BUFFERED to open files (#1071), lots
   of wc 'missing dir' edge-case bugs (#962), prevent wc from
   receiving '.svn' (#1068), don't commit symlinks (#1081), better
   diff labels (#1080), better fulltext tmpfile names in conflicts (#1079),
   prevent ra_dav from deleting out-of-date items (#1017), segfault (#1092), 
   don't attempt checksum on missing tmp textbase (#1091), allow diffs
   during update again (yikes!)


Version 0.16.1 (released 6 Jan 2003, revision 4276)

 User-visible changes:
 * ra_svn network layer (apache alternative) now tested & ssh-tunnelable
 * new (experimental) mod_dav_svn autoversioning feature (SVNAutoversioning)
 * reorganization of the ~/.subversion/ run-time config files.
 * more entry caching: approx. 3x speedup on checkouts & updates.
 * option rename: --non-recursive instead of --nonrecursive
 * option rename: --no-diff-deleted instead of --no-diff-on-delete
 * new 'svn log --quiet'
 * new 'svn diff --no-diff-deleted'
 * fix keyword expansion behaviors ($keyword:$ / $keyword$ / $keyword: $)
 * handle win32 non-ascii config-file paths (#968, #1048, part of #872)

 Developer-visible changes:
 * most public header files now using doxygen markup
 * new (untested) internal difflib (#405)
 * neon debugging now tweakable via run-time config file
 * more progress on Subversion Book rewrite.
 * new ./configure --with-diffutils
 * begin work on client/server checksums (#649)
 * regression tests now depend on svnadmin dump/load
 * lose src_err field of svn_error_t
 * many fs function renames:  begins fs database back-end abstraction.
 * new libsvn_repos prop-validating wrappers
 * lots of work on build-system dependency graph generation (for SWIG building)
 * swig binding work:
    - python svn calls can now run as independent threads
    - new java-binding build system
    - improved swig building features:  --prefix, LDFLAGS behaviors
 * many, many bug fixes: wc->repos copies (#1029), #943 followup
   (#1023), copies of copies (#830), 'svn resolve' cleans up entries
   file (#1021), prop merging (#1012), segfault fixes (#1027, #1055),
   autoconf 2.5X (#886), O(1) copies (#717), new 'failed revert'
   signal (#714), detect missing schedule-add conflicts (#899, #863),
   begin dav namespace switchover (#840), status bugs, url auth
   inference (#1038), log bug (#1028), newline prompt (#1039),
   svnadmin errorchecking, url syntax errors (#1057, #1058), apr/utf8
   work (start #872), and many more.


Version 0.16 (released 4 Dec 2002, revision 3987)

 User-visible changes:
 * new 'svn cat' subcommand
 * new --revprop flag to access revision props, -r for versioned props (#943)
 * new "compression" runtime option in ~/.subversion/config
 * svnadmin/svnlook now use help system, and some subcommands deleted or moved.
 * tool changes:
    - new svnshell.py tool
    - new mirror_dir_through_svn.cgi script
    - new svn_load_dirs.pl features
    - updates to vc-svn.el
 * --message-encoding is now just --encoding, and affects svn: propvals too.
 * major rewrites of chapters 3, 4, 5 of the Subversion Book.

 Developer-visible changes:
 * new network layer, libsvn_ra_svn!  still experimental.
 * all svn_error_t's now allocated in subpool of global pool.
 * reorganize svnlook/svnadmin subcommands & option-parsing (#540, #915, #910)
 * all log messages and svn: props now stored as UTF8/LF endings (#896)
 * huge cleanup/reorg of all svn_path_* routines
 * svn_client_status sends feedback, distinguishes unversioned vs. ignored
 * improvements to swig typemappings and build processes
 * fixes to pool cleanup handlers
 * begin abstraction of gen_make.py 
 * entry-caching improvements
 * stop using global apr_xlate objects
 * win32-innosetup code added to packages/
 * new work on ruby bindings and swig-java bindings
 * many, many bug fixes: various small coredumps, svn_error_t leaks,
   copy props correctly (#976), copy executable bits correctly (#982),
   test-system fix (#882), accidentally imported tmpfile (#964),
   ra_local checkout memleak (#985), accidental wc deletion (#988),
   better text vs. binary detection (#994), dav log-report error
   handling, bad 'svn switch' dav caching (#1000), don't call NULL
   callbacks (#1005), bogus switch feedback (#1007), eol-style file
   corruption (#920), getdate.y fix (#1009), ra_local error reporting (#900),
   start of work on issues #830 and #869.


Version 0.15 (released 7 Nov 2002, revision 3687)

 User-visible changes:
 * New 'S' indicator in 'svn status' shows switched subdirs 
 * New --dry-run option added for 'svn merge' (issue #953)
 * Fix 'svn update .' to handle svn:externals correctly
 * Memory usage of 'svn import' reduced (issue #860)
 * Allow 'svn revert' on missing directories scheduled for deletion
 * Assorted bug fixes in several exciting flavors
 * Documentation improvements

 Developer-visible changes:
 * #911 (apr and apr-util version at build time)
 * Fixed issues #851, #894, 
 * Testing scripts accept --url=URL and BASE_URL=URL
 * Issue #881 (--enable-all-static)
 * Delta editors all converted to new-style, and editor composition is gone
 * Improve libsvn_wc wcprop handling (issue #806)
 * SWIG binding improvements
 * Various pool usage improvements


Version 0.14.5 [Alpha Interim 5] (released 30 Oct 2002, revision 3578)

 User-visible changes:
 * allow --incremental option for 'svn log' xml output

 Developer-visible changes:
 * autoconf bugfix for berkeley-db detection
 * clean up property interface mess (part of #806)
 * dish.sh bugfix:  build the new docbook docs correctly
 * python tests now log commands
 * gen-make.py now assumes 'build.conf'


Version 0.14.4 [Alpha Interim 4] (released 29 Oct 2002, revision 3553)

 User-visible changes:
 * new working-copy entry-caching: speeds many ops up to 5x (#749)
 * new 'svnadmin recover', instead of db_recover
 * client can now view & change server-side revision props (e.g. log messages)
 * new --non-interactive switch for commandline client
 * new --incremental option to 'svn log'
 * new -r {date} syntax for specifying dated revs; works over network too.
 * automatically set svn:executable prop when adding or importing (#870)
 * initial $EDITOR text now ignores all log data below special token
 * consistify behavior of text & prop columns in 'svn status' output.
 * .svn/auth/* files now chmod 700, to stop scaring people.  :-)
 * improved labels in 'svn diff' output (#936)
 * run-time adjustable neon timeout in newly renamed 'servers' config file
 * big improvements to cvs2svn script:  bugfixes and basic branch/tag support
 * new python access-control hook script
 * no more implicit dot-target for 'svn propedit' or 'svn propset' (#924)
 * Win32 improvements:
    - use system-wide config-file/registry
    - run-time configurable diff/diff3 binary locations (#668)
 * remove obsolete --xml-file support
 * Handbook is now ported to Docbook, 2 new chapters.

 Developer-visible changes:
 * abstracted option/help-parsing code, now shared between svn and svnadmin
 * require apache 2.0.42
 * use neon 0.23.5: fix XML entity derefs, SSL server certs, HP-UX build, etc.
 * support Berkeley DB 4.0 *or* 4.1
 * many SWIG binding improvements:
    - better overall coverage of apr and libsvn_* library symbols
    - new 'make swig-py-ext' and 'make install-swig-py-ext' targets
 * finish conversion of all editor/drivers to "new" style (#737)
 * removed xml-delta editors and editor drivers and related tests
 * new predicate-logic system added to automated-test system ("skip" support)
 * more work on mailer.py
 * no more lost commit messages (#761)
 * eradication of misused stringbufs, obsolete code removal (#909)
 * mem-leak fixes in libsvn_fs (#860)
 * improved atomicity of working-file translations (#914)
 * improve ./configure --help output (#949)
 * MANY bugfixes, especially for entry-locks (#931, #932, #847, #938),
   merges (#880, ), auth storage (#934); also #921 (svnadmin
   segfault), #907 (xml quoting), #918 (post-commit processing), #935
   (path canonicalization), #779 (diff errors)


Version 0.14.3 [Alpha Interim 3] (released 20 Sept 2002, revision 3200)

 User-visible changes:
 * new ~/.subversion/config file
 * new $Id$ keyword
 * new client --no-auth-cache option
 * empty values in the Windows Registry are no longer ignored (issue #671)
 * report details of repository start-commit or pre-commit hook errors
 * fix locking behaviour when using current directory as a target
 * updated man page
 * new front-page logo.  :-)

 Developer-visible changes:
 * continuing work on python SWIG bindings
 * continuing work on new access-baton system for libsvn_wc
 * upgrade to neon 0.23.4 to fix Windows build issues and seg faults
 * add XFAIL to the C testing framework
 * prevent setting of certain svn: props on incorrect file types
 * cleanup libsvn_subr's path library behavior
 * new 'fast-clean' vs. 'clean' Makefile targets
 * various bugfixes, tweaks, cleanups.


Version 0.14.2 [Alpha Interim 2] (released 22 Aug 2002, revision 3033)

 User-visible changes:
 * fs schema change, see issue #842. **NOTE: repos dump/load cycle required!**
 * new 'svn ls -R' option
 * new status code `~', for type changes
 * add --username and --password options to 'svn ls'
 * new script tools/client-side/svn_all_diffs.pl
 * new script tools/examples/blame.py (draft)

 Developer-visible changes:
 * test suite now does XFAIL and XPASS
 * test suite over DAV now uses SVNParentPath, no longer depends on symlinks
 * DAV tests now work on Windows
 * upgrade to neon 0.22.0
 * 'make install' notices the $(DESTDIR) parameter
 * new dav prop namespaces, but old still sent for compat; see issue #840
 * error code space reorganized, see issue #702
 * many cleanups to path handling
 * more use of access batons in libsvn_wc, see issue #749
 * working props now stored with ".svn-work" extension, see issue #618
 * the usual round of bug fixes, new regression tests, etc


Version 0.14.1 [Alpha Interim 1] (released 9 August 2002, revision 2927)

 User-visible changes:
 * show copy-ancestry in 'svn log -v'
 * 'svn co' can take multiple URLs now
 * new 'svn ls' command
 * new 'svn st --no-ignore' option
 * new 'svn --version --quiet' option
 * more conservative 'svn help' usage error-message
 * more graceful degradation from charset conversion failure
 * standardize policy of -q switch behavior
 * less intimidating error output
 * new SVNParentPath directive for mod_dav_svn <Location>s
 * svnlook now correctly displays copied subtrees
 * Handbook: additions, tweaks, cleanups, and new French Translation :-)
 * svn_load_dirs.pl: auto propset on files matching specified regex, bug fixes

 Developer-visible changes:
 * integrated the delta-combiner! (issue #531)
 * integration of libsvn_wc-baton-locking branch (issue #749)
 * new "skip-deltas" added to delta-combiner
 * properly URI-encode/decode path components throughout our code
 * RA->do_diff() made independent from RA->do_switch().
 * stricter setting/parsing of svn:mime-type property in client and server.
 * new 'install-static' make target
 * extend SWIG bindings to libsvn_wc and libsvn_client
 * BerkeleyDB usage tweaking:  in preparation for auto-recovery features.
 * work on #850 (.dsp generator)
 * Better support for incremental dumps (see revision 2920)
 * started fs branch work on #842 (copyID inheritance), #830 (copies of
   copies), #790 (copy table uses txnID), #815 (custom sorting)
 * numerous bugfixes: #709 (better error handling), #813/814
   (apr_filepath_merge), #685 (showing dir propdiffs), OS X dumper
   bugfix, #561 (property conflict detection), mod_dav_svn path bugs,
   svn_wc_status() bugs, path canonicalization bugs, #816 (svn log  -r), 
   #843 (URL keyword), #846 (kind-change replacement), #809 ($EDITOR dir),
   #855 (module updates not cooperating with new wc access batons),
   improvements to test suite sensitivity, 


Version 0.14.0 [Alpha] (released 23 July 2002, revision 2667)

 User-visible changes:
 * finally some documentation: The Subversion Handbook
 * i18n support for paths, prop names, and log messages; (not on Win32 yet)
 * support for URI-escaped paths
 * "-R" is now short for --recursive, and "-N" replaces "-n"
 * add the -R option to 'svn info' and 'svn resolve'
 * new syntax for 'svn switch' and 'svn co'
 * new 'svn-config' file installed
 * new commit-access-control.pl utility (feature #775)
 * new vc-svn.el, first pass at Emacs VC support for Subversion
 * lots of work on svn_load_dirs.pl (provides vendor-branch-like features)
 * new --message-encoding option for logfiles given by -F
 * support win32 drive-letters in file:/// urls
 * improved date output syntax: ISO-8601 prefix, then human-friendly suffix
 * the usual round of bug fixes

 Developer-visible changes:
 * UTF-8 changes
    - all libraries now assume UTF-8 input paths and log msgs
    - many apr calls are now abstracted into new svn_io_* wrappers
 * fs schema change
    - cache each revision's changed-paths in a new 'changes' table
    - another repository dump/load is required
 * a number of fs-dumper bugfixes and redesigns
 * test suite is now all python, so it can run on win32
 * reduce huge memory consumption of mod_dav_svn during checkouts
 * memory optimizations for prop-reading and 'svn diff'
 * bugfixes for commit-email.pl and tweak-log.cgi
 * lots of branch work on the delta-combiner and on libsvn_wc rewrite
 * numerous bugfixes: 'svn merge .' bug (#748), bug #764, two new
   ghudson-dirversioning bugs, #756, #675, #783, #796, wc-root bugs,
   #799, #800, #797, directory-removal bugs (#611, #687)


Version 0.13.2 [Pre-Alpha] (released 28 June 2002, revision 2376)

 User-visible changes:
 * fixed various buggy commandline outputs
 * allow global/local config-files on win32
 * prevent overwrites with 'svn cp URL URL'
 * improvements to svn_load_dirs.pl
 * mod_dav_svn can generate xml output for directory GETs
 * new svnadmin(1) man page

 Developer-visible changes:
 * finished notification callback system, no more buggy output
 * fs-changes:
    - revisions table nothing but an index to txns table
    - branch work-in-progress:  new 'changes' table to store changed paths
 * more work on svn_time_* funcs and formats (moving towards ISO8601)
 * property reversion bugs fixed, dumper bug fixed
 * add version number to svndiff database storage
 * new regression tests for 'svn merge'
 * fix 'svn diff -rX:Y' server bug
 * fix bugs in python test system
 * bring win32 build up-to-date, get most python tests working on win32
 

Version 0.13.1 [Pre-Alpha] (released 20 June 2002, revision 2291)

 User-visible changes:
 * "modules" are now implemented
 * new 'svn export' command
 * 'svn log' now traverses copy history and can print changed paths
 * 'svn merge' now (temporarily) only merges into '.'
 * 'svnadmin lscr' now traverses copy history
 * changes to the 'svn:executable' prop take effect immediately now
 * server is more tolerant of wc's with old-style version resource URLs
 * new Handbook started
 * commit-email.pl fixes/improvements -- now shows prop mods and copy history
 * bug fixes to cp, rm, merge, revert, admin dump and load, svnlook

 Developer-visible changes:
 * headers now install in subdir and libs are named libsvn_FOO-1.so
 * improvements to the Python test suite
 * delta combiner implemented (unused for now, though)
 * Python SWIG binding improvements: ability to write an editor in Python
 * new example: tools/examples/svnlook.py
 * start moving libsvn_client to new notification system (no composed editors!)
 * upgrade to neon 0.21.2, fixing deflated communication with apache
 * Moved Berkeley-specific code to libsvn_fs/bdb/, skels into libsvn_fs/util/
 * changes to the RPM packaging


Version 0.13.0 [Pre-Alpha] (released 10 June 2002, revision 2140)

 User-visible changes:
 * repositories have a new database schema;  existing ones must be upgraded!
    - new svnadmin 'dump'/'load' commands to migrate repositories
    - read http://svn.apache.org/repos/asf/subversion/trunk/notes/repos_upgrade_HOWTO

 Developer-visible changes:
 * complete rewrite of filesystem schema!
    - skels are abstracted away, opening the door to SQL backends
    - node-ids now have copy IDs
 * huge progress on module system [only checkouts work at the moment]
 * massive conversion of stringbufs to char* in our public APIs
 * vsn-rsc-urls are now based on created-rev/path instead of fs_id_t's.
 * reinstate 'deleted' flag on entries, to ensure accurate update reports
 * dir_delta learns how to send copy history
    - svnlook no longer sends 10MB emails when we make a branch
    - dumpfiles get much smaller
 * memory consumption reduced via new apr-pool code that reuses/frees mem
 * client can now parse ISO-8601 timestamps (start of issue 614)
 * added script for stress-testing concurrent repository access
 * auto-locate apache's apr libraries at build-time
 * beginnings of ra_pipe library
 * progress on delta combiner code
 * many memleaks fixed, thanks to valgrind!
 * upgrade to newest neon, allow deflated communication with apache
 * many bugfixes to merge, switch, checkout, rm; tackling of issues 704,
   705, 698, 711, 713, 721, 718 and many others


Version 0.12.0 (released 3 May 2002, revision 1868)

 User-visible changes:
 * 'svn diff' can now compare two arbitrary URLs
 * 'svn diff' now displays property changes
 * 'svn rm' requires --force for unversioned and/or modified items
 * 'svn rm' immediately removes files & uncommitted dirs
 * 'svn mv' for WC->WC behaves like 'svn rm' with respect to the source
 * checkouts, updates, switches now print received revision on final line.
 * new 'svn info' command prints information about a versioned resource.
 * switch to 2-part conflict markers (diff3 -E) instead of 3-part (diff3 -A)
 * new bash programmable completion file
 * file's executable bit can be versioned (svn:executable prop)
 * commits and imports now support --nonrecursive option
 * new --xml option for 'svn log'
 * new 'svnadmin dump' command

 Developer-visible changes:
 * updates correctly deal with disjoint urls.
 * libsvn_wc now checksums text-bases, to detect working copy corruption
 * cached wcprops (vsn-rsc-urls) now auto-regenerate if invalid
 * python testsuite now runs on Win32.
 * new switch_tests.py added to testsuite
 * NEW internalized diff/diff3 library.  Not yet integrated/tested.
 * dir_delta sends entry props; pipe-editor removed.
 * no more expat/ tree;  use apr-util's expat instead.
 * fs deltificaton happens outside commit process, using fewer db locks
 * privatize svn_fs_id_t structure
 * start abstracting skels out of libsvn_fs
 * new docs: secure coding tips, quickref card
 * memory bugfixes for import/commit/mass removals
 * many bugfixes: issues 644, 646, 691, 693, 694, 543, 684


Version 0.11.1 (released 12 April 2002, revision 1692, branches/0.11.0)

 User-visible changes:
 * completion of 'svn merge' (issue 504)
 * added SVNReposName directive to mod_dav_svn
 * insist on a diff binary that supports "-u"
 * fix and unify pop-up $EDITOR behaviors (issues 638, 633, 615)

 Developer-visible changes:
 * finish rewrite of commit system to handle disjoint urls (issue 575)
 * finish proxy support via config files (esp. on win32) (issue 579)
 * fix svn_ra_dav__get_baseline_info and related bugs (issue 581)
 * reorganization of libsvn_wc header files & API
 * new getopt_tests.py to test commandline option processing
 * 'make check' now more portable -- tests invoked via python, not sh
 * miscellaneous bugfixes in imports, svndiff, db linkage.


Version 0.11.0 (unreleased)


Version 0.10.2 (released 25 Mar 2002, revision 1587)

 User-visible changes:
 * new ~/.subversion configuration directory
 * proxy support via ~/.subversion/proxies file
          
 Developer-visible changes:
 * rewrite of client-side commit process partially done
 * beginnings of 'svn merge'
 * mod_dav_svn now generates "streamy" report responses
 * stringbuf cleanups and bugfixes
 * interface to svn_wc_entry_t cleaned up
 * tweaks to build system and freebsd port
 * miscellaneous bugfixes in path escaping, pool usage, hp-ux compilation


Version 0.10.1 (released 17 Mar 2002, revision 1537)

 User-visible changes:
 * New --targets command-line option for some commands.
 * conflicts now create conflict-markers in files, and 3 fulltext backups.
 * new 'svn resolve' command removes conflicted state (by removing backups)
  
 Developer-visible changes:
 * no more dependency on 'patch'; only on GNU diff3 and some version of 'diff'
 * complete rewrite of svn_wc_entry_t interface
 * begin abstracting svn_fs API by hiding implementation details
 * consolidate RA layer callbacks
 * start work on commit-driver rewrite
 * start work on ~/.subversion/ configuration directory, and proxy support
 * move a lot of svn_wc.h into private wc.h
 * bugfixes relating to commits, network prop xfers, 'svn log', 'svn co -q'
 * major deletion bug fixed 
   (see email WARNING: 
    http://subversion.tigris.org/servlets/ReadMsg?msgId=64442&listName=dev)


Version 0.10.0 (released 08 Mar 2002, revision 1467)

 User-visible changes:
 * fewer out-of-memory errors:  (see "memory consumption" below)
 * clearer user errors:  
    - detailed marshalling of server errors to client
    - better errors from ra_dav
    - better commandline-client-specific error messages
 * 'svn log' now works on single paths correctly
 * show locked directories in 'svn status'
 * 'svnadmin lstxns' improvements, and new --long switch
 * commits show "Replacing" instead of "Deleting/Adding" (#571)
 * commits show progress on postfix txdeltas.
 * WARNING:  existing repositories need to be upgraded;
             read tools/enable-dupkeys.sh.

 Developer-visible changes:
 * reduced memory consumption
    - new Editor interface that manages pools automatically
    - conversion of most existing editors to new system
    - have libsvn_fs write data to DB streamily
    - reduce DB logfile growth via 'duplicate keys'
    - stop using one pool for post-commit processing
    - stop using one pool for sending all textdeltas
    - many, many other pool-usage improvements in libsvn_wc, ra_dav, etc.
 * start of work on 'svn merge": issue 504, and diff3 integration
 * start of work on disjoint-url detection:  issue 575
 * start removing stringbuf path library funcs; use new const char * funcs
 * better python 2.X detection in test suite
 * svnlook uses single tempdir
 * build system evolution
    - upgrade to neon 0.19.[2-3]
    - lots of work on FreeBSD port
 * many small bugfixes: 
    - propedit, file merges, revert, dir_delta, keywords
    - memory leaks in 'svn add', 'svn import/commit', and svnlook
    - date-parsing and readonly bugs


Version 0.9 (released 15 Feb 2002, revision 1302)

 User-visible changes:
 * 'svn switch', for switching part of a working copy to a branch
 * 'svn status -v' now shows created-rev and last-author info
 * 'svn help <subcommand>' now shows proper switches
 * if no log message passed to commit, $EDITOR pops up
 * greatly improved/re-organized README, INSTALL, and HACKING docs
 * big progress on cvs2svn repository converter
 * faster retrieval of old revisions: turn off fs directory deltification
 * fixed broken behaviors in 'svn diff' and 'svn log'

 Developer-visible changes:
 * new fs code for detecting differences and relatedness
 * new cancellation editor, for event-driven users of libsvn_client
 * make .svn/ area readonly
 * continued development of ruby, java, and python (swig) bindings
 * new config-file parser
 * code reorganization and cleanup
    - huge conversion of svn_stringbuf_t --> char *
    - standardized on commit_info return structure
    - no more 'path styles' in path library
    - rewrite bootstrapping code for python test framework
    - rewrite commandline app's help-system and alias-system
    - feedback table replaced with notification callback
    - rewrite sorting of hashes
    - svnadmin internal rewrite
    - faster post-update processing
    - using SVN_ERR macros where they weren't
    - new svn_client_revision_t mechanism
    - txdelta windows are readonly now
    - pool debugging code moved to APR
    - various pool-usage fixes
 * build system evolution
    - apr-util now required
    - upgrade to neon 0.18.5
    - much apr m4 macro churn
    - win32 updates, no longer needs precompiled neon
    - 'make check' when builddir != srcdir
 * fixes for many issues, including #624, 627, 580, 598, 591,
   607. 609, 590, 565


[Versions 0.8 and older are only brief summaries]

Version 0.8  (released 15 Jan 2002, revision 909)

 * newline conversion and keyword substitution (#524)
 * rewrite ra_local commit system to commit against HEAD (#463)
 * mod_dav_svn sends svndiffs now (#518)
 * code migration from libsvn_fs to libsvn_repos (#428)


Version 0.7  (released 03 Dec 2001, revision 587)

 * 'svn cp/mv' completed:  
    - can copy from wc/repos to wc/repos
    - This how we create branches/tags
 * 'svn mkdir' [WC_PATH|REPOS_URL]
 * 'svn delete' [REPOS_URL]


Version 0.6  (released 12 Nov 2001, revision 444)

 * 'svn log'
 * 'svn cp/mv' from wc to wc


Milestones M4/M5  (released 19 Oct 2001, revision 271)

 * network layer bugfixes
 * filesystem deltification


Milestone M3  (released 30 Aug 2001, revision 1)

 * self-hosting begins, all history left behind in CVS repository.


Milestone M2  (released 15 May 2001, from CVS, "milestone-2" tag)

 * filesystem library (libsvn_fs)
 * network layer (libsvn_ra_dav and mod_dav_svn)


Milestone M1  (released 20 Oct 2000, from CVS, "milestone-1" tag)

 * working-copy library (libsvn_wc), using XML files


Birth  (05 June 2000)

 * CVS repository created.
