# HG changeset patch # User Arseniy Alekseyev # Date 2023-02-16 19:03:17 # Node ID 8e50aa0db347529b15e3a9072fcfc43e224cb690 # Parent 11661326b410e432bfc1b1547290f0ae495914ac rhg: in path_encode, use Vec directly instead of VecDest No need to have a trivial wrapper over the type. There's nothing confusing about vec.write_bytes(...), after all. diff --git a/rust/hg-core/src/revlog/path_encode.rs b/rust/hg-core/src/revlog/path_encode.rs --- a/rust/hg-core/src/revlog/path_encode.rs +++ b/rust/hg-core/src/revlog/path_encode.rs @@ -77,29 +77,17 @@ impl Sink for DestArr } } -struct VecDest { - buf: Vec, -} - struct MeasureDest { pub len: usize, } -impl VecDest { - pub fn create(capacity : usize) -> Self { - Self { - buf: Vec::with_capacity(capacity), - } - } -} - -impl Sink for VecDest { +impl Sink for Vec { fn write_byte(&mut self, c: u8) { - self.buf.push(c) + self.push(c) } fn write_bytes(&mut self, src: &[u8]) { - self.buf.extend_from_slice(src) + self.extend_from_slice(src) } } @@ -544,13 +532,13 @@ fn hash_mangle(src: &[u8], sha: &[u8]) - src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s) }; - let mut dest : VecDest = VecDest::create(MAXSTOREPATHLEN); + let mut dest = Vec::with_capacity(MAXSTOREPATHLEN); dest.write_bytes(b"dh/"); if let Some(last_slash) = last_slash { for slice in src[..last_slash].split(|b| *b == b'/') { let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)]; - if dest.buf.len() + slice.len() > maxshortdirslen + 3 { + if dest.len() + slice.len() > maxshortdirslen + 3 { break; } else { dest.write_bytes(slice); @@ -559,7 +547,7 @@ fn hash_mangle(src: &[u8], sha: &[u8]) - } } - let used = dest.buf.len() + 40 + { + let used = dest.len() + 40 + { if let Some(l) = last_dot { src.len() - l } else { @@ -588,7 +576,7 @@ fn hash_mangle(src: &[u8], sha: &[u8]) - if let Some(l) = last_dot { dest.write_bytes(&src[l..]); } - dest.buf + dest } fn hash_encode(src: &[u8]) -> Vec { @@ -618,10 +606,10 @@ pub fn path_encode(path: &[u8]) -> Vec