in core/src/layers/immutable_index.rs [97:133]
fn children_hierarchy(&self, path: &str) -> Vec<String> {
let mut res = HashSet::new();
for i in self.vec.iter() {
// `/xyz` should not belong to `/abc`
if !i.starts_with(path) {
continue;
}
// remove `/abc` if self
if i == path {
continue;
}
match i[path.len()..].find('/') {
// File `/abc/def.csv` must belong to `/abc`
None => {
res.insert(i.to_string());
}
Some(idx) => {
// The index of first `/` after `/abc`.
let dir_idx = idx + 1 + path.len();
if dir_idx == i.len() {
// Dir `/abc/def/` belongs to `/abc/`
res.insert(i.to_string());
} else {
// File/Dir `/abc/def/xyz` doesn't belong to `/abc`.
// But we need to list `/abc/def` out so that we can walk down.
res.insert(i[..dir_idx].to_string());
}
}
}
}
res.into_iter().collect()
}