Mercurial > hg
changeset 45937:2ad2745e0be9
rhg: exit with relevant code for unsupported requirements
Differential Revision: https://phab.mercurial-scm.org/D9399
author | Simon Sapin <simon-commits@exyr.org> |
---|---|
date | Tue, 24 Nov 2020 18:52:38 +0100 |
parents | 0ce15a8c7b8b |
children | f5d62f4d5327 |
files | rust/hg-core/src/requirements.rs rust/rhg/src/commands/cat.rs rust/rhg/src/commands/files.rs rust/rhg/src/error.rs tests/test-rhg.t |
diffstat | 5 files changed, 42 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/rust/hg-core/src/requirements.rs Tue Oct 06 03:25:15 2020 +0200 +++ b/rust/hg-core/src/requirements.rs Tue Nov 24 18:52:38 2020 +0100 @@ -51,3 +51,22 @@ Err(error) => Err(RequirementsError::Io(error))?, } } + +pub fn check(repo_root: &Path) -> Result<(), RequirementsError> { + for feature in load(repo_root)? { + if !SUPPORTED.contains(&&*feature) { + return Err(RequirementsError::Unsupported { feature }) + } + } + Ok(()) +} + +// TODO: set this to actually-supported features +const SUPPORTED: &[&str] = &[ + "dotencode", + "fncache", + "generaldelta", + "revlogv1", + "sparserevlog", + "store", +];
--- a/rust/rhg/src/commands/cat.rs Tue Oct 06 03:25:15 2020 +0200 +++ b/rust/rhg/src/commands/cat.rs Tue Nov 24 18:52:38 2020 +0100 @@ -4,6 +4,7 @@ use crate::ui::Ui; use hg::operations::FindRoot; use hg::operations::{CatRev, CatRevError, CatRevErrorKind}; +use hg::requirements; use hg::utils::hg_path::HgPathBuf; use micro_timer::timed; use std::convert::TryFrom; @@ -32,6 +33,7 @@ #[timed] fn run(&self, ui: &Ui) -> Result<(), CommandError> { let root = FindRoot::new().run()?; + requirements::check(&root)?; let cwd = std::env::current_dir() .or_else(|e| Err(CommandErrorKind::CurrentDirNotFound(e)))?;
--- a/rust/rhg/src/commands/files.rs Tue Oct 06 03:25:15 2020 +0200 +++ b/rust/rhg/src/commands/files.rs Tue Nov 24 18:52:38 2020 +0100 @@ -11,6 +11,7 @@ ListRevTrackedFiles, ListRevTrackedFilesError, ListRevTrackedFilesErrorKind, }; +use hg::requirements; use hg::utils::files::{get_bytes_from_path, relativize_path}; use hg::utils::hg_path::{HgPath, HgPathBuf}; use std::path::PathBuf; @@ -57,6 +58,7 @@ impl<'a> Command for FilesCommand<'a> { fn run(&self, ui: &Ui) -> Result<(), CommandError> { let root = FindRoot::new().run()?; + requirements::check(&root)?; if let Some(rev) = self.rev { let mut operation = ListRevTrackedFiles::new(&root, rev) .map_err(|e| map_rev_error(rev, e))?;
--- a/rust/rhg/src/error.rs Tue Oct 06 03:25:15 2020 +0200 +++ b/rust/rhg/src/error.rs Tue Nov 24 18:52:38 2020 +0100 @@ -30,6 +30,9 @@ match self { CommandErrorKind::RootNotFound(_) => exitcode::ABORT, CommandErrorKind::CurrentDirNotFound(_) => exitcode::ABORT, + CommandErrorKind::RequirementsError( + RequirementsError::Unsupported { .. }, + ) => exitcode::UNIMPLEMENTED_COMMAND, CommandErrorKind::RequirementsError(_) => exitcode::ABORT, CommandErrorKind::StdoutError => exitcode::ABORT, CommandErrorKind::StderrError => exitcode::ABORT,
--- a/tests/test-rhg.t Tue Oct 06 03:25:15 2020 +0200 +++ b/tests/test-rhg.t Tue Nov 24 18:52:38 2020 +0100 @@ -124,3 +124,19 @@ revlogv1 sparserevlog store + + $ echo indoor-pool >> .hg/requires + $ rhg files + [252] + + $ rhg cat -r 1 copy_of_original + [252] + + $ rhg debugrequirements + dotencode + fncache + generaldelta + revlogv1 + sparserevlog + store + indoor-pool