author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Tue, 24 May 2022 09:36:40 +0200 | |
branch | stable |
changeset 48873 | c95e5ba4de1e |
parent 48825 | dd6b67d5c256 |
child 50886 | 5efccea9cf38 |
permissions | -rw-r--r-- |
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 |
|
48538
4afb9627dc77
dirstate-v2: Apply SECOND_AMBIGUOUS to directory mtimes too
Simon Sapin <simon.sapin@octobus.net>
parents:
48493
diff
changeset
|
12 |
use crate::dirstate::entry::TruncatedTimestamp; |
47343
ed1583a845d2
dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents:
47337
diff
changeset
|
13 |
use crate::dirstate_tree::on_disk::DirstateV2ParseError; |
43649
8210c3f46912
rust: introduce SIZE_FROM_OTHER_PARENT constant
Raphaël Gomès <rgomes@octobus.net>
parents:
43648
diff
changeset
|
14 |
use crate::{ |
48083
bf8837e3d7ce
dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents:
48048
diff
changeset
|
15 |
utils::hg_path::{HgPath, HgPathError}, |
44538
c8891bca40fb
rust-status: add bare `hg status` support in hg-core
Raphaël Gomès <rgomes@octobus.net>
parents:
44537
diff
changeset
|
16 |
PatternError, |
43649
8210c3f46912
rust: introduce SIZE_FROM_OTHER_PARENT constant
Raphaël Gomès <rgomes@octobus.net>
parents:
43648
diff
changeset
|
17 |
}; |
48083
bf8837e3d7ce
dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents:
48048
diff
changeset
|
18 |
|
bf8837e3d7ce
dirstate: Remove the flat Rust DirstateMap implementation
Simon Sapin <simon.sapin@octobus.net>
parents:
48048
diff
changeset
|
19 |
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
|
20 |
|
44536
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
21 |
/// Wrong type of file from a `BadMatch` |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
22 |
/// Note: a lot of those don't exist on all platforms. |
44546
f8a9922a02cb
rust-status: move to recursive traversal to prepare for parallel traversal
Raphaël Gomès <rgomes@octobus.net>
parents:
44545
diff
changeset
|
23 |
#[derive(Debug, Copy, Clone)] |
44536
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
24 |
pub enum BadType { |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
25 |
CharacterDevice, |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
26 |
BlockDevice, |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
27 |
FIFO, |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
28 |
Socket, |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
29 |
Directory, |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
30 |
Unknown, |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
31 |
} |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
32 |
|
46512
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
33 |
impl fmt::Display for BadType { |
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
34 |
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { |
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
35 |
f.write_str(match self { |
44539
f96b28aa4b79
rust-status: update rust-cpython bridge to account for the changes in core
Raphaël Gomès <rgomes@octobus.net>
parents:
44538
diff
changeset
|
36 |
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:
44538
diff
changeset
|
37 |
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:
44538
diff
changeset
|
38 |
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:
44538
diff
changeset
|
39 |
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:
44538
diff
changeset
|
40 |
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:
44538
diff
changeset
|
41 |
BadType::Unknown => "unknown", |
46512
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
42 |
}) |
44539
f96b28aa4b79
rust-status: update rust-cpython bridge to account for the changes in core
Raphaël Gomès <rgomes@octobus.net>
parents:
44538
diff
changeset
|
43 |
} |
f96b28aa4b79
rust-status: update rust-cpython bridge to account for the changes in core
Raphaël Gomès <rgomes@octobus.net>
parents:
44538
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:
44538
diff
changeset
|
45 |
|
44536
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
46 |
/// Was explicitly matched but cannot be found/accessed |
44546
f8a9922a02cb
rust-status: move to recursive traversal to prepare for parallel traversal
Raphaël Gomès <rgomes@octobus.net>
parents:
44545
diff
changeset
|
47 |
#[derive(Debug, Copy, Clone)] |
44536
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
48 |
pub enum BadMatch { |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
49 |
OsError(i32), |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
50 |
BadType(BadType), |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
51 |
} |
61709b844420
rust-status: add missing variants to `Dispatch` enum
Raphaël Gomès <rgomes@octobus.net>
parents:
44535
diff
changeset
|
52 |
|
47127
be579775c2d9
dirstate-tree: Add the new `status()` algorithm
Simon Sapin <simon.sapin@octobus.net>
parents:
47126
diff
changeset
|
53 |
/// `Box<dyn Trait>` is syntactic sugar for `Box<dyn Trait + 'static>`, so add |
44604
e62052d0f377
rust-status: only involve ignore mechanism when needed
Raphaël Gomès <rgomes@octobus.net>
parents:
44571
diff
changeset
|
54 |
/// an explicit lifetime here to not fight `'static` bounds "out of nowhere". |
47126
d5956136d19d
dirstate-tree: Give to `status()` mutable access to the `DirstateMap`
Simon Sapin <simon.sapin@octobus.net>
parents:
47125
diff
changeset
|
55 |
pub type IgnoreFnType<'a> = |
d5956136d19d
dirstate-tree: Give to `status()` mutable access to the `DirstateMap`
Simon Sapin <simon.sapin@octobus.net>
parents:
47125
diff
changeset
|
56 |
Box<dyn for<'r> Fn(&'r HgPath) -> bool + Sync + 'a>; |
43921
8c77826116f7
rust-dirstate-status: add `walk_explicit` implementation, use `Matcher` trait
Raphaël Gomès <rgomes@octobus.net>
parents:
43836
diff
changeset
|
57 |
|
45112
470d306e616c
rust-status: improve documentation and readability
Raphaël Gomès <rgomes@octobus.net>
parents:
45111
diff
changeset
|
58 |
/// 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
|
59 |
/// 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
|
60 |
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
|
61 |
|
44534
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44533
diff
changeset
|
62 |
#[derive(Debug, Copy, Clone)] |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44533
diff
changeset
|
63 |
pub struct StatusOptions { |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44533
diff
changeset
|
64 |
/// 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:
44533
diff
changeset
|
65 |
pub check_exec: bool, |
483fce658e43
rust-status: refactor options into a `StatusOptions` struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44533
diff
changeset
|
66 |
pub list_clean: bool, |
44537
1debb5894b39
rust-status: add function for sequential traversal of the working directory
Raphaël Gomès <rgomes@octobus.net>
parents:
44536
diff
changeset
|
67 |
pub list_unknown: bool, |
1debb5894b39
rust-status: add function for sequential traversal of the working directory
Raphaël Gomès <rgomes@octobus.net>
parents:
44536
diff
changeset
|
68 |
pub list_ignored: bool, |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
69 |
/// Whether to populate `StatusPath::copy_source` |
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
70 |
pub list_copies: bool, |
44897
c802ec4f7196
rust-status: collect traversed directories if required
Raphaël Gomès <rgomes@octobus.net>
parents:
44896
diff
changeset
|
71 |
/// 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:
44896
diff
changeset
|
72 |
/// Used by `hg purge` for example. |
c802ec4f7196
rust-status: collect traversed directories if required
Raphaël Gomès <rgomes@octobus.net>
parents:
44896
diff
changeset
|
73 |
pub collect_traversed_dirs: bool, |
44537
1debb5894b39
rust-status: add function for sequential traversal of the working directory
Raphaël Gomès <rgomes@octobus.net>
parents:
44536
diff
changeset
|
74 |
} |
1debb5894b39
rust-status: add function for sequential traversal of the working directory
Raphaël Gomès <rgomes@octobus.net>
parents:
44536
diff
changeset
|
75 |
|
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
76 |
#[derive(Default)] |
44535
f13d19549efd
rust-status: rename `StatusResult` to `DirstateStatus`
Raphaël Gomès <rgomes@octobus.net>
parents:
44534
diff
changeset
|
77 |
pub struct DirstateStatus<'a> { |
48468
000130cfafb6
rhg: Update the dirstate on disk after status
Simon Sapin <simon.sapin@octobus.net>
parents:
48439
diff
changeset
|
78 |
/// The current time at the start of the `status()` algorithm, as measured |
000130cfafb6
rhg: Update the dirstate on disk after status
Simon Sapin <simon.sapin@octobus.net>
parents:
48439
diff
changeset
|
79 |
/// and possibly truncated by the filesystem. |
48538
4afb9627dc77
dirstate-v2: Apply SECOND_AMBIGUOUS to directory mtimes too
Simon Sapin <simon.sapin@octobus.net>
parents:
48493
diff
changeset
|
80 |
pub filesystem_time_at_status_start: Option<TruncatedTimestamp>, |
48468
000130cfafb6
rhg: Update the dirstate on disk after status
Simon Sapin <simon.sapin@octobus.net>
parents:
48439
diff
changeset
|
81 |
|
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
82 |
/// Tracked files whose contents have changed since the parent revision |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
83 |
pub modified: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
84 |
|
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
85 |
/// Newly-tracked files that were not present in the parent |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
86 |
pub added: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
87 |
|
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
88 |
/// Previously-tracked files that have been (re)moved with an hg command |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
89 |
pub removed: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
90 |
|
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
91 |
/// (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:
47124
diff
changeset
|
92 |
/// command |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
93 |
pub deleted: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
94 |
|
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
95 |
/// 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:
47124
diff
changeset
|
96 |
/// Only pupulated if `StatusOptions::list_clean` is true. |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
97 |
pub clean: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
98 |
|
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
99 |
/// 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:
47124
diff
changeset
|
100 |
/// Only pupulated if `StatusOptions::list_ignored` is true. |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
101 |
pub ignored: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
102 |
|
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
103 |
/// 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:
47124
diff
changeset
|
104 |
/// Only pupulated if `StatusOptions::list_unknown` is true. |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
105 |
pub unknown: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
106 |
|
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
107 |
/// 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
|
108 |
pub bad: Vec<(HgPathCow<'a>, BadMatch)>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
109 |
|
47124
9c6b458a08e1
rust: Move "lookup" a.k.a. "unsure" paths into `DirstateStatus` struct
Simon Sapin <simon.sapin@octobus.net>
parents:
47107
diff
changeset
|
110 |
/// 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:
47107
diff
changeset
|
111 |
/// 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:
47107
diff
changeset
|
112 |
/// the parent. |
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
113 |
pub unsure: Vec<StatusPath<'a>>, |
47125
623c8e4ddc6d
rust: Add doc-comments to DirstateStatus fields
Simon Sapin <simon.sapin@octobus.net>
parents:
47124
diff
changeset
|
114 |
|
44897
c802ec4f7196
rust-status: collect traversed directories if required
Raphaël Gomès <rgomes@octobus.net>
parents:
44896
diff
changeset
|
115 |
/// Only filled if `collect_traversed_dirs` is `true` |
47353
73ddcedeaadf
dirstate-tree: Change status() results to not borrow DirstateMap
Simon Sapin <simon.sapin@octobus.net>
parents:
47343
diff
changeset
|
116 |
pub traversed: Vec<HgPathCow<'a>>, |
47356
04d1f17f49e7
dirstate-v2: Write .hg/dirstate back to disk on directory cache changes
Simon Sapin <simon.sapin@octobus.net>
parents:
47353
diff
changeset
|
117 |
|
04d1f17f49e7
dirstate-v2: Write .hg/dirstate back to disk on directory cache changes
Simon Sapin <simon.sapin@octobus.net>
parents:
47353
diff
changeset
|
118 |
/// 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:
47353
diff
changeset
|
119 |
/// written back to disk |
04d1f17f49e7
dirstate-v2: Write .hg/dirstate back to disk on directory cache changes
Simon Sapin <simon.sapin@octobus.net>
parents:
47353
diff
changeset
|
120 |
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
|
121 |
} |
99394e6c5d12
rust-dirstate-status: add first Rust implementation of `dirstate.status`
Raphaël Gomès <rgomes@octobus.net>
parents:
diff
changeset
|
122 |
|
48493
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
123 |
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] |
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
124 |
pub struct StatusPath<'a> { |
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
125 |
pub path: HgPathCow<'a>, |
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
126 |
pub copy_source: Option<HgPathCow<'a>>, |
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
127 |
} |
473af5cbc209
rhg: Add support for `rhg status --copies`
Simon Sapin <simon.sapin@octobus.net>
parents:
48468
diff
changeset
|
128 |
|
46503
2e2033081274
rust: replace trivial `impl From …` with `#[derive(derive_more::From)]`
Simon Sapin <simon.sapin@octobus.net>
parents:
46058
diff
changeset
|
129 |
#[derive(Debug, derive_more::From)] |
45111
7528699c6ccb
rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44998
diff
changeset
|
130 |
pub enum StatusError { |
45112
470d306e616c
rust-status: improve documentation and readability
Raphaël Gomès <rgomes@octobus.net>
parents:
45111
diff
changeset
|
131 |
/// 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:
44998
diff
changeset
|
132 |
Path(HgPathError), |
45112
470d306e616c
rust-status: improve documentation and readability
Raphaël Gomès <rgomes@octobus.net>
parents:
45111
diff
changeset
|
133 |
/// An invalid "ignore" pattern was found |
45111
7528699c6ccb
rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44998
diff
changeset
|
134 |
Pattern(PatternError), |
47343
ed1583a845d2
dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents:
47337
diff
changeset
|
135 |
/// Corrupted dirstate |
ed1583a845d2
dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents:
47337
diff
changeset
|
136 |
DirstateV2ParseError(DirstateV2ParseError), |
45111
7528699c6ccb
rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44998
diff
changeset
|
137 |
} |
7528699c6ccb
rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44998
diff
changeset
|
138 |
|
46512
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
139 |
impl fmt::Display for StatusError { |
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
140 |
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:
44998
diff
changeset
|
141 |
match self { |
46512
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
142 |
StatusError::Path(error) => error.fmt(f), |
6c778d20c8c2
rust: replace ToString impls with Display
Simon Sapin <simon.sapin@octobus.net>
parents:
46503
diff
changeset
|
143 |
StatusError::Pattern(error) => error.fmt(f), |
47343
ed1583a845d2
dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents:
47337
diff
changeset
|
144 |
StatusError::DirstateV2ParseError(_) => { |
ed1583a845d2
dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents:
47337
diff
changeset
|
145 |
f.write_str("dirstate-v2 parse error") |
ed1583a845d2
dirstate-v2: Make more APIs fallible, returning Result
Simon Sapin <simon.sapin@octobus.net>
parents:
47337
diff
changeset
|
146 |
} |
45111
7528699c6ccb
rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44998
diff
changeset
|
147 |
} |
7528699c6ccb
rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44998
diff
changeset
|
148 |
} |
7528699c6ccb
rust-status: refactor status into a struct
Raphaël Gomès <rgomes@octobus.net>
parents:
44998
diff
changeset
|
149 |
} |