##// END OF EJS Templates
rust: Add Repo::manifest(revision)...
Simon Sapin -
r48774:cfb6e669 default
parent child Browse files
Show More
@@ -40,20 +40,16 b" pub fn cat<'a>("
40 40 files: &'a [HgPathBuf],
41 41 ) -> Result<CatOutput, RevlogError> {
42 42 let rev = crate::revset::resolve_single(revset, repo)?;
43 let changelog = repo.changelog()?;
44 let manifest = repo.manifestlog()?;
45 let changelog_entry = changelog.get_rev(rev)?;
46 let node = *changelog
43 let manifest = repo.manifest(rev)?;
44 let node = *repo
45 .changelog()?
47 46 .node_from_rev(rev)
48 .expect("should succeed when changelog.get_rev did");
49 let manifest_node =
50 Node::from_hex_for_repo(&changelog_entry.manifest_node()?)?;
51 let manifest_entry = manifest.get_node(manifest_node.into())?;
47 .expect("should succeed when repo.manifest did");
52 48 let mut bytes = vec![];
53 49 let mut matched = vec![false; files.len()];
54 50 let mut found_any = false;
55 51
56 for (manifest_file, node_bytes) in manifest_entry.files_with_nodes() {
52 for (manifest_file, node_bytes) in manifest.files_with_nodes() {
57 53 for (cat_file, is_matched) in files.iter().zip(&mut matched) {
58 54 if cat_file.as_bytes() == manifest_file.as_bytes() {
59 55 *is_matched = true;
@@ -10,7 +10,6 b' use crate::dirstate_tree::on_disk::{for_'
10 10 use crate::errors::HgError;
11 11 use crate::repo::Repo;
12 12 use crate::revlog::manifest::Manifest;
13 use crate::revlog::node::Node;
14 13 use crate::revlog::revlog::RevlogError;
15 14 use crate::utils::hg_path::HgPath;
16 15 use crate::DirstateError;
@@ -71,13 +70,7 b' pub fn list_rev_tracked_files('
71 70 revset: &str,
72 71 ) -> Result<FilesForRev, RevlogError> {
73 72 let rev = crate::revset::resolve_single(revset, repo)?;
74 let changelog = repo.changelog()?;
75 let manifest = repo.manifestlog()?;
76 let changelog_entry = changelog.get_rev(rev)?;
77 let manifest_node =
78 Node::from_hex_for_repo(&changelog_entry.manifest_node()?)?;
79 let manifest_entry = manifest.get_node(manifest_node.into())?;
80 Ok(FilesForRev(manifest_entry))
73 Ok(FilesForRev(repo.manifest(rev)?))
81 74 }
82 75
83 76 pub struct FilesForRev(Manifest);
@@ -5,14 +5,14 b' use crate::dirstate_tree::dirstate_map::'
5 5 use crate::dirstate_tree::owning::OwningDirstateMap;
6 6 use crate::errors::HgError;
7 7 use crate::errors::HgResultExt;
8 use crate::exit_codes;
9 use crate::manifest::Manifestlog;
8 use crate::manifest::{Manifest, Manifestlog};
10 9 use crate::requirements;
11 10 use crate::revlog::revlog::RevlogError;
12 11 use crate::utils::files::get_path_from_bytes;
13 12 use crate::utils::SliceExt;
14 13 use crate::vfs::{is_dir, is_file, Vfs};
15 use crate::DirstateError;
14 use crate::{exit_codes, Node};
15 use crate::{DirstateError, Revision};
16 16 use std::cell::{Cell, Ref, RefCell, RefMut};
17 17 use std::collections::HashSet;
18 18 use std::path::{Path, PathBuf};
@@ -333,6 +333,19 b' impl Repo {'
333 333 pub fn manifestlog_mut(&self) -> Result<RefMut<Manifestlog>, RevlogError> {
334 334 self.manifestlog.get_mut_or_init(self)
335 335 }
336
337 /// Returns the manifest of the given revision
338 pub fn manifest(
339 &self,
340 revision: Revision,
341 ) -> Result<Manifest, RevlogError> {
342 let changelog = self.changelog()?;
343 let manifest = self.manifestlog()?;
344 let changelog_entry = changelog.get_rev(revision)?;
345 let manifest_node =
346 Node::from_hex_for_repo(&changelog_entry.manifest_node()?)?;
347 manifest.get_node(manifest_node.into())
348 }
336 349 }
337 350
338 351 /// Lazily-initialized component of `Repo` with interior mutability
General Comments 0
You need to be logged in to leave comments. Login now