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-16 20:24:27 +0300
committerJon Turney <jon.turney@dronecode.org.uk>2023-01-19 16:24:53 +0300
commit12f3fd73653116c5b8601e0dd0e44bb5ef36cdd7 (patch)
treee5aca7be6aa07abb7775b3603276b7f460f48e07
parentbb40e56925ea39a75b03aa205f4a783ea3b1f7ab (diff)
Only allow requires: of packages which currently exist
In f3a2daab817a, we accidentally allowed packages to depend on a package which has been removed, instead of just applying that to obsoletes. Fix that so we check that requires: contains packages which actually exist! Also clean up no longer required 'splitchar' Fixes: f3a2daab817a ("Persistently record all package names")
-rwxr-xr-xcalm/package.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/calm/package.py b/calm/package.py
index 43a403e..641030c 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -665,7 +665,7 @@ def upgrade_oldstyle_obsoletes(packages):
#
# validate the package database
#
-def validate_packages(args, packages, valid_requires_extra=None, missing_obsolete_extra=None):
+def validate_packages(args, packages, valid_provides_extra=None, missing_obsolete_extra=None):
error = False
if packages is None:
@@ -674,12 +674,9 @@ def validate_packages(args, packages, valid_requires_extra=None, missing_obsolet
if missing_obsolete_extra is None:
missing_obsolete_extra = {}
- # build the set of valid things to requires: etc.
+ # build the set of valid things to depends: on
valid_requires = set()
- if valid_requires_extra:
- valid_requires.update(valid_requires_extra)
-
for p in packages:
valid_requires.add(p)
for hints in packages[p].version_hints.values():
@@ -693,23 +690,27 @@ def validate_packages(args, packages, valid_requires_extra=None, missing_obsolet
packages[p].obsoleted_by = set()
packages[p].orphaned = False
+ # it's also valid to obsoletes: packages which have been removed
+ valid_obsoletes = set(valid_requires)
+ if valid_provides_extra:
+ valid_obsoletes.update(valid_provides_extra)
+
# perform various package validations
for p in sorted(packages.keys()):
for (v, hints) in packages[p].version_hints.items():
- for (c, okmissing, splitchar) in [
- ('depends', 'missing-depended-package', ','),
- ('obsoletes', 'missing-obsoleted-package', ',')
+ for (c, okmissing, valid) in [
+ ('depends', 'missing-depended-package', valid_requires),
+ ('obsoletes', 'missing-obsoleted-package', valid_obsoletes)
]:
# if c is in hints, and not the empty string
if hints.get(c, ''):
- for r in hints[c].split(splitchar):
+ for r in hints[c].split(','):
# remove any extraneous whitespace
r = r.strip()
# strip off any version relation enclosed in '()'
# following the package name
- if splitchar:
- r = re.sub(r'(.*) +\(.*\)', r'\1', r)
+ r = re.sub(r'(.*) +\(.*\)', r'\1', r)
if c == 'depends':
# don't count cygwin-debuginfo for the purpose of
@@ -726,7 +727,7 @@ def validate_packages(args, packages, valid_requires_extra=None, missing_obsolet
# all packages listed in a hint must exist (unless the
# disable-check option says that's ok)
- if (r not in valid_requires) and (r not in past_mistakes.nonexistent_provides + past_mistakes.expired_provides):
+ if (r not in valid) and (r not in past_mistakes.nonexistent_provides + past_mistakes.expired_provides):
if okmissing not in getattr(args, 'disable_check', []):
logging.error("package '%s' version '%s' %s: '%s', but nothing satisfies that" % (p, v, c, r))
error = True