forked from janek/mostr
fix(tasks): do not panic on missing children
This commit is contained in:
parent
77bfc4cb7a
commit
ddc57dc36a
15
src/tasks.rs
15
src/tasks.rs
|
@ -1,7 +1,7 @@
|
||||||
use std::collections::{BTreeMap, BTreeSet, HashMap, VecDeque};
|
use std::collections::{BTreeMap, BTreeSet, HashMap, VecDeque};
|
||||||
use std::fmt::{Display, Formatter};
|
use std::fmt::{Display, Formatter};
|
||||||
use std::io::{Error, stdout, Write};
|
use std::io::{stdout, Error, Write};
|
||||||
use std::iter::{empty, once};
|
use std::iter::{empty, once, FusedIterator};
|
||||||
use std::ops::{Div, Rem};
|
use std::ops::{Div, Rem};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
@ -1178,6 +1178,7 @@ impl<'a> ChildIterator<'a> {
|
||||||
self.queue
|
self.queue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get all children
|
||||||
fn get_all(mut self) -> Vec<&'a EventId> {
|
fn get_all(mut self) -> Vec<&'a EventId> {
|
||||||
while self.next().is_some() {}
|
while self.next().is_some() {}
|
||||||
self.queue
|
self.queue
|
||||||
|
@ -1210,6 +1211,7 @@ impl<'a> Iterator for ChildIterator<'a> {
|
||||||
Some(id)
|
Some(id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
impl FusedIterator for ChildIterator<'_> {}
|
||||||
|
|
||||||
|
|
||||||
struct ParentIterator<'a> {
|
struct ParentIterator<'a> {
|
||||||
|
@ -1223,7 +1225,14 @@ impl<'a> Iterator for ParentIterator<'a> {
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
self.current.and_then(|id| self.tasks.get(&id)).map(|t| {
|
self.current.and_then(|id| self.tasks.get(&id)).map(|t| {
|
||||||
self.prev.inspect(|id| assert!(t.children.contains(id)));
|
self.prev.inspect(|id| {
|
||||||
|
// Fails if child is discovered before parent
|
||||||
|
// Need to reverse add as well
|
||||||
|
//assert!(t.children.contains(id))
|
||||||
|
if !t.children.contains(id) {
|
||||||
|
warn!("\"{}\" is missing child \"{}\"", t.get_title(), self.tasks.get(id).map_or(id.to_string(), |cht| cht.get_title()))
|
||||||
|
}
|
||||||
|
});
|
||||||
self.prev = self.current;
|
self.prev = self.current;
|
||||||
self.current = t.parent_id().cloned();
|
self.current = t.parent_id().cloned();
|
||||||
t
|
t
|
||||||
|
|
Loading…
Reference in New Issue