equal
deleted
inserted
replaced
1 use crate::commands::Command; |
1 use crate::commands::Command; |
2 use crate::error::{CommandError, CommandErrorKind}; |
2 use crate::error::CommandError; |
3 use crate::ui::Ui; |
3 use crate::ui::Ui; |
4 use hg::operations::FindRoot; |
4 use hg::operations::FindRoot; |
|
5 use hg::requirements; |
5 |
6 |
6 pub const HELP_TEXT: &str = " |
7 pub const HELP_TEXT: &str = " |
7 Print the current repo requirements. |
8 Print the current repo requirements. |
8 "; |
9 "; |
9 |
10 |
16 } |
17 } |
17 |
18 |
18 impl Command for DebugRequirementsCommand { |
19 impl Command for DebugRequirementsCommand { |
19 fn run(&self, ui: &Ui) -> Result<(), CommandError> { |
20 fn run(&self, ui: &Ui) -> Result<(), CommandError> { |
20 let root = FindRoot::new().run()?; |
21 let root = FindRoot::new().run()?; |
21 let requires = root.join(".hg").join("requires"); |
22 let mut output = String::new(); |
22 let requirements = match std::fs::read(requires) { |
23 for req in requirements::load(&root)? { |
23 Ok(bytes) => bytes, |
24 output.push_str(&req); |
24 |
25 output.push('\n'); |
25 // Treat a missing file the same as an empty file. |
26 } |
26 // From `mercurial/localrepo.py`: |
27 ui.write_stdout(output.as_bytes())?; |
27 // > requires file contains a newline-delimited list of |
|
28 // > features/capabilities the opener (us) must have in order to use |
|
29 // > the repository. This file was introduced in Mercurial 0.9.2, |
|
30 // > which means very old repositories may not have one. We assume |
|
31 // > a missing file translates to no requirements. |
|
32 Err(error) if error.kind() == std::io::ErrorKind::NotFound => Vec::new(), |
|
33 |
|
34 Err(error) => Err(CommandErrorKind::FileError(error))?, |
|
35 }; |
|
36 |
|
37 ui.write_stdout(&requirements)?; |
|
38 Ok(()) |
28 Ok(()) |
39 } |
29 } |
40 } |
30 } |