Skip to content

Commit

Permalink
feat(read)!: change --edit preceded to --from and --to
Browse files Browse the repository at this point in the history
  • Loading branch information
hyiso committed Jan 18, 2023
1 parent 7cc2c28 commit 221f789
Showing 1 changed file with 29 additions and 13 deletions.
42 changes: 29 additions & 13 deletions packages/commitlint_read/lib/commitlint_read.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,35 +9,51 @@ import 'package:path/path.dart';
/// Read commit messages in given range([from], [to]),
/// or in [edit] file.
/// Return commit messages list.
Future<Iterable<String>> read(
{String? from, String? to, String edit = './.git/COMMIT_EDITMSG'}) async {
if (from == null && to == null) {
return await _getEditingCommit();
Future<Iterable<String>> read({
String? from,
String? to,
String? edit,
String? workingDirectory,
Iterable<String>? gitLogArgs,
}) async {
if (edit != null) {
return await _getEditingCommit(
edit: edit, workingDirectory: workingDirectory);
}
return _getRangeCommits(from, to);
final range = [if (from != null) from, to ?? 'HEAD'].join('..');
return _getRangeCommits(
gitLogArgs: ['--format=%B', range, ...?gitLogArgs],
workingDirectory: workingDirectory,
);
}

Future<Iterable<String>> _getRangeCommits(String? from, String? to) async {
final range = [if (from != null) from, to ?? 'HEAD'].join('..');
Future<Iterable<String>> _getRangeCommits({
required Iterable<String> gitLogArgs,
String? workingDirectory,
}) async {
final result = await Process.run(
'git',
['log', '--format=%B', range],
['log', ...gitLogArgs],
workingDirectory: workingDirectory,
);
return ((result.stdout as String).trim().split('\n'))
.where((message) => message.trim().isNotEmpty)
.toList();
}

Future<Iterable<String>> _getEditingCommit() async {
Future<Iterable<String>> _getEditingCommit({
required String edit,
String? workingDirectory,
}) async {
final result = await Process.run(
'git',
['rev-parse', '--show-toplevel'],
workingDirectory: workingDirectory,
);
final root = result.stdout.toString().trim();
final msgFile = File(join(root, '.git', 'COMMIT_EDITMSG'));

if (await msgFile.exists()) {
return [msgFile.readAsStringSync()];
final file = File(join(root, edit));
if (await file.exists()) {
return [await file.readAsString()];
}
return [];
}

0 comments on commit 221f789

Please sign in to comment.