mirror of
https://github.com/pnpm/pnpm.git
synced 2026-04-28 02:53:15 -04:00
fix: installation hanging due to parent peers resolution dead lock (#8584)
This fixes an issue that appeared after merging #8457 close #8570
This commit is contained in:
6
.changeset/young-insects-grab.md
Normal file
6
.changeset/young-insects-grab.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"@pnpm/resolve-dependencies": patch
|
||||
"pnpm": patch
|
||||
---
|
||||
|
||||
Fix peer dependency resolution dead lock [#8570](https://github.com/pnpm/pnpm/issues/8570).
|
||||
@@ -1243,3 +1243,11 @@ test('a package should be able to be a dependency of itself', async () => {
|
||||
expect(pkg.version).toBe('1.0.0')
|
||||
}
|
||||
})
|
||||
|
||||
// Covers https://github.com/pnpm/pnpm/issues/8570
|
||||
test('install should not hang on circular peer dependencies', async () => {
|
||||
prepareEmpty()
|
||||
|
||||
// cspell:disable-next-line
|
||||
await addDependenciesToPackage({}, ['@medusajs/medusa-js@6.1.7'], testDefaults())
|
||||
})
|
||||
|
||||
@@ -987,7 +987,7 @@ test('peer dependency is resolved from parent package via its alias', async () =
|
||||
|
||||
const lockfile = readYamlFile<Lockfile>(WANTED_LOCKFILE)
|
||||
expect(Object.keys(lockfile.snapshots ?? {}).sort()).toStrictEqual([
|
||||
'@pnpm.e2e/has-tango-as-peer-dep@1.0.0(@pnpm.e2e/tango-tango@1.0.0(@pnpm.e2e/tango-tango@1.0.0))',
|
||||
'@pnpm.e2e/has-tango-as-peer-dep@1.0.0(@pnpm.e2e/tango-tango@1.0.0)',
|
||||
'@pnpm.e2e/tango-tango@1.0.0(@pnpm.e2e/tango-tango@1.0.0)',
|
||||
].sort())
|
||||
})
|
||||
|
||||
@@ -567,7 +567,9 @@ async function resolvePeersOfNode<T extends PartialResolvedPackage> (
|
||||
.map(async (peerNodeId) => {
|
||||
if (cyclicPeerNodeIds.has(peerNodeId)) {
|
||||
const { name, version } = (ctx.dependenciesTree.get(peerNodeId)!.resolvedPackage as T)
|
||||
return `${name}@${version}`
|
||||
const id = `${name}@${version}`
|
||||
ctx.pathsByNodeIdPromises.get(peerNodeId)?.resolve(id as DepPath)
|
||||
return id
|
||||
}
|
||||
return ctx.pathsByNodeIdPromises.get(peerNodeId)!.promise
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user