Contents:

1. Little "Howto Use it"
2. Explanation of how it works


1. Little "Howto Use it"
------------------------

The input file is in YAML format. Do not bother with comments, they
will be removed.

The format: Don't use tabs for indentation, use spaces.

Strings should be within "", but normally work without.
Exception: Version-numbers with an epoch really do want to be in
"". YES, THEY WANT TO (or they get interpreted in a way you don't expect
it).

Keys (The order of them does not matter, only the indentation):

short_tag:    A short tag for the transition, like apt_update
  reason:     One-line reason what is intended with it
  source:     Source package that needs to transition
  new:        New version of the target package
  rm:         Name of the Release Team member responsible for this transition
  packages:   Array of package names that are affected by this transition


The following example wants to
a.) update apt to version 0.7.12, the responsible Release Team member
is Andreas Barth, and it affects some apt related packages and
b.) wants to do something similar for lintian.

apt_update:
  packages:
    - apt
    - synaptic
    - cron-apt
    - debtags
    - feta
    - apticron
    - aptitude
  reason: "Apt needs to transition to testing to get foo and bar done"
  source: apt
  new: 0.7.12
  rm: Andreas Barth
lintian_breakage:
  reason: "Testing a new feature"
  source: lintian
  new: 1.23.45~bpo40+1
  rm: Ganneff
  packages:
    - lintian
    - python-syck


########################################################################
########################################################################


2. Explanation of how it works
------------------------------

Assume the following transition is defined:

lintian_funtest:
  reason: "Testing a new feature"
  source: lintian
  new: 1.23.45~bpo40+1
  rm: Ganneff
  packages:
    - lintian
    - python-syck

Also assume the lintian situation on this archive looks like this:
   lintian | 1.23.28~bpo.1 | sarge-backports | source, all
   lintian | 1.23.45~bpo40+1 | etch-backports | source, all

------------------------------------------------------------------------

Now, I try to upload a (NEW, but that makes no difference) version of
python-syck:

$ dak process-unchecked -n python-syck_0.61.2-1~bpo40+1_i386.changes 

python-syck_0.61.2-1~bpo40+1_i386.changes
REJECT
Rejected: python-syck: part of the lintian_funtest transition.

Your package is part of a testing transition designed to get lintian migrated
(it currently is at version 1.23.28~bpo.1, we need version 1.23.45~bpo40+1)

Transition description: Testing a new feature

This transition is managed by the Release Team, and Ganneff
is the Release-Team member responsible for it.
Please contact Ganneff or debian-release@lists.debian.org if you
need further assistance.

------------------------------------------------------------------------

Lets change the definition of the transition, assume it is now:

lintian_funtest:
  reason: "Testing a new feature"
  source: lintian
  new: 1.22.28~bpo.1
  rm: Ganneff
  packages:
    - lintian
    - python-syck

Which checks for a version older than the version actually available. Result:

dak process-unchecked -n python-syck_0.61.2-1~bpo40+1_i386.changes 

python-syck_0.61.2-1~bpo40+1_i386.changes
NEW for etch-backports
(new) python-syck_0.61.2-1~bpo40+1.diff.gz extra python
(new) python-syck_0.61.2-1~bpo40+1.dsc extra python
(new) python-syck_0.61.2-1~bpo40+1_i386.deb extra python
PySyck python bindings to the Syck YAML parser kit
 Syck is a simple YAML parser kit.
 .
[...] the whole stuff about a new package.

------------------------------------------------------------------------

For completeness, change the transition to (exact existing version):
lintian_funtest:
  reason: "Testing a new feature"
  source: lintian
  new: 1.23.28~bpo.1
  rm: Ganneff
  packages:
    - lintian

and the result is:

dak process-unchecked -n python-syck_0.61.2-1~bpo40+1_i386.changes 

python-syck_0.61.2-1~bpo40+1_i386.changes
NEW for etch-backports
[... we know this ...]

------------------------------------------------------------------------

The second part is the check_transitions script.
For that we take the following transitions as example:

apt_update:
  reason: "Apt needs to transition to testing to get foo and bar done"
  source: apt
  new: 0.2.12-1+b1.3
  rm: Andreas Barth
  packages:
    - apt
    - synaptic
    - cron-apt
    - debtags
    - feta
    - apticron
    - aptitude
lintian_funtest:
  reason: "Testing a new feature"
  source: lintian
  new: 1.23.45~bpo40+1
  rm: Ganneff
  packages:
    - lintian
    - python-syck
bar_breaks_it:
  reason: We don't want bar to break it
  source: bar
  new: "9:99"
  rm: Ganneff
  packages:
    - kdelibs
    - qt4-x11
    - libqt-perl

Running check-transitions ends up with the following output:

Looking at transition: lintian_funtest
 Source:      lintian
 New Version: 1.23.45~bpo40+1
 Responsible: Ganneff
 Description: Testing a new feature
 Blocked Packages (total: 2): lintian, python-syck

Apt compare says: -2
This transition is still ongoing, we currently have version 1.23.28~bpo.1
-------------------------------------------------------------------------

Looking at transition: apt_update
 Source:      apt
 New Version: 0.2.12-1+b1.3
 Responsible: Andreas Barth
 Description: Apt needs to transition to testing to get foo and bar done
 Blocked Packages (total: 7): apt, synaptic, cron-apt, debtags, feta, apticron, aptitude

Apt compare says: 4
This transition is over, the target package reached testing, removing
apt wanted version: 0.2.12-1+b1.3, has 0.6.46.4-0.1~bpo.1
-------------------------------------------------------------------------

Looking at transition: bar_breaks_it
 Source:      bar
 New Version: 9:99
 Responsible: Ganneff
 Description: We don't want bar to break it
 Blocked Packages (total: 3): kdelibs, qt4-x11, libqt-perl

Transition source bar not in testing, transition still ongoing.
-------------------------------------------------------------------------
I: I would remove the apt_update transition


Changing our transition definitions for lintian (keeping the rest as
above) to

lintian_funtest:
  reason: "Testing a new feature"
  source: lintian
  new: 1.22.28~bpo.1
  rm: Ganneff
  packages:
    - lintian
    - python-syck

now we get

Looking at transition: lintian_funtest
 Source:      lintian
 New Version: 1.22.28~bpo.1
 Responsible: Ganneff
 Description: Testing a new feature
 Blocked Packages (total: 2): lintian, python-syck

Apt compare says: 1
This transition is over, the target package reached testing, removing
lintian wanted version: 1.22.28~bpo.1, has 1.23.28~bpo.1
-------------------------------------------------------------------------

Looking at transition: apt_update
 Source:      apt
 New Version: 0.2.12-1+b1.3
 Responsible: Andreas Barth
 Description: Apt needs to transition to testing to get foo and bar done
 Blocked Packages (total: 7): apt, synaptic, cron-apt, debtags, feta, apticron, aptitude

Apt compare says: 4
This transition is over, the target package reached testing, removing
apt wanted version: 0.2.12-1+b1.3, has 0.6.46.4-0.1~bpo.1
-------------------------------------------------------------------------

Looking at transition: bar_breaks_it
 Source:      bar
 New Version: 9:99
 Responsible: Ganneff
 Description: We don't want bar to break it
 Blocked Packages (total: 3): kdelibs, qt4-x11, libqt-perl

Transition source bar not in testing, transition still ongoing.
-------------------------------------------------------------------------
I: I would remove the lintian_funtest transition
I: I would remove the apt_update transition


Not using the -n switch would turn the I: in actual removals :)
The check-transition command is meant for the release team to always run
it when they change a transition definition. It checks if the yaml is
valid and can be loaded (but if not the archive simply does no reject)
and also shows a nice overview.
