in lib/src/path_set.dart [50:93]
Set<String> remove(String path) {
path = _normalize(path);
var parts = Queue.of(p.split(path));
// Remove the children of [dir], as well as [dir] itself if necessary.
//
// [partialPath] is the path to [dir], and a prefix of [path]; the remaining
// components of [path] are in [parts].
Set<String> recurse(_Entry dir, String partialPath) {
if (parts.length > 1) {
// If there's more than one component left in [path], recurse down to
// the next level.
var part = parts.removeFirst();
var entry = dir.contents[part];
if (entry == null || entry.contents.isEmpty) return <String>{};
partialPath = p.join(partialPath, part);
var paths = recurse(entry, partialPath);
// After removing this entry's children, if it has no more children and
// it's not in the set in its own right, remove it as well.
if (entry.contents.isEmpty && !entry.isExplicit) {
dir.contents.remove(part);
}
return paths;
}
// If there's only one component left in [path], we should remove it.
var entry = dir.contents.remove(parts.first);
if (entry == null) return <String>{};
if (entry.contents.isEmpty) {
return {p.join(root, path)};
}
var set = _explicitPathsWithin(entry, path);
if (entry.isExplicit) {
set.add(p.join(root, path));
}
return set;
}
return recurse(_entries, root);
}