Show More
@@ -51,3 +51,22 b' pub fn load(repo_root: &Path) -> Result<' | |||
|
51 | 51 | Err(error) => Err(RequirementsError::Io(error))?, |
|
52 | 52 | } |
|
53 | 53 | } |
|
54 | ||
|
55 | pub fn check(repo_root: &Path) -> Result<(), RequirementsError> { | |
|
56 | for feature in load(repo_root)? { | |
|
57 | if !SUPPORTED.contains(&&*feature) { | |
|
58 | return Err(RequirementsError::Unsupported { feature }) | |
|
59 | } | |
|
60 | } | |
|
61 | Ok(()) | |
|
62 | } | |
|
63 | ||
|
64 | // TODO: set this to actually-supported features | |
|
65 | const SUPPORTED: &[&str] = &[ | |
|
66 | "dotencode", | |
|
67 | "fncache", | |
|
68 | "generaldelta", | |
|
69 | "revlogv1", | |
|
70 | "sparserevlog", | |
|
71 | "store", | |
|
72 | ]; |
@@ -4,6 +4,7 b' use crate::ui::utf8_to_local;' | |||
|
4 | 4 | use crate::ui::Ui; |
|
5 | 5 | use hg::operations::FindRoot; |
|
6 | 6 | use hg::operations::{CatRev, CatRevError, CatRevErrorKind}; |
|
7 | use hg::requirements; | |
|
7 | 8 | use hg::utils::hg_path::HgPathBuf; |
|
8 | 9 | use micro_timer::timed; |
|
9 | 10 | use std::convert::TryFrom; |
@@ -32,6 +33,7 b" impl<'a> Command for CatCommand<'a> {" | |||
|
32 | 33 | #[timed] |
|
33 | 34 | fn run(&self, ui: &Ui) -> Result<(), CommandError> { |
|
34 | 35 | let root = FindRoot::new().run()?; |
|
36 | requirements::check(&root)?; | |
|
35 | 37 | let cwd = std::env::current_dir() |
|
36 | 38 | .or_else(|e| Err(CommandErrorKind::CurrentDirNotFound(e)))?; |
|
37 | 39 |
@@ -11,6 +11,7 b' use hg::operations::{' | |||
|
11 | 11 | ListRevTrackedFiles, ListRevTrackedFilesError, |
|
12 | 12 | ListRevTrackedFilesErrorKind, |
|
13 | 13 | }; |
|
14 | use hg::requirements; | |
|
14 | 15 | use hg::utils::files::{get_bytes_from_path, relativize_path}; |
|
15 | 16 | use hg::utils::hg_path::{HgPath, HgPathBuf}; |
|
16 | 17 | use std::path::PathBuf; |
@@ -57,6 +58,7 b" impl<'a> FilesCommand<'a> {" | |||
|
57 | 58 | impl<'a> Command for FilesCommand<'a> { |
|
58 | 59 | fn run(&self, ui: &Ui) -> Result<(), CommandError> { |
|
59 | 60 | let root = FindRoot::new().run()?; |
|
61 | requirements::check(&root)?; | |
|
60 | 62 | if let Some(rev) = self.rev { |
|
61 | 63 | let mut operation = ListRevTrackedFiles::new(&root, rev) |
|
62 | 64 | .map_err(|e| map_rev_error(rev, e))?; |
@@ -30,6 +30,9 b' impl CommandErrorKind {' | |||
|
30 | 30 | match self { |
|
31 | 31 | CommandErrorKind::RootNotFound(_) => exitcode::ABORT, |
|
32 | 32 | CommandErrorKind::CurrentDirNotFound(_) => exitcode::ABORT, |
|
33 | CommandErrorKind::RequirementsError( | |
|
34 | RequirementsError::Unsupported { .. }, | |
|
35 | ) => exitcode::UNIMPLEMENTED_COMMAND, | |
|
33 | 36 | CommandErrorKind::RequirementsError(_) => exitcode::ABORT, |
|
34 | 37 | CommandErrorKind::StdoutError => exitcode::ABORT, |
|
35 | 38 | CommandErrorKind::StderrError => exitcode::ABORT, |
@@ -124,3 +124,19 b' Requirements' | |||
|
124 | 124 | revlogv1 |
|
125 | 125 | sparserevlog |
|
126 | 126 | store |
|
127 | ||
|
128 | $ echo indoor-pool >> .hg/requires | |
|
129 | $ rhg files | |
|
130 | [252] | |
|
131 | ||
|
132 | $ rhg cat -r 1 copy_of_original | |
|
133 | [252] | |
|
134 | ||
|
135 | $ rhg debugrequirements | |
|
136 | dotencode | |
|
137 | fncache | |
|
138 | generaldelta | |
|
139 | revlogv1 | |
|
140 | sparserevlog | |
|
141 | store | |
|
142 | indoor-pool |
General Comments 0
You need to be logged in to leave comments.
Login now