author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Tue, 11 Mar 2025 02:29:42 +0100 | |
branch | stable |
changeset 53042 | cdd7bf612c7b |
parent 52868 | 8e94b32de84b |
permissions | -rw-r--r-- |
52854
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
1 |
// dirstate_map.rs |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
2 |
// |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
3 |
// Copyright 2019 Raphaël Gomès <rgomes@octobus.net> |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
4 |
// 2025 Georges Racinet <georges.racinet@cloudcrane.io> |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
5 |
// |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
6 |
// This software may be used and distributed according to the terms of the |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
7 |
// GNU General Public License version 2 or any later version. |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
8 |
//! Bindings for the `hg::dirstate::dirstate_map` file provided by the |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
9 |
//! `hg-core` package. |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
10 |
|
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
11 |
use pyo3::exceptions::{PyKeyError, PyOSError}; |
52854
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
12 |
use pyo3::prelude::*; |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
13 |
use pyo3::types::{ |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
14 |
PyBytes, PyBytesMethods, PyDict, PyDictMethods, PyList, PyTuple, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
15 |
}; |
52861
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
16 |
use pyo3_sharedref::{py_shared_iterator, PyShareable}; |
52854
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
17 |
|
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
18 |
use std::sync::{RwLockReadGuard, RwLockWriteGuard}; |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
19 |
|
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
20 |
use hg::{ |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
21 |
dirstate::{ |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
22 |
dirstate_map::{ |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
23 |
DirstateEntryReset, DirstateIdentity as CoreDirstateIdentity, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
24 |
DirstateMapWriteMode, |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
25 |
}, |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
26 |
entry::{DirstateEntry, ParentFileData, TruncatedTimestamp}, |
52861
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
27 |
on_disk::DirstateV2ParseError, |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
28 |
owning::OwningDirstateMap, |
52861
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
29 |
StateMapIter, |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
30 |
}, |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
31 |
utils::{files::normalize_case, hg_path::HgPath}, |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
32 |
DirstateParents, |
52857
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
33 |
}; |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
34 |
|
52865
6b38ff460f2a
rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52864
diff
changeset
|
35 |
use super::{copy_map::CopyMap, item::DirstateItem}; |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
36 |
use crate::{ |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
37 |
exceptions::{ |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
38 |
dirstate_error, dirstate_v2_error, map_try_lock_error, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
39 |
to_string_value_error, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
40 |
}, |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
41 |
node::{node_from_py_bytes, PyNode}, |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
42 |
path::{PyHgPathBuf, PyHgPathDirstateV2Result, PyHgPathRef}, |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
43 |
utils::PyBytesDeref, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
44 |
}; |
52857
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
45 |
|
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
46 |
/// Type alias to satisfy Clippy in `DirstateMap::reset_state)` |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
47 |
/// |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
48 |
/// It is *not* the same as [`super::item::UncheckedTruncatedTimeStamp`] and |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
49 |
/// this is worth reviewing. |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
50 |
type UncheckedTruncatedTimeStamp = Option<(i64, u32, bool)>; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
51 |
|
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
52 |
#[pyclass(mapping)] |
52857
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
53 |
pub struct DirstateMap { |
52866
c917656a259d
rust-pyo3-dirstate: CopyMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52865
diff
changeset
|
54 |
pub(super) inner: PyShareable<OwningDirstateMap>, |
52857
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
55 |
} |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
56 |
|
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
57 |
#[pymethods] |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
58 |
impl DirstateMap { |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
59 |
#[staticmethod] |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
60 |
#[pyo3(signature = (on_disk, identity))] |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
61 |
/// Returns a `(dirstate_map, parents)` tuple |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
62 |
/// |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
63 |
/// The Python call site is using the positional argument style, hence |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
64 |
/// despite the fact that `identity` can be `None`, we specify the |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
65 |
/// matching signature. |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
66 |
fn new_v1( |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
67 |
py: Python, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
68 |
on_disk: Py<PyBytes>, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
69 |
identity: Option<&Bound<'_, DirstateIdentity>>, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
70 |
) -> PyResult<Py<PyTuple>> { |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
71 |
let on_disk = PyBytesDeref::new(py, on_disk); |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
72 |
let (map, parents) = OwningDirstateMap::new_v1( |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
73 |
on_disk, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
74 |
identity.map(|i| i.borrow().inner), |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
75 |
) |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
76 |
.map_err(dirstate_error)?; |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
77 |
let map = Self { inner: map.into() }; |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
78 |
let parents = (PyNode(parents.p1), PyNode(parents.p2)); |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
79 |
Ok((map, parents).into_pyobject(py)?.into()) |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
80 |
} |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
81 |
|
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
82 |
#[staticmethod] |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
83 |
#[pyo3(signature = (on_disk, data_size, tree_metadata, uuid, identity))] |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
84 |
fn new_v2( |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
85 |
py: Python, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
86 |
on_disk: Py<PyBytes>, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
87 |
data_size: usize, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
88 |
tree_metadata: &Bound<'_, PyBytes>, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
89 |
uuid: &Bound<'_, PyBytes>, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
90 |
identity: Option<&Bound<'_, DirstateIdentity>>, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
91 |
) -> PyResult<Self> { |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
92 |
Ok(Self { |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
93 |
inner: OwningDirstateMap::new_v2( |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
94 |
PyBytesDeref::new(py, on_disk), |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
95 |
data_size, |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
96 |
tree_metadata.as_bytes(), |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
97 |
uuid.as_bytes().to_owned(), |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
98 |
identity.map(|i| i.borrow().inner), |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
99 |
) |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
100 |
.map_err(dirstate_error)? |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
101 |
.into(), |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
102 |
}) |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
103 |
} |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
104 |
|
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
105 |
#[staticmethod] |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
106 |
fn new_empty() -> PyResult<Self> { |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
107 |
Ok(Self { |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
108 |
inner: OwningDirstateMap::new_empty(vec![], None).into(), |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
109 |
}) |
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
110 |
} |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
111 |
|
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
112 |
fn clear(slf: &Bound<'_, Self>) -> PyResult<()> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
113 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
114 |
inner.clear(); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
115 |
Ok(()) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
116 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
117 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
118 |
|
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
119 |
#[pyo3(signature = (key, default=None))] |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
120 |
fn get( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
121 |
slf: &Bound<'_, Self>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
122 |
key: &Bound<'_, PyBytes>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
123 |
default: Option<PyObject>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
124 |
) -> PyResult<Option<PyObject>> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
125 |
let path = HgPath::new(key.as_bytes()); |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
126 |
|
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
127 |
Self::with_inner_read(slf, |_self_ref, inner| { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
128 |
match inner.get(path).map_err(dirstate_v2_error)? { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
129 |
Some(entry) => Ok(Some( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
130 |
DirstateItem::new_as_py(slf.py(), entry)?.into_any(), |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
131 |
)), |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
132 |
None => Ok(default), |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
133 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
134 |
}) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
135 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
136 |
|
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
137 |
fn set_tracked( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
138 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
139 |
f: &Bound<'_, PyBytes>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
140 |
) -> PyResult<bool> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
141 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
142 |
inner |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
143 |
.set_tracked(HgPath::new(f.as_bytes())) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
144 |
.map_err(dirstate_v2_error) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
145 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
146 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
147 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
148 |
fn set_untracked( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
149 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
150 |
f: &Bound<'_, PyBytes>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
151 |
) -> PyResult<bool> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
152 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
153 |
// here it would be more straightforward to use dirstate_v2_error, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
154 |
// but that raises ValueError instead of OSError |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
155 |
inner |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
156 |
.set_untracked(HgPath::new(f.as_bytes())) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
157 |
.map_err(|_| PyOSError::new_err("Dirstate error")) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
158 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
159 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
160 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
161 |
fn set_clean( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
162 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
163 |
f: &Bound<'_, PyBytes>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
164 |
mode: u32, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
165 |
size: u32, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
166 |
mtime: (i64, u32, bool), |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
167 |
) -> PyResult<()> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
168 |
let (mtime_s, mtime_ns, second_ambiguous) = mtime; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
169 |
let timestamp = TruncatedTimestamp::new_truncate( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
170 |
mtime_s, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
171 |
mtime_ns, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
172 |
second_ambiguous, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
173 |
); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
174 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
175 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
176 |
inner |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
177 |
.set_clean(HgPath::new(f.as_bytes()), mode, size, timestamp) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
178 |
.map_err(dirstate_error) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
179 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
180 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
181 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
182 |
fn set_possibly_dirty( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
183 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
184 |
f: &Bound<'_, PyBytes>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
185 |
) -> PyResult<()> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
186 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
187 |
inner |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
188 |
.set_possibly_dirty(HgPath::new(f.as_bytes())) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
189 |
.map_err(dirstate_error) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
190 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
191 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
192 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
193 |
#[pyo3(signature = (f, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
194 |
wc_tracked=false, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
195 |
p1_tracked=false, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
196 |
p2_info=false, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
197 |
has_meaningful_mtime=true, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
198 |
parentfiledata=None))] |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
199 |
fn reset_state( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
200 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
201 |
f: &Bound<'_, PyBytes>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
202 |
wc_tracked: bool, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
203 |
p1_tracked: bool, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
204 |
p2_info: bool, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
205 |
has_meaningful_mtime: bool, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
206 |
parentfiledata: Option<(u32, u32, UncheckedTruncatedTimeStamp)>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
207 |
) -> PyResult<()> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
208 |
let mut has_meaningful_mtime = has_meaningful_mtime; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
209 |
let parent_file_data = match parentfiledata { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
210 |
None => { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
211 |
has_meaningful_mtime = false; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
212 |
None |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
213 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
214 |
Some(data) => { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
215 |
let (mode, size, mtime_info) = data; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
216 |
let mtime = if let Some(mtime_info) = mtime_info { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
217 |
let (mtime_s, mtime_ns, second_ambiguous) = mtime_info; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
218 |
let timestamp = TruncatedTimestamp::new_truncate( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
219 |
mtime_s, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
220 |
mtime_ns, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
221 |
second_ambiguous, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
222 |
); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
223 |
Some(timestamp) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
224 |
} else { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
225 |
has_meaningful_mtime = false; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
226 |
None |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
227 |
}; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
228 |
Some(ParentFileData { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
229 |
mode_size: Some((mode, size)), |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
230 |
mtime, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
231 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
232 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
233 |
}; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
234 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
235 |
let reset = DirstateEntryReset { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
236 |
filename: HgPath::new(f.as_bytes()), |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
237 |
wc_tracked, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
238 |
p1_tracked, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
239 |
p2_info, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
240 |
has_meaningful_mtime, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
241 |
parent_file_data_opt: parent_file_data, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
242 |
from_empty: false, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
243 |
}; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
244 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
245 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
246 |
inner.reset_state(reset).map_err(dirstate_error) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
247 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
248 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
249 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
250 |
fn hastrackeddir( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
251 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
252 |
d: &Bound<'_, PyBytes>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
253 |
) -> PyResult<bool> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
254 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
255 |
inner |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
256 |
.has_tracked_dir(HgPath::new(d.as_bytes())) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
257 |
.map_err(to_string_value_error) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
258 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
259 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
260 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
261 |
fn hasdir( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
262 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
263 |
d: &Bound<'_, PyBytes>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
264 |
) -> PyResult<bool> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
265 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
266 |
inner |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
267 |
.has_dir(HgPath::new(d.as_bytes())) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
268 |
.map_err(to_string_value_error) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
269 |
}) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
270 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
271 |
|
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
272 |
/// Returns suitable data for writing on disk in v1 format |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
273 |
/// |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
274 |
/// Despite the name, this is not a mutation of the object. |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
275 |
fn write_v1( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
276 |
slf: &Bound<'_, Self>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
277 |
py: Python, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
278 |
p1: &Bound<'_, PyBytes>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
279 |
p2: &Bound<'_, PyBytes>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
280 |
) -> PyResult<Py<PyBytes>> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
281 |
Self::with_inner_read(slf, |_self_ref, inner| { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
282 |
let parents = DirstateParents { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
283 |
p1: node_from_py_bytes(p1)?, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
284 |
p2: node_from_py_bytes(p2)?, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
285 |
}; |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
286 |
let packed = inner.pack_v1(parents).map_err(dirstate_error)?; |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
287 |
// TODO optim, see `write_v2()` |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
288 |
Ok(PyBytes::new(py, &packed).unbind()) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
289 |
}) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
290 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
291 |
|
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
292 |
/// Returns suitable new data for writing on disk in v2 format |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
293 |
/// |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
294 |
/// Despite the name, this is not a mutation of the object. |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
295 |
/// |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
296 |
/// The new data together with whether that data should be appended to |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
297 |
/// the existing data file whose content is at `self.on_disk` (True), |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
298 |
/// instead of written to a new data file (False). |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
299 |
fn write_v2( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
300 |
slf: &Bound<'_, Self>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
301 |
py: Python, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
302 |
write_mode: usize, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
303 |
) -> PyResult<Py<PyTuple>> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
304 |
Self::with_inner_read(slf, |_self_ref, inner| { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
305 |
let rust_write_mode = match write_mode { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
306 |
0 => DirstateMapWriteMode::Auto, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
307 |
1 => DirstateMapWriteMode::ForceNewDataFile, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
308 |
2 => DirstateMapWriteMode::ForceAppend, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
309 |
_ => DirstateMapWriteMode::Auto, // XXX should we error out? |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
310 |
}; |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
311 |
let (packed, tree_metadata, append, _old_data_size) = |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
312 |
inner.pack_v2(rust_write_mode).map_err(dirstate_error)?; |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
313 |
// TODO optim. In theory we should be able to avoid these copies, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
314 |
// since we have full ownership of `packed` and `tree_metadata`. |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
315 |
// But the copy is done by CPython itself, in |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
316 |
// `PyBytes_FromStringAndSize()`. Perhaps something better can |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
317 |
// be done with `PyBytes_FromObject` (buffer protocol). |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
318 |
let packed = PyBytes::new(py, &packed).unbind(); |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
319 |
let tree_metadata = |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
320 |
PyBytes::new(py, tree_metadata.as_bytes()).unbind(); |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
321 |
Ok((packed, tree_metadata, append).into_pyobject(py)?.into()) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
322 |
}) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
323 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
324 |
|
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
325 |
fn filefoldmapasdict( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
326 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
327 |
py: Python, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
328 |
) -> PyResult<Py<PyDict>> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
329 |
let dict = PyDict::new(py); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
330 |
Self::with_inner_read(slf, |_self_ref, inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
331 |
for item in inner.iter() { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
332 |
let (path, entry) = item.map_err(dirstate_v2_error)?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
333 |
if !entry.removed() { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
334 |
let key = normalize_case(path); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
335 |
dict.set_item(PyHgPathBuf(key), PyHgPathRef(path))?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
336 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
337 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
338 |
Ok(()) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
339 |
})?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
340 |
Ok(dict.unbind()) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
341 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
342 |
|
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
343 |
fn __len__(slf: &Bound<'_, Self>) -> PyResult<usize> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
344 |
Self::with_inner_read(slf, |_self_ref, inner| Ok(inner.len())) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
345 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
346 |
|
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
347 |
fn __contains__( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
348 |
slf: &Bound<'_, Self>, |
52868
8e94b32de84b
rust-pyo3-dirstate: Dirs methods not involving iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52866
diff
changeset
|
349 |
// TODO we should accept PyAny and return false if wrong type |
8e94b32de84b
rust-pyo3-dirstate: Dirs methods not involving iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52866
diff
changeset
|
350 |
// review similar "protocol" methods (see example in dirs_multiset) |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
351 |
key: &Bound<'_, PyBytes>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
352 |
) -> PyResult<bool> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
353 |
Self::with_inner_read(slf, |_self_ref, inner| { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
354 |
inner |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
355 |
.contains_key(HgPath::new(key.as_bytes())) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
356 |
.map_err(dirstate_v2_error) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
357 |
}) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
358 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
359 |
|
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
360 |
fn __getitem__( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
361 |
slf: &Bound<'_, Self>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
362 |
key: &Bound<'_, PyBytes>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
363 |
) -> PyResult<Py<DirstateItem>> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
364 |
let key_bytes = key.as_bytes(); |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
365 |
let path = HgPath::new(key_bytes); |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
366 |
Self::with_inner_read(slf, |_self_ref, inner| { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
367 |
match inner.get(path).map_err(dirstate_v2_error)? { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
368 |
Some(entry) => DirstateItem::new_as_py(slf.py(), entry), |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
369 |
None => Err(PyKeyError::new_err( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
370 |
String::from_utf8_lossy(key_bytes).to_string(), |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
371 |
)), |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
372 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
373 |
}) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
374 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
375 |
|
52861
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
376 |
fn keys(slf: &Bound<'_, Self>) -> PyResult<DirstateMapKeysIterator> { |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
377 |
DirstateMapKeysIterator::new(slf) |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
378 |
} |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
379 |
|
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
380 |
fn items(slf: &Bound<'_, Self>) -> PyResult<DirstateMapItemsIterator> { |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
381 |
DirstateMapItemsIterator::new(slf) |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
382 |
} |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
383 |
|
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
384 |
fn __iter__(slf: &Bound<'_, Self>) -> PyResult<DirstateMapKeysIterator> { |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
385 |
Self::keys(slf) |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
386 |
} |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
387 |
|
52865
6b38ff460f2a
rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52864
diff
changeset
|
388 |
fn copymap(slf: &Bound<'_, Self>) -> PyResult<Py<CopyMap>> { |
6b38ff460f2a
rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52864
diff
changeset
|
389 |
CopyMap::new(slf).and_then(|cm| Py::new(slf.py(), cm)) |
6b38ff460f2a
rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52864
diff
changeset
|
390 |
} |
6b38ff460f2a
rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52864
diff
changeset
|
391 |
|
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
392 |
fn tracked_dirs( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
393 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
394 |
py: Python, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
395 |
) -> PyResult<Py<PyList>> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
396 |
// core iterator is not exact sized, we cannot use `PyList::new` |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
397 |
let dirs = PyList::empty(py); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
398 |
Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
399 |
for path in inner.iter_tracked_dirs().map_err(dirstate_error)? { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
400 |
dirs.append(PyHgPathDirstateV2Result(path))?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
401 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
402 |
Ok(()) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
403 |
})?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
404 |
Ok(dirs.unbind()) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
405 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
406 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
407 |
fn setparents_fixup( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
408 |
slf: &Bound<'_, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
409 |
py: Python, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
410 |
) -> PyResult<Py<PyDict>> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
411 |
let dict = PyDict::new(py); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
412 |
let copies = Self::with_inner_write(slf, |_self_ref, mut inner| { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
413 |
inner.setparents_fixup().map_err(dirstate_v2_error) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
414 |
})?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
415 |
|
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
416 |
// it might be interesting to try and use the `IntoPyDict` trait, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
417 |
// but it does about the same thing |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
418 |
// but that would require performing the inner `as_bytes()` as well |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
419 |
for (key, value) in copies { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
420 |
dict.set_item(PyHgPathBuf(key), PyHgPathBuf(value))?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
421 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
422 |
Ok(dict.unbind()) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
423 |
} |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
424 |
|
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
425 |
fn debug_iter( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
426 |
slf: &Bound<'_, Self>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
427 |
py: Python, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
428 |
all: bool, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
429 |
) -> PyResult<PyObject> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
430 |
Self::with_inner_read(slf, |_self_ref, inner| { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
431 |
// the iterator returned by `debug_iter()` does not |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
432 |
// implement ExactSizeIterator, which is needed by |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
433 |
// `PyList::new()`, so we need to collect. Probably not a |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
434 |
// performance issue, as this is a debug method. |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
435 |
let as_vec: PyResult<Vec<_>> = inner |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
436 |
.debug_iter(all) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
437 |
.map(|item| { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
438 |
let (path, (state, mode, size, mtime)) = |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
439 |
item.map_err(dirstate_v2_error)?; |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
440 |
Ok((PyHgPathRef(path), state, mode, size, mtime)) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
441 |
}) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
442 |
.collect(); |
52861
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
443 |
// `IntoPyObject` on `Vec` and `&[T]` gives `PyList` or `PyBytes` |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
444 |
Ok(as_vec?.into_pyobject(py)?.unbind()) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
445 |
}) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
446 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
447 |
} |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
448 |
|
52861
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
449 |
py_shared_iterator!( |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
450 |
DirstateMapKeysIterator, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
451 |
PyBytes, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
452 |
DirstateMap, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
453 |
inner, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
454 |
StateMapIter<'static>, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
455 |
|dsm| dsm.iter(), |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
456 |
DirstateMap::keys_next_result |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
457 |
); |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
458 |
|
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
459 |
py_shared_iterator!( |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
460 |
DirstateMapItemsIterator, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
461 |
PyTuple, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
462 |
DirstateMap, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
463 |
inner, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
464 |
StateMapIter<'static>, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
465 |
|dsm| dsm.iter(), |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
466 |
DirstateMap::items_next_result |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
467 |
); |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
468 |
|
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
469 |
impl DirstateMap { |
52861
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
470 |
fn keys_next_result( |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
471 |
py: Python, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
472 |
res: Result<(&HgPath, DirstateEntry), DirstateV2ParseError>, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
473 |
) -> PyResult<Option<Py<PyBytes>>> { |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
474 |
let key = res.map_err(dirstate_v2_error)?.0; |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
475 |
Ok(Some(PyHgPathRef(key).into_pyobject(py)?.unbind())) |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
476 |
} |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
477 |
|
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
478 |
fn items_next_result( |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
479 |
py: Python, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
480 |
res: Result<(&HgPath, DirstateEntry), DirstateV2ParseError>, |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
481 |
) -> PyResult<Option<Py<PyTuple>>> { |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
482 |
let (key, entry) = res.map_err(dirstate_v2_error)?; |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
483 |
let py_entry = DirstateItem::new_as_py(py, entry)?; |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
484 |
Ok(Some((PyHgPathRef(key), py_entry).into_pyobject(py)?.into())) |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
485 |
} |
c5773445d350
rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52859
diff
changeset
|
486 |
|
52865
6b38ff460f2a
rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52864
diff
changeset
|
487 |
pub(super) fn with_inner_read<'py, T>( |
52859
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
488 |
slf: &Bound<'py, Self>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
489 |
f: impl FnOnce( |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
490 |
&PyRef<'py, Self>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
491 |
RwLockReadGuard<OwningDirstateMap>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
492 |
) -> PyResult<T>, |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
493 |
) -> PyResult<T> { |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
494 |
let self_ref = slf.borrow(); |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
495 |
// Safety: the owner is the right one. We will anyway |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
496 |
// not actually `share` it. |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
497 |
let shareable_ref = unsafe { self_ref.inner.borrow_with_owner(slf) }; |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
498 |
let guard = shareable_ref.try_read().map_err(map_try_lock_error)?; |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
499 |
f(&self_ref, guard) |
9f083ff3c96c
rust-pyo3-dirstate: DirstateMap simple read-only methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52857
diff
changeset
|
500 |
} |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
501 |
|
52865
6b38ff460f2a
rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52864
diff
changeset
|
502 |
pub(super) fn with_inner_write<'py, T>( |
52864
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
503 |
slf: &Bound<'py, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
504 |
f: impl FnOnce( |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
505 |
&PyRef<'py, Self>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
506 |
RwLockWriteGuard<OwningDirstateMap>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
507 |
) -> PyResult<T>, |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
508 |
) -> PyResult<T> { |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
509 |
let self_ref = slf.borrow(); |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
510 |
// Safety: the owner is the right one. We will anyway |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
511 |
// not actually `share` it. |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
512 |
let shareable_ref = unsafe { self_ref.inner.borrow_with_owner(slf) }; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
513 |
let guard = shareable_ref.try_write().map_err(map_try_lock_error)?; |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
514 |
f(&self_ref, guard) |
d961e09d3d8c
rust-pyo3-dirstate: DirstateMap mutating methods except CopyMap related
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52861
diff
changeset
|
515 |
} |
52857
e7b825893e1b
rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
52854
diff
changeset
|
516 |
} |
52854
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
517 |
|
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
518 |
#[pyclass] |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
519 |
pub struct DirstateIdentity { |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
520 |
#[allow(dead_code)] |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
521 |
inner: CoreDirstateIdentity, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
522 |
} |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
523 |
|
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
524 |
#[pymethods] |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
525 |
impl DirstateIdentity { |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
526 |
#[new] |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
527 |
#[allow(clippy::too_many_arguments)] |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
528 |
fn new( |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
529 |
mode: u32, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
530 |
dev: u64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
531 |
ino: u64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
532 |
nlink: u64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
533 |
uid: u32, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
534 |
gid: u32, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
535 |
size: u64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
536 |
mtime: i64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
537 |
mtime_nsec: i64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
538 |
ctime: i64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
539 |
ctime_nsec: i64, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
540 |
) -> PyResult<Self> { |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
541 |
Ok(Self { |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
542 |
inner: CoreDirstateIdentity { |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
543 |
mode, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
544 |
dev, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
545 |
ino, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
546 |
nlink, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
547 |
uid, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
548 |
gid, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
549 |
size, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
550 |
mtime, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
551 |
mtime_nsec, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
552 |
ctime, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
553 |
ctime_nsec, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
554 |
}, |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
555 |
}) |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
556 |
} |
4e5efcaa7e60
rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff
changeset
|
557 |
} |