D10983: dirstate-item: also build DistateItem in dirstate.directories()
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Mon Jul 5 09:34:50 UTC 2021
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
The rust code was building tuple.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D10983
AFFECTED FILES
rust/hg-cpython/src/dirstate.rs
rust/hg-cpython/src/dirstate/dirstate_map.rs
CHANGE DETAILS
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,6 +19,7 @@
use crate::{
dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator},
+ dirstate::make_directory_item,
dirstate::make_dirstate_item,
dirstate::non_normal_entries::{
NonNormalEntries, NonNormalEntriesIterator,
@@ -519,7 +520,8 @@
let (path, mtime) = item.map_err(|e| v2_error(py, e))?;
let path = PyBytes::new(py, path.as_bytes());
let mtime = mtime.map(|t| t.0).unwrap_or(-1);
- let tuple = (path, (b'd', 0, 0, mtime));
+ let item = make_directory_item(py, mtime as i32)?;
+ let tuple = (path, item);
dirs.append(py, tuple.to_py_object(py).into_object())
}
Ok(dirs)
diff --git a/rust/hg-cpython/src/dirstate.rs b/rust/hg-cpython/src/dirstate.rs
--- a/rust/hg-cpython/src/dirstate.rs
+++ b/rust/hg-cpython/src/dirstate.rs
@@ -73,6 +73,19 @@
maybe_obj.ok_or_else(|| PyErr::fetch(py))
}
+// XXX a bit strange to have a dedicated function, but directory are not
+// treated as dirstate node by hg-core for now soâ¦
+pub fn make_directory_item(py: Python, mtime: i32) -> PyResult<PyObject> {
+ // might be silly to retrieve capsule function in hot loop
+ let make = make_dirstate_item_capi::retrieve(py)?;
+
+ let maybe_obj = unsafe {
+ let ptr = make(b'd' as c_char, 0 as i32, 0 as i32, mtime);
+ PyObject::from_owned_ptr_opt(py, ptr)
+ };
+ maybe_obj.ok_or_else(|| PyErr::fetch(py))
+}
+
pub fn extract_dirstate(py: Python, dmap: &PyDict) -> Result<StateMap, PyErr> {
dmap.items(py)
.iter()
To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list