feat(revwalk): allow combining sorting types

This commit is contained in:
Aleksey Kulikov 2021-09-03 18:54:13 +03:00
parent da3bda077a
commit f19a34a768
3 changed files with 10 additions and 8 deletions

View file

@ -1,4 +1,6 @@
import 'dart:ffi'; import 'dart:ffi';
import 'package:libgit2dart/libgit2dart.dart';
import 'bindings/libgit2_bindings.dart'; import 'bindings/libgit2_bindings.dart';
import 'bindings/repository.dart' as bindings; import 'bindings/repository.dart' as bindings;
import 'bindings/merge.dart' as merge_bindings; import 'bindings/merge.dart' as merge_bindings;
@ -329,11 +331,9 @@ class Repository {
/// Returns the list of commits starting from provided [oid]. /// Returns the list of commits starting from provided [oid].
/// ///
/// If [sorting] isn't provided default will be used (reverse chronological order, like in git). /// If [sorting] isn't provided default will be used (reverse chronological order, like in git).
List<Commit> log(Oid oid, [GitSort sorting = GitSort.none]) { List<Commit> log(Oid oid, [List<GitSort>? sorting]) {
final walker = RevWalk(this); final walker = RevWalk(this);
if (sorting != GitSort.none) { walker.sorting(sorting ?? [GitSort.none]);
walker.sorting(sorting);
}
walker.push(oid); walker.push(oid);
final result = walker.walk(); final result = walker.walk();
walker.free(); walker.free();

View file

@ -36,8 +36,10 @@ class RevWalk {
/// Changing the sorting mode resets the walker. /// Changing the sorting mode resets the walker.
/// ///
/// Throws a [LibGit2Error] if error occured. /// Throws a [LibGit2Error] if error occured.
void sorting(GitSort sorting) => void sorting(List<GitSort> sorting) {
bindings.sorting(_revWalkPointer, sorting.value); final sort = sorting.fold(0, (previousValue, e) => e.value);
bindings.sorting(_revWalkPointer, sort);
}
/// Adds a new root for the traversal. /// Adds a new root for the traversal.
/// ///

View file

@ -53,7 +53,7 @@ void main() {
final start = Oid.fromSHA(repo, log.first); final start = Oid.fromSHA(repo, log.first);
walker.push(start); walker.push(start);
walker.sorting(GitSort.reverse); walker.sorting([GitSort.reverse]);
final commits = walker.walk(); final commits = walker.walk();
for (var i = 0; i < commits.length; i++) { for (var i = 0; i < commits.length; i++) {
@ -77,7 +77,7 @@ void main() {
expect(timeSortedCommits[i].id.sha, log[i]); expect(timeSortedCommits[i].id.sha, log[i]);
} }
walker.sorting(GitSort.reverse); walker.sorting([GitSort.time, GitSort.reverse]);
final reverseSortedCommits = walker.walk(); final reverseSortedCommits = walker.walk();
for (var i = 0; i < reverseSortedCommits.length; i++) { for (var i = 0; i < reverseSortedCommits.length; i++) {
expect(reverseSortedCommits[i].id.sha, log.reversed.toList()[i]); expect(reverseSortedCommits[i].id.sha, log.reversed.toList()[i]);