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 |
|
|
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 |
|
|
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 |
|
|
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