diff --git a/packages/plugin-essentials/sources/commands/install.ts b/packages/plugin-essentials/sources/commands/install.ts index 9dcd02d12..cf1765a20 100644 --- a/packages/plugin-essentials/sources/commands/install.ts +++ b/packages/plugin-essentials/sources/commands/install.ts @@ -254,6 +254,7 @@ export default class YarnCommand extends BaseCommand { // If migrating from a v1 install, we automatically enable the node-modules linker, // since that's likely what the author intended to do. if (content?.includes(`yarn lockfile v1`)) { + throw new Error("Tried to use yarn-berry_3.yarnConfigHook (nixpkgs), but found a yarn v1 lockfile"); const nmReport = await StreamReport.start({ configuration, json: this.json, diff --git a/packages/plugin-git/sources/GitFetcher.ts b/packages/plugin-git/sources/GitFetcher.ts index fe2a4fce8..bfa82728e 100644 --- a/packages/plugin-git/sources/GitFetcher.ts +++ b/packages/plugin-git/sources/GitFetcher.ts @@ -50,9 +50,14 @@ export class GitFetcher implements Fetcher { } async cloneFromRemote(locator: Locator, opts: FetchOptions) { - const cloneTarget = await gitUtils.clone(locator.reference, opts.project.configuration); - const repoUrlParts = gitUtils.splitRepoUrl(locator.reference); + + if (repoUrlParts.treeish.protocol !== "commit") { + throw new Error(`Missing source for git dependency ${locator.reference}`); + }; + + const cloneTarget = opts.cache.checkoutPath(repoUrlParts.treeish.request); + const packagePath = ppath.join(cloneTarget, `package.tgz` as PortablePath); await scriptUtils.prepareExternalProject(cloneTarget, packagePath, { diff --git a/packages/plugin-npm/sources/NpmSemverFetcher.ts b/packages/plugin-npm/sources/NpmSemverFetcher.ts index 0f69423c7..5b21462a5 100644 --- a/packages/plugin-npm/sources/NpmSemverFetcher.ts +++ b/packages/plugin-npm/sources/NpmSemverFetcher.ts @@ -47,6 +47,7 @@ export class NpmSemverFetcher implements Fetcher { } private async fetchFromNetwork(locator: Locator, opts: FetchOptions) { + throw new Error(`Missing sources for ${structUtils.prettyLocator(opts.project.configuration, locator)}`); let sourceBuffer; try { sourceBuffer = await npmHttpUtils.get(NpmSemverFetcher.getLocatorUrl(locator), { diff --git a/packages/yarnpkg-core/sources/Cache.ts b/packages/yarnpkg-core/sources/Cache.ts index d5e686420..374b5d67f 100644 --- a/packages/yarnpkg-core/sources/Cache.ts +++ b/packages/yarnpkg-core/sources/Cache.ts @@ -158,6 +158,10 @@ export class Cache { } } + checkoutPath(commit: string): string { + return ppath.join(ppath.join(this.cwd, "../checkouts"), commit); + } + async fetchPackageFromCache(locator: Locator, expectedChecksum: string | null, {onHit, onMiss, loader, ...opts}: {onHit?: () => void, onMiss?: () => void, loader?: () => Promise } & CacheOptions): Promise<[FakeFS, () => void, string | null]> { const mirrorPath = this.getLocatorMirrorPath(locator); diff --git a/packages/yarnpkg-core/sources/scriptUtils.ts b/packages/yarnpkg-core/sources/scriptUtils.ts index b3c2c5903..15cae13fd 100644 --- a/packages/yarnpkg-core/sources/scriptUtils.ts +++ b/packages/yarnpkg-core/sources/scriptUtils.ts @@ -287,9 +287,9 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port // Run an install; we can't avoid it unless we inspect the // package.json, which I don't want to do to keep the codebase // clean (even if it has a slight perf cost when cloning v1 repos) - const install = await execUtils.pipevp(`yarn`, [`install`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode}); - if (install.code !== 0) - return install.code; + //const install = await execUtils.pipevp(`yarn`, [`install`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode}); + //if (install.code !== 0) + // return install.code; stdout.write(`\n`); @@ -375,9 +375,9 @@ export async function prepareExternalProject(cwd: PortablePath, outputPath: Port // We can't use `npm ci` because some projects don't have npm // lockfiles that are up-to-date. Hopefully npm won't decide // to change the versions randomly. - const install = await execUtils.pipevp(`npm`, [`install`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode}); - if (install.code !== 0) - return install.code; + //const install = await execUtils.pipevp(`npm`, [`install`], {cwd, env, stdin, stdout, stderr, end: execUtils.EndStrategy.ErrorCode}); + //if (install.code !== 0) + // return install.code; const packStream = new PassThrough(); const packPromise = miscUtils.bufferStream(packStream);