Subversion 1.5 Release Notes

What's New in Subversion 1.5

Subversion 1.5 is a superset of all previous Subversion releases, and is considered the current "best" release. Any feature or bugfix in 1.0.x through 1.4.x is also in 1.5, but 1.5 contains features and bugfixes not present in any earlier release. The new features will eventually be documented in a 1.5 version of the free Subversion book, see svnbook.red-bean.com.

Compatibility Concerns

Older clients and servers interoperate transparently with 1.5 servers and clients. However, some of the new 1.5 features (e.g., merge tracking) may not be available unless both client and server are the latest version . There are also cases (e.g., sparse checkouts) 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.5 can read repositories created by earlier versions. To upgrade an existing installation, just install the newest libraries and binaries on top of the older ones.

Subversion 1.5 maintains API/ABI compatibility with earlier releases, by only adding new functions, never removing old ones. A program written to the 1.0, 1.1, 1.2, 1.3, or 1.4 API can both compile and run using 1.5 libraries. However, a program written for 1.5 cannot necessarily compile or run against older libraries.

New Feature Compatibility Table

New Feature Minimum Client Minimum Server Minimum Repository Notes
Merge tracking 1.5 1.5 1.5
Sparse checkouts 1.5 any any
Interactive conflict resolution 1.5 any any
Changelist support 1.5 any any
Relative URLs, peg revisions in svn:externals 1.5 any any
Cyrus SASL support for ra_svn and svnserve any*, 1.5 any*, 1.5 any *Limited, see SASL and svn:// compatibility
Improved support for large deployments on FSFS, via sharding any*, 1.5 1.5 1.5 *1.5 required for file:// compatibility
Improved FSFS optimizability, via immutable file isolation any*, 1.5 1.5 1.5 *1.5 required for file:// compatibility
WebDAV transparent write-through proxy any 1.5* any *Apache 2.2 server also required
Improvements to copy and move 1.5 any*, 1.5 any *Limited, see Copy/move-related improvements
Speed improvements, cancellation response improvements 1.5 any any
Easier to try experimental ra_serf DAV access module 1.5 any any

Working Copy and Repository Format Changes

The working copy format has been upgraded. This means that 1.4 and older Subversion clients will not be able to work with working copies produced by Subversion 1.5. Working copies are upgraded automatically.

Similarly, the repository format has changed, meaning that 1.4 and older versions of Subversion tools that normally access a repository directly (e.g. svnserve, mod_dav_svn, svnadmin) won't be able to read a repository created by Subversion 1.5. But, repositories are not upgraded automatically.

Working Copy Upgrades

WARNING: if a Subversion 1.5 client encounters a pre-1.5 working copy, it will automatically upgrade the working copy format as soon as it touches it, making it unreadable by older Subversion clients. If you are using several versions of Subversion on your machine, be careful about which version you use in which working copy, to avoid accidentally upgrading a working copy. (But note that this "auto upgrade" behavior does not occur with the repositories, only working copies.)

If you accidentally upgrade a 1.4 working copy to 1.5, and wish to downgrade back to 1.4, use the change-svn-wc-format.py script. See this FAQ entry for details, and run the script with the --help option for usage instructions.

Repository Upgrades

The Subversion 1.5 server works with 1.4 and older repositories, and it will not upgrade such repositories to 1.5 unless specifically requested to via the svnadmin upgrade command. This means that some of the new 1.5 features will not become available simply by upgrading your server: you will also have to upgrade your repositories. (We decided not to auto-upgrade repositories because we didn't want 1.5 to silently make repositories unusable by 1.4 — that step should be a conscious decision on the part of the repository admin.)

After running svnadmin upgrade, you may wish to also run the svn-populate-node-origins-index program on the repository. Subversion 1.5 maintains a node-origins index for each repository, and builds the index lazily as the information is needed. But for old repositories with lots of revisions, it's better to create the index in one step, using the aforementioned tool, than to have live queries be slower until the index has built itself. See issue #3024 for details.

Command Line Output Changes

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. Unfortunately, we are not able to enumerate all of the output changes in 1.5, but one of them is that conflict markers in files now match the file's defined eol-style.

SASL and svn:// compatibility

All 1.x clients, with or without Cyrus SASL support, will be able to authenticate against all 1.x servers that do not have Cyrus SASL enabled. Note that the CRAM-MD5 and ANONYMOUS mechanisms are built into Subversion, so you'll be able to use them even if the corresponding Cyrus SASL plugins are missing.

1.x clients without Cyrus SASL support will be able to authenticate against 1.5+ servers with SASL enabled, provided the server allows the CRAM-MD5 and/or ANONYMOUS mechanisms.

1.5+ clients with Cyrus SASL support will be able to authenticate against 1.5+ servers with SASL enabled, provided at least one of the mechanisms supported by the server is also supported by the client.

See this section for more information on using Cyrus SASL with Subversion.

Custom revprops may now need to be examined by pre-commit hooks

Each revision in Subversion has a set of revision properties associated with it; in addition to the standard log message, author, and date, arbitrary user-defined properties can be set. These properties are not themselves versioned, so there is no way to revert changes to them. Because of this, you cannot modify revprops on a committed revision without setting up a pre-revprop-change hook on the server. Before Subversion 1.5, only the three standard revprops could be set at commit time; administrators using hooks to control the contents of the three standard revprops needed to check during pre-commit and pre-revprop-change, but for custom revprops, only pre-revprop-change appeared relevant.

Subversion 1.5 adds a --with-revprop option to svn commit which allows users to specify revprops for revisions as they commit them. Thus, in Subversion 1.5, it is possible for revproperties to be set on revisions without any pre-revprop-change. The pre-commit hook can examine the transaction's revision properties before it is committed (just like many servers already use pre-commit to check for properly formatted log messages, e.g.).

This means that if you previously relied on pre-revprop-change to control the ability to write to revprops (as opposed to just keeping track of their history), you may want to add similar controls to pre-commit.

New Features

Merge tracking (foundational) (client and server)

Merge tracking means Subversion keeps track of what changes have been merged where. This reduces the overhead involved in maintaining branches, and gives users a way to inquire what changes are merged — or are available to be merged — on different lines of development.

The merge tracking support in Subversion 1.5 is "foundational": its basic functionality is implemented, but there are still parts of our original spec that remain to be done, and merging is sometimes too slow. There will be merge tracking improvements in Subversion 1.5.1 and afterwards. In the meantime:

Overview

Subversion's merge tracking is designed to:

  • Reduce the bookkeeping overhead for branch maintenance
  • Avoid common cases of the "repeated merge" problem
  • Allow for cherry-picking of changes

Each changeset is identified by its revision number, and merged changesets are recorded in the new svn:mergeinfo property (known colloquially as "mergeinfo") set on the destination of the merge. Subversion keeps mergeinfo up-to-date automatically, but there is also a way to record/unrecord merges manually, since there will always be cases where a human knows something that Subversion doesn't.

User interface

Merging changes from (say) trunk to a branch no longer requires that you specify the revision range. Instead, each time you want to sync up with trunk, you can just do:

   $ cd BRANCH_WORKING_COPY
   $ svn merge URL_TO_TRUNK

Subversion will figure out what changes from URL_TO_TRUNK have not yet been merged and pull in just those changes. When it's time to merge the branch back to trunk, do this:

   $ cd TRUNK_WORKING_COPY
   $ svn merge --reintegrate URL_TO_BRANCH

Below is a more formal description of all the merge-tracking-related interface changes.

The svn merge command takes two new options: --record-only and --reintegrate.

The --record-only option works with -r and does exactly what you think it does: it marks a revision as merged (or unmerged, if using the "-" revision number negation syntax), without actually changing anything besides the mergeinfo. For example, this would be useful when someone has hand-edited a file in such a way as to effectively incorporate a change that was already made somewhere else. Rather than have the original change be ported over in the next synchronization merge, thus risking textual conflicts wherever the two versions trivially differ, you can just record the change as already merged. (See the merge-tracking requirements, and Blocking Changes in the Subversion book, for more details.)

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-reintegrate">

The --reintegrate option is used when merging a branch back to trunk; it checks for some common safeguard conditions and then does the merge in a fast and efficient way. See Blockin-rei