From d8c6dd106db65c039295e2ec76ffbda50f6d0bd2 Mon Sep 17 00:00:00 2001 From: Jon Turney Date: Wed, 11 Jan 2023 10:54:57 +0000 Subject: Look for multiple obsoletes of the same package This probably isn't always wrong, but seems like it's something we don't want or handle well at the moment (the solver will pick exactly one replacement package to install, since that's all that needed to satisfy the provides). --- calm/package.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/calm/package.py b/calm/package.py index edc3623..19e85d1 100755 --- a/calm/package.py +++ b/calm/package.py @@ -678,6 +678,7 @@ def validate_packages(args, packages, valid_requires_extra=None, missing_obsolet packages[p].obsolete = False packages[p].rdepends = set() packages[p].build_rdepends = set() + packages[p].obsoleted_by = set() packages[p].orphaned = False # perform various package validations @@ -910,13 +911,16 @@ def validate_packages(args, packages, valid_requires_extra=None, missing_obsolet lvl = logging.ERROR logging.log(lvl, "package '%s' version '%s' has empty source tar file" % (p, vr)) - # build the set of packages which depends: on this package (rdepends), and - # the set of packages which build-depends: on it (build_rdepends) + # build inverted relations: + # the set of packages which depends: on this package (rdepends), + # the set of packages which build-depends: on it (build_rdepends), and + # the set of packages which obsoletes: it (obsoleted_by) for p in packages: for hints in packages[p].version_hints.values(): for k, a in [ ('depends', 'rdepends'), - ('build-depends', 'build_rdepends') + ('build-depends', 'build_rdepends'), + ('obsoletes', 'obsoleted_by'), ]: if k in hints: dpl = hints[k].split(',') @@ -926,6 +930,11 @@ def validate_packages(args, packages, valid_requires_extra=None, missing_obsolet if dp in packages: getattr(packages[dp], a).add(p) + # warn about multiple obsoletes of same package + for p in sorted(packages.keys()): + if len(packages[p].obsoleted_by) >= 2: + logging.debug("package '%s' is obsoleted by more than one package: %s" % (p, ','.join(packages[p].obsoleted_by))) + # make another pass to verify a source tarfile exists for every install # tarfile version for p in packages.keys(): -- cgit v1.2.3