# HG changeset patch # User Simon Sapin # Date 1622022817 -7200 # Node ID d2fb8b4adcc31e1809d9955dc9b2918a20dbbfa0 # Parent 9e6e12e1a87eb0fc5cb7905ec89ee2728952365d rhg: Remove some intermediate Vecs in `rhg files` Instead of calling `parse_dirstate` which then calls `parse_dirstate_entries`, call the latter directly in order to skip some intermediate steps. Differential Revision: https://phab.mercurial-scm.org/D10803 diff -r 9e6e12e1a87e -r d2fb8b4adcc3 rust/hg-core/src/operations/list_tracked_files.rs --- a/rust/hg-core/src/operations/list_tracked_files.rs Tue Jun 01 15:19:08 2021 -0700 +++ b/rust/hg-core/src/operations/list_tracked_files.rs Wed May 26 11:53:37 2021 +0200 @@ -5,7 +5,7 @@ // This software may be used and distributed according to the terms of the // GNU General Public License version 2 or any later version. -use crate::dirstate::parsers::parse_dirstate; +use crate::dirstate::parsers::parse_dirstate_entries; use crate::errors::HgError; use crate::repo::Repo; use crate::revlog::changelog::Changelog; @@ -13,7 +13,6 @@ use crate::revlog::node::Node; use crate::revlog::revlog::RevlogError; use crate::utils::hg_path::HgPath; -use crate::EntryState; use rayon::prelude::*; /// List files under Mercurial control in the working directory @@ -30,14 +29,16 @@ } pub fn tracked_files(&self) -> Result, HgError> { - let (_, entries, _) = parse_dirstate(&self.content)?; - let mut files: Vec<&HgPath> = entries - .into_iter() - .filter_map(|(path, entry)| match entry.state { - EntryState::Removed => None, - _ => Some(path), - }) - .collect(); + let mut files = Vec::new(); + let _parents = parse_dirstate_entries( + &self.content, + |path, entry, _copy_source| { + if entry.state.is_tracked() { + files.push(path) + } + Ok(()) + }, + )?; files.par_sort_unstable(); Ok(files) }