Mercurial > hg
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)) => { |