diff --git a/CHANGELOG.md b/CHANGELOG.md index 366679dc..ff988eca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 8.1.0 + +- Add support for the `--text` option to treat all files as text. + ## 8.0.0 - Add support for multiple patch files for a single package. #474 diff --git a/README.md b/README.md index c3a910b0..7139e2d5 100644 --- a/README.md +++ b/README.md @@ -178,6 +178,10 @@ team. Specify the name for the directory in which to put the patch files. +- `--text` + + Treat all files as text files. This is useful when git detects text files as binary ones and returns empty diffs. + #### Nested packages If you are trying to patch a package at, e.g. diff --git a/package.json b/package.json index 6d2aea18..cccdb1ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "patch-package", - "version": "8.0.0", + "version": "8.1.0", "description": "Fix broken node modules with no fuss", "main": "dist/index.js", "repository": "github:ds300/patch-package", diff --git a/src/gitDiffArguments.test.ts b/src/gitDiffArguments.test.ts new file mode 100644 index 00000000..c2aa25d4 --- /dev/null +++ b/src/gitDiffArguments.test.ts @@ -0,0 +1,20 @@ +import { createGitDiffArguments } from "./gitDiffArguments" + +const gitDiffTextArgument = "--text" + +describe("createGitDiffArguments", () => { + + it("should return --text as one of arguments when enforceTextFileType is true", () => { + + const enforceTextFileType = true + + expect(createGitDiffArguments(enforceTextFileType)).toContain(gitDiffTextArgument) + }) + + it("shouldn't return --text as one of arguments when enforceTextFileType is false", () => { + + const enforceTextFileType = false + + expect(createGitDiffArguments(enforceTextFileType)).not.toContain(gitDiffTextArgument) + }) +}) diff --git a/src/gitDiffArguments.ts b/src/gitDiffArguments.ts new file mode 100644 index 00000000..210849bd --- /dev/null +++ b/src/gitDiffArguments.ts @@ -0,0 +1,21 @@ +import { blueBright } from "chalk" + +export function createGitDiffArguments(enforceTextFileType: boolean) { + + const gitDiffArgs = [ + "diff", + "--cached", + "--no-color", + "--ignore-space-at-eol", + "--no-ext-diff", + "--src-prefix=a/", + "--dst-prefix=b/", + ] + + if (enforceTextFileType) { + console.log(blueBright("Treating all files as text.")) + gitDiffArgs.push("--text") + } + + return gitDiffArgs +} diff --git a/src/index.ts b/src/index.ts index 8ee449a9..c1b3f194 100644 --- a/src/index.ts +++ b/src/index.ts @@ -25,6 +25,7 @@ const argv = minimist(process.argv.slice(2), { "error-on-warn", "create-issue", "partial", + "text", "", ], string: ["patch-dir", "append", "rebase"], @@ -86,6 +87,7 @@ if (argv.version || argv.v) { appPath, argv["use-yarn"] ? "yarn" : null, ) + const enforceTextFileType = !!argv.text; const createIssue = argv["create-issue"] packageNames.forEach((packagePathSpecifier: string) => { makePatch({ @@ -100,6 +102,7 @@ if (argv.version || argv.v) { "append" in argv ? { type: "append", name: argv.append || undefined } : { type: "overwrite_last" }, + enforceTextFileType }) }) } else { diff --git a/src/makePatch.ts b/src/makePatch.ts index 4d040297..b5935a16 100644 --- a/src/makePatch.ts +++ b/src/makePatch.ts @@ -23,6 +23,7 @@ import { PackageManager } from "./detectPackageManager" import { removeIgnoredFiles } from "./filterFiles" import { getPackageResolution } from "./getPackageResolution" import { getPackageVersion } from "./getPackageVersion" +import { createGitDiffArguments } from "./gitDiffArguments" import { hashFile } from "./hash" import { getPatchDetailsFromCliString, @@ -63,6 +64,7 @@ export function makePatch({ patchDir, createIssue, mode, + enforceTextFileType, }: { packagePathSpecifier: string appPath: string @@ -72,6 +74,7 @@ export function makePatch({ patchDir: string createIssue: boolean mode: { type: "overwrite_last" } | { type: "append"; name?: string } + enforceTextFileType: boolean }) { const packageDetails = getPatchDetailsFromCliString(packagePathSpecifier) @@ -310,16 +313,9 @@ export function makePatch({ // stage all files git("add", "-f", packageDetails.path) + const gitDiffArgs = createGitDiffArguments(enforceTextFileType) // get diff of changes - const diffResult = git( - "diff", - "--cached", - "--no-color", - "--ignore-space-at-eol", - "--no-ext-diff", - "--src-prefix=a/", - "--dst-prefix=b/", - ) + const diffResult = git(...gitDiffArgs) if (diffResult.stdout.length === 0) { console.log(