# HG changeset patch # User Raphaël Gomès # Date 1601538521 -7200 # Node ID 1efbc787334c1f985af7211162fc088c1e469605 # Parent 7baf5f798ba96d97c1a593b3591704c3d1c8051e rust-parsers: use in-place mutation instead of allocating a new `Vec` This is not done for the `dirstate-tree` feature, since it lacks `iter_mut`. Differential Revision: https://phab.mercurial-scm.org/D9136 diff -r 7baf5f798ba9 -r 1efbc787334c rust/hg-core/src/dirstate/parsers.rs --- a/rust/hg-core/src/dirstate/parsers.rs Tue Oct 06 02:21:14 2020 +0200 +++ b/rust/hg-core/src/dirstate/parsers.rs Thu Oct 01 09:48:41 2020 +0200 @@ -107,12 +107,11 @@ let expected_size = expected_size + PARENT_SIZE * 2; let mut packed = Vec::with_capacity(expected_size); - let mut new_state_map = vec![]; packed.extend(&parents.p1); packed.extend(&parents.p2); - for (filename, entry) in state_map.iter() { + for (filename, entry) in state_map.iter_mut() { let new_filename = filename.to_owned(); let mut new_mtime: i32 = entry.mtime; if entry.state == EntryState::Normal && entry.mtime == now { @@ -126,13 +125,10 @@ // contents of the file if the size is the same. This prevents // mistakenly treating such files as clean. new_mtime = -1; - new_state_map.push(( - filename.to_owned(), - DirstateEntry { - mtime: new_mtime, - ..*entry - }, - )); + *entry = DirstateEntry { + mtime: new_mtime, + ..*entry + }; } let mut new_filename = new_filename.into_vec(); if let Some(copy) = copy_map.get(filename) { @@ -152,8 +148,6 @@ return Err(DirstatePackError::BadSize(expected_size, packed.len())); } - state_map.extend(new_state_map); - Ok(packed) } /// `now` is the duration in seconds since the Unix epoch