- (&ViewPathSimple(..), _) | (&ViewPathGlob(_), &ViewPathList(..)) => Ordering::Less,
- (&ViewPathList(_, ref a_items), &ViewPathList(_, ref b_items)) => {
- compare_path_list_item_lists(a_items, b_items)
+ (&Glob, &Glob) => Ordering::Equal,
+ (&Simple(_), _) | (&Glob, &Nested(_)) => Ordering::Less,
+ (&Nested(ref a_items), &Nested(ref b_items)) => {
+ let mut a = a_items
+ .iter()
+ .map(|&(ref tree, _)| tree.clone())
+ .collect::<Vec<_>>();
+ let mut b = b_items
+ .iter()
+ .map(|&(ref tree, _)| tree.clone())
+ .collect::<Vec<_>>();
+ a.sort_by(|a, b| compare_use_trees(a, b, true));
+ b.sort_by(|a, b| compare_use_trees(a, b, true));
+ for comparison_pair in a.iter().zip(b.iter()) {
+ let ord = compare_use_trees(comparison_pair.0, comparison_pair.1, true);
+ if ord != Ordering::Equal {
+ return ord;
+ }
+ }
+ a.len().cmp(&b.len())