Mercurial > public > mercurial-scm > hg
diff rust/hg-core/src/operations/cat.rs @ 46433:4b381dbbf8b7
rhg: centralize parsing of `--rev` CLI arguments
This new module will be the place to implement more of the revset language
when we do so.
Differential Revision: https://phab.mercurial-scm.org/D9873
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Tue, 26 Jan 2021 18:31:46 +0100 |
parents | 645ee7225fab |
children | 3e2d539d0d1a |
line wrap: on
line diff
--- a/rust/hg-core/src/operations/cat.rs Mon Jan 25 18:25:26 2021 +0100 +++ b/rust/hg-core/src/operations/cat.rs Tue Jan 26 18:31:46 2021 +0100 @@ -15,8 +15,6 @@ use crate::revlog::revlog::Revlog; use crate::revlog::revlog::RevlogError; use crate::revlog::Node; -use crate::revlog::NodePrefix; -use crate::revlog::Revision; use crate::utils::files::get_path_from_bytes; use crate::utils::hg_path::{HgPath, HgPathBuf}; @@ -77,23 +75,15 @@ /// * `files`: The files to output. pub fn cat( repo: &Repo, - rev: &str, + revset: &str, files: &[HgPathBuf], ) -> Result<Vec<u8>, CatRevError> { + let rev = crate::revset::resolve_single(revset, repo)?; let changelog = Changelog::open(repo)?; let manifest = Manifest::open(repo)?; - - let changelog_entry = match rev.parse::<Revision>() { - Ok(rev) => changelog.get_rev(rev)?, - _ => { - let changelog_node = NodePrefix::from_hex(&rev) - .map_err(|_| CatRevErrorKind::InvalidRevision)?; - changelog.get_node(changelog_node)? - } - }; + let changelog_entry = changelog.get_rev(rev)?; let manifest_node = Node::from_hex(&changelog_entry.manifest_node()?) .map_err(|_| CatRevErrorKind::CorruptedRevlog)?; - let manifest_entry = manifest.get_node(manifest_node.into())?; let mut bytes = vec![];