Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/cygwin-apps/calm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Turney <jon.turney@dronecode.org.uk>2023-01-11 13:54:57 +0300
committerJon Turney <jon.turney@dronecode.org.uk>2023-01-11 15:32:04 +0300
commitd8c6dd106db65c039295e2ec76ffbda50f6d0bd2 (patch)
treecfab46d3e21a1771baaf97d6772d49f56328b36a
parent36532b0908f702a4567a9599c08fddc9795f1022 (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-xcalm/package.py15
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():