From 54e882d57cd29c711366300bfdf93c9097b8a38c Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Tue, 8 Feb 2022 21:17:00 +0800 Subject: [PATCH] refactor (#298) --- git-hash/src/owned.rs | 26 +++++++++++++------------- git-pack/src/multi_index/access.rs | 2 +- git-pack/tests/pack/multi_index/mod.rs | 5 +++-- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/git-hash/src/owned.rs b/git-hash/src/owned.rs index 437154cc3c1..b028b4d0f55 100644 --- a/git-hash/src/owned.rs +++ b/git-hash/src/owned.rs @@ -16,7 +16,7 @@ pub mod prefix { use quick_error::quick_error; quick_error! { - /// TODO: + /// The error returned by [Prefix::try_from_id()][super::Prefix::try_from_id()]. #[derive(Debug)] #[allow(missing_docs)] pub enum Error { @@ -38,23 +38,23 @@ impl Prefix { pub fn try_from_id(id: impl AsRef, hex_len: usize) -> Result { let id = id.as_ref(); if hex_len > id.kind().len_in_hex() { - return Err(prefix::Error::TooLong { + Err(prefix::Error::TooLong { object_kind: id.kind(), hex_len, - }); + }) } else if hex_len < 4 { - return Err(prefix::Error::TooShort { hex_len }); - } + Err(prefix::Error::TooShort { hex_len }) + } else { + let mut prefix = ObjectId::null(id.kind()); + let b = prefix.as_mut_slice(); + let copy_len = (hex_len + 1) / 2; + b[..copy_len].copy_from_slice(&id.as_bytes()[..copy_len]); + if hex_len % 2 == 1 { + b[hex_len / 2] &= 0xf0; + } - let mut prefix = ObjectId::null(id.kind()); - let b = prefix.as_mut_slice(); - let copy_len = (hex_len + 1) / 2; - b[..copy_len].copy_from_slice(&id.as_bytes()[..copy_len]); - if hex_len % 2 == 1 { - b[hex_len / 2] &= 0xf0; + Ok(Prefix { bytes: prefix, hex_len }) } - - Ok(Prefix { bytes: prefix, hex_len }) } /// Returns the prefix as object id. diff --git a/git-pack/src/multi_index/access.rs b/git-pack/src/multi_index/access.rs index 9a24078d49a..6f2386f5b7f 100644 --- a/git-pack/src/multi_index/access.rs +++ b/git-pack/src/multi_index/access.rs @@ -68,7 +68,7 @@ impl File { } /// TODO - pub fn lookup_prefix(&self, prefix: git_hash::Prefix) -> Option { + pub fn lookup_prefix(&self, _prefix: git_hash::Prefix) -> Option { todo!() } diff --git a/git-pack/tests/pack/multi_index/mod.rs b/git-pack/tests/pack/multi_index/mod.rs index f9f94d3b7f2..529578161d1 100644 --- a/git-pack/tests/pack/multi_index/mod.rs +++ b/git-pack/tests/pack/multi_index/mod.rs @@ -20,14 +20,15 @@ mod access { fn lookup_with_ambiguity() {} #[test] + #[ignore] fn lookup_prefix() { let (file, _path) = multi_index(); for (idx, entry) in file.iter().enumerate() { - let hex_len = (idx % file.object_hash().len_in_hex()).min(7); + let hex_len = (idx % file.object_hash().len_in_hex()).max(7); let hex_oid = entry.oid.to_hex_with_len(hex_len).to_string(); assert_eq!(hex_oid.len(), hex_len); - let oid_prefix = git_hash::Prefix::try_from_id(&entry.oid, hex_len); + let oid_prefix = git_hash::Prefix::try_from_id(&entry.oid, hex_len).unwrap(); let entry_index = file .lookup_prefix(oid_prefix) .expect("object found")