Mercurial > public > mercurial-scm > hg
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 |
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 } |