Patchwork D10921: dirstate: Removed unused instances of `DirsMultiset`

login
register
mail settings
Submitter phabricator
Date July 2, 2021, 12:37 p.m.
Message ID <differential-rev-PHID-DREV-rstaknzv2rmyujpsypgx-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49236/
State Superseded
Headers show

Comments

phabricator - July 2, 2021, 12:37 p.m.
SimonSapin created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  … in Rust-backed dirstatemap.
  
  The Python class `dirstatemap` had cached properties `_dirs` and `_alldirs`
  that were not used for `hastrackeddir` and `hasdir` since they were redundant
  with corresponding fields for the Rust `DirstateMap` struct.
  
  `dirfoldmap` is modified to reuse instead the directory iterator introduced
  in 3b9914b28133c0918186b6e8b9e4f1916e21338d <https://phab.mercurial-scm.org/rHG3b9914b28133c0918186b6e8b9e4f1916e21338d>.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D10921

AFFECTED FILES
  contrib/perf.py
  mercurial/dirstate.py
  rust/hg-core/src/dirstate_tree/dirstate_map.rs
  rust/hg-core/src/dirstate_tree/dispatch.rs
  rust/hg-cpython/src/dirstate/dirstate_map.rs
  rust/hg-cpython/src/dirstate/dispatch.rs

CHANGE DETAILS




To: SimonSapin, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/rust/hg-cpython/src/dirstate/dispatch.rs b/rust/hg-cpython/src/dirstate/dispatch.rs
--- a/rust/hg-cpython/src/dirstate/dispatch.rs
+++ b/rust/hg-cpython/src/dirstate/dispatch.rs
@@ -128,14 +128,6 @@ 
         self.get_mut().pack_v2(parents, now)
     }
 
-    fn set_all_dirs(&mut self) -> Result<(), DirstateError> {
-        self.get_mut().set_all_dirs()
-    }
-
-    fn set_dirs(&mut self) -> Result<(), DirstateError> {
-        self.get_mut().set_dirs()
-    }
-
     fn status<'a>(
         &'a mut self,
         matcher: &'a (dyn Matcher + Sync),
diff --git a/rust/hg-cpython/src/dirstate/dirstate_map.rs b/rust/hg-cpython/src/dirstate/dirstate_map.rs
--- a/rust/hg-cpython/src/dirstate/dirstate_map.rs
+++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs
@@ -19,11 +19,11 @@ 
 
 use crate::{
     dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator},
+    dirstate::make_dirstate_tuple,
     dirstate::non_normal_entries::{
         NonNormalEntries, NonNormalEntriesIterator,
     },
     dirstate::owning::OwningDirstateMap,
-    dirstate::{dirs_multiset::Dirs, make_dirstate_tuple},
     parsers::dirstate_parents_to_pytuple,
 };
 use hg::{
@@ -34,8 +34,8 @@ 
     revlog::Node,
     utils::files::normalize_case,
     utils::hg_path::{HgPath, HgPathBuf},
-    DirsMultiset, DirstateEntry, DirstateError,
-    DirstateMap as RustDirstateMap, DirstateParents, EntryState, StateMapIter,
+    DirstateEntry, DirstateError, DirstateMap as RustDirstateMap,
+    DirstateParents, EntryState, StateMapIter,
 };
 
 // TODO
@@ -391,40 +391,6 @@ 
         )
     }
 
-    def getdirs(&self) -> PyResult<Dirs> {
-        // TODO don't copy, share the reference
-        self.inner(py).borrow_mut().set_dirs()
-            .map_err(|e| {
-                PyErr::new::<exc::ValueError, _>(py, e.to_string())
-            })?;
-        Dirs::from_inner(
-            py,
-            DirsMultiset::from_dirstate(
-                self.inner(py).borrow().iter(),
-                Some(EntryState::Removed),
-            )
-            .map_err(|e| {
-                PyErr::new::<exc::ValueError, _>(py, e.to_string())
-            })?,
-        )
-    }
-    def getalldirs(&self) -> PyResult<Dirs> {
-        // TODO don't copy, share the reference
-        self.inner(py).borrow_mut().set_all_dirs()
-            .map_err(|e| {
-                PyErr::new::<exc::ValueError, _>(py, e.to_string())
-            })?;
-        Dirs::from_inner(
-            py,
-            DirsMultiset::from_dirstate(
-                self.inner(py).borrow().iter(),
-                None,
-            ).map_err(|e| {
-                PyErr::new::<exc::ValueError, _>(py, e.to_string())
-            })?,
-        )
-    }
-
     // TODO all copymap* methods, see docstring above
     def copymapcopy(&self) -> PyResult<PyDict> {
         let dict = PyDict::new(py);
diff --git a/rust/hg-core/src/dirstate_tree/dispatch.rs b/rust/hg-core/src/dirstate_tree/dispatch.rs
--- a/rust/hg-core/src/dirstate_tree/dispatch.rs
+++ b/rust/hg-core/src/dirstate_tree/dispatch.rs
@@ -95,10 +95,6 @@ 
         now: Timestamp,
     ) -> Result<Vec<u8>, DirstateError>;
 
-    fn set_all_dirs(&mut self) -> Result<(), DirstateError>;
-
-    fn set_dirs(&mut self) -> Result<(), DirstateError>;
-
     fn status<'a>(
         &'a mut self,
         matcher: &'a (dyn Matcher + Sync),
@@ -281,14 +277,6 @@ 
         )
     }
 
-    fn set_all_dirs(&mut self) -> Result<(), DirstateError> {
-        self.set_all_dirs()
-    }
-
-    fn set_dirs(&mut self) -> Result<(), DirstateError> {
-        self.set_dirs()
-    }
-
     fn status<'a>(
         &'a mut self,
         matcher: &'a (dyn Matcher + Sync),
diff --git a/rust/hg-core/src/dirstate_tree/dirstate_map.rs b/rust/hg-core/src/dirstate_tree/dirstate_map.rs
--- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs
+++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs
@@ -977,18 +977,6 @@ 
         on_disk::write(self, parents)
     }
 
-    fn set_all_dirs(&mut self) -> Result<(), DirstateError> {
-        // Do nothing, this `DirstateMap` does not a separate `all_dirs` that
-        // needs to be recomputed
-        Ok(())
-    }
-
-    fn set_dirs(&mut self) -> Result<(), DirstateError> {
-        // Do nothing, this `DirstateMap` does not a separate `dirs` that needs
-        // to be recomputed
-        Ok(())
-    }
-
     fn status<'a>(
         &'a mut self,
         matcher: &'a (dyn Matcher + Sync),
diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -1951,22 +1951,12 @@ 
             return self._rustmap.filefoldmapasdict()
 
         def hastrackeddir(self, d):
-            self._dirs  # Trigger Python's propertycache
             return self._rustmap.hastrackeddir(d)
 
         def hasdir(self, d):
-            self._dirs  # Trigger Python's propertycache
             return self._rustmap.hasdir(d)
 
         @propertycache
-        def _dirs(self):
-            return self._rustmap.getdirs()
-
-        @propertycache
-        def _alldirs(self):
-            return self._rustmap.getalldirs()
-
-        @propertycache
         def identity(self):
             self._rustmap
             return self.identity
@@ -1988,6 +1978,6 @@ 
         def dirfoldmap(self):
             f = {}
             normcase = util.normcase
-            for name in self._dirs:
+            for name, _pseudo_entry in self.directories():
                 f[normcase(name)] = name
             return f
diff --git a/contrib/perf.py b/contrib/perf.py
--- a/contrib/perf.py
+++ b/contrib/perf.py
@@ -1147,7 +1147,10 @@ 
 
     def d():
         dirstate.hasdir(b'a')
-        del dirstate._map._dirs
+        try:
+            del dirstate._map._dirs
+        except AttributeError:
+            pass
 
     timer(d)
     fm.end()
@@ -1225,7 +1228,10 @@ 
     repo.dirstate.hasdir(b"a")
 
     def setup():
-        del repo.dirstate._map._dirs
+        try:
+            del repo.dirstate._map._dirs
+        except AttributeError:
+            pass
 
     def d():
         repo.dirstate.hasdir(b"a")
@@ -1268,7 +1274,10 @@ 
 
     def setup():
         del dirstate._map.dirfoldmap
-        del dirstate._map._dirs
+        try:
+            del dirstate._map._dirs
+        except AttributeError:
+            pass
 
     def d():
         dirstate._map.dirfoldmap.get(b'a')