log method
Returns commit log entries.
Implementation
Future<List<GitCommit>> log({
int? maxCount,
String? since,
String? until,
String? author,
String? path,
bool oneline = false,
String? workDir,
}) async {
final args = <String>[
'log',
'--format=%H%n%h%n%an%n%ae%n%aI%n%P%n%s%n---END---',
];
if (maxCount != null) args.add('--max-count=$maxCount');
if (since != null) args.add('--since=$since');
if (until != null) args.add('--until=$until');
if (author != null) args.add('--author=$author');
if (path != null) {
args.add('--');
args.add(path);
}
final result = await _runGit(args, workDir: workDir ?? defaultWorkDir);
final output = (result.stdout as String).trim();
if (output.isEmpty) return [];
final commits = <GitCommit>[];
final blocks = output.split('---END---');
for (final block in blocks) {
final lines = LineSplitter.split(block.trim()).toList();
if (lines.length < 6) continue;
commits.add(
GitCommit(
hash: lines[0],
shortHash: lines[1],
author: lines[2],
email: lines[3],
date: DateTime.tryParse(lines[4]) ?? DateTime.now(),
parents: lines[5].isNotEmpty ? lines[5].split(' ') : [],
message: lines.length > 6 ? lines.sublist(6).join('\n') : '',
),
);
}
return commits;
}