      * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      *                                                     *
      *  THIS RELEASE STREAM IS OPEN TO BUG FIXES.          *
      *                                                     *
      * * * * * * * * * * * * * * * * * * * * * * * * * * * *

This file tracks the status of releases in the 1.7.x line.

See http://subversion.apache.org/docs/community-guide/releasing.html#release-stabilization
for details on how release lines and voting work, what kinds of bugs can
delay a release, etc.

Status of 1.7.21:

Candidate changes:
==================

 * r1438879
   Make 'show-diff' at the interactive conflict prompt show nicer diffs.
   Justification:
     'show-diff' produces unreadable diffs in some cases, especially with
     conflicts recorded during merges.
   Branch:
     ^/subversion/branches/1.7.x-r1438879
   Votes:
     +1: stsp
     +0: rhuijben (Shouldn't we provide a three way diff instead of guessing
                   a base to show a one way diff against based on the
                   operation?
                   .
                   I would prefer to have show-diff always work against
                   the local pristine version, instead of sometimes against
                   their or their-old (src-left) version, as that is the final
                   change I would commit.)

 * r1461760
   Additional fix related to issue #4340, "filenames containing \n corrupt
   FSFS repositories"
   Justification:
     This change makes libsvn_repos block filenames containing control
     characters. Control characters in filenames have always been rejected
     by libsvn_client, but client-side software bypassing libsvn_client
     could still commit such filenames. Control characters in filenames
     can cause problems not just in FSFS but also in dump files, unidiff,
     and possibly elsewhere. It is a good idea to make the client and
     server consistent.
     See discussion linked from issue #4340 for more information.
   Branch:
     ^/subversion/branches/1.7.x-issue4340-repos
   Votes:
     +1: stsp
     -0: danielsh (restrictions not suitable for introduction in patch release;
                   dev@ thread started 2013/05/10 9pm)

 * r1654932, r1654933, r1654934, r1654937
   Fix issue #4554, "0 file length reported in FSFS".
   Justification:
     We want 1.7 to cope with repositories that have been touched by 1.8.
     The issue causes 'svnadmin dump' to create corrupted output that fails
     to load and we provide no way to detect that problem other than loading
     the respective dump.  We also want to prevent further instances of that
     issue to be added to the repository.
   Branch:
     ^/subversion/branches/1.7.x-issue4554
   Votes:
     +1: stefan2, brane

 * r1659867
   Make editor-aborts after close edit safe.
   Justification:
     A SIGPIPE caused by cancelling a commit at the wrong time may cause
     the commit editor to return an error from editor->close_edit() which
     makes most code paths call editor->abort_edit(), causing a double
     free() of the txnroot pool.  This branch contains
     the 1.7.x equivalent of the 1.8.x and trunk patch including a similar
     fix for ra-neon.
   Branch:
     ^/subversion/branches/1.7.x-r1659867
   Votes:
     +1: rhuijben, brane
     +1: danielsh (libsvn_repos part only)

 * r1542765, r1567080, r1571214
   Add Sqlite index information.
   Justification:
     Adding this information explains to Sqlite how we use our indexes. While
     Subversion 1.7 doesn't depend on this as much as 1.8 as we didn't tune the
     queries as much at that time, this information will make several queries
     use indexes instead of table scans.
   Branch:
     ^/subversion/branches/1.7.x-r1542765
   Votes:
     +1: brane
     +1: rhuijben, stefan2 (without r1567080)

Veto-blocked changes:
=====================

 * r1409804
   Add a delimiter between the two chains in svn_error_compose_create().
   Justification:
     Allow users to tell where the second error chain starts -- avoids
     misrepresentation that the first error is caused by the second.
   Votes:
     -0: rhuijben (I'm not sure if this should be in a patch release and the
                   stacktrace where this refers to is maintainer only)
     +1: danielsh (err->file and err->line are only in maintainer builds.
                   this is about err->message which is valid in all builds)
     -1: stsp (not a bug fix, changes output in a patch release)


 * r1646230, r1646250, r1646253, r1656893, r1657182, r1657195, r1657401
   Make svnsync strip any r0 references from mergeinfo -- issue #4476.
   Justification:
     Without this is was not possible to svnsync a repository that contained
     this kind of mergeinfo that is now considered invalid but previously
     could be committed.
   Branch:
     ^/subversion/branches/1.7.x-r1646250
   Notes:
     r1643074 (nominated separately) is required for the test to work.
     I would recommend not backporting r1646250 without r1643074.
     This is also nominated for 1.8.x.
   Votes:
     -1: julianfoad (the test is failing; not essential for 1.7.x)

* r1643074
   Don't let invalid mergeinfo stop 'svnadmin load' from working.
     Part of issue #4476 "Mergeinfo containing r0 makes svnsync and svnadmin
     dump fail".
   Justification:
     The presence of 'bad' metadata in a repository should not prevent
     backing up and restoring from a backup, given that this data does not
     make the repository totally unusable.
   Notes:
     The 'svnadmin dump' part of this issue is already approved for backport.
     The 'svnsync' part of this issue is not yet fixed.
   Branch:
     ^/subversion/branches/1.7.x-r1643074
   Votes:
     -1: julianfoad (I think the fix is right but the branch doesn't merge
           properly with a plain automatic merge)

Approved changes:
=================
