diff --git a/integration-tests/append-patches/__snapshots__/append-patches.test.ts.snap b/integration-tests/append-patches/__snapshots__/append-patches.test.ts.snap index 54a74835..e6a36be8 100644 --- a/integration-tests/append-patches/__snapshots__/append-patches.test.ts.snap +++ b/integration-tests/append-patches/__snapshots__/append-patches.test.ts.snap @@ -85,3 +85,9 @@ exports[`Test append-patches: 07: patch-package fails when a patch in the sequen Failed to apply patch left-pad+1.3.0+001+FirstPatch.patch to left-pad END SNAPSHOT" `; + +exports[`Test append-patches: 08: --append is not compatible with --create-issue 1`] = ` +"SNAPSHOT: --append is not compatible with --create-issue +--create-issue is not compatible with --append. +END SNAPSHOT" +`; diff --git a/integration-tests/append-patches/append-patches.sh b/integration-tests/append-patches/append-patches.sh index d48a8d8a..6f35a5a5 100755 --- a/integration-tests/append-patches/append-patches.sh +++ b/integration-tests/append-patches/append-patches.sh @@ -75,4 +75,10 @@ npx replace 'use strict' 'use bananas' patches/*FirstPatch.patch if patch-package left-pad --append 'Bananas' ; then exit 1 fi +(>&2 echo "END SNAPSHOT") + +(>&2 echo "SNAPSHOT: --append is not compatible with --create-issue") +if patch-package left-pad --append 'Bananas' --create-issue ; then + exit 1 +fi (>&2 echo "END SNAPSHOT") \ No newline at end of file diff --git a/src/createIssue.ts b/src/createIssue.ts index 6ce03e8f..1a30be7b 100644 --- a/src/createIssue.ts +++ b/src/createIssue.ts @@ -29,7 +29,7 @@ function parseRepoString( return { org, repo, provider: "GitHub" } } -function getPackageVCSDetails(packageDetails: PackageDetails) { +export function getPackageVCSDetails(packageDetails: PackageDetails) { const repository = require(resolve(join(packageDetails.path, "package.json"))) .repository as undefined | string | { url: string } @@ -61,11 +61,11 @@ export function shouldRecommendIssue( } export function maybePrintIssueCreationPrompt( + vcs: ReturnType, packageDetails: PackageDetails, packageManager: PackageManager, ) { - const vcs = getPackageVCSDetails(packageDetails) - if (vcs && shouldRecommendIssue(vcs)) { + if (vcs) { console.log(`💡 ${chalk.bold(packageDetails.name)} is on ${ vcs.provider }! To draft an issue based on your patch run diff --git a/src/makePatch.ts b/src/makePatch.ts index c5cebc45..acd620c8 100644 --- a/src/makePatch.ts +++ b/src/makePatch.ts @@ -14,8 +14,10 @@ import { dirSync } from "tmp" import { gzipSync } from "zlib" import { applyPatch } from "./applyPatches" import { + getPackageVCSDetails, maybePrintIssueCreationPrompt, openIssueCreationLink, + shouldRecommendIssue, } from "./createIssue" import { PackageManager } from "./detectPackageManager" import { removeIgnoredFiles } from "./filterFiles" @@ -74,6 +76,19 @@ export function makePatch({ packageDetails.pathSpecifier ] || [] + if (createIssue && mode.type === "append") { + console.error("--create-issue is not compatible with --append.") + process.exit(1) + } + + const numPatchesAfterCreate = + mode.type === "append" ? existingPatches.length + 1 : existingPatches.length + const vcs = getPackageVCSDetails(packageDetails) + const canCreateIssue = + shouldRecommendIssue(vcs) && + numPatchesAfterCreate === 1 && + mode.type !== "append" + const appPackageJson = require(join(appPath, "package.json")) const packagePath = join(appPath, packageDetails.path) const packageJsonPath = join(packagePath, "package.json") @@ -367,14 +382,16 @@ export function makePatch({ console.log( `${chalk.green("✔")} Created file ${join(patchDir, patchFileName)}\n`, ) - if (createIssue) { - openIssueCreationLink({ - packageDetails, - patchFileContents: diffResult.stdout.toString(), - packageVersion, - }) - } else { - maybePrintIssueCreationPrompt(packageDetails, packageManager) + if (canCreateIssue) { + if (createIssue) { + openIssueCreationLink({ + packageDetails, + patchFileContents: diffResult.stdout.toString(), + packageVersion, + }) + } else { + maybePrintIssueCreationPrompt(vcs, packageDetails, packageManager) + } } } catch (e) { console.error(e)