rust-status: remove dead code
The `walk_explicit` function is only called when using a prefix matcher, which
the Rust code does not yet support. This function will return in a future
patch, probably with a different signature for performance reasons.
With it, the `files` argument and its interface code can be removed for now.
Differential Revision: https://phab.mercurial-scm.org/D7253
--- a/mercurial/dirstate.py Tue Nov 05 18:32:00 2019 -0500
+++ b/mercurial/dirstate.py Wed Nov 06 13:46:16 2019 +0100
@@ -1120,7 +1120,6 @@
) = rustmod.status(
dmap._rustmap,
self._rootdir,
- match.files(),
bool(listclean),
self._lastnormaltime,
self._checkexec,
--- a/rust/hg-core/src/dirstate/status.rs Tue Nov 05 18:32:00 2019 -0500
+++ b/rust/hg-core/src/dirstate/status.rs Wed Nov 06 13:46:16 2019 +0100
@@ -10,68 +10,14 @@
//! and will only be triggered in narrow cases.
use crate::utils::files::HgMetadata;
-use crate::utils::hg_path::{hg_path_to_path_buf, HgPath, HgPathBuf};
+use crate::utils::hg_path::{hg_path_to_path_buf, HgPathBuf};
use crate::{DirstateEntry, DirstateMap, EntryState};
use rayon::prelude::*;
-use std::collections::HashMap;
-use std::fs::Metadata;
use std::path::Path;
-/// Get stat data about the files explicitly specified by match.
-/// TODO subrepos
-fn walk_explicit(
- files: &[impl AsRef<HgPath> + Sync],
- dmap: &DirstateMap,
- root_dir: impl AsRef<Path> + Sync,
-) -> std::io::Result<HashMap<HgPathBuf, Option<HgMetadata>>> {
- let mut results = HashMap::new();
-
- // A tuple of the normalized filename and the `Result` of the call to
- // `symlink_metadata` for separate handling.
- type WalkTuple<'a> = (&'a HgPath, std::io::Result<Metadata>);
-
- let stats_res: std::io::Result<Vec<WalkTuple>> = files
- .par_iter()
- .map(|filename| {
- // TODO normalization
- let normalized = filename.as_ref();
-
- let target_filename =
- root_dir.as_ref().join(hg_path_to_path_buf(normalized)?);
-
- Ok((normalized, target_filename.symlink_metadata()))
- })
- .collect();
-
- for res in stats_res? {
- match res {
- (normalized, Ok(stat)) => {
- if stat.is_file() {
- results.insert(
- normalized.to_owned(),
- Some(HgMetadata::from_metadata(stat)),
- );
- } else {
- if dmap.contains_key(normalized) {
- results.insert(normalized.to_owned(), None);
- }
- }
- }
- (normalized, Err(_)) => {
- if dmap.contains_key(normalized) {
- results.insert(normalized.to_owned(), None);
- }
- }
- };
- }
-
- Ok(results)
-}
-
// Stat all entries in the `DirstateMap` and return their new metadata.
pub fn stat_dmap_entries(
dmap: &DirstateMap,
- results: &HashMap<HgPathBuf, Option<HgMetadata>>,
root_dir: impl AsRef<Path> + Sync,
) -> std::io::Result<Vec<(HgPathBuf, Option<HgMetadata>)>> {
dmap.par_iter()
@@ -81,9 +27,6 @@
|(filename, _)| -> Option<
std::io::Result<(HgPathBuf, Option<HgMetadata>)>
> {
- if results.contains_key(filename) {
- return None;
- }
let meta = match hg_path_to_path_buf(filename) {
Ok(p) => root_dir.as_ref().join(p).symlink_metadata(),
Err(e) => return Some(Err(e.into())),
@@ -132,7 +75,7 @@
list_clean: bool,
last_normal_time: i64,
check_exec: bool,
- results: HashMap<HgPathBuf, Option<HgMetadata>>,
+ results: Vec<(HgPathBuf, Option<HgMetadata>)>,
) -> (Vec<HgPathBuf>, StatusResult) {
let mut lookup = vec![];
let mut modified = vec![];
@@ -229,14 +172,11 @@
pub fn status(
dmap: &DirstateMap,
root_dir: impl AsRef<Path> + Sync + Copy,
- files: &[impl AsRef<HgPath> + Sync],
list_clean: bool,
last_normal_time: i64,
check_exec: bool,
) -> std::io::Result<(Vec<HgPathBuf>, StatusResult)> {
- let mut results = walk_explicit(files, &dmap, root_dir)?;
-
- results.extend(stat_dmap_entries(&dmap, &results, root_dir)?);
+ let results = stat_dmap_entries(&dmap, root_dir)?;
Ok(build_response(
&dmap,
--- a/rust/hg-cpython/src/dirstate.rs Tue Nov 05 18:32:00 2019 -0500
+++ b/rust/hg-cpython/src/dirstate.rs Wed Nov 06 13:46:16 2019 +0100
@@ -17,8 +17,8 @@
dirs_multiset::Dirs, dirstate_map::DirstateMap, status::status_wrapper,
};
use cpython::{
- exc, PyBytes, PyDict, PyErr, PyList, PyModule, PyObject, PyResult,
- PySequence, Python,
+ exc, PyBytes, PyDict, PyErr, PyModule, PyObject, PyResult, PySequence,
+ Python,
};
use hg::{
utils::hg_path::HgPathBuf, DirstateEntry, DirstateParseError, EntryState,
@@ -116,7 +116,6 @@
status_wrapper(
dmap: DirstateMap,
root_dir: PyObject,
- files: PyList,
list_clean: bool,
last_normal_time: i64,
check_exec: bool
--- a/rust/hg-cpython/src/dirstate/status.rs Tue Nov 05 18:32:00 2019 -0500
+++ b/rust/hg-cpython/src/dirstate/status.rs Wed Nov 06 13:46:16 2019 +0100
@@ -18,8 +18,8 @@
};
use hg::utils::files::get_path_from_bytes;
+use hg::status;
use hg::utils::hg_path::HgPath;
-use hg::{status, utils::hg_path::HgPathBuf};
/// This will be useless once trait impls for collection are added to `PyBytes`
/// upstream.
@@ -44,7 +44,6 @@
py: Python,
dmap: DirstateMap,
root_dir: PyObject,
- files: PyList,
list_clean: bool,
last_normal_time: i64,
check_exec: bool,
@@ -55,21 +54,9 @@
let dmap: DirstateMap = dmap.to_py_object(py);
let dmap = dmap.get_inner(py);
- let files: PyResult<Vec<HgPathBuf>> = files
- .iter(py)
- .map(|f| Ok(HgPathBuf::from_bytes(f.extract::<PyBytes>(py)?.data(py))))
- .collect();
- let files = files?;
-
- let (lookup, status_res) = status(
- &dmap,
- &root_dir,
- &files,
- list_clean,
- last_normal_time,
- check_exec,
- )
- .map_err(|e| PyErr::new::<ValueError, _>(py, e.to_string()))?;
+ let (lookup, status_res) =
+ status(&dmap, &root_dir, list_clean, last_normal_time, check_exec)
+ .map_err(|e| PyErr::new::<ValueError, _>(py, e.to_string()))?;
let modified = collect_pybytes_list(py, status_res.modified.as_ref());
let added = collect_pybytes_list(py, status_res.added.as_ref());