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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

 User-visible changes:
  - Major new features:

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

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

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

  - Client-side and server-side bugfixes:

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

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

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


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

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

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

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

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

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

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

  - API changes:
    (none)


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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


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

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

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

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

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

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

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

  - API changes:
    (none)


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

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

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

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

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

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

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


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

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

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


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


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

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

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

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


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

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

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


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


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

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

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

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

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

 Developer-visible changes:
  - General:
    (none)

  - API changes:
    (none)


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

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

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

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

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

  - API changes:
    (none)


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


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

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

  - Server-side bugfixes:
    (none)

  - Bindings bugfixes:
    (none)

 Developer-visible changes:
  - General:
    (none)

  - API changes:
    (none)


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

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

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

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

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

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

  - API changes:
    (none)


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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

  - Server-side bugfixes:
    (none)

  - Bindings bugfixes:
    (none)

 Developer-visible changes:
  - General:
    (none)

  - API changes:
    (none)


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

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

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

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


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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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


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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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

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


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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

  - Server-side bugfixes:
    * fsfs: resolve endless loop problem when repos/db/uuid has \r\n (r1492145)
    * fsfs: remove revision property buffer limit (r1491770)
    * mod_dav_svn: better status codes for anonymous user errors (r1495918)
    * mod_dav_svn: better status codes for commit failures (r1490684)
    * fix performance regression in 'svn log' against root (r1494913)
    * allow deleting non-user-visible 'svn:' properties (r1495432)
    * fsfs: fix crash on strict-alignment architectures (r1495806, r1495985)
    * svnadmin upgrade: fix error of non-sharded fsfs repositories (r1494287)
    * svnadmin create: deny '--fs-type=fsfs --compatible-version=1.0' (r1494223)
    * svnadmin upgrade: fix data loss when cancelling in last stage (r1494298)
    * mod_dav_svn: fix incorrect path canonicalization (r1503528)
            See CVE-2013-4131, and descriptive advisory at
            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 occasional failure in checkout_tests.py test 12. (r1496127)
    * disable building ZLib's assembly optimizations on Windows.


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

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

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

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

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


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

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

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

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


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


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

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

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

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

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

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


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

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

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

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

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


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

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

  - Server-side bugfixes:
    * mod_dav_svn: fix incorrect path canonicalization (r1503528)
            See CVE-2013-4131, and descriptive advisory at
            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 committing from root dir on windows (issue #3346)
    * fixed: removing a dir scheduled for deletion corrupts wc (issue #2741)
    * fixed: 'svn cleanup' fails on obstructed paths (issue #2867)
    * fixed: case-only renames resulting from merges don't work (issue #3115)
    * fixed: 'svn mergeinfo' ignores peg rev for wc target (issue #3180)
    * fixed: unable to merge to wc of deleted branch (issue #3221)
    * fixed: move via merge leaves behind versioned move source (issue #3324)
    * fixed: ra_serf does not honor http-proxy-exceptions (issue #3428)
    * fixed: 'svn mv A B; svn mv B A' loses history (issue #3429)
    * fixed: ra_serf doesn't support http-auth-types config (issue #3435)
    * fixed: merge sets incorrect mergeinfo on skipped paths (issue #3440)
    * fixed: ra_serf inconsistent handling of cached authn creds (issue #3450)
    * fixed: ra_serf segfault with using NTLM or Negotiate auth (r876910)
    * fixed: excluded subtrees are not detected by svnversion (issue #3461)
    * fixed: submitting a changelist while obstructed item exists (issue #3484)
    * fixed: crash when changing an external's URL (issue #3530)
    * fixed: target moved after branching breaks reintegrate (issue #3640)
    * fixed: potential race condition in svnsync (issue #3546)
    * fixed: spurious merge conflicts with pre-1.7 mod_dav_svn (issue #3657)
    * fixed: repeat merge is not a no-op (issue #3564)
    * fixed: inheritance results in self-referential mergeinfo (issue #3668)
    * fixed: inheritance results in nonexistent mergeinfo sources (issue #3669)
    * fixed: memory leaks in ra_serf (issue #3684)
    * fixed: corruption of 'svn pg' output for large properties (issue #3721)
    * fixed: 'svnsync copy-revprops' doesn't sync revprop dels (issue #3728)
    * fixed: executable flag not correctly set on merge (issue #3686)
    * fixed: 'svn rm' fails on multiple URLs with encoded spaces (issue #3839)
    * fixed: children of replaced dirs cannot be deleted (issue #3468)
    * fixed: executable flag of binary file lost during merge (issue #3686)
    * fixed: merging a symlink-turned-regular-file breaks the wc (issue #2530)
    * fixed: can't remove file externals (issue #3351)
    * fixed: 'svn unlock' attempts to unlock wrong token on DAV (issue #3794)
    * fixed: forced DAV 'svn unlock' results in 403, not warning (issue #3801)
    * fixed: rm -> ci -> cp = missing directory (issue #2763)
    * fixed: 'svn info' returns parent info on missing dirs (issue #3178)
    * fixed: spurious prop conflict with 'merge --reintegrate' (issue #3919)
    * fixed: 'svn --version' fails with non-existent $HOME (issue #3947)
    * fixed: unforced export silently overwrites existing file (issue #3799)
    * fixed: reverse merge which adds subtree mergeinfo fails (issue #3978)
    * fixed: 'svn up -r{R>HEAD}' hangs client over ra_svn (issue #3963)
    * fixed: 'svn up' updates file externals in target siblings (issue #3819)
    * many other minor bugfixes, optimizations, plugs of memory leaks, etc
  
  - Server-side bugfixes:
    * mod_dav_svn is less strict about auto-merging for commits (issue #1704)
    * allow SVNListParentPath to be used with authz (issue #2753)
    * allow nav to repo list from repo top with SVNListParentPath (issue #3159)
    * allow repositories in the root of a drive on windows (issue #3535)
    * don't destroy mergeinfo with 'svnadmin load --parent-dir' (issue #3547)
    * fixed: 'svnadmin hotcopy' does not duplicate symlinks (issue #2591)
    * fixed: post-revprop-change errors cancel commit (issue #2990)
    * fixed: mod_dav_svn runs pre-revprop-change hook twice (issue #3085)
    * fixed: mod_dav_svn doesn't return stderr to user on failure (issue #3112)
    * fixed: hotcopy may corrupt target rep-cache.db (issue #3596)
    * fixed: mod_dav_svn can cause spurious merge conflicts (issue #3657)
    * fixed: DAV can overwrite directories during copy (issue #3314)
    * fixed: 'svn log' returns log of unrelated path (issue #3931)
    * match paths against authz rules in case sensitive way (issue #3781)
    * svnserve can now force usernames to upper/lower case (issue #3726)
    * reduce duplicate log messages in 'log -g' (issue #3650)
    * svnserve: don't crash on shutdown with SASL in inetd mode (issue #3664)
    * disallow arbitrary HTTP headers from committers (issue #2872)
    * limit FSFS memory consumption (issue #3478, #3593)
    * many other minor bugfixes too numerous to list here

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

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

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

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


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

 User-visible changes
  - Server-side bugfixes:
    * fix FSFS repository corruption due to newline in filename (issue #4340)
    * fix svnserve exiting when a client connection is aborted (r1482759)
            See CVE-2013-2112, and descriptive advisory at
            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 occurring with sqlite init (r927323, -8)
  * ensure rangelist APIs are commutative (r923389, -91)


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


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

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

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


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


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


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


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

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

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


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

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

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


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

 User-visible changes:
  * fixed: heap overflow vulnerability on server and client
           See CVE-2009-2411, and descriptive advisory at
           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 notification callback
    - rewrite sorting of hashes
    - svnadmin internal rewrite
    - faster post-update processing
    - using SVN_ERR macros where they weren't
    - new svn_client_revision_t mechanism
    - txdelta windows are readonly now
    - pool debugging code moved to APR
    - various pool-usage fixes
 * build system evolution
    - apr-util now required
    - upgrade to neon 0.18.5
    - much apr m4 macro churn
    - win32 updates, no longer needs precompiled neon
    - 'make check' when builddir != srcdir
 * fixes for many issues, including #624, 627, 580, 598, 591,
   607. 609, 590, 565


[Versions 0.8 and older are only brief summaries]

Version 0.8  (released 15 Jan 2002, revision 909)

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


Version 0.7  (released 03 Dec 2001, revision 587)

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


Version 0.6  (released 12 Nov 2001, revision 444)

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


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

 * network layer bugfixes
 * filesystem deltification


Milestone M3  (released 30 Aug 2001, revision 1)

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


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

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


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

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


Birth  (05 June 2000)

 * CVS repository created.
