diff --git a/dev-infra/format/cli.ts b/dev-infra/format/cli.ts index 68ddff86e9..8c635575ab 100644 --- a/dev-infra/format/cli.ts +++ b/dev-infra/format/cli.ts @@ -7,7 +7,7 @@ */ import * as yargs from 'yargs'; -import {allChangedFilesSince, allFiles} from '../utils/repo-files'; +import {allChangedFilesSince, allFiles, allStagedFiles} from '../utils/repo-files'; import {checkFiles, formatFiles} from './format'; @@ -34,6 +34,12 @@ export function buildFormatParser(localYargs: yargs.Argv) { const executionCmd = check ? checkFiles : formatFiles; executionCmd(allChangedFilesSince(sha)); }) + .command( + 'staged', 'Run the formatter on all staged files', {}, + ({check}) => { + const executionCmd = check ? checkFiles : formatFiles; + executionCmd(allStagedFiles()); + }) .command('files ', 'Run the formatter on provided files', {}, ({check, files}) => { const executionCmd = check ? checkFiles : formatFiles; executionCmd(files); diff --git a/dev-infra/utils/repo-files.ts b/dev-infra/utils/repo-files.ts index 7cfbc09ec4..b509e90fc0 100644 --- a/dev-infra/utils/repo-files.ts +++ b/dev-infra/utils/repo-files.ts @@ -27,6 +27,18 @@ export function allChangedFilesSince(sha = 'HEAD') { return Array.from(new Set([...diffFiles, ...untrackedFiles])); } +/** + * A list of all staged files which have been modified. + * + * Only added, created and modified files are listed as others (deleted, renamed, etc) aren't + * changed or available as content to act upon. + */ +export function allStagedFiles() { + return gitOutputAsArray(`git diff --staged --name-only --diff-filter=ACM`); +} + + + export function allFiles() { return gitOutputAsArray(`git ls-files`); }