rust/hg-pyo3/src/dirstate/dirstate_map.rs
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 11 Mar 2025 02:29:42 +0100
branchstable
changeset 53042 cdd7bf612c7b
parent 52868 8e94b32de84b
permissions -rw-r--r--
bundle-spec: properly format boolean parameter (issue6960) This was breaking automatic clone bundle generation. This changeset fixes it and add a test to catch it in the future.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
}