comparison rust/hg-cpython/src/dirstate/dirstate_map.rs @ 48260:269ff8978086

dirstate: store mtimes with nanosecond precision in memory Keep integer seconds since the Unix epoch, together with integer nanoseconds in the `0 <= n < 1e9` range. For now, nanoseconds are still always zero. This commit is about data structure changes. Differential Revision: https://phab.mercurial-scm.org/D11684
author Simon Sapin <simon.sapin@octobus.net>
date Mon, 18 Oct 2021 11:23:07 +0200
parents bd5f7c61d69d
children 434de12918fd
comparison
equal deleted inserted replaced
48259:84f6b0c41b90 48260:269ff8978086
16 PyResult, Python, PythonObject, ToPyObject, UnsafePyLeaked, 16 PyResult, Python, PythonObject, ToPyObject, UnsafePyLeaked,
17 }; 17 };
18 18
19 use crate::{ 19 use crate::{
20 dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator}, 20 dirstate::copymap::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator},
21 dirstate::item::DirstateItem, 21 dirstate::item::{timestamp, DirstateItem},
22 pybytes_deref::PyBytesDeref, 22 pybytes_deref::PyBytesDeref,
23 }; 23 };
24 use hg::{ 24 use hg::{
25 dirstate::parsers::Timestamp,
26 dirstate::StateMapIter, 25 dirstate::StateMapIter,
27 dirstate_tree::dirstate_map::DirstateMap as TreeDirstateMap, 26 dirstate_tree::dirstate_map::DirstateMap as TreeDirstateMap,
28 dirstate_tree::on_disk::DirstateV2ParseError, 27 dirstate_tree::on_disk::DirstateV2ParseError,
29 dirstate_tree::owning::OwningDirstateMap, 28 dirstate_tree::owning::OwningDirstateMap,
30 revlog::Node, 29 revlog::Node,
193 192
194 def write_v1( 193 def write_v1(
195 &self, 194 &self,
196 p1: PyObject, 195 p1: PyObject,
197 p2: PyObject, 196 p2: PyObject,
198 now: PyObject 197 now: (u32, u32)
199 ) -> PyResult<PyBytes> { 198 ) -> PyResult<PyBytes> {
200 let now = Timestamp(now.extract(py)?); 199 let now = timestamp(py, now)?;
201 200
202 let mut inner = self.inner(py).borrow_mut(); 201 let mut inner = self.inner(py).borrow_mut();
203 let parents = DirstateParents { 202 let parents = DirstateParents {
204 p1: extract_node_id(py, &p1)?, 203 p1: extract_node_id(py, &p1)?,
205 p2: extract_node_id(py, &p2)?, 204 p2: extract_node_id(py, &p2)?,
217 /// Returns new data together with whether that data should be appended to 216 /// Returns new data together with whether that data should be appended to
218 /// the existing data file whose content is at `self.on_disk` (True), 217 /// the existing data file whose content is at `self.on_disk` (True),
219 /// instead of written to a new data file (False). 218 /// instead of written to a new data file (False).
220 def write_v2( 219 def write_v2(
221 &self, 220 &self,
222 now: PyObject, 221 now: (u32, u32),
223 can_append: bool, 222 can_append: bool,
224 ) -> PyResult<PyObject> { 223 ) -> PyResult<PyObject> {
225 let now = Timestamp(now.extract(py)?); 224 let now = timestamp(py, now)?;
226 225
227 let mut inner = self.inner(py).borrow_mut(); 226 let mut inner = self.inner(py).borrow_mut();
228 let result = inner.pack_v2(now, can_append); 227 let result = inner.pack_v2(now, can_append);
229 match result { 228 match result {
230 Ok((packed, tree_metadata, append)) => { 229 Ok((packed, tree_metadata, append)) => {