gitStatus function
Get git status (porcelain v1 format).
Implementation
Future<List<GitStatusEntry>> gitStatus({String? dir}) async {
final result = await runGit([
'status',
'--porcelain=v1',
], workingDirectory: dir);
if (!result.success) return [];
return result.output.split('\n').where((l) => l.length >= 3).map((line) {
final xy = line.substring(0, 2);
final path = line.substring(3);
final status = switch (xy.trim()) {
'A' || '??' => GitFileStatus.added,
'M' || 'MM' => GitFileStatus.modified,
'D' => GitFileStatus.deleted,
'R' => GitFileStatus.renamed,
'C' => GitFileStatus.copied,
'!!' => GitFileStatus.ignored,
_ when xy.contains('?') => GitFileStatus.untracked,
_ => GitFileStatus.modified,
};
String? originalPath;
if (status == GitFileStatus.renamed && path.contains(' -> ')) {
final parts = path.split(' -> ');
originalPath = parts[0];
return GitStatusEntry(
path: parts[1],
status: status,
originalPath: originalPath,
);
}
return GitStatusEntry(path: path, status: status);
}).toList();
}