Mercurial > public > mercurial-scm > hg
view rust/hg-core/src/utils/mod.rs @ 42586:cad3dde7a573
rust-dirstate: add helper to iterate ancestor paths
This is modeled after std::path::Path::ancestors().
find_dirs(b"") yields b"" because Mercurial's util.finddirs() works in that
way, and the test case for DirsMultiset expects such behavior.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 30 Jun 2019 18:32:43 +0900 |
parents | 9609430d3625 |
children |
line wrap: on
line source
pub mod files; pub fn replace_slice<T>(buf: &mut [T], from: &[T], to: &[T]) where T: Clone + PartialEq, { if buf.len() < from.len() || from.len() != to.len() { return; } for i in 0..=buf.len() - from.len() { if buf[i..].starts_with(from) { buf[i..(i + from.len())].clone_from_slice(to); } } } pub trait SliceExt { fn trim(&self) -> &Self; fn trim_end(&self) -> &Self; } fn is_not_whitespace(c: &u8) -> bool { !(*c as char).is_whitespace() } impl SliceExt for [u8] { fn trim(&self) -> &[u8] { if let Some(first) = self.iter().position(is_not_whitespace) { if let Some(last) = self.iter().rposition(is_not_whitespace) { &self[first..last + 1] } else { unreachable!(); } } else { &[] } } fn trim_end(&self) -> &[u8] { if let Some(last) = self.iter().rposition(is_not_whitespace) { &self[..last + 1] } else { &[] } } }