mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-30 04:52:04 -04:00
fix: don't write pnpm-lock.yaml if it has no changes (#6260)
close #6158
This commit is contained in:
5
.changeset/early-dodos-wash.md
Normal file
5
.changeset/early-dodos-wash.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@pnpm/get-context": minor
|
||||
---
|
||||
|
||||
Return `wantedLockfileIsModified`.
|
||||
6
.changeset/itchy-dancers-collect.md
Normal file
6
.changeset/itchy-dancers-collect.md
Normal 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).
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user