diffFiles method

Future<List<String>> diffFiles({
  1. required List<String> diffArgs,
  2. required String diffFilters,
})

Implementation

Future<List<String>> diffFiles({
  required List<String> diffArgs,
  required String diffFilters,
}) async {
  final result = await process.run('git', [
    'diff',
    ...diffArgs,
    if (diffFilters.isNotEmpty) '--diff-filter=$diffFilters',
    '--name-only',
    '-z',
  ]);

  final out = switch (result.stdout) {
    final String out => out.trim(),
    final Future<String> out => (await out).trim(),
  };

  final files = out
      .split('\x00')
      .where((element) => element.isNotEmpty)
      .toList();

  if (remoteName case final String remoteName
      when files.isEmpty && diffArgs.contains('@{u}')) {
    final currentBranch = await getCurrentBranch();

    final upstream = '$remoteName/$currentBranch';

    return diffFiles(
      diffArgs: [
        for (final arg in diffArgs)
          if (arg == '@{u}') upstream else arg,
      ],
      diffFilters: diffFilters,
    );
  }

  return files;
}