diff --git a/src/commands/commit.ts b/src/commands/commit.ts index 8655abd..b1c9eab 100644 --- a/src/commands/commit.ts +++ b/src/commands/commit.ts @@ -24,6 +24,7 @@ import { confirm, intro, isCancel, + multiselect, note, outro, select, @@ -31,7 +32,7 @@ import { } from "@clack/prompts"; import { existsSync } from "fs"; import { join } from "path"; -import simpleGit from "simple-git"; +import simpleGit, { ResetMode } from "simple-git"; const command = new Command("commit") .alias("c") @@ -69,6 +70,37 @@ const command = new Command("commit") process.exit(0); } + const stageableFiles = (await simpleGit().status()).files; + if (stageAll === false) { + const stagedFiles = (await simpleGit().diff(["--name-only", "--cached"])) + .split("\n") + .filter((file) => file); + + const filesToStage = await multiselect({ + message: "Which files would you like to stash?", + options: stageableFiles.map((file) => ({ + value: file.path, + label: file.path, + hint: file.from, + })), + initialValues: stagedFiles, + required: false, + }); + + if (isCancel(filesToStage)) { + cancel("Commit creation cancelled"); + process.exit(0); + } + + await simpleGit().reset(ResetMode.MIXED); + await simpleGit().add(filesToStage); + } else if (stageAll === true) { + note( + stageableFiles.map((file) => file.path).join("\n"), + "Committing following files", + ); + } + try { const changedLines = ( (