rust/hg-core/src/dirstate_tree/dispatch.rs
author Simon Sapin <simon.sapin@octobus.net>
Thu, 23 Sep 2021 15:29:38 +0200
changeset 48049 29aa633815db
parent 48048 76f1c76186a1
child 48050 2ac0e6b23222
permissions -rw-r--r--
rust: Remove some obsolete doc-comments About parameters that have been removed or replaced Differential Revision: https://phab.mercurial-scm.org/D11492
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
     1
use std::path::PathBuf;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
     2
47101
5d62243c7732 rust: Add a Timestamp struct instead of abusing Duration
Simon Sapin <simon.sapin@octobus.net>
parents: 47094
diff changeset
     3
use crate::dirstate::parsers::Timestamp;
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
     4
use crate::dirstate_tree::on_disk::DirstateV2ParseError;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
     5
use crate::matchers::Matcher;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
     6
use crate::utils::hg_path::{HgPath, HgPathBuf};
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
     7
use crate::CopyMapIter;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
     8
use crate::DirstateEntry;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
     9
use crate::DirstateError;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    10
use crate::DirstateMap;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    11
use crate::DirstateParents;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    12
use crate::DirstateStatus;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    13
use crate::PatternFileWarning;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    14
use crate::StateMapIter;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    15
use crate::StatusError;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    16
use crate::StatusOptions;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    17
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    18
/// `rust/hg-cpython/src/dirstate/dirstate_map.rs` implements in Rust a
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    19
/// `DirstateMap` Python class that wraps `Box<dyn DirstateMapMethods + Send>`,
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    20
/// a trait object of this trait. Except for constructors, this trait defines
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    21
/// all APIs that the class needs to interact with its inner dirstate map.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    22
///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    23
/// A trait object is used to support two different concrete types:
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    24
///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    25
/// * `rust/hg-core/src/dirstate/dirstate_map.rs` defines the "flat dirstate
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    26
///   map" which is based on a few large `HgPath`-keyed `HashMap` and `HashSet`
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    27
///   fields.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    28
/// * `rust/hg-core/src/dirstate_tree/dirstate_map.rs` defines the "tree
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    29
///   dirstate map" based on a tree data struture with nodes for directories
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    30
///   containing child nodes for their files and sub-directories. This tree
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    31
///   enables a more efficient algorithm for `hg status`, but its details are
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    32
///   abstracted in this trait.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    33
///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    34
/// The dirstate map associates paths of files in the working directory to
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    35
/// various information about the state of those files.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    36
pub trait DirstateMapMethods {
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    37
    /// Remove information about all files in this map
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    38
    fn clear(&mut self);
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    39
48045
32ef647821b2 dirstate: Skip no-op conversion in Rust DirstateMap::set_v1
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
    40
    /// Add the given filename to the map if it is not already there, and
32ef647821b2 dirstate: Skip no-op conversion in Rust DirstateMap::set_v1
Simon Sapin <simon.sapin@octobus.net>
parents: 48023
diff changeset
    41
    /// associate the given entry with it.
48047
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
    42
    fn set_entry(
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
    43
        &mut self,
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
    44
        filename: &HgPath,
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
    45
        entry: DirstateEntry,
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
    46
    ) -> Result<(), DirstateV2ParseError>;
47692
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    47
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    48
    /// Add or change the information associated to a given file.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    49
    fn add_file(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    50
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    51
        filename: &HgPath,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    52
        entry: DirstateEntry,
47525
fe4641cf9b72 dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47524
diff changeset
    53
        added: bool,
47527
c6b91a9c242a dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47525
diff changeset
    54
        merged: bool,
47521
abed645b8e96 dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47511
diff changeset
    55
        from_p2: bool,
abed645b8e96 dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47511
diff changeset
    56
        possibly_dirty: bool,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    57
    ) -> Result<(), DirstateError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    58
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    59
    /// Mark a file as "removed" (as in `hg rm`).
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    60
    fn remove_file(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    61
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    62
        filename: &HgPath,
47511
eaae39894312 dirstate: move most of the `remove` logic with dirstatemap `removefile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47491
diff changeset
    63
        in_merge: bool,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    64
    ) -> Result<(), DirstateError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    65
48049
29aa633815db rust: Remove some obsolete doc-comments
Simon Sapin <simon.sapin@octobus.net>
parents: 48048
diff changeset
    66
    /// Drop information about this file from the map if any.
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    67
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    68
    /// `get` will now return `None` for this filename.
48048
76f1c76186a1 dirstate: Remove return boolean from dirstatemap.dropfile
Simon Sapin <simon.sapin@octobus.net>
parents: 48047
diff changeset
    69
    fn drop_file(&mut self, filename: &HgPath) -> Result<(), DirstateError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    70
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    71
    /// Among given files, mark the stored `mtime` as ambiguous if there is one
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    72
    /// (if `state == EntryState::Normal`) equal to the given current Unix
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    73
    /// timestamp.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    74
    fn clear_ambiguous_times(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    75
        &mut self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    76
        filenames: Vec<HgPathBuf>,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    77
        now: i32,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    78
    ) -> Result<(), DirstateV2ParseError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    79
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    80
    /// Return whether the map has an "non-normal" entry for the given
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    81
    /// filename. That is, any entry with a `state` other than
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    82
    /// `EntryState::Normal` or with an ambiguous `mtime`.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    83
    fn non_normal_entries_contains(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    84
        &mut self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    85
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
    86
    ) -> Result<bool, DirstateV2ParseError>;
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
    87
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    88
    /// Mark the given path as "normal" file. This is only relevant in the flat
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    89
    /// dirstate map where there is a separate `HashSet` that needs to be kept
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    90
    /// up to date.
47692
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    91
    /// Returns whether the key was present in the set.
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    92
    fn non_normal_entries_remove(&mut self, key: &HgPath) -> bool;
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    93
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    94
    /// Mark the given path as "non-normal" file.
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    95
    /// This is only relevant in the flat dirstate map where there is a
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    96
    /// separate `HashSet` that needs to be kept up to date.
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
    97
    fn non_normal_entries_add(&mut self, key: &HgPath);
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
    98
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
    99
    /// Return an iterator of paths whose respective entry are either
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   100
    /// "non-normal" (see `non_normal_entries_contains`) or "from other
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   101
    /// parent".
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   102
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   103
    /// If that information is cached, create the cache as needed.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   104
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   105
    /// "From other parent" is defined as `state == Normal && size == -2`.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   106
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   107
    /// Because parse errors can happen during iteration, the iterated items
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   108
    /// are `Result`s.
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   109
    fn non_normal_or_other_parent_paths(
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   110
        &mut self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   111
    ) -> Box<dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + '_>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   112
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   113
    /// Create the cache for `non_normal_or_other_parent_paths` if needed.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   114
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   115
    /// If `force` is true, the cache is re-created even if it already exists.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   116
    fn set_non_normal_other_parent_entries(&mut self, force: bool);
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   117
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   118
    /// Return an iterator of paths whose respective entry are "non-normal"
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   119
    /// (see `non_normal_entries_contains`).
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   120
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   121
    /// If that information is cached, create the cache as needed.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   122
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   123
    /// Because parse errors can happen during iteration, the iterated items
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   124
    /// are `Result`s.
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   125
    fn iter_non_normal_paths(
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   126
        &mut self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   127
    ) -> Box<
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   128
        dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   129
    >;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   130
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   131
    /// Same as `iter_non_normal_paths`, but takes `&self` instead of `&mut
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   132
    /// self`.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   133
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   134
    /// Panics if a cache is necessary but does not exist yet.
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   135
    fn iter_non_normal_paths_panic(
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   136
        &self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   137
    ) -> Box<
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   138
        dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   139
    >;
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   140
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   141
    /// Return an iterator of paths whose respective entry are "from other
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   142
    /// parent".
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   143
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   144
    /// If that information is cached, create the cache as needed.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   145
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   146
    /// "From other parent" is defined as `state == Normal && size == -2`.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   147
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   148
    /// Because parse errors can happen during iteration, the iterated items
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   149
    /// are `Result`s.
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   150
    fn iter_other_parent_paths(
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   151
        &mut self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   152
    ) -> Box<
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   153
        dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   154
    >;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   155
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   156
    /// Returns whether the sub-tree rooted at the given directory contains any
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   157
    /// tracked file.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   158
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   159
    /// A file is tracked if it has a `state` other than `EntryState::Removed`.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   160
    fn has_tracked_dir(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   161
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   162
        directory: &HgPath,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   163
    ) -> Result<bool, DirstateError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   164
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   165
    /// Returns whether the sub-tree rooted at the given directory contains any
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   166
    /// file with a dirstate entry.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   167
    fn has_dir(&mut self, directory: &HgPath) -> Result<bool, DirstateError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   168
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   169
    /// Clear mtimes that are ambigous with `now` (similar to
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   170
    /// `clear_ambiguous_times` but for all files in the dirstate map), and
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   171
    /// serialize bytes to write the `.hg/dirstate` file to disk in dirstate-v1
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   172
    /// format.
47280
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   173
    fn pack_v1(
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   174
        &mut self,
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   175
        parents: DirstateParents,
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   176
        now: Timestamp,
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   177
    ) -> Result<Vec<u8>, DirstateError>;
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   178
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   179
    /// Clear mtimes that are ambigous with `now` (similar to
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   180
    /// `clear_ambiguous_times` but for all files in the dirstate map), and
47678
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   181
    /// serialize bytes to write a dirstate data file to disk in dirstate-v2
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   182
    /// format.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   183
    ///
47682
78f7f0d490ee dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47678
diff changeset
   184
    /// Returns new data and metadata together with whether that data should be
78f7f0d490ee dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47678
diff changeset
   185
    /// appended to the existing data file whose content is at
78f7f0d490ee dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47678
diff changeset
   186
    /// `self.on_disk` (true), instead of written to a new data file
78f7f0d490ee dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47678
diff changeset
   187
    /// (false).
47678
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   188
    ///
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   189
    /// Note: this is only supported by the tree dirstate map.
47678
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   190
    fn pack_v2(
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   191
        &mut self,
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   192
        now: Timestamp,
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   193
        can_append: bool,
47682
78f7f0d490ee dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47678
diff changeset
   194
    ) -> Result<(Vec<u8>, Vec<u8>, bool), DirstateError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   195
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   196
    /// Run the status algorithm.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   197
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   198
    /// This is not sematically a method of the dirstate map, but a different
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   199
    /// algorithm is used for the flat v.s. tree dirstate map so having it in
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   200
    /// this trait enables the same dynamic dispatch as with other methods.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   201
    fn status<'a>(
47112
d5956136d19d dirstate-tree: Give to `status()` mutable access to the `DirstateMap`
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
   202
        &'a mut self,
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   203
        matcher: &'a (dyn Matcher + Sync),
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   204
        root_dir: PathBuf,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   205
        ignore_files: Vec<PathBuf>,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   206
        options: StatusOptions,
47110
9c6b458a08e1 rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents: 47109
diff changeset
   207
    ) -> Result<(DirstateStatus<'a>, Vec<PatternFileWarning>), StatusError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   208
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   209
    /// Returns how many files in the dirstate map have a recorded copy source.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   210
    fn copy_map_len(&self) -> usize;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   211
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   212
    /// Returns an iterator of `(path, copy_source)` for all files that have a
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   213
    /// copy source.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   214
    fn copy_map_iter(&self) -> CopyMapIter<'_>;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   215
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   216
    /// Returns whether the givef file has a copy source.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   217
    fn copy_map_contains_key(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   218
        &self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   219
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   220
    ) -> Result<bool, DirstateV2ParseError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   221
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   222
    /// Returns the copy source for the given file.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   223
    fn copy_map_get(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   224
        &self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   225
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   226
    ) -> Result<Option<&HgPath>, DirstateV2ParseError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   227
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   228
    /// Removes the recorded copy source if any for the given file, and returns
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   229
    /// it.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   230
    fn copy_map_remove(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   231
        &mut self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   232
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   233
    ) -> Result<Option<HgPathBuf>, DirstateV2ParseError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   234
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   235
    /// Set the given `value` copy source for the given `key` file.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   236
    fn copy_map_insert(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   237
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   238
        key: HgPathBuf,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   239
        value: HgPathBuf,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   240
    ) -> Result<Option<HgPathBuf>, DirstateV2ParseError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   241
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   242
    /// Returns the number of files that have an entry.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   243
    fn len(&self) -> usize;
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   244
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   245
    /// Returns whether the given file has an entry.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   246
    fn contains_key(&self, key: &HgPath)
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   247
        -> Result<bool, DirstateV2ParseError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   248
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   249
    /// Returns the entry, if any, for the given file.
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   250
    fn get(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   251
        &self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   252
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   253
    ) -> Result<Option<DirstateEntry>, DirstateV2ParseError>;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   254
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   255
    /// Returns a `(path, entry)` iterator of files that have an entry.
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   256
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   257
    /// Because parse errors can happen during iteration, the iterated items
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   258
    /// are `Result`s.
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   259
    fn iter(&self) -> StateMapIter<'_>;
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   260
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   261
    /// Returns an iterator of tracked directories.
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   262
    ///
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   263
    /// This is the paths for which `has_tracked_dir` would return true.
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   264
    /// Or, in other words, the union of ancestor paths of all paths that have
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   265
    /// an associated entry in a "tracked" state in this dirstate map.
47491
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   266
    ///
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   267
    /// Because parse errors can happen during iteration, the iterated items
8851acad5906 rust: Document the DirstateMapMethods trait
Simon Sapin <simon.sapin@octobus.net>
parents: 47477
diff changeset
   268
    /// are `Result`s.
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   269
    fn iter_tracked_dirs(
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   270
        &mut self,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   271
    ) -> Result<
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   272
        Box<
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   273
            dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>>
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   274
                + Send
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   275
                + '_,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   276
        >,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   277
        DirstateError,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   278
    >;
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   279
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   280
    /// Return an iterator of `(path, (state, mode, size, mtime))` for every
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   281
    /// node stored in this dirstate map, for the purpose of the `hg
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   282
    /// debugdirstate` command.
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   283
    ///
48023
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47692
diff changeset
   284
    /// If `all` is true, include  nodes that don’t have an entry.
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47692
diff changeset
   285
    /// For such nodes `state` is the ASCII space.
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   286
    /// An `mtime` may still be present. It is used to optimize `status`.
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   287
    ///
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   288
    /// Because parse errors can happen during iteration, the iterated items
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   289
    /// are `Result`s.
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   290
    fn debug_iter(
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   291
        &self,
48023
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47692
diff changeset
   292
        all: bool,
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   293
    ) -> Box<
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   294
        dyn Iterator<
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   295
                Item = Result<
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   296
                    (&HgPath, (u8, i32, i32, i32)),
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   297
                    DirstateV2ParseError,
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   298
                >,
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   299
            > + Send
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   300
            + '_,
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   301
    >;
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   302
}
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   303
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   304
impl DirstateMapMethods for DirstateMap {
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   305
    fn clear(&mut self) {
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   306
        self.clear()
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   307
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   308
47692
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   309
    /// Used to set a value directory.
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   310
    ///
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   311
    /// XXX Is temporary during a refactor of V1 dirstate and will disappear
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   312
    /// shortly.
48047
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
   313
    fn set_entry(
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
   314
        &mut self,
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
   315
        filename: &HgPath,
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
   316
        entry: DirstateEntry,
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
   317
    ) -> Result<(), DirstateV2ParseError> {
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
   318
        self.set_entry(&filename, entry);
9b2a51b2c36a dirstate: Propagate dirstate-v2 parse errors from set_dirstate_item
Simon Sapin <simon.sapin@octobus.net>
parents: 48045
diff changeset
   319
        Ok(())
47692
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   320
    }
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   321
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   322
    fn add_file(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   323
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   324
        filename: &HgPath,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   325
        entry: DirstateEntry,
47525
fe4641cf9b72 dirstate: use a `added` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47524
diff changeset
   326
        added: bool,
47527
c6b91a9c242a dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47525
diff changeset
   327
        merged: bool,
47521
abed645b8e96 dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47511
diff changeset
   328
        from_p2: bool,
abed645b8e96 dirstate: move the handling of special case within the dirstatemap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47511
diff changeset
   329
        possibly_dirty: bool,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   330
    ) -> Result<(), DirstateError> {
47527
c6b91a9c242a dirstate: use a `merged` parameter to _addpath
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47525
diff changeset
   331
        self.add_file(filename, entry, added, merged, from_p2, possibly_dirty)
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   332
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   333
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   334
    fn remove_file(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   335
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   336
        filename: &HgPath,
47511
eaae39894312 dirstate: move most of the `remove` logic with dirstatemap `removefile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47491
diff changeset
   337
        in_merge: bool,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   338
    ) -> Result<(), DirstateError> {
47511
eaae39894312 dirstate: move most of the `remove` logic with dirstatemap `removefile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47491
diff changeset
   339
        self.remove_file(filename, in_merge)
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   340
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   341
48048
76f1c76186a1 dirstate: Remove return boolean from dirstatemap.dropfile
Simon Sapin <simon.sapin@octobus.net>
parents: 48047
diff changeset
   342
    fn drop_file(&mut self, filename: &HgPath) -> Result<(), DirstateError> {
47535
6025353c9c55 dirstate: no longer pass `oldstate` to the `dropfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47527
diff changeset
   343
        self.drop_file(filename)
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   344
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   345
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   346
    fn clear_ambiguous_times(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   347
        &mut self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   348
        filenames: Vec<HgPathBuf>,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   349
        now: i32,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   350
    ) -> Result<(), DirstateV2ParseError> {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   351
        Ok(self.clear_ambiguous_times(filenames, now))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   352
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   353
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   354
    fn non_normal_entries_contains(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   355
        &mut self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   356
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   357
    ) -> Result<bool, DirstateV2ParseError> {
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   358
        let (non_normal, _other_parent) =
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   359
            self.get_non_normal_other_parent_entries();
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   360
        Ok(non_normal.contains(key))
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   361
    }
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   362
47692
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   363
    fn non_normal_entries_remove(&mut self, key: &HgPath) -> bool {
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   364
        self.non_normal_entries_remove(key)
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   365
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   366
47692
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   367
    fn non_normal_entries_add(&mut self, key: &HgPath) {
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   368
        self.non_normal_entries_add(key)
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   369
    }
e5fb14a07866 dirstate-map: move most of `dirstate.update_file` logic in the dsmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47683
diff changeset
   370
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   371
    fn non_normal_or_other_parent_paths(
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   372
        &mut self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   373
    ) -> Box<dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + '_>
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   374
    {
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   375
        let (non_normal, other_parent) =
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   376
            self.get_non_normal_other_parent_entries();
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   377
        Box::new(non_normal.union(other_parent).map(|p| Ok(&**p)))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   378
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   379
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   380
    fn set_non_normal_other_parent_entries(&mut self, force: bool) {
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   381
        self.set_non_normal_other_parent_entries(force)
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   382
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   383
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   384
    fn iter_non_normal_paths(
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   385
        &mut self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   386
    ) -> Box<
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   387
        dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   388
    > {
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   389
        let (non_normal, _other_parent) =
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   390
            self.get_non_normal_other_parent_entries();
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   391
        Box::new(non_normal.iter().map(|p| Ok(&**p)))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   392
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   393
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   394
    fn iter_non_normal_paths_panic(
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   395
        &self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   396
    ) -> Box<
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   397
        dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   398
    > {
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   399
        let (non_normal, _other_parent) =
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   400
            self.get_non_normal_other_parent_entries_panic();
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   401
        Box::new(non_normal.iter().map(|p| Ok(&**p)))
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   402
    }
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   403
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   404
    fn iter_other_parent_paths(
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   405
        &mut self,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   406
    ) -> Box<
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   407
        dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>> + Send + '_,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   408
    > {
47094
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   409
        let (_non_normal, other_parent) =
e061a1df32a8 dirstate-tree: Abstract "non-normal" and "other parent" sets
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
   410
            self.get_non_normal_other_parent_entries();
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   411
        Box::new(other_parent.iter().map(|p| Ok(&**p)))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   412
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   413
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   414
    fn has_tracked_dir(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   415
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   416
        directory: &HgPath,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   417
    ) -> Result<bool, DirstateError> {
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   418
        self.has_tracked_dir(directory)
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   419
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   420
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   421
    fn has_dir(&mut self, directory: &HgPath) -> Result<bool, DirstateError> {
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   422
        self.has_dir(directory)
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   423
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   424
47280
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   425
    fn pack_v1(
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   426
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   427
        parents: DirstateParents,
47101
5d62243c7732 rust: Add a Timestamp struct instead of abusing Duration
Simon Sapin <simon.sapin@octobus.net>
parents: 47094
diff changeset
   428
        now: Timestamp,
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   429
    ) -> Result<Vec<u8>, DirstateError> {
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   430
        self.pack(parents, now)
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   431
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   432
47678
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   433
    fn pack_v2(
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   434
        &mut self,
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   435
        _now: Timestamp,
065e61628980 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net>
parents: 47674
diff changeset
   436
        _can_append: bool,
47682
78f7f0d490ee dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47678
diff changeset
   437
    ) -> Result<(Vec<u8>, Vec<u8>, bool), DirstateError> {
47280
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   438
        panic!(
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   439
            "should have used dirstate_tree::DirstateMap to use the v2 format"
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   440
        )
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   441
    }
1766130fe9ba dirstate-v2: Change the on-disk format when the requirement is enabled
Simon Sapin <simon.sapin@octobus.net>
parents: 47124
diff changeset
   442
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   443
    fn status<'a>(
47112
d5956136d19d dirstate-tree: Give to `status()` mutable access to the `DirstateMap`
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
   444
        &'a mut self,
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   445
        matcher: &'a (dyn Matcher + Sync),
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   446
        root_dir: PathBuf,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   447
        ignore_files: Vec<PathBuf>,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   448
        options: StatusOptions,
47110
9c6b458a08e1 rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents: 47109
diff changeset
   449
    ) -> Result<(DirstateStatus<'a>, Vec<PatternFileWarning>), StatusError>
9c6b458a08e1 rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents: 47109
diff changeset
   450
    {
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   451
        crate::status(self, matcher, root_dir, ignore_files, options)
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   452
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   453
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   454
    fn copy_map_len(&self) -> usize {
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   455
        self.copy_map.len()
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   456
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   457
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   458
    fn copy_map_iter(&self) -> CopyMapIter<'_> {
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   459
        Box::new(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   460
            self.copy_map
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   461
                .iter()
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   462
                .map(|(key, value)| Ok((&**key, &**value))),
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   463
        )
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   464
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   465
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   466
    fn copy_map_contains_key(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   467
        &self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   468
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   469
    ) -> Result<bool, DirstateV2ParseError> {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   470
        Ok(self.copy_map.contains_key(key))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   471
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   472
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   473
    fn copy_map_get(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   474
        &self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   475
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   476
    ) -> Result<Option<&HgPath>, DirstateV2ParseError> {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   477
        Ok(self.copy_map.get(key).map(|p| &**p))
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   478
    }
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   479
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   480
    fn copy_map_remove(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   481
        &mut self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   482
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   483
    ) -> Result<Option<HgPathBuf>, DirstateV2ParseError> {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   484
        Ok(self.copy_map.remove(key))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   485
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   486
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   487
    fn copy_map_insert(
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   488
        &mut self,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   489
        key: HgPathBuf,
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   490
        value: HgPathBuf,
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   491
    ) -> Result<Option<HgPathBuf>, DirstateV2ParseError> {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   492
        Ok(self.copy_map.insert(key, value))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   493
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   494
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   495
    fn len(&self) -> usize {
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   496
        (&**self).len()
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   497
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   498
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   499
    fn contains_key(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   500
        &self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   501
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   502
    ) -> Result<bool, DirstateV2ParseError> {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   503
        Ok((&**self).contains_key(key))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   504
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   505
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   506
    fn get(
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   507
        &self,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   508
        key: &HgPath,
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   509
    ) -> Result<Option<DirstateEntry>, DirstateV2ParseError> {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   510
        Ok((&**self).get(key).cloned())
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   511
    }
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   512
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   513
    fn iter(&self) -> StateMapIter<'_> {
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47332
diff changeset
   514
        Box::new((&**self).iter().map(|(key, value)| Ok((&**key, *value))))
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   515
    }
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   516
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   517
    fn iter_tracked_dirs(
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   518
        &mut self,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   519
    ) -> Result<
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   520
        Box<
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   521
            dyn Iterator<Item = Result<&HgPath, DirstateV2ParseError>>
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   522
                + Send
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   523
                + '_,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   524
        >,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   525
        DirstateError,
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   526
    > {
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   527
        self.set_all_dirs()?;
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   528
        Ok(Box::new(
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   529
            self.all_dirs
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   530
                .as_ref()
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   531
                .unwrap()
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   532
                .iter()
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   533
                .map(|path| Ok(&**path)),
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   534
        ))
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   535
    }
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   536
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   537
    fn debug_iter(
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   538
        &self,
48023
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47692
diff changeset
   539
        all: bool,
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   540
    ) -> Box<
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   541
        dyn Iterator<
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   542
                Item = Result<
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   543
                    (&HgPath, (u8, i32, i32, i32)),
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   544
                    DirstateV2ParseError,
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   545
                >,
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   546
            > + Send
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   547
            + '_,
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   548
    > {
48023
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47692
diff changeset
   549
        // Not used for the flat (not tree-based) DirstateMap
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47692
diff changeset
   550
        let _ = all;
357307feaf61 debugstate: Always call dirstatemap.debug_iter()
Simon Sapin <simon.sapin@octobus.net>
parents: 47692
diff changeset
   551
47683
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   552
        Box::new(
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   553
            (&**self)
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   554
                .iter()
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   555
                .map(|(path, entry)| Ok((&**path, entry.debug_tuple()))),
284a20269a97 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net>
parents: 47682
diff changeset
   556
        )
47351
3b9914b28133 dirstate-v2: Add --dirs to debugdirstate command
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
   557
    }
47093
787ff5d21bcd dirstate-tree: Make Rust DirstateMap bindings go through a trait object
Simon Sapin <simon.sapin@octobus.net>
parents:
diff changeset
   558
}