fix: don't write pnpm-lock.yaml if it has no changes (#6260)

close #6158
This commit is contained in:
Zoltan Kochan
2023-03-23 04:40:42 +02:00
committed by GitHub
parent cae85dbb19
commit 2a2032810f
6 changed files with 35 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/get-context": minor
---
Return `wantedLockfileIsModified`.

View File

@@ -0,0 +1,6 @@
---
"@pnpm/core": patch
"pnpm": patch
---
Don't write the `pnpm-lock.yaml` file if it has no changes and `pnpm install --frozen-lockfile` was executed [#6158](https://github.com/pnpm/pnpm/issues/6158).

View File

@@ -385,6 +385,7 @@ export async function mutateModules (
prunedAt: ctx.modulesFile?.prunedAt,
pruneVirtualStore,
wantedLockfile: maybeOpts.ignorePackageManifest ? undefined : ctx.wantedLockfile,
useLockfile: opts.useLockfile && ctx.wantedLockfileIsModified,
})
if (opts.useLockfile && opts.saveLockfile && opts.mergeGitBranchLockfiles) {
await writeLockfiles({
@@ -1257,6 +1258,7 @@ const installInContext: InstallFunction = async (projects, ctx, opts) => {
allProjects: ctx.projects,
prunedAt: ctx.modulesFile?.prunedAt,
wantedLockfile: result.newLockfile,
useLockfile: opts.useLockfile && ctx.wantedLockfileIsModified,
})
return result
}

View File

@@ -1580,3 +1580,19 @@ test('update the lockfile when a new project is added to the workspace and lockf
const lockfile: Lockfile = await readYamlFile(WANTED_LOCKFILE)
expect(Object.keys(lockfile.importers)).toStrictEqual(['project-1', 'project-2'])
})
test('lockfile is not written when it has no changes', async () => {
prepareEmpty()
const manifest = await install({
dependencies: {
'@types/semver': '^5.3.31',
},
}, await testDefaults())
const stat = await fs.stat(WANTED_LOCKFILE)
const initialMtime = stat.mtimeMs
await install(manifest, await testDefaults())
expect(await fs.stat(WANTED_LOCKFILE)).toHaveProperty('mtimeMs', initialMtime)
})

View File

@@ -52,6 +52,7 @@ export interface PnpmContext {
skipped: Set<string>
storeDir: string
wantedLockfile: Lockfile
wantedLockfileIsModified: boolean
registries: Registries
}
@@ -360,6 +361,7 @@ export interface PnpmSingleContext {
skipped: Set<string>
storeDir: string
wantedLockfile: Lockfile
wantedLockfileIsModified: boolean
}
export async function getContextForSingleImporter (

View File

@@ -46,6 +46,7 @@ export async function readLockfiles (
existsCurrentLockfile: boolean
existsWantedLockfile: boolean
wantedLockfile: Lockfile
wantedLockfileIsModified: boolean
lockfileHadConflicts: boolean
}> {
const wantedLockfileVersion = LOCKFILE_VERSION_V6
@@ -115,8 +116,10 @@ export async function readLockfiles (
const wantedLockfile = files[0] ??
(currentLockfile && clone(currentLockfile)) ??
createLockfileObject(importerIds, sopts)
let wantedLockfileIsModified = false
for (const importerId of importerIds) {
if (!wantedLockfile.importers[importerId]) {
wantedLockfileIsModified = true
wantedLockfile.importers[importerId] = {
specifiers: {},
}
@@ -128,6 +131,7 @@ export async function readLockfiles (
existsCurrentLockfile: files[1] != null,
existsWantedLockfile: files[0] != null && !isEmptyLockfile(wantedLockfile),
wantedLockfile,
wantedLockfileIsModified,
lockfileHadConflicts,
}
}