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

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

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

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

  - Server-side bugfixes:
    * 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.
