From 3f1fb219bf6509902b5fe5e968b7c09b5e94a8e5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 7 Nov 2024 09:51:45 +0100 Subject: [PATCH 1/2] repo-tools: make generate-patch add global resolution entry as fallback Signed-off-by: Patrik Oldsberg --- .changeset/strange-clocks-pretend.md | 5 +++++ .../src/commands/generate-patch/generate-patch.ts | 8 ++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changeset/strange-clocks-pretend.md diff --git a/.changeset/strange-clocks-pretend.md b/.changeset/strange-clocks-pretend.md new file mode 100644 index 0000000000..9a3b6e20ac --- /dev/null +++ b/.changeset/strange-clocks-pretend.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +The `generate-patch` command will now fall back to always adding a `resolutions` entry, even if no matching descriptors are found. diff --git a/packages/repo-tools/src/commands/generate-patch/generate-patch.ts b/packages/repo-tools/src/commands/generate-patch/generate-patch.ts index e5d9928cea..3c33d9c1b0 100644 --- a/packages/repo-tools/src/commands/generate-patch/generate-patch.ts +++ b/packages/repo-tools/src/commands/generate-patch/generate-patch.ts @@ -217,8 +217,12 @@ async function loadTrimmedRootPkg(ctx: PatchContext, query?: string) { } return async (patchEntry?: string) => { - for (const descriptor of descriptors) { - resolutionsObj[descriptor] = patchEntry; + if (descriptors.length > 0) { + for (const descriptor of descriptors) { + resolutionsObj[descriptor] = patchEntry; + } + } else { + resolutionsObj[ctx.packageName] = patchEntry; } // We use the same patch for all versions of the package, if they don't // apply it might require manual intervention using the --query option From 95401a8455f7fddcf0f29769634bd50daf770eca Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 7 Nov 2024 09:52:05 +0100 Subject: [PATCH 2/2] repo-tools: fix generate-patch not including new files Signed-off-by: Patrik Oldsberg --- .changeset/ninety-panthers-provide.md | 5 ++++ .../commands/generate-patch/generate-patch.ts | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 .changeset/ninety-panthers-provide.md diff --git a/.changeset/ninety-panthers-provide.md b/.changeset/ninety-panthers-provide.md new file mode 100644 index 0000000000..467344ae61 --- /dev/null +++ b/.changeset/ninety-panthers-provide.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +The `generate-patch` command now properly includes newly created files in the patch. diff --git a/packages/repo-tools/src/commands/generate-patch/generate-patch.ts b/packages/repo-tools/src/commands/generate-patch/generate-patch.ts index 3c33d9c1b0..e817abd74b 100644 --- a/packages/repo-tools/src/commands/generate-patch/generate-patch.ts +++ b/packages/repo-tools/src/commands/generate-patch/generate-patch.ts @@ -413,6 +413,23 @@ async function generatePatchForArchives( cwd: patchDir, env: { ...process.env, ...GIT_ENV }, }); + // Commit the base archive contents, so that we can later add all files and diff against the index + await exec( + 'git', + [ + '-c', + 'user.name="patcher"', + '-c', + 'user.email="patcher@acme.org"', + 'commit', + '-m', + 'base', + ], + { + cwd: patchDir, + env: { ...process.env, ...GIT_ENV }, + }, + ); // Remove all existing files for (const path of await fs.readdir(patchDir)) { @@ -428,12 +445,18 @@ async function generatePatchForArchives( // Extract the target archive to use a target for the patch await tar.extract({ file: headPath, cwd: patchDir, strip: 1 }); + // Add and diff against index, to make sure we include untracked files + await exec('git', ['add', '.'], { + cwd: patchDir, + env: { ...process.env, ...GIT_ENV }, + }); const { stdout: patch } = await exec( 'git', [ '-c', 'core.safecrlf=false', 'diff', + '--cached', '--src-prefix=a/', '--dst-prefix=b/', '--ignore-cr-at-eol',