##// END OF EJS Templates
repository: introduce constant for internal phase repo requirement and use it...
repository: introduce constant for internal phase repo requirement and use it In future we will like to much cleaner logic around which requirement is for working copy and which can go in store. To start with that, we first need to de-clutter the requirement values spread around and replace them with constants. Differential Revision: https://phab.mercurial-scm.org/D8912

File last commit:

r45570:afecc7f7 default
r45915:f025b97f default
Show More
root.rs
76 lines | 2.1 KiB | application/rls-services+xml | RustLexer
Antoine Cezar
rhg: add RootCommand using hg-core FindRoot operation to prepare `hg root`...
r45592 use crate::commands::Command;
use crate::error::{CommandError, CommandErrorKind};
use crate::ui::Ui;
use hg::operations::{FindRoot, FindRootError, FindRootErrorKind, Operation};
use hg::utils::files::get_bytes_from_path;
use std::path::PathBuf;
pub const HELP_TEXT: &str = "
Print the root directory of the current repository.
Returns 0 on success.
";
pub struct RootCommand {
ui: Ui,
}
impl RootCommand {
pub fn new() -> Self {
RootCommand { ui: Ui::new() }
}
fn display_found_path(
&self,
path_buf: PathBuf,
) -> Result<(), CommandError> {
let bytes = get_bytes_from_path(path_buf);
// TODO use formating macro
self.ui.write_stdout(&[bytes.as_slice(), b"\n"].concat())?;
Err(CommandErrorKind::Ok.into())
}
fn display_error(&self, error: FindRootError) -> Result<(), CommandError> {
match error.kind {
FindRootErrorKind::RootNotFound(path) => {
let bytes = get_bytes_from_path(path);
// TODO use formating macro
self.ui.write_stderr(
&[
b"abort: no repository found in '",
bytes.as_slice(),
b"' (.hg not found)!\n",
]
.concat(),
)?;
Err(CommandErrorKind::RootNotFound.into())
}
FindRootErrorKind::GetCurrentDirError(e) => {
// TODO use formating macro
self.ui.write_stderr(
&[
b"abort: error getting current working directory: ",
e.to_string().as_bytes(),
b"\n",
]
.concat(),
)?;
Err(CommandErrorKind::CurrentDirNotFound.into())
}
}
}
}
impl Command for RootCommand {
fn run(&self) -> Result<(), CommandError> {
match FindRoot::new().run() {
Ok(path_buf) => self.display_found_path(path_buf),
Err(e) => self.display_error(e),
}
}
}