UNPKG

1.09 kBJavaScriptView Raw
1import path from 'node:path'
2
3import normalize from 'normalize-path'
4
5import { execGit } from './execGit.js'
6import { parseGitZOutput } from './parseGitZOutput.js'
7
8export const getStagedFiles = async ({ cwd = process.cwd(), diff, diffFilter } = {}) => {
9 try {
10 /**
11 * Docs for --diff-filter option:
12 * @see https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---diff-filterACDMRTUXB82308203
13 */
14 const diffFilterArg = diffFilter !== undefined ? diffFilter.trim() : 'ACMR'
15
16 /** Use `--diff branch1...branch2` or `--diff="branch1 branch2", or fall back to default staged files */
17 const diffArgs = diff !== undefined ? diff.trim().split(' ') : ['--staged']
18
19 /**
20 * Docs for -z option:
21 * @see https://git-scm.com/docs/git-diff#Documentation/git-diff.txt--z
22 */
23 const lines = await execGit(
24 ['diff', '--name-only', '-z', `--diff-filter=${diffFilterArg}`, ...diffArgs],
25 { cwd }
26 )
27 if (!lines) return []
28
29 return parseGitZOutput(lines).map((file) => normalize(path.resolve(cwd, file)))
30 } catch {
31 return null
32 }
33}