parseGitNumstat function
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,
);
}