rust/rhg/src/error.rs
author Raphaël Gomès <rgomes@octobus.net>
Mon, 25 Jul 2022 15:39:04 +0200
changeset 49488 7c93e38a0bbd
parent 49487 9f14126cfc4c
child 49539 8076298b795a
permissions -rw-r--r--
rhg-status: add support for narrow clones
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46436
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
     1
use crate::ui::utf8_to_local;
45049
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
     2
use crate::ui::UiError;
46593
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
     3
use crate::NoRepoInCwdError;
46446
1dcd9c9975ed rust: Fold find_root and check_requirements into Repo::find
Simon Sapin <simon.sapin@octobus.net>
parents: 46445
diff changeset
     4
use format_bytes::format_bytes;
46797
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
     5
use hg::config::{ConfigError, ConfigParseError, ConfigValueParseError};
47674
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47408
diff changeset
     6
use hg::dirstate_tree::on_disk::DirstateV2ParseError;
46446
1dcd9c9975ed rust: Fold find_root and check_requirements into Repo::find
Simon Sapin <simon.sapin@octobus.net>
parents: 46445
diff changeset
     7
use hg::errors::HgError;
47407
6e49769b7f97 rhg: add exit code to HgError::Abort()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46821
diff changeset
     8
use hg::exit_codes;
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
     9
use hg::repo::RepoError;
46437
b274aa2f20fd rust: remove three enums that were identical to `RevlogError`
Simon Sapin <simon.sapin@octobus.net>
parents: 46436
diff changeset
    10
use hg::revlog::revlog::RevlogError;
49485
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    11
use hg::sparse::SparseConfigError;
46446
1dcd9c9975ed rust: Fold find_root and check_requirements into Repo::find
Simon Sapin <simon.sapin@octobus.net>
parents: 46445
diff changeset
    12
use hg::utils::files::get_bytes_from_path;
46797
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
    13
use hg::{DirstateError, DirstateMapError, StatusError};
45049
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
    14
use std::convert::From;
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
    15
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
    16
/// The kind of command error
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    17
#[derive(Debug)]
46434
3e2d539d0d1a rust: remove `FooError` structs with only `kind: FooErrorKind` enum field
Simon Sapin <simon.sapin@octobus.net>
parents: 45984
diff changeset
    18
pub enum CommandError {
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    19
    /// Exit with an error message and "standard" failure exit code.
46820
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    20
    Abort {
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    21
        message: Vec<u8>,
47407
6e49769b7f97 rhg: add exit code to HgError::Abort()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46821
diff changeset
    22
        detailed_exit_code: exit_codes::ExitCode,
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    23
        hint: Option<Vec<u8>>,
46820
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    24
    },
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    25
46744
b1f2c2b336ec rhg: `cat` command: print error messages for missing files
Simon Sapin <simon.sapin@octobus.net>
parents: 46735
diff changeset
    26
    /// Exit with a failure exit code but no message.
b1f2c2b336ec rhg: `cat` command: print error messages for missing files
Simon Sapin <simon.sapin@octobus.net>
parents: 46735
diff changeset
    27
    Unsuccessful,
b1f2c2b336ec rhg: `cat` command: print error messages for missing files
Simon Sapin <simon.sapin@octobus.net>
parents: 46735
diff changeset
    28
46666
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    29
    /// Encountered something (such as a CLI argument, repository layout, …)
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    30
    /// not supported by this version of `rhg`. Depending on configuration
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    31
    /// `rhg` may attempt to silently fall back to Python-based `hg`, which
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    32
    /// may or may not support this feature.
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    33
    UnsupportedFeature { message: Vec<u8> },
49149
006688e36e12 rhg: use `Command::exec` instead of `Command::status`
Raphaël Gomès <rgomes@octobus.net>
parents: 47674
diff changeset
    34
    /// The fallback executable does not exist (or has some other problem if
006688e36e12 rhg: use `Command::exec` instead of `Command::status`
Raphaël Gomès <rgomes@octobus.net>
parents: 47674
diff changeset
    35
    /// we end up being more precise about broken fallbacks).
006688e36e12 rhg: use `Command::exec` instead of `Command::status`
Raphaël Gomès <rgomes@octobus.net>
parents: 47674
diff changeset
    36
    InvalidFallback { path: Vec<u8>, err: String },
45049
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
    37
}
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
    38
46434
3e2d539d0d1a rust: remove `FooError` structs with only `kind: FooErrorKind` enum field
Simon Sapin <simon.sapin@octobus.net>
parents: 45984
diff changeset
    39
impl CommandError {
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    40
    pub fn abort(message: impl AsRef<str>) -> Self {
47407
6e49769b7f97 rhg: add exit code to HgError::Abort()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46821
diff changeset
    41
        CommandError::abort_with_exit_code(message, exit_codes::ABORT)
46820
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    42
    }
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    43
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    44
    pub fn abort_with_exit_code(
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    45
        message: impl AsRef<str>,
47407
6e49769b7f97 rhg: add exit code to HgError::Abort()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46821
diff changeset
    46
        detailed_exit_code: exit_codes::ExitCode,
46820
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    47
    ) -> Self {
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    48
        CommandError::Abort {
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    49
            // TODO: bytes-based (instead of Unicode-based) formatting
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    50
            // of error messages to handle non-UTF-8 filenames etc:
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    51
            // https://www.mercurial-scm.org/wiki/EncodingStrategy#Mixing_output
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    52
            message: utf8_to_local(message.as_ref()).into(),
46820
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
    53
            detailed_exit_code: detailed_exit_code,
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    54
            hint: None,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    55
        }
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    56
    }
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    57
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    58
    pub fn abort_with_exit_code_and_hint(
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    59
        message: impl AsRef<str>,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    60
        detailed_exit_code: exit_codes::ExitCode,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    61
        hint: Option<impl AsRef<str>>,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    62
    ) -> Self {
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    63
        CommandError::Abort {
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    64
            message: utf8_to_local(message.as_ref()).into(),
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    65
            detailed_exit_code,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    66
            hint: hint.map(|h| utf8_to_local(h.as_ref()).into()),
45049
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
    67
        }
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
    68
    }
46666
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    69
49485
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    70
    pub fn abort_with_exit_code_bytes(
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    71
        message: impl AsRef<[u8]>,
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    72
        detailed_exit_code: exit_codes::ExitCode,
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    73
    ) -> Self {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    74
        // TODO: use this everywhere it makes sense instead of the string
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    75
        // version.
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    76
        CommandError::Abort {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    77
            message: message.as_ref().into(),
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    78
            detailed_exit_code,
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
    79
            hint: None,
49485
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    80
        }
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    81
    }
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
    82
46666
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    83
    pub fn unsupported(message: impl AsRef<str>) -> Self {
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    84
        CommandError::UnsupportedFeature {
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    85
            message: utf8_to_local(message.as_ref()).into(),
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    86
        }
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    87
    }
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    88
}
45361
47997afadf08 rhg: ask the error message from `CommandError`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 45360
diff changeset
    89
46591
21d3b40b4c0e rhg: Remove error message on unsupported CLI arguments
Simon Sapin <simon.sapin@octobus.net>
parents: 46503
diff changeset
    90
/// For now we don’t differenciate between invalid CLI args and valid for `hg`
21d3b40b4c0e rhg: Remove error message on unsupported CLI arguments
Simon Sapin <simon.sapin@octobus.net>
parents: 46503
diff changeset
    91
/// but not supported yet by `rhg`.
21d3b40b4c0e rhg: Remove error message on unsupported CLI arguments
Simon Sapin <simon.sapin@octobus.net>
parents: 46503
diff changeset
    92
impl From<clap::Error> for CommandError {
46666
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    93
    fn from(error: clap::Error) -> Self {
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
    94
        CommandError::unsupported(error.to_string())
46591
21d3b40b4c0e rhg: Remove error message on unsupported CLI arguments
Simon Sapin <simon.sapin@octobus.net>
parents: 46503
diff changeset
    95
    }
21d3b40b4c0e rhg: Remove error message on unsupported CLI arguments
Simon Sapin <simon.sapin@octobus.net>
parents: 46503
diff changeset
    96
}
21d3b40b4c0e rhg: Remove error message on unsupported CLI arguments
Simon Sapin <simon.sapin@octobus.net>
parents: 46503
diff changeset
    97
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    98
impl From<HgError> for CommandError {
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
    99
    fn from(error: HgError) -> Self {
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   100
        match error {
46666
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
   101
            HgError::UnsupportedFeature(message) => {
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
   102
                CommandError::unsupported(message)
33f2d56acc73 rhg: Add a `rhg.on-unsupported` configuration key
Simon Sapin <simon.sapin@octobus.net>
parents: 46593
diff changeset
   103
            }
49174
3f86ee422095 censor: make rhg fall back to python when encountering a censored node
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49149
diff changeset
   104
            HgError::CensoredNodeError => {
3f86ee422095 censor: make rhg fall back to python when encountering a censored node
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49149
diff changeset
   105
                CommandError::unsupported("Encountered a censored node")
3f86ee422095 censor: make rhg fall back to python when encountering a censored node
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 49149
diff changeset
   106
            }
47408
7954ee2d7cf7 rhg: propogate error coming from HgError::Abort to CommandError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 47407
diff changeset
   107
            HgError::Abort {
7954ee2d7cf7 rhg: propogate error coming from HgError::Abort to CommandError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 47407
diff changeset
   108
                message,
7954ee2d7cf7 rhg: propogate error coming from HgError::Abort to CommandError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 47407
diff changeset
   109
                detailed_exit_code,
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   110
                hint,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   111
            } => CommandError::abort_with_exit_code_and_hint(
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   112
                message,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   113
                detailed_exit_code,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   114
                hint,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   115
            ),
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   116
            _ => CommandError::abort(error.to_string()),
45361
47997afadf08 rhg: ask the error message from `CommandError`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 45360
diff changeset
   117
        }
47997afadf08 rhg: ask the error message from `CommandError`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 45360
diff changeset
   118
    }
45049
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
   119
}
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
   120
46797
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   121
impl From<ConfigValueParseError> for CommandError {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   122
    fn from(error: ConfigValueParseError) -> Self {
46820
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
   123
        CommandError::abort_with_exit_code(
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
   124
            error.to_string(),
47407
6e49769b7f97 rhg: add exit code to HgError::Abort()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46821
diff changeset
   125
            exit_codes::CONFIG_ERROR_ABORT,
46820
821929d59e01 rhg: add support for detailed exit code for ConfigParseError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46797
diff changeset
   126
        )
46797
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   127
    }
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   128
}
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   129
45049
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
   130
impl From<UiError> for CommandError {
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   131
    fn from(_error: UiError) -> Self {
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   132
        // If we already failed writing to stdout or stderr,
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   133
        // writing an error message to stderr about it would be likely to fail
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   134
        // too.
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   135
        CommandError::abort("")
45049
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
   136
    }
513b3ef277a3 rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`
Antoine Cezar <antoine.cezar@octobus.net>
parents: 44982
diff changeset
   137
}
45363
5dbf875b3275 rhg: simplify `FindRootError` handling
Antoine Cezar <antoine.cezar@octobus.net>
parents: 45361
diff changeset
   138
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   139
impl From<RepoError> for CommandError {
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   140
    fn from(error: RepoError) -> Self {
46446
1dcd9c9975ed rust: Fold find_root and check_requirements into Repo::find
Simon Sapin <simon.sapin@octobus.net>
parents: 46445
diff changeset
   141
        match error {
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   142
            RepoError::NotFound { at } => {
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   143
                CommandError::abort_with_exit_code_bytes(
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   144
                    format_bytes!(
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   145
                        b"abort: repository {} not found",
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   146
                        get_bytes_from_path(at)
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   147
                    ),
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   148
                    exit_codes::ABORT,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   149
                )
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   150
            }
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   151
            RepoError::ConfigParseError(error) => error.into(),
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   152
            RepoError::Other(error) => error.into(),
45363
5dbf875b3275 rhg: simplify `FindRootError` handling
Antoine Cezar <antoine.cezar@octobus.net>
parents: 45361
diff changeset
   153
        }
5dbf875b3275 rhg: simplify `FindRootError` handling
Antoine Cezar <antoine.cezar@octobus.net>
parents: 45361
diff changeset
   154
    }
5dbf875b3275 rhg: simplify `FindRootError` handling
Antoine Cezar <antoine.cezar@octobus.net>
parents: 45361
diff changeset
   155
}
46436
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
   156
46593
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   157
impl<'a> From<&'a NoRepoInCwdError> for CommandError {
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   158
    fn from(error: &'a NoRepoInCwdError) -> Self {
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   159
        let NoRepoInCwdError { cwd } = error;
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   160
        CommandError::abort_with_exit_code_bytes(
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   161
            format_bytes!(
46731
3d692e724d06 rhg: Align config file parse error formatting with Python
Simon Sapin <simon.sapin@octobus.net>
parents: 46666
diff changeset
   162
                b"abort: no repository found in '{}' (.hg not found)!",
46593
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   163
                get_bytes_from_path(cwd)
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   164
            ),
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   165
            exit_codes::ABORT,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   166
        )
46593
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   167
    }
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   168
}
5ce2aa7c2ad5 rhg: Move `Repo` object creation into `main()`
Simon Sapin <simon.sapin@octobus.net>
parents: 46591
diff changeset
   169
46484
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   170
impl From<ConfigError> for CommandError {
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   171
    fn from(error: ConfigError) -> Self {
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   172
        match error {
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   173
            ConfigError::Parse(error) => error.into(),
46484
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   174
            ConfigError::Other(error) => error.into(),
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   175
        }
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   176
    }
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   177
}
a6e4e4650bac rhg: Parse system and user configuration at program start
Simon Sapin <simon.sapin@octobus.net>
parents: 46446
diff changeset
   178
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   179
impl From<ConfigParseError> for CommandError {
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   180
    fn from(error: ConfigParseError) -> Self {
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   181
        let ConfigParseError {
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   182
            origin,
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   183
            line,
46731
3d692e724d06 rhg: Align config file parse error formatting with Python
Simon Sapin <simon.sapin@octobus.net>
parents: 46666
diff changeset
   184
            message,
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   185
        } = error;
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   186
        let line_message = if let Some(line_number) = line {
46731
3d692e724d06 rhg: Align config file parse error formatting with Python
Simon Sapin <simon.sapin@octobus.net>
parents: 46666
diff changeset
   187
            format_bytes!(b":{}", line_number.to_string().into_bytes())
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   188
        } else {
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   189
            Vec::new()
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   190
        };
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   191
        CommandError::abort_with_exit_code_bytes(
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   192
            format_bytes!(
46731
3d692e724d06 rhg: Align config file parse error formatting with Python
Simon Sapin <simon.sapin@octobus.net>
parents: 46666
diff changeset
   193
                b"config error at {}{}: {}",
46499
eace48b4a786 rust: Use the DisplayBytes trait in config printing
Simon Sapin <simon.sapin@octobus.net>
parents: 46486
diff changeset
   194
                origin,
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   195
                line_message,
46731
3d692e724d06 rhg: Align config file parse error formatting with Python
Simon Sapin <simon.sapin@octobus.net>
parents: 46666
diff changeset
   196
                message
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   197
            ),
49487
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   198
            exit_codes::CONFIG_ERROR_ABORT,
9f14126cfc4c rust: add support for hints in error messages
Raphaël Gomès <rgomes@octobus.net>
parents: 49485
diff changeset
   199
        )
46486
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   200
    }
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   201
}
d7685105e504 rhg: Parse per-repository configuration
Simon Sapin <simon.sapin@octobus.net>
parents: 46484
diff changeset
   202
46437
b274aa2f20fd rust: remove three enums that were identical to `RevlogError`
Simon Sapin <simon.sapin@octobus.net>
parents: 46436
diff changeset
   203
impl From<(RevlogError, &str)> for CommandError {
b274aa2f20fd rust: remove three enums that were identical to `RevlogError`
Simon Sapin <simon.sapin@octobus.net>
parents: 46436
diff changeset
   204
    fn from((err, rev): (RevlogError, &str)) -> CommandError {
46436
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
   205
        match err {
46821
e8ae91b1a63d rhg: raise wdir specific error for `hg debugdata`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46820
diff changeset
   206
            RevlogError::WDirUnsupported => CommandError::abort(
e8ae91b1a63d rhg: raise wdir specific error for `hg debugdata`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46820
diff changeset
   207
                "abort: working directory revision cannot be specified",
e8ae91b1a63d rhg: raise wdir specific error for `hg debugdata`
Pulkit Goyal <7895pulkit@gmail.com>
parents: 46820
diff changeset
   208
            ),
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   209
            RevlogError::InvalidRevision => CommandError::abort(format!(
46731
3d692e724d06 rhg: Align config file parse error formatting with Python
Simon Sapin <simon.sapin@octobus.net>
parents: 46666
diff changeset
   210
                "abort: invalid revision identifier: {}",
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   211
                rev
46436
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
   212
            )),
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   213
            RevlogError::AmbiguousPrefix => CommandError::abort(format!(
46731
3d692e724d06 rhg: Align config file parse error formatting with Python
Simon Sapin <simon.sapin@octobus.net>
parents: 46666
diff changeset
   214
                "abort: ambiguous revision identifier: {}",
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   215
                rev
46436
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
   216
            )),
46445
ca3f73cc3cf4 rhg: Simplify CommandError based on its use
Simon Sapin <simon.sapin@octobus.net>
parents: 46443
diff changeset
   217
            RevlogError::Other(error) => error.into(),
46436
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
   218
        }
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
   219
    }
252d1bdba33d rhg: replace `map_*_error` functions with `From` impls
Simon Sapin <simon.sapin@octobus.net>
parents: 46435
diff changeset
   220
}
46797
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   221
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   222
impl From<StatusError> for CommandError {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   223
    fn from(error: StatusError) -> Self {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   224
        CommandError::abort(format!("{}", error))
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   225
    }
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   226
}
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   227
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   228
impl From<DirstateMapError> for CommandError {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   229
    fn from(error: DirstateMapError) -> Self {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   230
        CommandError::abort(format!("{}", error))
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   231
    }
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   232
}
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   233
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   234
impl From<DirstateError> for CommandError {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   235
    fn from(error: DirstateError) -> Self {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   236
        match error {
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   237
            DirstateError::Common(error) => error.into(),
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   238
            DirstateError::Map(error) => error.into(),
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   239
        }
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   240
    }
bcdcb4423ae3 rhg: Add more conversions between error types
Simon Sapin <simon.sapin@octobus.net>
parents: 46744
diff changeset
   241
}
47674
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47408
diff changeset
   242
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47408
diff changeset
   243
impl From<DirstateV2ParseError> for CommandError {
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47408
diff changeset
   244
    fn from(error: DirstateV2ParseError) -> Self {
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47408
diff changeset
   245
        HgError::from(error).into()
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47408
diff changeset
   246
    }
ff97e793ed36 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net>
parents: 47408
diff changeset
   247
}
49485
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   248
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   249
impl From<SparseConfigError> for CommandError {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   250
    fn from(e: SparseConfigError) -> Self {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   251
        match e {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   252
            SparseConfigError::IncludesAfterExcludes { context } => {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   253
                Self::abort_with_exit_code_bytes(
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   254
                    format_bytes!(
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   255
                        b"{} config cannot have includes after excludes",
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   256
                        context
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   257
                    ),
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   258
                    exit_codes::CONFIG_PARSE_ERROR_ABORT,
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   259
                )
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   260
            }
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   261
            SparseConfigError::EntryOutsideSection { context, line } => {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   262
                Self::abort_with_exit_code_bytes(
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   263
                    format_bytes!(
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   264
                        b"{} config entry outside of section: {}",
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   265
                        context,
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   266
                        &line,
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   267
                    ),
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   268
                    exit_codes::CONFIG_PARSE_ERROR_ABORT,
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   269
                )
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   270
            }
49488
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   271
            SparseConfigError::InvalidNarrowPrefix(prefix) => {
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   272
                Self::abort_with_exit_code_bytes(
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   273
                    format_bytes!(
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   274
                        b"invalid prefix on narrow pattern: {}",
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   275
                        &prefix
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   276
                    ),
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   277
                    exit_codes::ABORT,
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   278
                )
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   279
            }
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   280
            SparseConfigError::IncludesInNarrow => Self::abort(
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   281
                "including other spec files using '%include' \
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   282
                    is not supported in narrowspec",
7c93e38a0bbd rhg-status: add support for narrow clones
Raphaël Gomès <rgomes@octobus.net>
parents: 49487
diff changeset
   283
            ),
49485
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   284
            SparseConfigError::HgError(e) => Self::from(e),
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   285
            SparseConfigError::PatternError(e) => {
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   286
                Self::unsupported(format!("{}", e))
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   287
            }
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   288
        }
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   289
    }
ffd4b1f1c9cb rhg: add sparse support
Raphaël Gomès <rgomes@octobus.net>
parents: 49174
diff changeset
   290
}