Skip to content

Commit

Permalink
fix: remove unsafe remove of install folder
Browse files Browse the repository at this point in the history
  • Loading branch information
merceyz committed Feb 10, 2024
1 parent 54e9510 commit a8f8736
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 14 deletions.
2 changes: 1 addition & 1 deletion sources/Engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {SupportedPackageManagers, SupportedPackageManagerSet} from './types';
export type PreparedPackageManagerInfo = Awaited<ReturnType<Engine[`ensurePackageManager`]>>;

export function getLastKnownGoodFile(flag = `r`) {
return fs.promises.open(path.join(folderUtils.getInstallFolder(), `lastKnownGood.json`), flag);
return fs.promises.open(path.join(folderUtils.getCorepackHomeFolder(), `lastKnownGood.json`), flag);
}

export async function getJSONFileContent(fh: FileHandle) {
Expand Down
14 changes: 2 additions & 12 deletions sources/corepackUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,9 @@ export async function installVersion(installTarget: string, locator: Locator, {s
const {version, build} = locatorReference;

const installFolder = path.join(installTarget, locator.name, version);
const corepackFile = path.join(installFolder, `.corepack`);

// Older versions of Corepack didn't generate the `.corepack` file; in
// that case we just download the package manager anew.
if (fs.existsSync(corepackFile)) {
if (fs.existsSync(installFolder)) {
const corepackFile = path.join(installFolder, `.corepack`);
const corepackContent = await fs.promises.readFile(corepackFile, `utf8`);
const corepackData = JSON.parse(corepackContent);

Expand Down Expand Up @@ -172,14 +170,6 @@ export async function installVersion(installTarget: string, locator: Locator, {s
hash: serializedHash,
}));

// The target folder may exist if a previous version of Corepack installed
// it but didn't create the `.corepack` file. In this case we need to
// remove it first.
await fs.promises.rm(installFolder, {
recursive: true,
force: true,
});

await fs.promises.mkdir(path.dirname(installFolder), {recursive: true});
try {
await fs.promises.rename(tmpFolder, installFolder);
Expand Down
14 changes: 13 additions & 1 deletion sources/folderUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ import process from 'process';

import type {NodeError} from './nodeUtils';

export function getInstallFolder() {
/**
* If the install folder structure changes then increment this number.
*/
const INSTALL_FOLDER_VERSION = 1;

export function getCorepackHomeFolder() {
return (
process.env.COREPACK_HOME ??
join(
Expand All @@ -18,6 +23,13 @@ export function getInstallFolder() {
);
}

export function getInstallFolder() {
return join(
getCorepackHomeFolder(),
`v${INSTALL_FOLDER_VERSION}`,
);
}

export function getTemporaryFolder(target: string = tmpdir()) {
mkdirSync(target, {recursive: true});

Expand Down

0 comments on commit a8f8736

Please sign in to comment.