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)
    * resolve: improve interactive conflict resolution menus
    * 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 (r1558224)
    * 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)
    * patch: support of svn:mergeinfo (issue #3747)
    * 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)
    * 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 largely then they can possibly be on the platform
      (r1645572)
    * mod_authz_svn: log implicit read access failures with INFO log level;
      Explicit read access failures are still logged with ERROR log level
      (r1653032)
    * ra_serf: reduce memory usage by removing some extra intermediary state
      (r1654681, r1654690)
    * revert: improve performance on large working copies without changes
      (r1657083)
    * ra_svn: improve efficiency of editor processing (r1658194 et al)
    * merge: provide different conflict reasons for local additions and 
      unversioned obstructions (r1659381)
    * windows: improve checkout performance on windows by using sqlite truncate
      journal mode rather than delete (r1659426)
    * status: now accept '-r' argument (r1671164, 1672578, 1673228)
    * ls: improve performance of '-v' on tag directories (r1673153)
    * resolve: improve conflict prompts for binary files (r1667228 et al)
    * fsfs: improve error messages for parsing errors (r1678147, r1678149)
    * warn when the '--config-option' FILE:SECTION:OPTION combination may
      be invalid. (r1674301 et al)
    * ensure full key matching in membuffer cache (r1678950 et al)
    * mod_dav_svn: expose cache statistics via HTTP (r1595160)

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

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

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

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

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

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

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


Version 1.8.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_dav_svn: do not ignore skel parsing errors (r1658168)
    * detect invalid svndiff data earlier (r1684077)
    * prevent possible repository corruption on power/disk failures (r1680819)
    * fixed issue #4577: Read error with nodes whose DELTA chain starts with
      a PLAIN rep (r1676667, r1677267)
    * fixed issue #4531: server-side copy (over dav) is slow and uses
      too much memory (r1674627)

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

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

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

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

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

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

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


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


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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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

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


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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

  - Client-side bugfixes:
    * fix inconsistent 'svn log' output for empty revisions (issue #3964)
    * fix mis-ordered text output of 'svn log --diff' on Windows (r1220783)
    * fix 'svn log --diff' on moved file (issue #4153).
    * fix 'svn revert' of 'svn move' (issue #876)
    * fix file externals wrongly "resurrecting" a deleted file (#4017)
    * fix reporting of corrupted 1.6 w/cs by 'svn upgrade' (r1182904, -9)
    * fix bug caused by URI-decoding local merge source paths (r1210539)
    * fix properties out of sync with repos after merge and revert (issue #4305)
    * fix merge of replacement on local delete fails (issue #4011)
    * fix replacements on deletes produce wrong tree conflicts (issue #3806)
    * made ra_serf handle location headers that are not RFC-compliant (r1443906)
    * merge no longer errors out after resolving all conflicts (issue #4316)
    * fix svn blame mis-categorizing file type as binary (issue #2089)
    * fix externals not removed when working copy is made shallow (issue #3741)
    * fix update under add with not-present parent (issue #4111)
    * fix revert of files with svn:needs-lock under copied dirs (r1343168)
    * fix repos->wc diff of local copied/moved-here directories (r1341927)
    * fix repos->wc diff of local copied/moved-here files (r1341544)
    * fix "svn diff -cN PATH" where PATH was deleted in rN (r1338708)
    * fix dependency on APR hash order in several logic paths (r1338350 et al)
    * fix path inconsistencies in 'svn diff' output (r1338291)
    * fix misleading error message printed by 'svn switch' (issue #2337)
    * fix bug in mergeinfo recording during foreign-repos merge (r1430310)
    * fix spurious merge conflicts for binary files with keywords (issue #4221)
    * fix patching symlinks with 'svn patch' (issue #4273)
    * make 'svn switch' refresh lock information (issue #3376)
    * 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.21
(5 Aug 2015, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.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:
    * fix 'svnadmin recover' for pre-1.4 FSFS repositories (r1561419)

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

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

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

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

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

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

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


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

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

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

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


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

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

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


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

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

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

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

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


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

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

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

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


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


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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

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


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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

  General:
    * ship mod_dontdothat with the standard release

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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


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


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

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

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


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

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

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


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

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

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

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


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

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

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


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

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

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


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

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

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


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

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

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


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


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

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

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


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

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

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


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

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

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


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


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

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

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


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


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


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


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

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

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


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

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

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


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

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


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

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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


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

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

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


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


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

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


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

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

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


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

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

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


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

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


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

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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


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

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

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

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

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


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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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


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


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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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


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

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

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

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


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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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


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

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


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

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

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


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

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


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

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


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

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

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


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

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


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

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

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


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

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

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


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

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

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


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

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

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



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

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

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



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

                              NOTICES:

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

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


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

                              NOTICES:

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

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

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


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


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


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

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

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

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

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

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

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


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

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

User-visible changes:
* major performance fix for updates


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

                              NOTICES:

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

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


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

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

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


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

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

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

      This is a temporary fix for a larger design problem.  See issue
      http://subversion.tigris.org/issues/show_bug.cgi?id=1499


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

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


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

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

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

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

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

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



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

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

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


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

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

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


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

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

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


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

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

 Developer-visible changes:
 * none


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

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

 Developer-visible changes:
 * none


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

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

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


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

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

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


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

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

 Developer-visible changes:
 * none


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

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

 Developer-visible changes:
 * none


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

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

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


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

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

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


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

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

 Developer-visible changes:
 * none


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

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

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


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

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

 Developer-visible changes:
 * none


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

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

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


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

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

 Developer-visible changes:
 * various rpm package fixes


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

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

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


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

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

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


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

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

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


Version 0.16.1 (released 6 Jan 2003, revision 4276)

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

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


Version 0.16 (released 4 Dec 2002, revision 3987)

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

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


Version 0.15 (released 7 Nov 2002, revision 3687)

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

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


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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

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

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

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


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

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

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


Version 0.12.0 (released 3 May 2002, revision 1868)

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

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


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

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

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


Version 0.11.0 (unreleased)


Version 0.10.2 (released 25 Mar 2002, revision 1587)

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


Version 0.10.1 (released 17 Mar 2002, revision 1537)

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


Version 0.10.0 (released 08 Mar 2002, revision 1467)

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

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


Version 0.9 (released 15 Feb 2002, revision 1302)

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

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


[Versions 0.8 and older are only brief summaries]

Version 0.8  (released 15 Jan 2002, revision 909)

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


Version 0.7  (released 03 Dec 2001, revision 587)

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


Version 0.6  (released 12 Nov 2001, revision 444)

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


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

 * network layer bugfixes
 * filesystem deltification


Milestone M3  (released 30 Aug 2001, revision 1)

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


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

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


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

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


Birth  (05 June 2000)

 * CVS repository created.
