Mercurial > hg
changeset 42608:717686c5e461
rust-utils: use new find_dirs iterator
In cad3dde7a573, the `find_dirs` util was introduced, but the second changeset
that made use of it didn't apply. This change fixes the issue.
Differential Revision: https://phab.mercurial-scm.org/D6639
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Fri, 12 Jul 2019 11:08:31 +0200 |
parents | 8f7c3f43e3ac |
children | 326fdce22fb2 |
files | rust/hg-core/src/dirstate/dirs_multiset.rs |
diffstat | 1 files changed, 3 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/dirstate/dirs_multiset.rs Tue Jul 16 00:00:17 2019 -0400 +++ b/rust/hg-core/src/dirstate/dirs_multiset.rs Fri Jul 12 11:08:31 2019 +0200 @@ -11,6 +11,7 @@ use std::collections::hash_map::{Entry, Iter}; use std::collections::HashMap; use {DirsIterable, DirstateEntry, DirstateMapError}; +use utils::files; #[derive(PartialEq, Debug)] pub struct DirsMultiset { @@ -49,40 +50,16 @@ multiset } - /// Returns the slice up to the next directory name from right to left, - /// without trailing slash - fn find_dir(path: &[u8]) -> &[u8] { - let mut path = path; - loop { - if let Some(new_pos) = path.len().checked_sub(1) { - if path[new_pos] == b'/' { - break &path[..new_pos]; - } - path = &path[..new_pos]; - } else { - break &[]; - } - } - } - /// Increases the count of deepest directory contained in the path. /// /// If the directory is not yet in the map, adds its parents. pub fn add_path(&mut self, path: &[u8]) { - let mut pos = path.len(); - - loop { - let subpath = Self::find_dir(&path[..pos]); + for subpath in files::find_dirs(path) { if let Some(val) = self.inner.get_mut(subpath) { *val += 1; break; } self.inner.insert(subpath.to_owned(), 1); - - pos = subpath.len(); - if pos == 0 { - break; - } } } @@ -95,10 +72,7 @@ &mut self, path: &[u8], ) -> Result<(), DirstateMapError> { - let mut pos = path.len(); - - loop { - let subpath = Self::find_dir(&path[..pos]); + for subpath in files::find_dirs(path) { match self.inner.entry(subpath.to_owned()) { Entry::Occupied(mut entry) => { let val = entry.get().clone(); @@ -114,11 +88,6 @@ )) } }; - - pos = subpath.len(); - if pos == 0 { - break; - } } Ok(())