[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#786803: Please consider versioned Provides



On 2015-05-25 20:00, David Prévot wrote:
> Package: release.debian.org
> Severity: normal
> User: release.debian.org@packages.debian.org
> Usertags: britney
> 
> Hi,
> 
> Now that both dpkg and apt are able to use versioned Provides, it would
> be nice to take it into consideration for testing migrations.
> 

Hi David,

Thanks for your interest and your initial patches.  In particular,
thanks for taking the time to construct a test case.

> Please find attached a basic new test for britney2-tests and a simple
> documentation update for britney’s dependencies.
> 
> I tried to figure out what would be needed to make that work, but
> unfortunately don’t understand much Python. The last patch doesn’t do
> anything useful, but at least doesn’t break the existing testsuite (I
> guess there is at least something to fix around there)…
> 
> [...]
> 
> Regards
> 
> David
> 

Ok - unfortunately, I suspect your last patch does not quite do what you
wanted it do to.  See below for comments.

> [...]
> 
> 
> 0002-britney.py-Add-support-for-versioned-Provides.patch
> 
> 
> From 872c7dfb3d520fd93da2677c3091c3a59d825ff2 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?David=20Pr=C3=A9vot?= <david@tilapin.org>
> Date: Sun, 24 May 2015 10:43:06 -0400
> Subject: [PATCH 2/2] britney.py: Add support for versioned Provides
> 
> ---
>  britney.py | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/britney.py b/britney.py
> index 5c2171e..67b7e61 100755
> --- a/britney.py
> +++ b/britney.py
> @@ -989,11 +989,9 @@ class Britney(object):
>              for prov in binaries[1].get(name, []):
>                  if prov not in binaries[0]: continue
>                  package = binaries[0][prov]
> -                # A provides only satisfies:
> -                # - an unversioned dependency (per Policy Manual §7.5)
> -                # - a dependency without an architecture qualifier
> -                #   (per analysis of apt code)
> -                if op == '' and version == '' and archqual is None:
> +                # A provides only satisfies a dependency without an
> +                # architecture qualifier (per analysis of apt code)
> +                if ((op == '' and version == '') or (op == '=' and version != '')) and archqual is None:
>                      packages.append(prov)
>  
>          return packages
> -- 2.1.4

The "op" and "version" here are both from the dependency.  From your
test case, that would be:

"""
  Package: pkg-b
  [...]
  Depends: pkg-c (>= 2.0), pkg-c (<< 3.0~)
                  ^^^^^^          ^^^^^^^
"""

With the patch any unversioned dependency on a virtual package OR
(wrongly) a strictly equals version dependency on a virtual package will
always be considered satisfied.  I.e. Britney would now consider the
following satisfied by pkg-a from your test case.

"""
  Package: pkg-b
  [...]
  Depends: pkg-c (= 9999999)
"""

Sadly, there is no easy fix, because there are assumptions about
provides being unversioned in multiple places in Britney.  This will
require a slightly larger fix and quite possibly a lot of fixes to
internal data structures.

Thanks,
~Niels


Reply to: