commitIteratorBFSFiltered function

Stream<GitCommit> commitIteratorBFSFiltered({
  1. required ObjectStorage objStorage,
  2. required GitCommit from,
  3. CommitFilter? isValid,
  4. CommitFilter? isLimit,
})

Implementation

Stream<GitCommit> commitIteratorBFSFiltered({
  required ObjectStorage objStorage,
  required GitCommit from,
  CommitFilter? isValid,
  CommitFilter? isLimit,
}) async* {
  isValid ??= _allCommitsValidFilter;
  isLimit ??= _allCommitsNotValidFilter;

  var queue = Queue<GitHash>.from([from.hash]);
  var seen = <GitHash>{};

  while (queue.isNotEmpty) {
    var hash = queue.removeFirst();
    if (seen.contains(hash)) {
      continue;
    }
    seen.add(hash);

    var result = await objStorage.readCommit(hash);
    var commit = result.get();

    if (!isLimit(commit)) {
      queue.addAll(commit.parents);
    }
    if (isValid(commit)) {
      yield commit;
    }
  }
}