diff --git a/.changeset/gorgeous-laws-rush.md b/.changeset/gorgeous-laws-rush.md new file mode 100644 index 0000000000..663f64ca67 --- /dev/null +++ b/.changeset/gorgeous-laws-rush.md @@ -0,0 +1,5 @@ +--- +"supi": patch +--- + +The contents of a modified local tarball dependency should be reunpacked on install. diff --git a/packages/headless/tsconfig.json b/packages/headless/tsconfig.json index d2c18847d3..cb3b0bd042 100644 --- a/packages/headless/tsconfig.json +++ b/packages/headless/tsconfig.json @@ -77,6 +77,9 @@ }, { "path": "../read-projects-context" + }, + { + "path": "../../privatePackages/test-fixtures" } ] } diff --git a/packages/supi/src/install/link.ts b/packages/supi/src/install/link.ts index c5c9e88430..07aa5c8e67 100644 --- a/packages/supi/src/install/link.ts +++ b/packages/supi/src/install/link.ts @@ -194,7 +194,6 @@ export default async function linkPackages ( force: opts.force, lockfileDir: opts.lockfileDir, optional: opts.include.optionalDependencies, - registries: opts.registries, sideEffectsCacheRead: opts.sideEffectsCacheRead, skipped: opts.skipped, storeController: opts.storeController, @@ -366,7 +365,6 @@ async function linkNewPackages ( dryRun: boolean, force: boolean, optional: boolean, - registries: Registries, lockfileDir: string, sideEffectsCacheRead: boolean, skipped: Set, @@ -385,7 +383,7 @@ async function linkNewPackages ( .filter((depPath) => depGraph[depPath]) ) } else { - newDepPathsSet = await selectNewFromWantedDeps(wantedRelDepPaths, currentLockfile, depGraph, opts) + newDepPathsSet = await selectNewFromWantedDeps(wantedRelDepPaths, currentLockfile, depGraph) } statsLogger.debug({ @@ -440,19 +438,20 @@ async function linkNewPackages ( async function selectNewFromWantedDeps ( wantedRelDepPaths: string[], currentLockfile: Lockfile, - depGraph: DependenciesGraph, - opts: { - registries: Registries, - } + depGraph: DependenciesGraph ) { const newDeps = new Set() - const prevRelDepPaths = new Set(R.keys(currentLockfile.packages)) + const prevDeps = currentLockfile.packages ?? {} await Promise.all( wantedRelDepPaths.map( async (depPath: string) => { const depNode = depGraph[depPath] if (!depNode) return - if (prevRelDepPaths.has(depPath)) { + const prevDep = prevDeps[depPath] + if ( + prevDep && + depNode.resolution['integrity'] === prevDep.resolution['integrity'] + ) { if (await fs.exists(depNode.dir)) { return } diff --git a/packages/supi/test/install/local.ts b/packages/supi/test/install/local.ts index f1ea0575eb..7e1c8a129d 100644 --- a/packages/supi/test/install/local.ts +++ b/packages/supi/test/install/local.ts @@ -178,6 +178,9 @@ test('update tarball local package when its integrity changes', async (t) => { const lockfile2 = await project.readLockfile() t.equal(lockfile2.packages['file:../tar.tgz'].dependencies!['is-positive'], '2.0.0', 'the local tarball dep has been updated') + + const manifestOfTarballDep = await import(path.resolve('node_modules/tar-pkg-with-dep/package.json')) + t.equal(manifestOfTarballDep.dependencies['is-positive'], '^2.0.0', 'the tarball dependency content was reunpacked') }) // Covers https://github.com/pnpm/pnpm/issues/1878