# Apache Subversion 1.12 Release Notes

Subversion 1.12 is a 6-month regular release. See Subversion 1.12 is a Regular Release below.

## What's New in Apache Subversion 1.12 ¶

- Improved Shelving (experimental)
- Improved Commit Checkpointing (experimental)
- Improvements to the Conflict Resolver
- Many enhancements and bug fixes
- Known issues in the release

Apache Subversion 1.12 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.11.x is also in 1.12, but 1.12 contains features and bugfixes not present in any earlier release. The new features will eventually be documented in a 1.12 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.12 section of the CHANGES file.

## Compatibility Concerns ¶

Older clients and servers interoperate transparently with 1.12 servers and clients. However, some of the new 1.12 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.12 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.12 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.12 libraries. However, a program written for 1.12 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 Compatibility Table ¶

New Feature | Minimum Client1 | Minimum Server | Minimum Repository | Notes
--- | --- | --- | --- | ---
Shelving (experimental) | 1.12 | any | any | shelves created by 1.10 are not compatible—see the 1.11 transition notes
Commit checkpointing (experimental) | 1.12 | any | any |
1Reminder: when using the `file://` repository access method, the Subversion program is both the client and the server.

### Upgrading the Working Copy ¶

Subversion 1.12 uses the same working copy format as Subversion 1.8 through 1.11.

Before using Subversion 1.12 with an existing Subversion 1.7 or older working copy, users will be required to run the `svn upgrade` command to upgrade working copy metadata to the new format. This command may take a while in some cases, and for some users, it may be more practical to simply checkout a new working copy.

Note: Subversion 1.12 cannot upgrade working copies that a 1.6 client would have refused to operate upon before an `svn cleanup` was run (with a 1.6 client). In other words, before upgrading to 1.8 or newer, a 1.6 or older client must be used to run `svn cleanup` on all 1.6 or older working copies that require cleanup. Likewise, Subversion 1.12 cannot upgrade corrupt working copies. Unfixable problems can arise from missing or corrupt meta-data inside `.svn` directories. Such damage to the working copy is permanent, and cannot be fixed even if `svn cleanup` is run prior to the upgrade.

If your working copy does not upgrade cleanly, please check out a new one.

## New Features ¶

## Enhancements and Bugfixes ¶

### Command-line client improvements (client) ¶

#### Improved Shelving (experimental) ¶

Shelving (issue #3625), first introduced in Subversion 1.10, is improved in 1.12 to handle more kinds of changes more robustly.

WARNING: This feature is designated "EXPERIMENTAL" in 1.12. It is being released in an early form while development continues. It is expected to change significantly during and after the 1.12.x series. There is no promise of backward compatibility while it remains experimental.

#### Commit checkpointing (experimental) ¶

Commit checkpointing (issue #3626), first introduced in Subversion 1.11, is improved in 1.12 to handle more kinds of changes more robustly.

WARNING: This feature is designated "EXPERIMENTAL" in 1.12. It is being released in an early form while development continues. It is expected to change significantly during and after the 1.12.x series. There is no promise of backward compatibility while it remains experimental.

#### Improvements to the interactive conflict resolver ¶

The interactive conflict resolver now supports some cases where items were moved to disparate locations. Support for unversioned items in the working copy has been improved as well. The table below lists the newly supported cases and available resolution options for each.

local change | incoming change | operation | resolution options
--- | --- | --- | ---
move file | move file | update, merge | merge (applies textual changes only and leaves the tree structure of the working copy as it is) move and merge (changes the file's location in the working copy to match that of the merge source before merging changes)
move directory | move directory | merge | merge (applies changes to the corresponding directory and leaves the tree structure of the working copy as it is) move and merge (changes the directory's location in the working copy to match that of the merge source before merging changes)
unversioned file | add file | update, switch | merge (merges the unversioned file with the incoming file)
unversioned directory | add directory | update, switch | merge (re-adds directory to working copy but leaves any on-disk files as they were)

During `svn update`, the deletion of a directory which contains unversioned items but is otherwise unmodified no longer causes a tree conflict. This avoids tree conflicts caused by software build artifacts in the working copy, for example.

Several bugs have been fixed in the conflict resolver, including a case where text conflicts were created with the incoming changes (theirs) and local changes (mine) swapped within text conflict markers. Which caused unexpected results when the `svn resolve` command was used with the `--accept theirs` or `--accept mine` options.

Support for unversioned items and fixes for conflict resolver bugs found during the development of Subversion 1.12 have been backported to the Subversion 1.10 and Subversion 1.11 release series as well.

### Server-side improvements ¶

Subversion servers will now ignore empty group definitions in their path-based authorization rules. The `svnauthz` command will print a warning if it detects empty group definitions.

### Client- and server-side improvements ¶

On Unix-like systems, client-side storage of passwords in plaintext on disk is now disabled by default at compile-time. Password caching mechanisms based on Gnome Keyring, Kwallet, or GPG-Agent, are recommended instead.

This change does not affect Windows or Mac OS platforms, where passwords have always been stored in an encrypted representation.

Behaviour of copy operations with a repository source and a working copy target has been improved:

- Existing parent directories are now handled correctly.
- Peg and operative revisions are now handled correctly (see issue #4785 for details).

The `svn list` command now avoids truncation of long author names by dynamically adjusting the width of columns displayed.

The `svn list` command now supports a `--human-readable` (`-H`) option which will display sizes in human-readable units (Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes and Petabytes).

The `svn info` command can now display the size of files in the repository. The file size is only displayed if the target of `svn info` is a file URL.

The `svn cleanup` command, when asked to remove unversioned or ignored items, will now remove directories even if they are write-protected.

### API changes, improvements and language bindings (client and server) ¶

## Known issues in the release ¶

There are some known issues in the Subversion 1.12 releases. These may be fixed in later 1.12.x releases.

### Ruby bindings require swig 3.0.9 ¶

This section only affects those who build Subversion from a working copy. If you build Subversion from a tarball or zip file, you may skip this section.

The Ruby bindings are known not to build with swig version 3.0.8 (and only that version) due to swig issue #602. We recommend to use swig 3.0.9 or newer.

The failure is detected by the test suite. To test whether your version of swig is affected, run `make check-swig-rb`. (Some distros might have backported the swig patch into their swig-3.0.8 packages.)

The Perl and Python bindings are not affected.

### Subversion 1.12.0 fails to compile against APR 1.7.0 ¶

Subversion 1.12.0 and older cannot be built out of the box with APR-1.7.0. We expect to fix this problem in Subversion 1.12.1. This problem affects the Subversion 1.10 and Subversion 1.11 release series as well.

## Subversion 1.12 is a Regular Release ¶

Subversion 1.12 is one of the new 6-month regular releases with an emphasis on introducing new features more quickly and a shorter support period. It will be supported for 6 months, and then will be superseded by the next regular release.

Subversion 1.11, the previous regular release, is no longer supported.

Subversion 1.9 and 1.10 are still supported, now being regarded as long-term support (LTS) releases. The next LTS release is expected to be numbered 1.14, to be released two years after 1.10.

For further details see How We Plan Releases.