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

Bug#794194: britney: Strip off Multi-Arch qualifiers in reverse dependency calculation



Control: tag -1 confirmed -moreinfo

Hello Niels,

Niels Thykier [2016-01-16 14:34 +0000]:
> Does this issue still apply to Britney at the current master branch?  We
> have removed register_reverses in favour of a different approach for
> unrelated reasons.

Yes, it does still apply. I rebased Ubuntu's britney onto current
master, and the test_multiarch_dep() test fails. So I reopened the
bug.

Current britney uses  apt_pkg.parse_depends() which already has an
option to strip off multi-arch qualifiers. It just needs to be
enabled.

Patch attached.

Thanks,

Martin

[1] https://git.launchpad.net/~ubuntu-release/+git/britney2-ubuntu/tree/tests/test_autopkgtest.py#n1233


-- 
Martin Pitt                        | http://www.piware.de
Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)
From 25871d158f65be94e11d0be564f2547e03f2b113 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin.pitt@ubuntu.com>
Date: Tue, 12 Jul 2016 09:21:15 +0200
Subject: [PATCH] Consider packages with M-A qualifiers for reverse
 dependencies

Strip of Multi-Arch qualifiers like ":any" or ":native" when building the
dependency fields, as they are not part of the package name.

This will fix cases like

  Package: ipython3
  Depends: python3:any (>= 3)

and include ipython3 in python3's reverse dependencies.

Closes: #794194
---
 britney.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/britney.py b/britney.py
index e62219a..02f1835 100755
--- a/britney.py
+++ b/britney.py
@@ -683,10 +683,10 @@ class Britney(object):
 
                 # We do not differentiate between depends and pre-depends
                 if pkgdata.depends:
-                    depends.extend(apt_pkg.parse_depends(pkgdata.depends, False))
+                    depends.extend(apt_pkg.parse_depends(pkgdata.depends, True))
 
                 if pkgdata.conflicts:
-                    conflicts = apt_pkg.parse_depends(pkgdata.conflicts, False)
+                    conflicts = apt_pkg.parse_depends(pkgdata.conflicts, True)
 
                 with builder.relation_builder(pkg_id) as relations:
 
@@ -806,7 +806,7 @@ class Britney(object):
         return sources
 
     def _parse_provides(self, pkg_id, provides_raw):
-        parts = apt_pkg.parse_depends(provides_raw, False)
+        parts = apt_pkg.parse_depends(provides_raw, True)
         nprov = []
         for or_clause in parts:
             if len(or_clause) != 1:
@@ -1149,7 +1149,7 @@ class Britney(object):
         is_all_ok = True
 
         # for every dependency block (formed as conjunction of disjunction)
-        for block, block_txt in zip(parse_depends(deps, False), deps.split(',')):
+        for block, block_txt in zip(parse_depends(deps, True), deps.split(',')):
             # if the block is satisfied in testing, then skip the block
             packages = get_dependency_solvers(block, package_t_a)
             if packages:
-- 
2.8.1

Attachment: signature.asc
Description: PGP signature


Reply to: