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 'package:libgit2dart/libgit2dart.dart';
import 'bindings/libgit2_bindings.dart';
import 'bindings/repository.dart' as bindings;
import 'bindings/merge.dart' as merge_bindings;
@ -329,11 +331,9 @@ class Repository {
/// Returns the list of commits starting from provided [oid].
///
/// 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);
if (sorting != GitSort.none) {
walker.sorting(sorting);
}
walker.sorting(sorting ?? [GitSort.none]);
walker.push(oid);
final result = walker.walk();
walker.free();

View file

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

View file

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