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-04 22:25:56 +0300
committerJon Turney <jon.turney@dronecode.org.uk>2023-01-07 20:05:15 +0300
commit31819b5ed1b2523cb272a1474cd00ce6bddca33c (patch)
tree73932cfff45ad3e559d1086d182afb5e3d1d809c
parent1c38fe4217480f3d58969ba2cf071b14bd3583d4 (diff)
Don't synthesize a new-style obsolete when current version isn't obsolete
-rwxr-xr-xcalm/package.py85
1 files changed, 48 insertions, 37 deletions
diff --git a/calm/package.py b/calm/package.py
index 5fc7c4e..d8e9432 100755
--- a/calm/package.py
+++ b/calm/package.py
@@ -581,7 +581,20 @@ def upgrade_oldstyle_obsoletes(packages):
for p in sorted(packages):
if packages[p].kind == Kind.binary:
- for vr in packages[p].versions():
+ for vr in sorted(packages[p].versions(), key=lambda v: SetupVersion(v), reverse=True):
+ # we only really want to consider packages where the current
+ # version is obsolete.
+ #
+ # (if older versions are obsolete and we were somehow
+ # un-obsoleted, we'd need to somehow infer version constraints
+ # on the obsoletions, or something)
+ #
+ # as a proxy for that, stop considering versions of this package
+ # when one isn't obsolete, don't consider older versions
+ if not (packages[p].tar(vr).is_empty and
+ '_obsolete' in packages[p].version_hints[vr]['category']):
+ break
+
# initially apply to a subset over a certain age, to gradually
# introduce this change
mtime = packages[p].tar(vr).mtime
@@ -589,48 +602,46 @@ def upgrade_oldstyle_obsoletes(packages):
continue
logging.debug("_obsolete package '%s' version '%s' mtime '%s' is over cut-off age" % (p, vr, time.strftime("%F %T %Z", time.localtime(mtime))))
- if packages[p].tar(vr).is_empty:
- if '_obsolete' in packages[p].version_hints[vr]['category']:
- requires = packages[p].version_hints[vr].get('depends', '').split(', ')
- requires = [re.sub(r'(.*) +\(.*\)', r'\1', r) for r in requires]
+ requires = packages[p].version_hints[vr].get('depends', '').split(', ')
+ requires = [re.sub(r'(.*) +\(.*\)', r'\1', r) for r in requires]
- if p in past_mistakes.old_style_obsolete_by:
- o = past_mistakes.old_style_obsolete_by[p]
+ if p in past_mistakes.old_style_obsolete_by:
+ o = past_mistakes.old_style_obsolete_by[p]
- # empty replacement means "ignore"
- if not o:
- continue
+ # empty replacement means "ignore"
+ if not o:
+ continue
- logging.debug('%s is hardcoded as obsoleted by %s ' % (p, o))
+ logging.debug('%s is hardcoded as obsoleted by %s ' % (p, o))
- else:
- # ignore self-destruct packages
- provides = packages[p].version_hints[vr].get('provides', '')
- if '_self-destruct' in provides:
- continue
-
- if len(requires) == 0:
- # obsolete but has no replacement
- logging.warning('%s is obsolete, but has no replacement' % (p))
- continue
- elif len(requires) == 1:
- o = requires[0]
- elif len(requires) >= 2:
- # obsolete with multiple replacements (pick one?)
- logging.warning('%s %s is obsoleted by %d packages (%s)' % (p, vr, len(requires), requires))
- continue
-
- # ignore if o it's blacklisted
- if o in ['cygwin-debuginfo', 'calligra-libs']:
- logging.debug("not adding 'obsoletes: %s' to '%s' as blacklisted" % (p, o))
- continue
+ else:
+ # ignore self-destruct packages
+ provides = packages[p].version_hints[vr].get('provides', '')
+ if '_self-destruct' in provides:
+ continue
+
+ if len(requires) == 0:
+ # obsolete but has no replacement
+ logging.warning('%s is obsolete, but has no replacement' % (p))
+ continue
+ elif len(requires) == 1:
+ o = requires[0]
+ elif len(requires) >= 2:
+ # obsolete with multiple replacements (pick one?)
+ logging.warning('%s %s is obsoleted by %d packages (%s)' % (p, vr, len(requires), requires))
+ continue
+
+ # ignore if o it's blacklisted
+ if o in ['cygwin-debuginfo', 'calligra-libs']:
+ logging.debug("not adding 'obsoletes: %s' to '%s' as blacklisted" % (p, o))
+ continue
- if o in packages:
- if o not in missing_obsolete:
- missing_obsolete[o] = set()
+ if o in packages:
+ if o not in missing_obsolete:
+ missing_obsolete[o] = set()
- missing_obsolete[o].add(p)
- logging.info("converting from empty, _obsolete category package '%s' to 'obsoletes: %s' in package '%s'" % (p, p, o))
+ missing_obsolete[o].add(p)
+ logging.info("converting from empty, _obsolete category package '%s' to 'obsoletes: %s' in package '%s'" % (p, p, o))
return missing_obsolete