Note: Subversion 1.8 is not released yet. When it is released, this warning message will disappear, and the rest of this page will become the release notes. Until then, this page describes what is planned for the release.
Note to editors: "XXX(1.7)" sections are placeholders and should be removed once parallel 1.8 content is added.
Apache Subversion 1.8 is a superset of all previous Subversion releases, and is as of the time of its release considered the current "best" release. Any feature or bugfix in 1.0.x through 1.6.x is also in 1.8, but 1.8 contains features and bugfixes not present in any earlier release. The new features will eventually be documented in a 1.8 version of the free Subversion book (svnbook.red-bean.com).
This page describes only major changes. For a complete list of changes, see the 1.8 section of the CHANGES file.
Older clients and servers interoperate transparently with 1.8 servers and clients. However, some of the new 1.8 features may not be available unless both client and server are the latest version. There are also cases where a new feature will work but will run less efficiently if the client is new and the server old.
There is no need to dump and reload your repositories. Subversion 1.8 servers can read and write to repositories created by earlier versions. To upgrade an existing server installation, just install the newest libraries and binaries on top of the older ones.
Subversion 1.8 maintains API/ABI compatibility with earlier releases, by only adding new functions, never removing old ones. A program written to any previous 1.x API can both compile and run using 1.8 libraries. However, a program written for 1.8 cannot necessarily compile or run against older libraries.
There may be limited cases where the behavior of old APIs has been slightly modified from previous releases. These are cases where edge cases of the functionality has been deemed buggy, and therefore improved or removed. Please consult the API errata for more detailed information on what these APIs are and what impact these changes may have.
| New Feature | Minimum Client1 | Minimum Server | Minimum Repository | Notes |
|---|---|---|---|---|
| XXX(1.7) HTTPv2 | 1.7 | 1.7 | any | Permutations of older client/server combinations will continue to function at the pre-1.7 feature level. Server-side configuration changes might be required for optimal performance with clients that use serf. |
| 1Reminder: when using the file:// repository access method, the Subversion program is both the client and the server. | ||||
Although we try hard to keep output from the command line programs compatible between releases, new information sometimes has to be added. This can break scripts that rely on the exact format of the output. For this reason, we encourage programs which consume the output of the commandline client to consider using the --xml option, or accessing Subversion through the various bindings interfaces.
Improvements have been made to the output of svn update when updating multiple working copies at once (see issue #3693). Below is an example of the new output:
$ svn up subversion svncorp UNVERSIONED Updating 'subversion': At revision 1037740. Updating 'svncorp': At revision 288. Skipped 'UNVERSIONED' Summary of updates: Updated 'subversion' to r1037740. Updated 'svncorp' to r288. Summary of conflicts: Skipped paths: 1
There are some additional specific areas where changes made in this release might necessitate further adjustment by administrators or users. We'll cover those in this section.
Prior to this release, the section headers in Subversion's authz access files—which contain repository names and repository filesystem paths—accepted section headers that would never be looked up, because the repository filesystem path (such as /trunk/secretdir) embedded in the section header is formatted differently from how Subversion formats those paths when it looks them up in the file. Subversion 1.7 and earlier would silently ignore those sections of the authz file; directives in those sections would never apply.
That's been fixed in this release: Subversion will now error out if a section header contains a repository filesystem path that either does not begin with a slash or contains two consecutive slashes. The practical fallout, though, is that your existing authz files might be depending (perhaps unintentionally) on the old behavior and the new behavior could result in all access to items in your repositories being unexpectedly denied as a result of upgrading to Subversion 1.8. The svnauthz-validate tool, when linked to Subversion 1.8 libraries, can be used to test an authz file for validity. (The tool will error out on a file that the Subversion server will error out on.)
Up to 1.7.0, Subversion could create erroneous metadata on nodes in a FSFS-backed repository in certain situations involving concurrent commit attempts. (Only metadata was affected; file contents and properties was not.) As of 1.7.1 Subversion prevents new instances of the corruption, but only as of 1.8.0 does 'svnadmin verify' detect instances of that corruption in the history of a repository.
The fix to these issues is simple: perform a dump/load cycle. (As usual, svnsync can be used instead of dump/load.) The cycle can be done with any version of Subversion, and after the cycle the repository should be served exclusively by Subversion 1.7.5 or newer to prevent further instances of the bug from entering the repository.
See this summary of issue #4129 for more information about these problems.
Subversion 1.8 allows the use of the GnuPG Agent (gpg-agent) daemon to temporarily store passwords/passphrases used in Subversion server credentials.
To take advantage of this, you'll need Subversion binaries built with gpg-agent support, the agent itself, and a suitable pinentry program. The agent must be running, and the Subversion client will need the GPG_AGENT_INFO and GPG_TTY environment variables set correctly in order to make use of this storage mechanism.
Note that GnuPG Agent does not persist information on disk — your cached passwords will persist in memory until the agent process is terminated or its configure time-to-live threshold is reached. Note also the (in)security details of this integration, currently recorded as a code comment here.
There are far too many enhancements and new options to the command-line client to list them all here. Aside from all the ones mentioned already in these release notes, below are a few more that we consider important, but please see the 1.8.0 section in the CHANGES file for a complete list.
When using changelists in the working copy, so far there has been no convenient way to refer to the set of files which do not belong to any changelist. Subversion 1.8 allows such files to be referred to as members of the pseudo-changelist whose name is the empty string:
$ svn status M iota --- Changelist 'mylist': M A/mu $ svn status --changelist "" M iota $ svn status --changelist mylist --- Changelist 'mylist': M A/mu $
Since directories cannot be added to changelists, they will always be considered members of the "" changelist. Thus, when using the "" changelist with an operation which defaults to being recursive (such as svn status or svn commit), it might be desirable to prevent the operation from recursing on such directories by passing --depth=empty.
TODO: should the behaviour of directories with respect to membership in the "" changelist be changed?
It is not possible to add items to the "" pseudo-changelist; attempting to do so will cause the client library to raise an error:
$ svn changelist "" iota svn: E125014: Target changelist name must not be empty
There are too many new and revised APIs in Subversion 1.8.0 to list them all here. See the Subversion API Documentation page for general API information. If you develop a 3rd-party client application that uses Subversion APIs, you should probably look at the header files for the interfaces you use and see what's changed.
As noted above, a small number of APIs in
libsvn_wc have slightly changed functionality from their
historical roots. Each of these cases has been documented as an
errata,
detailing the impact of these changes. All of the errata were the result of
behavior which was deemed buggy, and the API changes are an attempt to fix
these bugs. The circumstances under which each is triggered are relatively
rare, and we anticipate the actual impact to end users will be minimal.
Language bindings have mostly been updated for the new APIs, though some may lag more than others.
The swig-py bindings have been patched to make *-imports of submodules to do the right thing: from svn.client import * will now import only symbols beginning with svn_ or SVN_. (Most of these symbols will be svn_client_* symbols, of course.) Star-imports of from svn have not changed (they import just the bare submodule names: 'fs', 'ra', etc), and star imports of from svn.core currently imports some select symbols (notably 'Pool').
This change is incompatible: code that expected symbols such as 'commit_txn' (in 'fs') and 'apr_initialize' to be pulled by a star-import will have to change. We will consider amending the list of symbols exported to a star-import as needed.
A great many bugs have been fixed. See the 1.8.0 section in the CHANGES file for details.
While there are scores of bug fixes, performance improvements, and other changes to merge-tracking, the following are the major changes. See the 1.8.0 section in the CHANGES file for a complete list.
Merges no longer record mergeinfo (describing the merge) on subtrees (that have their own explicit mergeinfo), if the subtree was unaffected by the merge. This should greatly reduce the number of spurious svn:mergeinfo property changes for users who have large numbers of sutrees with explicit mergeinfo.
The post-commit hook has grown a txn-name argument as the third positional argument (argv[3]). This argument is the name of the transaction that has become the revision triggering the post-commit hook; it is the same as the second positional argument to the pre-commit, and thus enables the pre-commit and post-commit hooks to easily transfer state between them.
Generically, if the pre-commit hook makes an expensive computation against the would-be-revision, it can store the result of that computation in a persistent hash keyed by the transaction name, which the post-commit hook will use to avoid re-doing the computation. One concrete usage of this would be to implement a pre-commit hook that tests compilability only, while a post-commit hook or a continuous integration tool runs more thorough tests --- on the binaries built at pre-commit, without having to rebuild them itself.
svnpubsub is a daemon that pushes post-commit notifications to clients in streaming JSON or XML over HTTP. The notifications are typically pushed to the daemon by a post-commit hook. The code lives in the tools/server-side/svnpubsub directory of the source tree.
A typical notification looks like this:
% curl -i http://svn.foo.org:2069/commits/xml <?xml version='1.0' encoding='UTF-8'?> <commit repository="90ea9780-b833-de11-8433-001ec94261de" revision="816214"><author>buildbot</author><date>2012-05-07 00:26:54 +0000 (Mon, 07 May 2012)</date><log>Staging update by buildbot for httpd</log><dirs_changed><path>websites/staging/httpd/trunk/content/</path><path>websites/staging/httpd/trunk/content/dev/</path></dirs_changed></commit> <stillalive>1336350418.837202</stillalive> ...
% curl -i http://svn.foo.org:2069/commits/xml
{"commits": [
{"commit": {"dirs_changed": ["httpd/site/trunk/content/dev/"], "log": "spacing", "repository": "13f79535-47bb-0310-9956-ffa450edef68", "author": "joes", "date": "2012-05-07 00:30:25 +0000 (Mon, 07 May 2012)", "revision": 1334845}},
...
svnpubsub was written by Paul Querna for the ASF Infrastructure Team.
The Subversion 1.6.x line is no longer supported. This doesn't mean that your 1.6 installation is doomed; if it works well and is all you need, that's fine. "No longer supported" just means we've stopped accepting bug reports against 1.6.x versions, and will not make any more 1.6.x bugfix releases.