Skip to content

Allow multi-version openssl/abseil alongside unicode#88

Merged
jhheider merged 1 commit into
mainfrom
v1/multi-version-abi-coexistence
Jul 22, 2026
Merged

Allow multi-version openssl/abseil alongside unicode#88
jhheider merged 1 commit into
mainfrom
v1/multi-version-abi-coexistence

Conversation

@jhheider

Copy link
Copy Markdown
Contributor

Generalize the unicode.org hydrate special-case so parallel-installable
ABI lines (openssl 1.1 vs 3, abseil LTS namespaces) can coexist in one
graph instead of failing constraint intersection.

Generalize the unicode.org hydrate special-case so parallel-installable
ABI lines (openssl 1.1 vs 3, abseil LTS namespaces) can coexist in one
graph instead of failing constraint intersection.
Copilot AI review requested due to automatic review settings July 22, 2026 18:22
@coveralls

Copy link
Copy Markdown

Coverage Report for CI Build 29946402969

Coverage decreased (-0.5%) to 82.164%

Details

  • Coverage decreased (-0.5%) from the base build.
  • Patch coverage: 17 uncovered changes across 1 file (41 of 58 lines covered, 70.69%).
  • 8 coverage regressions across 3 files.

Uncovered Changes

File Changed Covered %
src/plumbing/hydrate.ts 58 41 70.69%

Coverage Regressions

8 previously-covered lines in 3 files lost coverage.

File Lines Losing Coverage Coverage
src/plumbing/link.ts 5 55.07%
src/plumbing/which.ts 2 70.0%
src/hooks/usePantry.ts 1 68.16%

Coverage Stats

Coverage Status
Relevant Lines: 3054
Covered Lines: 2565
Line Coverage: 83.99%
Relevant Branches: 781
Covered Branches: 586
Branch Coverage: 75.03%
Branches in Coverage %: Yes
Coverage Strength: 3116.69 hits per line

💛 - Coveralls

@jhheider
jhheider merged commit bf926ec into main Jul 22, 2026
10 checks passed
@jhheider
jhheider deleted the v1/multi-version-abi-coexistence branch July 22, 2026 18:27

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR generalizes hydrate’s previous unicode.org-only “non-intersecting constraints” special-case into an allowlist of parallel-installable ABI lines (eg ICU majors, OpenSSL 1.1 vs 3, Abseil LTS namespaces) so dependency graphs can retain multiple version lines instead of failing during constraint intersection.

Changes:

  • Introduces MULTI_VERSION_PROJECTS and uses it to tolerate non-intersecting constraints by collecting “additional” sibling requirements.
  • Updates hydrate’s constraint-intersection flow (both during graph build and condense()) to keep multiple non-intersecting ranges for allowlisted projects.
  • Expands hydrate.test.ts with coverage for openssl.org and abseil.io multi-version coexistence, plus an allowlist sanity test.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.

File Description
src/plumbing/hydrate.ts Generalizes the prior unicode-only exception into an allowlisted multi-version mechanism and updates intersection/condense logic accordingly.
src/plumbing/hydrate.test.ts Adds tests validating multi-version behavior for unicode.org/openssl.org/abseil.io and refactors constraint set assertions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/plumbing/hydrate.ts
Comment on lines 119 to +123
child_node.pkg.constraint = semver.intersect(child_node.pkg.constraint, dep.constraint)
} catch (e) {
if (dep.project == 'unicode.org') {
// we handle unicode.org for now to allow situations like:
// https://github.com/pkgxdev/pantry/issues/4104
// https://github.com/pkgxdev/pkgx/issues/899
additional_unicodes.push(dep.constraint)
if (MULTI_VERSION_PROJECTS.has(dep.project)) {
// keep both version lines; bottles/rpaths disambiguate at runtime
pushAdditional(dep)
Comment thread src/plumbing/hydrate.ts
Comment on lines 140 to +144
const pkgs = Object.values(graph)
.sort((a, b) => b.count() - a.count())
.map(({pkg}) => pkg)

// see above explanation
pkgs.push(...additional_unicodes.map(constraint => ({ project: "unicode.org", constraint })))
pkgs.push(...additional)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants