annotate rust/hg-core/src/dirstate/status.rs @ 48674:f7086f6173f8 stable

dirstate-v2: rename the configuration to enable the format The rename of the old experimental name was overlooked before the 6.0 release. We rename everything to use the new name (and keep the released name as an alias for compatibility). Differential Revision: https://phab.mercurial-scm.org/D12129
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 01 Feb 2022 16:36:20 +0100
parents 269ff8978086
children b80e5e75d51e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43271
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
1 // status.rs
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
2 //
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
3 // Copyright 2019 Raphaël Gomès <rgomes@octobus.net>
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
4 //
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
5 // This software may be used and distributed according to the terms of the
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
6 // GNU General Public License version 2 or any later version.
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
7
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
8 //! Rust implementation of dirstate.status (dirstate.py).
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
9 //! It is currently missing a lot of functionality compared to the Python one
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
10 //! and will only be triggered in narrow cases.
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
11
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47329
diff changeset
12 use crate::dirstate_tree::on_disk::DirstateV2ParseError;
48068
bf8837e3d7ce dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents: 48026
diff changeset
13
43605
8210c3f46912 rust: introduce SIZE_FROM_OTHER_PARENT constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 43604
diff changeset
14 use crate::{
48260
269ff8978086 dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net>
parents: 48068
diff changeset
15 dirstate::TruncatedTimestamp,
48068
bf8837e3d7ce dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents: 48026
diff changeset
16 utils::hg_path::{HgPath, HgPathError},
44528
c8891bca40fb rust-status: add bare `hg status` support in hg-core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44527
diff changeset
17 PatternError,
43605
8210c3f46912 rust: introduce SIZE_FROM_OTHER_PARENT constant
Rapha?l Gom?s <rgomes@octobus.net>
parents: 43604
diff changeset
18 };
48068
bf8837e3d7ce dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents: 48026
diff changeset
19
bf8837e3d7ce dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents: 48026
diff changeset
20 use std::{borrow::Cow, fmt};
43271
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
21
44526
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
22 /// Wrong type of file from a `BadMatch`
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
23 /// Note: a lot of those don't exist on all platforms.
44536
f8a9922a02cb rust-status: move to recursive traversal to prepare for parallel traversal
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44535
diff changeset
24 #[derive(Debug, Copy, Clone)]
44526
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
25 pub enum BadType {
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
26 CharacterDevice,
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
27 BlockDevice,
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
28 FIFO,
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
29 Socket,
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
30 Directory,
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
31 Unknown,
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
32 }
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
33
46444
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
34 impl fmt::Display for BadType {
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
35 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
36 f.write_str(match self {
44529
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
37 BadType::CharacterDevice => "character device",
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
38 BadType::BlockDevice => "block device",
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
39 BadType::FIFO => "fifo",
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
40 BadType::Socket => "socket",
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
41 BadType::Directory => "directory",
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
42 BadType::Unknown => "unknown",
46444
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
43 })
44529
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
44 }
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
45 }
f96b28aa4b79 rust-status: update rust-cpython bridge to account for the changes in core
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44528
diff changeset
46
44526
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
47 /// Was explicitly matched but cannot be found/accessed
44536
f8a9922a02cb rust-status: move to recursive traversal to prepare for parallel traversal
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44535
diff changeset
48 #[derive(Debug, Copy, Clone)]
44526
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
49 pub enum BadMatch {
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
50 OsError(i32),
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
51 BadType(BadType),
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
52 }
61709b844420 rust-status: add missing variants to `Dispatch` enum
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44525
diff changeset
53
47113
be579775c2d9 dirstate-tree: Add the new `status()` algorithm
Simon Sapin <simon.sapin@octobus.net>
parents: 47112
diff changeset
54 /// `Box<dyn Trait>` is syntactic sugar for `Box<dyn Trait + 'static>`, so add
44597
e62052d0f377 rust-status: only involve ignore mechanism when needed
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44562
diff changeset
55 /// an explicit lifetime here to not fight `'static` bounds "out of nowhere".
47112
d5956136d19d dirstate-tree: Give to `status()` mutable access to the `DirstateMap`
Simon Sapin <simon.sapin@octobus.net>
parents: 47111
diff changeset
56 pub type IgnoreFnType<'a> =
d5956136d19d dirstate-tree: Give to `status()` mutable access to the `DirstateMap`
Simon Sapin <simon.sapin@octobus.net>
parents: 47111
diff changeset
57 Box<dyn for<'r> Fn(&'r HgPath) -> bool + Sync + 'a>;
43915
8c77826116f7 rust-dirstate-status: add `walk_explicit` implementation, use `Matcher` trait
Rapha?l Gom?s <rgomes@octobus.net>
parents: 43818
diff changeset
58
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
59 /// We have a good mix of owned (from directory traversal) and borrowed (from
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
60 /// the dirstate/explicit) paths, this comes up a lot.
45113
98817e5daca7 hg-core: define a `dirstate_status` `Operation`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45112
diff changeset
61 pub type HgPathCow<'a> = Cow<'a, HgPath>;
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
62
44524
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
63 #[derive(Debug, Copy, Clone)]
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
64 pub struct StatusOptions {
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
65 /// Remember the most recent modification timeslot for status, to make
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
66 /// sure we won't miss future size-preserving file content modifications
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
67 /// that happen within the same timeslot.
48260
269ff8978086 dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net>
parents: 48068
diff changeset
68 pub last_normal_time: TruncatedTimestamp,
44524
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
69 /// Whether we are on a filesystem with UNIX-like exec flags
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
70 pub check_exec: bool,
483fce658e43 rust-status: refactor options into a `StatusOptions` struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44523
diff changeset
71 pub list_clean: bool,
44527
1debb5894b39 rust-status: add function for sequential traversal of the working directory
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44526
diff changeset
72 pub list_unknown: bool,
1debb5894b39 rust-status: add function for sequential traversal of the working directory
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44526
diff changeset
73 pub list_ignored: bool,
44838
c802ec4f7196 rust-status: collect traversed directories if required
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44837
diff changeset
74 /// Whether to collect traversed dirs for applying a callback later.
c802ec4f7196 rust-status: collect traversed directories if required
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44837
diff changeset
75 /// Used by `hg purge` for example.
c802ec4f7196 rust-status: collect traversed directories if required
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44837
diff changeset
76 pub collect_traversed_dirs: bool,
44527
1debb5894b39 rust-status: add function for sequential traversal of the working directory
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44526
diff changeset
77 }
1debb5894b39 rust-status: add function for sequential traversal of the working directory
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44526
diff changeset
78
47113
be579775c2d9 dirstate-tree: Add the new `status()` algorithm
Simon Sapin <simon.sapin@octobus.net>
parents: 47112
diff changeset
79 #[derive(Debug, Default)]
44525
f13d19549efd rust-status: rename `StatusResult` to `DirstateStatus`
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44524
diff changeset
80 pub struct DirstateStatus<'a> {
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
81 /// Tracked files whose contents have changed since the parent revision
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
82 pub modified: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
83
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
84 /// Newly-tracked files that were not present in the parent
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
85 pub added: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
86
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
87 /// Previously-tracked files that have been (re)moved with an hg command
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
88 pub removed: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
89
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
90 /// (Still) tracked files that are missing, (re)moved with an non-hg
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
91 /// command
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
92 pub deleted: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
93
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
94 /// Tracked files that are up to date with the parent.
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
95 /// Only pupulated if `StatusOptions::list_clean` is true.
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
96 pub clean: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
97
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
98 /// Files in the working directory that are ignored with `.hgignore`.
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
99 /// Only pupulated if `StatusOptions::list_ignored` is true.
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
100 pub ignored: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
101
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
102 /// Files in the working directory that are neither tracked nor ignored.
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
103 /// Only pupulated if `StatusOptions::list_unknown` is true.
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
104 pub unknown: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
105
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
106 /// Was explicitly matched but cannot be found/accessed
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
107 pub bad: Vec<(HgPathCow<'a>, BadMatch)>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
108
47110
9c6b458a08e1 rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
109 /// Either clean or modified, but we can’t tell from filesystem metadata
9c6b458a08e1 rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
110 /// alone. The file contents need to be read and compared with that in
9c6b458a08e1 rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
111 /// the parent.
9c6b458a08e1 rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents: 47093
diff changeset
112 pub unsure: Vec<HgPathCow<'a>>,
47111
623c8e4ddc6d rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents: 47110
diff changeset
113
44838
c802ec4f7196 rust-status: collect traversed directories if required
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44837
diff changeset
114 /// Only filled if `collect_traversed_dirs` is `true`
47347
73ddcedeaadf dirstate-tree: Change status() results to not borrow DirstateMap
Simon Sapin <simon.sapin@octobus.net>
parents: 47335
diff changeset
115 pub traversed: Vec<HgPathCow<'a>>,
47350
04d1f17f49e7 dirstate-v2: Write .hg/dirstate back to disk on directory cache changes
Simon Sapin <simon.sapin@octobus.net>
parents: 47347
diff changeset
116
04d1f17f49e7 dirstate-v2: Write .hg/dirstate back to disk on directory cache changes
Simon Sapin <simon.sapin@octobus.net>
parents: 47347
diff changeset
117 /// Whether `status()` made changed to the `DirstateMap` that should be
04d1f17f49e7 dirstate-v2: Write .hg/dirstate back to disk on directory cache changes
Simon Sapin <simon.sapin@octobus.net>
parents: 47347
diff changeset
118 /// written back to disk
04d1f17f49e7 dirstate-v2: Write .hg/dirstate back to disk on directory cache changes
Simon Sapin <simon.sapin@octobus.net>
parents: 47347
diff changeset
119 pub dirty: bool,
43271
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
120 }
99394e6c5d12 rust-dirstate-status: add first Rust implementation of `dirstate.status`
Rapha?l Gom?s <rgomes@octobus.net>
parents:
diff changeset
121
46435
2e2033081274 rust: replace trivial `impl From ?` with `#[derive(derive_more::From)]`
Simon Sapin <simon.sapin@octobus.net>
parents: 46054
diff changeset
122 #[derive(Debug, derive_more::From)]
45111
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
123 pub enum StatusError {
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
124 /// Generic IO error
45111
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
125 IO(std::io::Error),
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
126 /// An invalid path that cannot be represented in Mercurial was found
45111
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
127 Path(HgPathError),
45112
470d306e616c rust-status: improve documentation and readability
Rapha?l Gom?s <rgomes@octobus.net>
parents: 45111
diff changeset
128 /// An invalid "ignore" pattern was found
45111
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
129 Pattern(PatternError),
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47329
diff changeset
130 /// Corrupted dirstate
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47329
diff changeset
131 DirstateV2ParseError(DirstateV2ParseError),
45111
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
132 }
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
133
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
134 pub type StatusResult<T> = Result<T, StatusError>;
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
135
46444
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
136 impl fmt::Display for StatusError {
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
137 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
45111
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
138 match self {
46444
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
139 StatusError::IO(error) => error.fmt(f),
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
140 StatusError::Path(error) => error.fmt(f),
6c778d20c8c2 rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
141 StatusError::Pattern(error) => error.fmt(f),
47335
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47329
diff changeset
142 StatusError::DirstateV2ParseError(_) => {
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47329
diff changeset
143 f.write_str("dirstate-v2 parse error")
ed1583a845d2 dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents: 47329
diff changeset
144 }
45111
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
145 }
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
146 }
7528699c6ccb rust-status: refactor status into a struct
Rapha?l Gom?s <rgomes@octobus.net>
parents: 44973
diff changeset
147 }