commitIteratorBFSFiltered function
Stream<GitCommit>
commitIteratorBFSFiltered({
- required ObjectStorage objStorage,
- required GitCommit from,
- CommitFilter? isValid,
- 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;
}
}
}