diff --git a/packages/bazel/src/utils/tasks.ts b/packages/bazel/src/utils/tasks.ts index 64f79a00e7..2a20e80898 100644 --- a/packages/bazel/src/utils/tasks.ts +++ b/packages/bazel/src/utils/tasks.ts @@ -10,7 +10,7 @@ export class FormatFiles implements TaskConfigurationGenerator { return { name: 'node-package', options: { - command: 'run format', + command: 'run format -- --untracked', quiet: true } }; diff --git a/packages/schematics/src/command-line/affected.ts b/packages/schematics/src/command-line/affected.ts index 27c4344434..d851e95b27 100644 --- a/packages/schematics/src/command-line/affected.ts +++ b/packages/schematics/src/command-line/affected.ts @@ -38,6 +38,9 @@ function printError(command: string, e: any) { console.error( `Or pass the list of files, as follows: npm run affected:${command} -- --files="libs/mylib/index.ts,libs/mylib2/index.ts".` ); + console.error( + `Or to get the list of files from staged or unstaged changes: npm run affected:${command} -- staged | unstaged".` + ); console.error(e.message); } diff --git a/packages/schematics/src/command-line/shared.ts b/packages/schematics/src/command-line/shared.ts index 17dd1bd744..798526b85c 100644 --- a/packages/schematics/src/command-line/shared.ts +++ b/packages/schematics/src/command-line/shared.ts @@ -29,12 +29,25 @@ export function parseFiles( }); const dashDashFiles = named.filter(a => a.startsWith('--files='))[0]; + const uncommitted = named.some(a => a === '--uncommitted'); + const untracked = named.some(a => a === '--untracked'); + if (dashDashFiles) { named.splice(named.indexOf(dashDashFiles), 1); return { files: parseDashDashFiles(dashDashFiles), rest: [...unnamed, ...named] }; + } else if (uncommitted) { + return { + files: getUncommittedFiles(), + rest: [...unnamed, ...named] + }; + } else if (untracked) { + return { + files: getUntrackedFiles(), + rest: [...unnamed, ...named] + }; } else if (unnamed.length >= 2) { return { files: getFilesFromShash(unnamed[0], unnamed[1]), @@ -53,8 +66,20 @@ function parseDashDashFiles(dashDashFiles: string): string[] { return f.split(',').map(f => f.trim()); } +function getUncommittedFiles(): string[] { + return parseGitOutput(`git diff --name-only HEAD .`); +} + +function getUntrackedFiles(): string[] { + return parseGitOutput(`git ls-files --others --exclude-standard`); +} + function getFilesFromShash(sha1: string, sha2: string): string[] { - return execSync(`git diff --name-only ${sha1} ${sha2}`) + return parseGitOutput(`git diff --name-only ${sha1} ${sha2}`); +} + +function parseGitOutput(command: string): string[] { + return execSync(command) .toString('utf-8') .split('\n') .map(a => a.trim()) diff --git a/packages/schematics/src/utils/tasks.ts b/packages/schematics/src/utils/tasks.ts index 64f79a00e7..2a20e80898 100644 --- a/packages/schematics/src/utils/tasks.ts +++ b/packages/schematics/src/utils/tasks.ts @@ -10,7 +10,7 @@ export class FormatFiles implements TaskConfigurationGenerator { return { name: 'node-package', options: { - command: 'run format', + command: 'run format -- --untracked', quiet: true } };