Cleanly split doop_source into a (small) part about source packages
and a (longer) part about binary packages.
Signed-off-by: Niels Thykier <niels@thykier.net>
Coverage suggests that the conditions are always true. If so, we can
replace the "elif" with a regular "if" - but for now, lets keep an
assert.
Signed-off-by: Niels Thykier <niels@thykier.net>
Add a check to ensure we do not create broken test data (as happened
recently, where the architecture values were swapped for a single
binary). A cold hard failure like this is easier to debug
compared to Britney playing "garbage in, garbage out".
Signed-off-by: Niels Thykier <niels@thykier.net>
Add some "no cover" to some unrecoverable exceptions
(e.g. misconfiguration) or base-class methods that are not intended to
be invoked.
Signed-off-by: Niels Thykier <niels@thykier.net>
This gives Policies the opportunity to see if a previous check
(build/installability) or earlier policies already invalidated the update. This
allows writing policies that work on groups of packages, or skipping expensive
checks (such as triggering autopkgtests while the package is not built or
installable yet).
Signed-off-by: Niels Thykier <niels@thykier.net>
Why duplicate that in the configuration when Britney can just pull it
in the Release file for testing? :)
Closes: Debian/britney2#11
Signed-off-by: Niels Thykier <niels@thykier.net>
As a side effect, remove mips64el from NEW_ARCHES as we no longer need
that as a work around.
Closes: Debian/britney2#12
Signed-off-by: Niels Thykier <niels@thykier.net>
It is unwieldy to have one half of output data generation in the policy but not
the other half of updating the excuse. Now that apply_policy() gets the excuse
object as argument we can move everything there.
Signed-off-by: Niels Thykier <niels@thykier.net>
This allows tests to check whether there are any missing builds or old
binaries, so that expensive actions such as "trigger an autopkgtest" are not
done too early/in vain.
Signed-off-by: Niels Thykier <niels@thykier.net>
For future policies such as running autopkgtests it is important to know
whether a package has built, so that expensive actions such as "trigger an
autopkgtest" are not done too early/in vain.
This requires dropping the "age != 0" check for adding the out-of-date-ness to
the Excuse, as the policies now run later. But this check only applied to an
infinitesimal age, and even with age == 0 it is still a valid excuse that there
are missing binaries.
Signed-off-by: Niels Thykier <niels@thykier.net>
FAILED/SUCCESS lines would be separated by a whitespace from the list
of architectures, but not itself followed by whitespace. This is slightly
confusing, as one could interpret it as being a heading for the following
block of tested packages, rather that the final result of the previous
block.
This includes refining "HINTS_ALL" to cover all hints added at
runtime.
Currently, it is not very useful. However, a later commit will allow
policies to use this feature.
Signed-off-by: Niels Thykier <niels@thykier.net>
For items not having an age requirements (e.g. urgency=critical)
always list the "missing build" note if present.
Signed-off-by: Niels Thykier <niels@thykier.net>
This hint will block all "new" source migrations. Source migrations
for packages already in testing will be affected by this. As usual,
this hint can be overruled by an unblock hint.
Closes: GH#8
Signed-off-by: Niels Thykier <niels@thykier.net>
Reduce a "loop over all valid items" to a "loop over an item's
dependencies + reverse dependencies". For sparse graphs, this
is much more efficient.
Signed-off-by: Niels Thykier <niels@thykier.net>
python-apt's "TagFile" seems to cut the field short if it meets a
comment. Therefore allow comments in the actual field value to avoid
this nasty behaviour.
Signed-off-by: Niels Thykier <niels@thykier.net>
Packages in main should not need them. Presuming we eventually make
Britney enforce separation between components, "non-free" seems like a
better default.
Signed-off-by: Niels Thykier <niels@thykier.net>
If there is a regression in "present-and-installable" constraints (on
non-break architectures), then discard the item even if the nuninst
counters have improved.
Signed-off-by: Niels Thykier <niels@thykier.net>
For (non-hint) migrations, split the set of affected into two
parts; one for reverse dependencies and one "negative dependencies"
(e.g. Conflicts).
If there are only regressions in the nuninst after checking the first
set, then there is no reason to continue with the second set (as
"negative dependencies" can only make it worse at that point).
Signed-off-by: Niels Thykier <niels@thykier.net>
Ideally we would reject all items with known unsatisfiable
dependencies as they would not be installable in testing. However,
there are a few known corner cases where we still want to migrate them
(notably when they are already broken in testing).
This commit is an attempt to weed out some of the "obviously" broken
items that will not successfully migrate.
Signed-off-by: Niels Thykier <niels@thykier.net>
In the next commit, the binary packages will be turned into
namedtuples and will become immutable objects.
Signed-off-by: Niels Thykier <niels@thykier.net>
In an architecture only migration, we currently see two notes for
every arch:all packages:
* Ignoring "new" arch:all package
* Ignoring "removal" of arch:all package
But a closer look at the situation is that the arch:all packages is
generally the same in both testing and the source suite.
This commit removes these notes when the arch:all is the same in both
suites.
Signed-off-by: Niels Thykier <niels@thykier.net>
There was an implicit assumption in Britney that was violated recently
(presumbly in 12d9ae8). This assumption is that a source package will
reference the *latest* version of an arch:all package; even if that
version is not built by that source (version).
Image the following packages:
* p-all/1 and p-all/2 are arch:all packages.
- p-all/1 is generally superseded by p-all/2 except it has not
been removed yet (regardless of why that happens).
* src-a/2 builds p-all/2.
When Britney loads the packages (assuming packages are sorted[1]):
* p-all/1 is read and associated with src-a/2 (despite not being
built from that source)
* p-all/2 is read afterwards. It would replace p-all/1 and be
assoicated with src-a/2 as well.
- Prior to 12d9ae8, the assoication would be "pkg, arch" and
therefore the same.
- In 12d9ae8a and after, the association would include version
and both would be associated at the same time.
* Since p-all/1 is discarded, it is never added to the
installability tester (nor the solver). It then promptly throws
an exception when asked to deal with a package it believe does
not exist.
- This can trivially be solved by removing the association
between p-all/1 and src-a/2 when p-all/2 is read.
So far so good. Unfortunately, this adds another another problem!
When Britney migrates a binNMU, she currently removes *all* binary
packages on that architecture - *including* the arch:all packages.
This works out in the end because the arch:all packages be re-added
since they associated with the source package.
At first glance, this appears to be a non-issue until you add
hijacking to the mix. This is *exactly* the case behind #709460.
However, now we end up in a situation where the arch:all package is
removed during binNMU and not re-added (because the arch:all package
is not associated with *that* source any more).
This commit fixes all of the above by:
1) Correctly disassociating superseded arch:all packages from their
source packages
2) Falsely associating the "new" arch:all package to the source that
provided the superseded arch:all package (to avoid issues with
binNMUs and hijacked packages).
- This should probably be undone at some point when Britney does
not need this "hack" any more.
This fix is currently relying on the packages being sorted. But so
did the fix for #709460 (see [1] again). It might be prudent to fix
that as well (or at least reject the packages file rather than produce
"random" results).
[1] Which is another assumption we have been relying and that is
currently satisfied.
Signed-off-by: Niels Thykier <niels@thykier.net>
* A package being removed is *not* affected
- It will just be filtered out later in "check_packages"
* Since all transitive reverse dependencies will be added to
"affected" at the end of the method, there is no reason to
find the immediate set of reverse dependencies of a package
if the package is added itself as well.
Signed-off-by: Niels Thykier <niels@thykier.net>
Adds a --components command line argument (and corresponding config file
option). If specified, package info is expected to be in the usual Debian
mirror layout, ie:
testing/source/Sources
testing/binary-${ARCH}/Packages
(nthykier: Squashed, rebased and did some porting to Python3)
Signed-off-by: Niels Thykier <niels@thykier.net>