A guide to the various backport scripts:
========================================

There two primary functions:

F1. Auto-merge bot; the nightly svn-role commits.

F2. Conflicts detector bot; the svn-backport-conflicts-1.9.x buildbot task.

And two interactive functions¹:

F3. Reviewing STATUS nominations and casting votes.

F4. Adding new entries to STATUS.



The scripts are:

backport.pl:
    oldest script, implements [F1], [F2], and [F3].  As of Feb 2018, used in
    production by svn-role (running on svn-qavm3) and by svn-backport-conflicts-1.9.x
    (a buildbot job).

nominate.pl:
    Symlink to backport.pl.  Implements [F4].  (The script inspects its argv[0].)

backport_tests_pl.py:
    Regression tests for backport.pl.


backport/*.py:
    New Python-based library implementation of STATUS parsing (status.py) and
    of merging nominated revisions (merger.py).  Colloquially referred to as
    'backport.py', even though there is no script by that name.  Written in
    Python 3.

    The modules include their unit tests, see 'python3 -munittest
    backport.status' and 'python3 -munittest backport.merger'.  However,
    changes to these files should be tested both by the unit tests and by the
    backport_tests_py.py blackbox/regression tests.

detect-conflicting-backports.py:
    Implementation of [F2] using backport.py.
    Not currently used in production.

merge-approved-backports.py:
    Implementation of [F1] using backport.py.
    Not currently used in production.

backport_tests_py.py:
    Regression tests for detect-conflicting-backports.py and merge-approved-backports.py


backport_tests.py:
    Common part of backport_tests_pl.py and backport_tests_py.py.  Uses the
    svntest framework (../../subversion/tests/cmdline/svntest/), which is
    written in Python 2.

    Note that backport_tests.py and backport/*.py are written in different
    languages, so they never 'import' each other.  backport_tests.py invokes
    detect-conflicting-backports.py, merge-approved-backports.py, and
    backport.pl in the same manner: through subprocess.check_call().

backport_tests_data/backport*.dump:
    Expected output files for backport_tests.py; see the BackportTest
    decorator in backport_tests.py.


All scripts can be run with '--help' to display their usage messages.

backport.pl is considered deprecated since backport.py is better architected
and is written in a language that many more active developers are comfortable
with.  The unattended jobs [F1] and [F2] should be converted to using
backport.py whenever someone gets around to do the legwork.  The interactive
versions [F3] and [F4] are still in active use, however, so the physical
backport.pl script should be kept around until Python versions of these are
available.


TODO: document that "Notes: ... --accept=foo ..." is parsed, see backport_tests.py #3.


¹ For backport.pl's interactive features, see:
<http://mail-archives.apache.org/mod_mbox/subversion-dev/201503.mbox/%3c20150304225114.GD2036@tarsus.local2%3e>
