History

Make ObjectId/oid happen! (#63)

Sebastian Thiel committed 5 years ago

Commit ca78d151 parent b3fc36551 files · +216 −209Browse files

Showing the changes to git-commitgraph/src (3 of 51 files). Show all

Unified · Split

3 files
  1. git-commitgraph/src/file/commit.rs +4 −4
  2. git-commitgraph/src/file/verify.rs +18 −13
  3. git-commitgraph/src/graph/verify.rs +4 −4
git-commitgraph/src/file/commit.rs+4−4
@@ -16,13 +16,13 @@ use std::{ · 15 unmodified lines
16#[allow(missing_docs)]16#[allow(missing_docs)]
17pub enum Error {17pub enum Error {
18 #[error("commit {0}'s extra edges overflows the commit-graph file's extra edges list")]18 #[error("commit {0}'s extra edges overflows the commit-graph file's extra edges list")]
19 ExtraEdgesListOverflow(git_hash::Id),19 ExtraEdgesListOverflow(git_hash::ObjectId),
20 #[error("commit {0}'s first parent is an extra edge index, which is invalid")]20 #[error("commit {0}'s first parent is an extra edge index, which is invalid")]
21 FirstParentIsExtraEdgeIndex(git_hash::Id),21 FirstParentIsExtraEdgeIndex(git_hash::ObjectId),
22 #[error("commit {0} has extra edges, but commit-graph file has no extra edges list")]22 #[error("commit {0} has extra edges, but commit-graph file has no extra edges list")]
23 MissingExtraEdgesList(git_hash::Id),23 MissingExtraEdgesList(git_hash::ObjectId),
24 #[error("commit {0} has a second parent but not a first parent")]24 #[error("commit {0} has a second parent but not a first parent")]
25 SecondParentWithoutFirstParent(git_hash::Id),25 SecondParentWithoutFirstParent(git_hash::ObjectId),
26}26}
27 27
28// Note that git's commit-graph-format.txt as of v2.28.0 gives an incorrect value 0x0700_0000 for28// Note that git's commit-graph-format.txt as of v2.28.0 gives an incorrect value 0x0700_0000 for
git-commitgraph/src/file/verify.rs+18−13
@@ -19,28 +19,31 @@ pub enum Error<E: std::error::Error + 'static> { · 18 unmodified lines
19 #[error(transparent)]19 #[error(transparent)]
20 Commit(#[from] file::commit::Error),20 Commit(#[from] file::commit::Error),
21 #[error("commit at file position {pos} has invalid ID {id}")]21 #[error("commit at file position {pos} has invalid ID {id}")]
22 CommitId { id: git_hash::Id, pos: file::Position },22 CommitId {
23 id: git_hash::ObjectId,
24 pos: file::Position,
25 },
23 #[error("commit at file position {pos} with ID {id} is out of order relative to its predecessor with ID {predecessor_id}")]26 #[error("commit at file position {pos} with ID {id} is out of order relative to its predecessor with ID {predecessor_id}")]
24 CommitsOutOfOrder {27 CommitsOutOfOrder {
25 id: git_hash::Id,28 id: git_hash::ObjectId,
26 pos: file::Position,29 pos: file::Position,
27 predecessor_id: git_hash::Id,30 predecessor_id: git_hash::ObjectId,
28 },31 },
29 #[error("commit-graph filename should be {0}")]32 #[error("commit-graph filename should be {0}")]
30 Filename(String),33 Filename(String),
31 #[error("commit {id} has invalid generation {generation}")]34 #[error("commit {id} has invalid generation {generation}")]
32 Generation { generation: u32, id: git_hash::Id },35 Generation { generation: u32, id: git_hash::ObjectId },
33 #[error("checksum mismatch: expected {expected}, got {actual}")]36 #[error("checksum mismatch: expected {expected}, got {actual}")]
34 Mismatch {37 Mismatch {
35 actual: git_hash::Id,38 actual: git_hash::ObjectId,
36 expected: git_hash::Id,39 expected: git_hash::ObjectId,
37 },40 },
38 #[error("{0}")]41 #[error("{0}")]
39 Processor(#[source] E),42 Processor(#[source] E),
40 #[error("commit {id} has invalid root tree ID {root_tree_id}")]43 #[error("commit {id} has invalid root tree ID {root_tree_id}")]
41 RootTreeId {44 RootTreeId {
42 id: git_hash::Id,45 id: git_hash::ObjectId,
43 root_tree_id: git_hash::Id,46 root_tree_id: git_hash::ObjectId,
44 },47 },
45}48}
46 49
@@ -142,7 +145,7 @@ impl File { · 95 unmodified lines
142 /// checksum itself.145 /// checksum itself.
143 ///146 ///
144 /// Return the actual checksum on success or `(actual checksum, expected checksum)` if there is a mismatch.147 /// Return the actual checksum on success or `(actual checksum, expected checksum)` if there is a mismatch.
145 pub fn verify_checksum(&self) -> Result<git_hash::Id, (git_hash::Id, git_hash::Id)> {148 pub fn verify_checksum(&self) -> Result<git_hash::ObjectId, (git_hash::ObjectId, git_hash::ObjectId)> {
146 // Even though we could use git_features::hash::bytes_of_file(…), this would require using our own149 // Even though we could use git_features::hash::bytes_of_file(…), this would require using our own
147 // Error type to support io::Error and Mismatch. As we only gain progress, there probably isn't much value150 // Error type to support io::Error and Mismatch. As we only gain progress, there probably isn't much value
148 // as these files are usually small enough to process them in less than a second, even for the large ones.151 // as these files are usually small enough to process them in less than a second, even for the large ones.
@@ -150,7 +153,7 @@ impl File { · 1 unmodified line
150 let data_len_without_trailer = self.data.len() - SHA1_SIZE;153 let data_len_without_trailer = self.data.len() - SHA1_SIZE;
151 let mut hasher = git_features::hash::Sha1::default();154 let mut hasher = git_features::hash::Sha1::default();
152 hasher.update(&self.data[..data_len_without_trailer]);155 hasher.update(&self.data[..data_len_without_trailer]);
153 let actual = git_hash::Id::new_sha1(hasher.digest());156 let actual = git_hash::ObjectId::new_sha1(hasher.digest());
154 157
155 let expected = self.checksum();158 let expected = self.checksum();
156 if actual.to_borrowed() == expected {159 if actual.to_borrowed() == expected {
@@ -172,8 +175,10 @@ fn verify_split_chain_filename_hash( · 15 unmodified lines
172 .and_then(|filename| filename.to_str())175 .and_then(|filename| filename.to_str())
173 .and_then(|filename| filename.strip_suffix(".graph"))176 .and_then(|filename| filename.strip_suffix(".graph"))
174 .and_then(|stem| stem.strip_prefix("graph-"))177 .and_then(|stem| stem.strip_prefix("graph-"))
175 .map_or(Ok(()), |hex| match git_hash::Id::from_40_bytes_in_hex(hex.as_bytes()) {178 .map_or(Ok(()), |hex| {
176 Ok(actual) if actual.to_borrowed() == expected => Ok(()),179 match git_hash::ObjectId::from_40_bytes_in_hex(hex.as_bytes()) {
177 _ => Err(format!("graph-{}.graph", expected.to_sha1_hex().as_bstr())),180 Ok(actual) if actual.to_borrowed() == expected => Ok(()),
181 _ => Err(format!("graph-{}.graph", expected.to_sha1_hex().as_bstr())),
182 }
178 })183 })
179}184}
git-commitgraph/src/graph/verify.rs+4−4
@@ -18,8 +18,8 @@ pub enum Error<E: std::error::Error + 'static> { · 17 unmodified lines
18 BaseGraphCount { actual: u8, expected: u8, path: PathBuf },18 BaseGraphCount { actual: u8, expected: u8, path: PathBuf },
19 #[error("'{}' base graph at index {index} should have ID {expected} but is {actual}", .path.display())]19 #[error("'{}' base graph at index {index} should have ID {expected} but is {actual}", .path.display())]
20 BaseGraphId {20 BaseGraphId {
21 actual: git_hash::Id,21 actual: git_hash::ObjectId,
22 expected: git_hash::Id,22 expected: git_hash::ObjectId,
23 index: u8,23 index: u8,
24 path: PathBuf,24 path: PathBuf,
25 },25 },
@@ -38,13 +38,13 @@ pub enum Error<E: std::error::Error + 'static> { · 12 unmodified lines
38 Generation {38 Generation {
39 actual: u32,39 actual: u32,
40 expected: u32,40 expected: u32,
41 id: git_hash::Id,41 id: git_hash::ObjectId,
42 },42 },
43 #[error(43 #[error(
44 "Commit {id} has parent position {parent_pos} that is out of range (should be in range 0-{max_valid_pos})"44 "Commit {id} has parent position {parent_pos} that is out of range (should be in range 0-{max_valid_pos})"
45 )]45 )]
46 ParentOutOfRange {46 ParentOutOfRange {
47 id: git_hash::Id,47 id: git_hash::ObjectId,
48 max_valid_pos: graph::Position,48 max_valid_pos: graph::Position,
49 parent_pos: graph::Position,49 parent_pos: graph::Position,
50 },50 },