rust/hg-pyo3/src/dirstate.rs
author Pierre-Yves David <pierre-yves.david@octobus.net>
Tue, 18 Feb 2025 22:24:08 +0100
changeset 52964 469b9a628b51
parent 52870 38e16da74aea
permissions -rw-r--r--
dirstatemap: update, document and type the identity tracking This new form should hopefully be clearer and less error prone.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52849
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     1
// dirstate.rs
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     2
//
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     3
// Copyright 2019 Raphaël Gomès <rgomes@octobus.net>
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     4
//           2025 Georges Racinet <georges.racinet@cloudcrane.io>
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     5
//
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     6
// This software may be used and distributed according to the terms of the
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     7
// GNU General Public License version 2 or any later version.
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     8
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
     9
//! Bindings for the `hg::dirstate` module provided by the
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    10
//! `hg-core` package.
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    11
//!
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    12
//! From Python, this will be seen as `mercurial.pyo3_rustext.dirstate`
52850
ffda57aa98fa rust-pyo3-dirstate: defining FallbackError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52849
diff changeset
    13
use crate::{exceptions, utils::new_submodule};
52849
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    14
use pyo3::prelude::*;
52855
138e4ce24680 rust-pyo3-dirstate: DirstateItem class
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52854
diff changeset
    15
mod item;
138e4ce24680 rust-pyo3-dirstate: DirstateItem class
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52854
diff changeset
    16
use item::DirstateItem;
52854
4e5efcaa7e60 rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52850
diff changeset
    17
mod dirstate_map;
52861
c5773445d350 rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52857
diff changeset
    18
use dirstate_map::{
c5773445d350 rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52857
diff changeset
    19
    DirstateIdentity, DirstateMap, DirstateMapItemsIterator,
c5773445d350 rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52857
diff changeset
    20
    DirstateMapKeysIterator,
c5773445d350 rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52857
diff changeset
    21
};
52865
6b38ff460f2a rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52861
diff changeset
    22
mod copy_map;
52866
c917656a259d rust-pyo3-dirstate: CopyMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52865
diff changeset
    23
use copy_map::{CopyMap, CopyMapItemsIterator, CopyMapKeysIterator};
52867
aa2cfeed65c9 rust-pyo3-dirstate: Dirs definition and constructor
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52866
diff changeset
    24
mod dirs_multiset;
52869
8c11ec902e73 rust-pyo3-dirstate: DirsMultisetKeysIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52867
diff changeset
    25
use dirs_multiset::{Dirs, DirsMultisetKeysIterator};
52870
38e16da74aea rust-pyo3-dirstate: status
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52869
diff changeset
    26
mod status;
52849
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    27
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    28
pub fn init_module<'py>(
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    29
    py: Python<'py>,
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    30
    package: &str,
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    31
) -> PyResult<Bound<'py, PyModule>> {
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    32
    let m = new_submodule(py, package, "dirstate")?;
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    33
    m.add("__doc__", "Dirstate - Rust implementation exposed via PyO3")?;
52850
ffda57aa98fa rust-pyo3-dirstate: defining FallbackError
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52849
diff changeset
    34
    m.add("FallbackError", py.get_type::<exceptions::FallbackError>())?;
52854
4e5efcaa7e60 rust-pyo3-dirstate: DirstateIdentity class
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52850
diff changeset
    35
    m.add_class::<DirstateIdentity>()?;
52855
138e4ce24680 rust-pyo3-dirstate: DirstateItem class
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52854
diff changeset
    36
    m.add_class::<DirstateItem>()?;
52857
e7b825893e1b rust-pyo3-dirsate: DirstateMap definition and constructors
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52855
diff changeset
    37
    m.add_class::<DirstateMap>()?;
52861
c5773445d350 rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52857
diff changeset
    38
    m.add_class::<DirstateMapKeysIterator>()?;
c5773445d350 rust-pyo3-dirstate: DirstateMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52857
diff changeset
    39
    m.add_class::<DirstateMapItemsIterator>()?;
52865
6b38ff460f2a rust-pyo3-dirstate: CopyMap without proxy methods
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52861
diff changeset
    40
    m.add_class::<CopyMap>()?;
52866
c917656a259d rust-pyo3-dirstate: CopyMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52865
diff changeset
    41
    m.add_class::<CopyMapKeysIterator>()?;
c917656a259d rust-pyo3-dirstate: CopyMap iterators
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52865
diff changeset
    42
    m.add_class::<CopyMapItemsIterator>()?;
52867
aa2cfeed65c9 rust-pyo3-dirstate: Dirs definition and constructor
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52866
diff changeset
    43
    m.add_class::<Dirs>()?;
52869
8c11ec902e73 rust-pyo3-dirstate: DirsMultisetKeysIterator
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52867
diff changeset
    44
    m.add_class::<DirsMultisetKeysIterator>()?;
52870
38e16da74aea rust-pyo3-dirstate: status
Georges Racinet <georges.racinet@cloudcrane.io>
parents: 52869
diff changeset
    45
    m.add_function(wrap_pyfunction!(self::status::status, &m)?)?;
52849
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    46
    Ok(m)
d0c0ad938eb9 rust-pyo3-dirstate: module definition
Georges Racinet <georges.racinet@cloudcrane.io>
parents:
diff changeset
    47
}