diff -r ead435aa5294 -r a2eda1ff22aa rust/rhg/src/commands/debugrequirements.rs --- a/rust/rhg/src/commands/debugrequirements.rs Tue Nov 24 15:11:58 2020 +0100 +++ b/rust/rhg/src/commands/debugrequirements.rs Tue Nov 24 17:49:16 2020 +0100 @@ -1,7 +1,8 @@ use crate::commands::Command; -use crate::error::{CommandError, CommandErrorKind}; +use crate::error::CommandError; use crate::ui::Ui; use hg::operations::FindRoot; +use hg::requirements; pub const HELP_TEXT: &str = " Print the current repo requirements. @@ -18,23 +19,12 @@ impl Command for DebugRequirementsCommand { fn run(&self, ui: &Ui) -> Result<(), CommandError> { let root = FindRoot::new().run()?; - let requires = root.join(".hg").join("requires"); - let requirements = match std::fs::read(requires) { - Ok(bytes) => bytes, - - // Treat a missing file the same as an empty file. - // From `mercurial/localrepo.py`: - // > requires file contains a newline-delimited list of - // > features/capabilities the opener (us) must have in order to use - // > the repository. This file was introduced in Mercurial 0.9.2, - // > which means very old repositories may not have one. We assume - // > a missing file translates to no requirements. - Err(error) if error.kind() == std::io::ErrorKind::NotFound => Vec::new(), - - Err(error) => Err(CommandErrorKind::FileError(error))?, - }; - - ui.write_stdout(&requirements)?; + let mut output = String::new(); + for req in requirements::load(&root)? { + output.push_str(&req); + output.push('\n'); + } + ui.write_stdout(output.as_bytes())?; Ok(()) } }