parseGitNumstat function

NumstatResult parseGitNumstat(
  1. String stdout
)

Parse git diff --numstat output.

Implementation

NumstatResult parseGitNumstat(String stdout) {
  final lines = stdout.trim().split('\n').where((l) => l.isNotEmpty);
  var added = 0;
  var removed = 0;
  var validFileCount = 0;
  final perFileStats = <String, PerFileStats>{};

  for (final line in lines) {
    final parts = line.split('\t');
    if (parts.length < 3) continue;

    validFileCount++;
    final addStr = parts[0];
    final remStr = parts[1];
    final filePath = parts.sublist(2).join('\t');
    final isBinary = addStr == '-' || remStr == '-';
    final fileAdded = isBinary ? 0 : (int.tryParse(addStr) ?? 0);
    final fileRemoved = isBinary ? 0 : (int.tryParse(remStr) ?? 0);

    added += fileAdded;
    removed += fileRemoved;

    if (perFileStats.length < _maxFiles) {
      perFileStats[filePath] = PerFileStats(
        added: fileAdded,
        removed: fileRemoved,
        isBinary: isBinary,
      );
    }
  }

  return NumstatResult(
    stats: GitDiffStats(
      filesCount: validFileCount,
      linesAdded: added,
      linesRemoved: removed,
    ),
    perFileStats: perFileStats,
  );
}