fix(plugin-commands-patching): should fetch dependency from tarball url when patching dependency installed from git (#7230)

close #7196
This commit is contained in:
await-ovo
2023-10-24 20:52:01 +08:00
committed by GitHub
parent 43ce9e4a6a
commit d93e5d06d0
7 changed files with 132 additions and 17 deletions

View File

@@ -14,8 +14,9 @@ import escapeStringRegexp from 'escape-string-regexp'
import renderHelp from 'render-help'
import tempy from 'tempy'
import { writePackage } from './writePackage'
import { parseWantedDependency } from '@pnpm/parse-wanted-dependency'
import { type ParseWantedDependencyResult, parseWantedDependency } from '@pnpm/parse-wanted-dependency'
import packlist from 'npm-packlist'
import { type GetPatchedDependencyOptions, getVersionsFromLockfile } from './getPatchedDependency'
export const rcOptionsTypes = cliOptionsTypes
@@ -50,9 +51,16 @@ export async function handler (opts: install.InstallCommandOptions & Pick<Config
await fs.promises.mkdir(patchesDir, { recursive: true })
const patchedPkgManifest = await readPackageJsonFromDir(userDir)
const pkgNameAndVersion = `${patchedPkgManifest.name}@${patchedPkgManifest.version}`
const gitTarballUrl = await getGitTarballUrlFromLockfile({
alias: patchedPkgManifest.name,
pref: patchedPkgManifest.version,
}, {
lockfileDir,
modulesDir: opts.modulesDir,
virtualStoreDir: opts.virtualStoreDir,
})
const srcDir = tempy.directory()
await writePackage(parseWantedDependency(pkgNameAndVersion), srcDir, opts)
await writePackage(parseWantedDependency(gitTarballUrl ? `${patchedPkgManifest.name}@${gitTarballUrl}` : pkgNameAndVersion), srcDir, opts)
const patchedPkgDir = await preparePkgFilesForDiff(userDir)
const patchContent = await diffFolders(srcDir, patchedPkgDir)
@@ -174,3 +182,8 @@ async function areAllFilesInPkg (files: string[], basePath: string) {
})
return equals(allFiles.sort(), files.sort())
}
async function getGitTarballUrlFromLockfile (dep: ParseWantedDependencyResult, opts: GetPatchedDependencyOptions) {
const { preferredVersions } = await getVersionsFromLockfile(dep, opts)
return preferredVersions[0]?.gitTarballUrl
}