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

Version 1.13.0
(?? ??? 20XX, from /branches/1.13.x)
https://svn.apache.org/repos/asf/subversion/tags/1.13.0

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.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.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 propogation 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 cancelation 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 unneded 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 inconsitent 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 ocassional 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 ocassional 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 messags (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
            http://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 ocassional 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
            http://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
            http://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
            http://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
            http://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
            http://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:  http://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 commiting 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 overwites 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
            http://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
            http://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
            http://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
            http://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
            http://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
            http://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 occuring 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
           http://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
           http://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
           http://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
          http://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:  http://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: http://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 
          http://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 notfication 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.
