Mercurial > hg-stable
changeset 47525:fe4641cf9b72
dirstate: use a `added` parameter to _addpath
My next target are the explicit `state` byte, so let start with abstracting
their initial storage.
Differential Revision: https://phab.mercurial-scm.org/D10967
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 04 Jul 2021 01:42:10 +0200 |
parents | 69a463a4f193 |
children | 8bcae9bf9e8d |
files | mercurial/dirstate.py mercurial/dirstatemap.py rust/hg-core/src/dirstate/dirstate_map.rs 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 |
diffstat | 7 files changed, 51 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/dirstate.py Sat Jul 03 20:59:26 2021 +0200 +++ b/mercurial/dirstate.py Sun Jul 04 01:42:10 2021 +0200 @@ -443,15 +443,16 @@ def _addpath( self, f, - state, - mode, + state=None, + mode=0, size=None, mtime=None, + added=False, from_p2=False, possibly_dirty=False, ): entry = self._map.get(f) - if state == b'a' or entry is not None and entry.removed: + if added or entry is not None and entry.removed: scmutil.checkfilename(f) if self._map.hastrackeddir(f): msg = _(b'directory %r already in dirstate') @@ -474,6 +475,7 @@ mode=mode, size=size, mtime=mtime, + added=added, from_p2=from_p2, possibly_dirty=possibly_dirty, ) @@ -544,7 +546,7 @@ def add(self, f): '''Mark a file added.''' - self._addpath(f, b'a', 0) + self._addpath(f, added=True) self._map.copymap.pop(f, None) def remove(self, f):
--- a/mercurial/dirstatemap.py Sat Jul 03 20:59:26 2021 +0200 +++ b/mercurial/dirstatemap.py Sun Jul 04 01:42:10 2021 +0200 @@ -147,17 +147,19 @@ def addfile( self, f, - state, - mode, + state=None, + mode=0, size=None, mtime=None, + added=False, from_p2=False, possibly_dirty=False, ): """Add a tracked file to the dirstate.""" - if state == b'a': + if added: assert not possibly_dirty assert not from_p2 + state = b'a' size = NONNORMAL mtime = AMBIGUOUS_TIME elif from_p2: @@ -168,10 +170,12 @@ size = NONNORMAL mtime = AMBIGUOUS_TIME else: + assert state != b'a' assert size != FROM_P2 assert size != NONNORMAL size = size & rangemask mtime = mtime & rangemask + assert state is not None assert size is not None assert mtime is not None old_entry = self.get(f) @@ -461,10 +465,11 @@ def addfile( self, f, - state, - mode, + state=None, + mode=0, size=None, mtime=None, + added=False, from_p2=False, possibly_dirty=False, ): @@ -474,6 +479,7 @@ mode, size, mtime, + added, from_p2, possibly_dirty, )
--- a/rust/hg-core/src/dirstate/dirstate_map.rs Sat Jul 03 20:59:26 2021 +0200 +++ b/rust/hg-core/src/dirstate/dirstate_map.rs Sun Jul 04 01:42:10 2021 +0200 @@ -70,13 +70,15 @@ filename: &HgPath, entry: DirstateEntry, // XXX once the dust settle this should probably become an enum + added: bool, from_p2: bool, possibly_dirty: bool, ) -> Result<(), DirstateError> { let mut entry = entry; - if entry.state == EntryState::Added { + if added { assert!(!possibly_dirty); assert!(!from_p2); + entry.state = EntryState::Added; entry.size = SIZE_NON_NORMAL; entry.mtime = MTIME_UNSET; } else if from_p2 { @@ -407,6 +409,7 @@ }, false, false, + false, ) .unwrap();
--- a/rust/hg-core/src/dirstate_tree/dirstate_map.rs Sat Jul 03 20:59:26 2021 +0200 +++ b/rust/hg-core/src/dirstate_tree/dirstate_map.rs Sun Jul 04 01:42:10 2021 +0200 @@ -722,13 +722,15 @@ &mut self, filename: &HgPath, entry: DirstateEntry, + added: bool, from_p2: bool, possibly_dirty: bool, ) -> Result<(), DirstateError> { let mut entry = entry; - if entry.state == EntryState::Added { + if added { assert!(!possibly_dirty); assert!(!from_p2); + entry.state = EntryState::Added; entry.size = SIZE_NON_NORMAL; entry.mtime = MTIME_UNSET; } else if from_p2 {
--- a/rust/hg-core/src/dirstate_tree/dispatch.rs Sat Jul 03 20:59:26 2021 +0200 +++ b/rust/hg-core/src/dirstate_tree/dispatch.rs Sun Jul 04 01:42:10 2021 +0200 @@ -48,6 +48,7 @@ &mut self, filename: &HgPath, entry: DirstateEntry, + added: bool, from_p2: bool, possibly_dirty: bool, ) -> Result<(), DirstateError>; @@ -287,10 +288,11 @@ &mut self, filename: &HgPath, entry: DirstateEntry, + added: bool, from_p2: bool, possibly_dirty: bool, ) -> Result<(), DirstateError> { - self.add_file(filename, entry, from_p2, possibly_dirty) + self.add_file(filename, entry, added, from_p2, possibly_dirty) } fn remove_file(
--- a/rust/hg-cpython/src/dirstate/dirstate_map.rs Sat Jul 03 20:59:26 2021 +0200 +++ b/rust/hg-cpython/src/dirstate/dirstate_map.rs Sun Jul 04 01:42:10 2021 +0200 @@ -112,17 +112,28 @@ mode: PyObject, size: PyObject, mtime: PyObject, + added: PyObject, from_p2: PyObject, possibly_dirty: PyObject, ) -> PyResult<PyObject> { let f = f.extract::<PyBytes>(py)?; let filename = HgPath::new(f.data(py)); - let state = state.extract::<PyBytes>(py)?.data(py)[0] + let state = if state.is_none(py) { + // Arbitrary default value + EntryState::Normal + } else { + state.extract::<PyBytes>(py)?.data(py)[0] .try_into() .map_err(|e: HgError| { PyErr::new::<exc::ValueError, _>(py, e.to_string()) - })?; - let mode = mode.extract(py)?; + })? + }; + let mode = if mode.is_none(py) { + // fallback default value + 0 + } else { + mode.extract(py)? + }; let size = if size.is_none(py) { // fallback default value SIZE_NON_NORMAL @@ -141,11 +152,13 @@ size: size, mtime: mtime, }; + let added = added.extract::<PyBool>(py)?.is_true(); let from_p2 = from_p2.extract::<PyBool>(py)?.is_true(); let possibly_dirty = possibly_dirty.extract::<PyBool>(py)?.is_true(); self.inner(py).borrow_mut().add_file( filename, entry, + added, from_p2, possibly_dirty ).and(Ok(py.None())).or_else(|e: DirstateError| {
--- a/rust/hg-cpython/src/dirstate/dispatch.rs Sat Jul 03 20:59:26 2021 +0200 +++ b/rust/hg-cpython/src/dirstate/dispatch.rs Sun Jul 04 01:42:10 2021 +0200 @@ -25,11 +25,17 @@ &mut self, filename: &HgPath, entry: DirstateEntry, + added: bool, from_p2: bool, possibly_dirty: bool, ) -> Result<(), DirstateError> { - self.get_mut() - .add_file(filename, entry, from_p2, possibly_dirty) + self.get_mut().add_file( + filename, + entry, + added, + from_p2, + possibly_dirty, + ) } fn remove_file(