diff options
author | Jon Turney <jon.turney@dronecode.org.uk> | 2023-01-11 13:54:57 +0300 |
---|---|---|
committer | Jon Turney <jon.turney@dronecode.org.uk> | 2023-01-11 15:32:04 +0300 |
commit | d8c6dd106db65c039295e2ec76ffbda50f6d0bd2 (patch) | |
tree | cfab46d3e21a1771baaf97d6772d49f56328b36a | |
parent | 36532b0908f702a4567a9599c08fddc9795f1022 (diff) |
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).
-rwxr-xr-x | calm/package.py | 15 |
1 files 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(): |