mirror of
https://github.com/pnpm/pnpm.git
synced 2026-01-11 00:18:32 -05:00
5
.changeset/tame-crabs-clean.md
Normal file
5
.changeset/tame-crabs-clean.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/cafs": patch
|
||||
---
|
||||
|
||||
The content-addressable store locker should be only created once per process. This fixes an issue that started happening after merging [#6817](https://github.com/pnpm/pnpm/pull/6817)
|
||||
@@ -34,14 +34,20 @@ export {
|
||||
type PackageFilesIndex,
|
||||
}
|
||||
|
||||
export function createCafs (cafsDir: string, ignore?: ((filename: string) => boolean)) {
|
||||
const locker = new Map()
|
||||
const _writeBufferToCafs = writeBufferToCafs.bind(null, locker, cafsDir)
|
||||
export type CafsLocker = Map<string, number>
|
||||
|
||||
export interface CreateCafsOpts {
|
||||
ignoreFile?: (filename: string) => boolean
|
||||
cafsLocker?: CafsLocker
|
||||
}
|
||||
|
||||
export function createCafs (cafsDir: string, { ignoreFile, cafsLocker }: CreateCafsOpts = {}) {
|
||||
const _writeBufferToCafs = writeBufferToCafs.bind(null, cafsLocker ?? new Map(), cafsDir)
|
||||
const addStream = addStreamToCafs.bind(null, _writeBufferToCafs)
|
||||
const addBuffer = addBufferToCafs.bind(null, _writeBufferToCafs)
|
||||
return {
|
||||
addFilesFromDir: addFilesFromDir.bind(null, { addBuffer, addStream }),
|
||||
addFilesFromTarball: addFilesFromTarball.bind(null, addStream, ignore ?? null),
|
||||
addFilesFromTarball: addFilesFromTarball.bind(null, addStream, ignoreFile ?? null),
|
||||
getFilePathInCafs: getFilePathInCafs.bind(null, cafsDir),
|
||||
getFilePathByModeInCafs: getFilePathByModeInCafs.bind(null, cafsDir),
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { promises as fs } from 'fs'
|
||||
import path from 'path'
|
||||
import {
|
||||
type CafsLocker,
|
||||
createCafs,
|
||||
getFilePathByModeInCafs,
|
||||
} from '@pnpm/cafs'
|
||||
@@ -15,6 +16,8 @@ import memoize from 'mem'
|
||||
import pathTemp from 'path-temp'
|
||||
import mapValues from 'ramda/src/map'
|
||||
|
||||
export { type CafsLocker }
|
||||
|
||||
function createPackageImporter (
|
||||
opts: {
|
||||
importIndexedPackage?: ImportIndexedPackage
|
||||
@@ -73,6 +76,7 @@ export function createCafsStore (
|
||||
ignoreFile?: (filename: string) => boolean
|
||||
importPackage?: ImportIndexedPackage
|
||||
packageImportMethod?: 'auto' | 'hardlink' | 'copy' | 'clone' | 'clone-or-copy'
|
||||
cafsLocker?: CafsLocker
|
||||
}
|
||||
): Cafs {
|
||||
const cafsDir = path.join(storeDir, 'files')
|
||||
@@ -83,7 +87,7 @@ export function createCafsStore (
|
||||
cafsDir,
|
||||
})
|
||||
return {
|
||||
...createCafs(cafsDir, opts?.ignoreFile),
|
||||
...createCafs(cafsDir, opts),
|
||||
cafsDir,
|
||||
importPackage,
|
||||
tempDir: async () => {
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
export { createPackageStore } from './storeController'
|
||||
export { createPackageStore, type CafsLocker } from './storeController'
|
||||
|
||||
export * from '@pnpm/store-controller-types'
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {
|
||||
type PackageFilesIndex,
|
||||
} from '@pnpm/cafs'
|
||||
import { createCafsStore } from '@pnpm/create-cafs-store'
|
||||
import { createCafsStore, type CafsLocker } from '@pnpm/create-cafs-store'
|
||||
import { type Fetchers } from '@pnpm/fetcher-base'
|
||||
import { createPackageRequester } from '@pnpm/package-requester'
|
||||
import { type ResolveFunction } from '@pnpm/resolver-base'
|
||||
@@ -14,10 +14,13 @@ import loadJsonFile from 'load-json-file'
|
||||
import writeJsonFile from 'write-json-file'
|
||||
import { prune } from './prune'
|
||||
|
||||
export { type CafsLocker }
|
||||
|
||||
export async function createPackageStore (
|
||||
resolve: ResolveFunction,
|
||||
fetchers: Fetchers,
|
||||
initOpts: {
|
||||
cafsLocker?: CafsLocker
|
||||
engineStrict?: boolean
|
||||
force?: boolean
|
||||
nodeVersion?: string
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { promises as fs } from 'fs'
|
||||
import { createClient, type ClientOptions } from '@pnpm/client'
|
||||
import { type Config } from '@pnpm/config'
|
||||
import { createPackageStore } from '@pnpm/package-store'
|
||||
import { createPackageStore, type CafsLocker } from '@pnpm/package-store'
|
||||
import { packageManager } from '@pnpm/cli-meta'
|
||||
|
||||
type CreateResolverOptions = Pick<Config,
|
||||
@@ -42,6 +42,7 @@ export type CreateNewStoreControllerOptions = CreateResolverOptions & Pick<Confi
|
||||
| 'userAgent'
|
||||
| 'verifyStoreIntegrity'
|
||||
> & {
|
||||
cafsLocker?: CafsLocker
|
||||
ignoreFile?: (filename: string) => boolean
|
||||
} & Partial<Pick<Config, 'userConfig' | 'deployAllFiles'>> & Pick<ClientOptions, 'resolveSymlinksInInjectedDirs'>
|
||||
|
||||
@@ -89,6 +90,7 @@ export async function createNewStoreController (
|
||||
await fs.mkdir(opts.storeDir, { recursive: true })
|
||||
return {
|
||||
ctrl: await createPackageStore(resolve, fetchers, {
|
||||
cafsLocker: opts.cafsLocker,
|
||||
engineStrict: opts.engineStrict,
|
||||
force: opts.force,
|
||||
nodeVersion: opts.nodeVersion,
|
||||
|
||||
Reference in New Issue
Block a user