@@ -25,11 +25,12 @@ import { resolveRelativeFileDependencies } from "./resolveRelativeFileDependenci
2525import { getPackageResolution } from "./getPackageResolution"
2626import { parsePatchFile } from "./patch/parse"
2727import { gzipSync } from "zlib"
28- import { getPackageVersion } from "./getPackageVersion"
28+ // import { getPackageVersion } from "./getPackageVersion"
2929import {
3030 maybePrintIssueCreationPrompt ,
3131 openIssueCreationLink ,
3232} from "./createIssue"
33+ import { quote as shlexQuote } from "shlex"
3334
3435const isVerbose = global . patchPackageIsVerbose
3536const isDebug = global . patchPackageIsDebug
@@ -123,15 +124,25 @@ export function makePatch({
123124 } ) ,
124125 )
125126
127+ /*
126128 // originCommit is more precise than pkg.version
127129 if (isDebug) {
128130 console.log(
129131 `patch-package/makePatch: resolvedVersion.originCommit = ${resolvedVersion.originCommit}`,
130132 )
133+ console.log(
134+ `patch-package/makePatch: resolvedVersion.version = ${resolvedVersion.version}`,
135+ )
131136 }
132137 const packageVersion =
133138 resolvedVersion.originCommit ||
134139 getPackageVersion(join(resolve(packageDetails.path), "package.json"))
140+ */
141+
142+ // this is broken when installing from git -> version can be a pseudo-version like 1.0.0-canary
143+ //const packageVersion = getPackageVersion(join(resolve(packageDetails.path), "package.json"))
144+
145+ const packageVersion = resolvedVersion . version
135146
136147 if ( isDebug ) {
137148 console . log ( `patch-package/makePatch: packageVersion = ${ packageVersion } ` )
@@ -359,6 +370,36 @@ export function makePatch({
359370 }
360371 } )
361372
373+ const patchPackageVersion = require ( "../package.json" ) . version
374+
375+ // patchfiles are parsed in patch/parse.ts function parsePatchLines
376+ // -> header comments are ignored
377+ let diffHeader = ""
378+ diffHeader += `# generated by patch-package ${ patchPackageVersion } on ${ new Date ( ) . toLocaleString (
379+ "lt" ,
380+ ) } \n`
381+ diffHeader += `#\n`
382+ const prettyArgv = process . argv . slice ( )
383+ if ( prettyArgv [ 0 ] . match ( / n o d e / ) ) {
384+ prettyArgv [ 0 ] = "npx"
385+ }
386+ if ( prettyArgv [ 1 ] . match ( / p a t c h - p a c k a g e / ) ) {
387+ prettyArgv [ 1 ] = "patch-package"
388+ }
389+ diffHeader += `# command:\n`
390+ diffHeader += `# ${ prettyArgv . map ( ( a ) => shlexQuote ( a ) ) . join ( " " ) } \n`
391+ diffHeader += `#\n`
392+ diffHeader += `# declared package:\n`
393+ diffHeader += `# ${ packageDetails . name } : ${ resolvedVersion . version } \n` // TODO rename to declaredVersion
394+ if ( packageDetails . packageNames . length > 1 ) {
395+ diffHeader += `#\n`
396+ diffHeader += `# package names:\n`
397+ packageDetails . packageNames . forEach ( ( packageName ) => {
398+ diffHeader += `# ${ packageName } \n`
399+ } )
400+ }
401+ diffHeader += `#\n`
402+
362403 const patchFileName = createPatchFileName ( {
363404 packageDetails,
364405 packageVersion,
@@ -369,7 +410,7 @@ export function makePatch({
369410 // scoped package
370411 mkdirSync ( dirname ( patchPath ) )
371412 }
372- writeFileSync ( patchPath , diffResult . stdout )
413+ writeFileSync ( patchPath , diffHeader + diffResult . stdout )
373414 console . log (
374415 `${ chalk . green ( "β" ) } Created file ${ join ( patchDir , patchFileName ) } \n` ,
375416 )
@@ -397,9 +438,18 @@ function createPatchFileName({
397438 packageDetails : PackageDetails
398439 packageVersion : string
399440} ) {
441+ const packageVersionFilename = packageVersion . includes ( "#" )
442+ ? packageVersion . split ( "#" ) [ 1 ] // extract commit hash
443+ : packageVersion . replace ( / \/ / g, "_" )
444+ if ( isVerbose ) {
445+ console . log (
446+ `patch-package/makePatch: packageVersion ${ packageVersion } -> packageVersionFilename ${ packageVersionFilename } ` ,
447+ )
448+ }
449+
400450 const packageNames = packageDetails . packageNames
401451 . map ( ( name ) => name . replace ( / \/ / g, "+" ) )
402452 . join ( "++" )
403453
404- return `${ packageNames } +${ packageVersion } .patch`
454+ return `${ packageNames } +${ packageVersionFilename } .patch`
405455}
0 commit comments