Repository navigation
Add Obsoletes for EL10 package removals - #2765
Conversation
Odilhao
left a comment
There was a problem hiding this comment.
Reviewed the Obsoletes list against the actual last-shipped NVRs in #2766 (now merged). Found a systematic off-by-one bug affecting 45 of the 51 new entries — this needs to be fixed before merge, or upgrades will silently leave the old packages installed.
The bug
Obsoletes: pkg < X.Y.Z-R where R is set to the package's actual last-shipped Release does not work, because the built RPM's release always carries the %{?dist} suffix (e.g. 6.el9), and RPM version comparison treats 6.el9 as greater than bare 6:
$ rpmdev-vercmp 3.13.0-6.el9 3.13.0-6
3.13.0-6.el9 > 3.13.0-6
So Obsoletes: python3.11-marshmallow < 3.13.0-6 will never match the real installed python3.11-marshmallow-3.13.0-6.el9 — the bound needs to be one release higher than the last shipped release.
The one entry in this PR that is correct proves the point: python3.11-aioredis < 2.0.1-8 (last shipped was 2.0.1-7), and per the PR description this was deliberately "bumped ... to cover Release -7". The other 45 need the same treatment — they're currently set to the exact last-shipped release instead of release+1.
Corrected bounds (last-shipped release + 1)
Obsoletes: python3.11-azure-storage-common < 2.1.0-8
Obsoletes: python3.11-box < 5.1.0-8
Obsoletes: python3.11-cchardet < 2.1.7-6
Obsoletes: python3.11-django-picklefield < 3.0.1-7
Obsoletes: python3.11-dotenv < 0.14.0-12
Obsoletes: python3.11-filecache < 0.81-6
Obsoletes: python3.11-itypes < 1.2.0-8
Obsoletes: python3.11-jdcal < 1.4.1-8
Obsoletes: python3.11-marshmallow < 3.13.0-7
Obsoletes: python3.11-msrest < 0.6.21-7
Obsoletes: python3.11-naya < 1.1.1-8
Obsoletes: python3.11-oauthlib < 3.1.1-7
Obsoletes: python3.11-psycopg2 < 2.9.3-7
Obsoletes: python3.11-pyperclip < 1.8.2-6
Obsoletes: python3.11-python3-openid < 3.2.0-7
Obsoletes: python3.11-requests-oauthlib < 1.3.0-7
Obsoletes: python3.11-rq < 1.9.0-8
Obsoletes: python3.11-social-auth-app-django < 3.4.0-7
Obsoletes: python3.11-social-auth-core < 3.4.0-7
Obsoletes: python3.12-async-timeout < 4.0.3-3
Obsoletes: python3.12-bleach < 3.3.1-8
Obsoletes: python3.12-bleach-allowlist < 1.0.3-9
Obsoletes: python3.12-django-auth-ldap < 4.0.0-7
Obsoletes: python3.12-django-cleanup < 5.1.0-9
Obsoletes: python3.12-django-guardian < 2.4.0-11
Obsoletes: python3.12-django-ipware < 3.0.7-8
Obsoletes: python3.12-django-prometheus < 2.1.0-9
Obsoletes: python3.12-django-storages < 1.14.6-2
Obsoletes: python3.12-enrich < 1.2.6-12
Obsoletes: python3.12-html5lib < 1.1-7
Obsoletes: python3.12-importlib-metadata < 6.0.1-7
Obsoletes: python3.12-importlib-resources < 6.4.5-3
Obsoletes: python3.12-lazy-imports < 1.2.0-2
Obsoletes: python3.12-oauthlib < 3.1.1-7
Obsoletes: python3.12-python3-openid < 3.2.0-7
Obsoletes: python3.12-requests-oauthlib < 1.3.0-7
Obsoletes: python3.12-setuptools_scm_git_archive < 1.4.1-6
Obsoletes: python3.12-social-auth-app-django < 3.4.0-7
Obsoletes: python3.12-social-auth-core < 3.4.0-7
Obsoletes: python3.12-tenacity < 7.0.0-9
Obsoletes: python3.12-webencodings < 0.5.1-9
Obsoletes: python3.12-xlrd < 2.0.2-2
Obsoletes: python3.12-xlwt < 1.3.0-9
Obsoletes: python3.12-zipp < 4.1.0-2
(bleach-whitelist, coreapi, coreschema already use -8/-9, one above their last shipped -7/-8 — those three are correct as-is.)
Other checks — no issues
- Coverage is otherwise complete: every package removed in #2766 (all 47 + the follow-up aioredis removal) has a corresponding Obsoletes entry here, at the right Version.
libsolv0andsubscription-managercorrectly have no Obsoletes entries — neither was ever inpackage_manifest.yaml, so neither ever shipped as a real package (matches "2 orphaned directories" in #2766's description).- One thing I couldn't verify:
python3.11-galaxy-ng < 4.5.2-3—python-galaxy-ngisn't inpackage_manifest.yamleither (confirmed dead in this repo), so I can't confirm its last real Version/Release from this repo's history. If it really shipped downstream at some point under that NVR, worth double-checking the release bound the same way once you have that history — not blocking either way since it's a no-op if wrong (galaxy-ng was never built from this repo state).
Odilhao
left a comment
There was a problem hiding this comment.
One more thing on top of the off-by-one review above: drop these two lines entirely before merging.
Obsoletes: python3.12-importlib-metadata < 6.0.1-6
Obsoletes: python3.12-importlib-resources < 6.4.5-2
Nightly staging repoclosure just broke after #2765/#2766 landed — opentelemetry-api (1.40.0), bandersnatch (6.6.0), and pulp-rpm (3.35.3) all declare importlib-metadata/importlib-resources as unconditional (non-marker-gated) dependencies in their own upstream PyPI metadata, so both packages are still genuinely needed and shouldn't have been removed in #2766 at all.
Opened #2768 to restore python-importlib-metadata (6.0.1-7) and python-importlib-resources (6.4.5-3). If the Obsoletes lines above land here before that merges, the restored packages will immediately self-obsolete. Please drop both lines (the rest of this PR's Obsoletes list, once the release-bound fix from my earlier review is applied, is unaffected).
Odilhao
left a comment
There was a problem hiding this comment.
One more to add to the list — same self-obsoletion problem as importlib-metadata/importlib-resources above:
Obsoletes: python3.12-zipp < 4.1.0-1
python3.12-importlib-metadata (restored in #2768) declares zipp>=0.5 as an unconditional dependency, and #2768 also restores python-zipp (4.1.0-2) for exactly that reason — it's genuinely still needed, not obsolete. Please drop this line too.
Note the python3.11-zipp < 3.20.2-2 line is a different, unrelated package (the old python3.11 build) and is unaffected — no change needed there.
|
@Odilhao Updated — all three issues addressed in the latest commit:
The python3.11 variants of importlib-metadata, importlib-resources, and zipp are left as-is since those cover the old python3.11 builds that are genuinely being removed. |
|
Reminder — both rounds of review feedback above are still outstanding; no new commits have been pushed since.
Not blocking on CI here since this is an Obsoletes-only change that doesn't rebuild the packages it would affect — the breakage only shows up on the next nightly run after merge, so green checks on this PR don't reflect it. |
bf16ee7 to
7ff843b
Compare
7ff843b to
34ca752
Compare
Odilhao
left a comment
There was a problem hiding this comment.
Re-reviewed. Both rounds of feedback are fully addressed:
- All 45 previously-wrong Obsoletes bounds now match last-shipped-release+1 exactly (verified programmatically against my corrected list from the first review).
- The three self-obsoleting lines (
python3.12-importlib-metadata,python3.12-importlib-resources,python3.12-zipp) are dropped entirely, not bound-adjusted — correct, since those packages are genuinely still needed post-#2768. python3.11-galaxy-ngis still unverifiable from this repo's history (same caveat as before) but non-blocking either way.
Minor nit, not blocking: the changelog has two separate 1.5.0-1 stanzas (Jul 20 and Jul 22) instead of one merged entry — harmless since this hasn't shipped yet.
Approved. CI still running but mergeable.
- Bumps pulpcore-obsolete-packages from 1.4.0 to 1.5.0 - Adds Obsoletes entries for packages removed during the EL10 transition: 25 python3.11 entries (packages still on python3.11) and 22 python3.12 entries (packages that had transitioned to python3.12) - All release bounds set to last-shipped+1 so they match installed NVRs with dist suffixes (e.g. 6.el9 > bare 6 in RPM version comparison) - Drops python3.12-importlib-metadata, python3.12-importlib-resources, and python3.12-zipp Obsoletes — these packages are restored in theforeman#2768 as unconditional runtime dependencies of opentelemetry-api, bandersnatch, and pulp-rpm; the python3.11 variants are unaffected Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
34ca752 to
a91631d
Compare
Summary
pulpcore-obsolete-packagesfrom 1.4.0 to 1.5.0This PR is safe to merge independently — it only adds Obsoletes directives to force-remove old packages during upgrades. No package directories are deleted, no manifest/comps changes, no pipeline risk.
The actual package directory deletions, manifest/comps cleanup, and dependent spec Requires fixes will follow in a separate PR (#2766).
Context
Test plan
rpmlint)🤖 Generated with Claude Code