7 use itertools::Itertools; |
7 use itertools::Itertools; |
8 use std::ascii::escape_default; |
8 use std::ascii::escape_default; |
9 use std::borrow::Cow; |
9 use std::borrow::Cow; |
10 use std::fmt::{Debug, Formatter}; |
10 use std::fmt::{Debug, Formatter}; |
11 |
11 |
12 /// A specialized `Revlog` to work with `changelog` data format. |
12 /// A specialized `Revlog` to work with changelog data format. |
13 pub struct Changelog { |
13 pub struct Changelog { |
14 /// The generic `revlog` format. |
14 /// The generic `revlog` format. |
15 pub(crate) revlog: Revlog, |
15 pub(crate) revlog: Revlog, |
16 } |
16 } |
17 |
17 |
21 let revlog = |
21 let revlog = |
22 Revlog::open(store_vfs, "00changelog.i", None, use_nodemap)?; |
22 Revlog::open(store_vfs, "00changelog.i", None, use_nodemap)?; |
23 Ok(Self { revlog }) |
23 Ok(Self { revlog }) |
24 } |
24 } |
25 |
25 |
26 /// Return the `ChangelogEntry` for the given node ID. |
26 /// Return the `ChangelogRevisionData` for the given node ID. |
27 pub fn data_for_node( |
27 pub fn data_for_node( |
28 &self, |
28 &self, |
29 node: NodePrefix, |
29 node: NodePrefix, |
30 ) -> Result<ChangelogRevisionData, RevlogError> { |
30 ) -> Result<ChangelogRevisionData, RevlogError> { |
31 let rev = self.revlog.rev_from_node(node)?; |
31 let rev = self.revlog.rev_from_node(node)?; |
32 self.data_for_rev(rev) |
32 self.data_for_rev(rev) |
33 } |
33 } |
34 |
34 |
35 /// Return the `RevlogEntry` of the given revision number. |
35 /// Return the `RevlogEntry` for the given revision number. |
36 pub fn entry_for_rev( |
36 pub fn entry_for_rev( |
37 &self, |
37 &self, |
38 rev: Revision, |
38 rev: Revision, |
39 ) -> Result<RevlogEntry, RevlogError> { |
39 ) -> Result<RevlogEntry, RevlogError> { |
40 self.revlog.get_entry(rev) |
40 self.revlog.get_entry(rev) |
41 } |
41 } |
42 |
42 |
43 /// Return the `ChangelogEntry` of the given revision number. |
43 /// Return the [`ChangelogRevisionData`] for the given revision number. |
44 pub fn data_for_rev( |
44 pub fn data_for_rev( |
45 &self, |
45 &self, |
46 rev: Revision, |
46 rev: Revision, |
47 ) -> Result<ChangelogRevisionData, RevlogError> { |
47 ) -> Result<ChangelogRevisionData, RevlogError> { |
48 let bytes = self.revlog.get_rev_data(rev)?; |
48 let bytes = self.revlog.get_rev_data(rev)?; |