Skip to content

Commit 6353abf

Browse files
Andaristemmatown
andauthored
Stop asking for changeset confirmation when it has been provided using an external editor (#562)
Co-authored-by: Mitchell Hamilton <mitchell@hamil.town>
1 parent eae7236 commit 6353abf

File tree

4 files changed

+45
-28
lines changed

4 files changed

+45
-28
lines changed

.changeset/shaggy-bobcats-roll.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@changesets/cli": minor
3+
---
4+
5+
Stop asking for changeset confirmation when it has been provided using an external editor.

packages/cli/src/commands/add/__tests__/add.ts

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,14 @@ describe("Changesets", () => {
9595
mockUserResponses({ releases: { "pkg-a": "patch" } });
9696
await addChangeset(cwd, { empty: false }, defaultConfig);
9797

98-
const expectedChangeset = {
99-
summary: "summary message mock",
100-
releases: [{ name: "pkg-a", type: "patch" }]
101-
};
10298
// @ts-ignore
10399
const call = writeChangeset.mock.calls[0][0];
104-
expect(call).toEqual(expectedChangeset);
100+
expect(call).toEqual(
101+
expect.objectContaining({
102+
summary: "summary message mock",
103+
releases: [{ name: "pkg-a", type: "patch" }]
104+
})
105+
);
105106
});
106107

107108
it.each`
@@ -123,13 +124,14 @@ describe("Changesets", () => {
123124
});
124125
await addChangeset(cwd, { empty: false }, defaultConfig);
125126

126-
const expectedChangeset = {
127-
summary: expectedSummary,
128-
releases: [{ name: "pkg-a", type: "patch" }]
129-
};
130127
// @ts-ignore
131128
const call = writeChangeset.mock.calls[0][0];
132-
expect(call).toEqual(expectedChangeset);
129+
expect(call).toEqual(
130+
expect.objectContaining({
131+
summary: expectedSummary,
132+
releases: [{ name: "pkg-a", type: "patch" }]
133+
})
134+
);
133135
}
134136
);
135137

@@ -161,13 +163,14 @@ describe("Changesets", () => {
161163

162164
await addChangeset(cwd, { empty: false }, defaultConfig);
163165

164-
const expectedChangeset = {
165-
summary: "summary message mock",
166-
releases: [{ name: "single-package", type: "minor" }]
167-
};
168166
// @ts-ignore
169167
const call = writeChangeset.mock.calls[0][0];
170-
expect(call).toEqual(expectedChangeset);
168+
expect(call).toEqual(
169+
expect.objectContaining({
170+
summary: "summary message mock",
171+
releases: [{ name: "single-package", type: "minor" }]
172+
})
173+
);
171174
});
172175
it("should commit when the commit flag is passed in", async () => {
173176
const cwd = await f.copy("simple-project-custom-config");
@@ -185,12 +188,13 @@ describe("Changesets", () => {
185188

186189
await addChangeset(cwd, { empty: true }, defaultConfig);
187190

188-
const expectedChangeset = {
189-
releases: [],
190-
summary: ""
191-
};
192191
// @ts-ignore
193192
const call = writeChangeset.mock.calls[0][0];
194-
expect(call).toEqual(expectedChangeset);
193+
expect(call).toEqual(
194+
expect.objectContaining({
195+
releases: [],
196+
summary: ""
197+
})
198+
);
195199
});
196200
});

packages/cli/src/commands/add/createChangeset.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ function formatPkgNameAndVersion(pkgName: string, version: string) {
9999
export default async function createChangeset(
100100
changedPackages: Array<string>,
101101
allPackages: Package[]
102-
): Promise<{ summary: string; releases: Array<Release> }> {
102+
): Promise<{ confirmed: boolean; summary: string; releases: Array<Release> }> {
103103
const releases: Array<Release> = [];
104104

105105
if (allPackages.length > 1) {
@@ -239,6 +239,7 @@ export default async function createChangeset(
239239
);
240240
if (summary.length > 0) {
241241
return {
242+
confirmed: true,
242243
summary,
243244
releases
244245
};
@@ -258,6 +259,7 @@ export default async function createChangeset(
258259
}
259260

260261
return {
262+
confirmed: false,
261263
summary,
262264
releases
263265
};

packages/cli/src/commands/add/index.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import createChangeset from "./createChangeset";
1313
import printConfirmationMessage from "./messages";
1414
import { ExternalEditor } from "external-editor";
1515

16+
type UnwrapPromise<T extends Promise<any>> = T extends Promise<infer R>
17+
? R
18+
: never;
19+
1620
export default async function add(
1721
cwd: string,
1822
{ empty, open }: { empty?: boolean; open?: boolean },
@@ -21,14 +25,13 @@ export default async function add(
2125
const packages = await getPackages(cwd);
2226
const changesetBase = path.resolve(cwd, ".changeset");
2327

24-
let newChangeset;
25-
let changesetConfirmed = false;
28+
let newChangeset: UnwrapPromise<ReturnType<typeof createChangeset>>;
2629
if (empty) {
2730
newChangeset = {
31+
confirmed: true,
2832
releases: [],
2933
summary: ``
3034
};
31-
changesetConfirmed = true;
3235
} else {
3336
const changedPackages = await git.getChangedPackagesSinceRef({
3437
cwd,
@@ -40,12 +43,15 @@ export default async function add(
4043
newChangeset = await createChangeset(changePackagesName, packages.packages);
4144
printConfirmationMessage(newChangeset, packages.packages.length > 1);
4245

43-
changesetConfirmed = await cli.askConfirm(
44-
"Is this your desired changeset?"
45-
);
46+
if (!newChangeset.confirmed) {
47+
newChangeset = {
48+
...newChangeset,
49+
confirmed: await cli.askConfirm("Is this your desired changeset?")
50+
};
51+
}
4652
}
4753

48-
if (changesetConfirmed) {
54+
if (newChangeset.confirmed) {
4955
const changesetID = await writeChangeset(newChangeset, cwd);
5056
if (config.commit) {
5157
await git.add(path.resolve(changesetBase, `${changesetID}.md`), cwd);

0 commit comments

Comments
 (0)