24 lines
933 B
JavaScript
24 lines
933 B
JavaScript
import { execFile } from 'node:child_process';
|
|
import { promisify } from 'node:util';
|
|
import { ROOT } from './specs.mjs';
|
|
|
|
const execFileAsync = promisify(execFile);
|
|
|
|
async function gitLines(args, cwd = ROOT) {
|
|
try {
|
|
const { stdout } = await execFileAsync('git', args, { cwd, encoding: 'utf8' });
|
|
return stdout.split('\n').map((line) => line.trim()).filter(Boolean);
|
|
} catch {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
export async function getChangedFiles(since = 'origin/main', cwd = ROOT) {
|
|
const files = new Set();
|
|
for (const line of await gitLines(['diff', '--name-only', `${since}...HEAD`], cwd)) files.add(line);
|
|
for (const line of await gitLines(['diff', '--cached', '--name-only'], cwd)) files.add(line);
|
|
for (const line of await gitLines(['diff', '--name-only'], cwd)) files.add(line);
|
|
for (const line of await gitLines(['ls-files', '--others', '--exclude-standard'], cwd)) files.add(line);
|
|
return [...files].sort();
|
|
}
|