History

avoid unnecessary allocation when creating SHA1 paths in loose ODB

Sebastian Thiel committed 6 years ago

Commit 09d8d3a1 parent 4ff21684 files · +25 −31Browse files

Unified · Split

4 files
  1. Cargo.lock +20 −13
  2. git-object/Cargo.toml +1 −1
  3. git-odb/Cargo.toml +1 −1
  4. git-odb/src/loose/object.rs +3 −16
Cargo.lock+20−13
@@ -2,9 +2,9 @@ · 1 unmodified line
2# It is not intended for manual editing.2# It is not intended for manual editing.
3[[package]]3[[package]]
4name = "adler32"4name = "adler32"
5version = "1.0.4"5version = "1.1.0"
6source = "registry+https://github.com/rust-lang/crates.io-index"6source = "registry+https://github.com/rust-lang/crates.io-index"
7checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"7checksum = "567b077b825e468cc974f0020d4082ee6e03132512f207ef1a02fd5d00d1f32d"
8 8
9[[package]]9[[package]]
10name = "ansi_term"10name = "ansi_term"
@@ -182,7 +182,7 @@ version = "0.1.0" · 171 unmodified lines
182dependencies = [182dependencies = [
183 "anyhow",183 "anyhow",
184 "git-odb",184 "git-odb",
185 "hex",185 "hex 0.3.2",
186 "rayon",186 "rayon",
187]187]
188 188
@@ -192,7 +192,7 @@ version = "0.1.0" · 3 unmodified lines
192dependencies = [192dependencies = [
193 "bstr",193 "bstr",
194 "btoi",194 "btoi",
195 "hex",195 "hex 0.4.2",
196 "nom",196 "nom",
197 "pretty_assertions",197 "pretty_assertions",
198 "quick-error",198 "quick-error",
@@ -207,7 +207,7 @@ dependencies = [ · 8 unmodified lines
207 "byteorder",207 "byteorder",
208 "filebuffer",208 "filebuffer",
209 "git-object",209 "git-object",
210 "hex",210 "hex 0.4.2",
211 "miniz_oxide",211 "miniz_oxide",
212 "pretty_assertions",212 "pretty_assertions",
213 "quick-error",213 "quick-error",
@@ -248,6 +248,12 @@ version = "0.3.2" · 34 unmodified lines
248source = "registry+https://github.com/rust-lang/crates.io-index"248source = "registry+https://github.com/rust-lang/crates.io-index"
249checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"249checksum = "805026a5d0141ffc30abb3be3173848ad46a1b1664fe632428479619a3644d77"
250 250
251[[package]]
252name = "hex"
253version = "0.4.2"
254source = "registry+https://github.com/rust-lang/crates.io-index"
255checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35"
256
251[[package]]257[[package]]
252name = "lazy_static"258name = "lazy_static"
253version = "1.4.0"259version = "1.4.0"
@@ -392,10 +398,11 @@ dependencies = [ · 138 unmodified lines
392 398
393[[package]]399[[package]]
394name = "rayon"400name = "rayon"
395version = "1.3.0"401version = "1.3.1"
396source = "registry+https://github.com/rust-lang/crates.io-index"402source = "registry+https://github.com/rust-lang/crates.io-index"
397checksum = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098"403checksum = "62f02856753d04e03e26929f820d0a0a337ebe71f849801eea335d464b349080"
398dependencies = [404dependencies = [
405 "autocfg",
399 "crossbeam-deque",406 "crossbeam-deque",
400 "either",407 "either",
401 "rayon-core",408 "rayon-core",
@@ -403,9 +410,9 @@ dependencies = [ · 1 unmodified line
403 410
404[[package]]411[[package]]
405name = "rayon-core"412name = "rayon-core"
406version = "1.7.0"413version = "1.7.1"
407source = "registry+https://github.com/rust-lang/crates.io-index"414source = "registry+https://github.com/rust-lang/crates.io-index"
408checksum = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9"415checksum = "e92e15d89083484e11353891f1af602cc661426deb9564c298b270c726973280"
409dependencies = [416dependencies = [
410 "crossbeam-deque",417 "crossbeam-deque",
411 "crossbeam-queue",418 "crossbeam-queue",
@@ -443,9 +450,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" · 31 unmodified lines
443 450
444[[package]]451[[package]]
445name = "structopt"452name = "structopt"
446version = "0.3.14"453version = "0.3.15"
447source = "registry+https://github.com/rust-lang/crates.io-index"454source = "registry+https://github.com/rust-lang/crates.io-index"
448checksum = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef"455checksum = "de2f5e239ee807089b62adce73e48c625e0ed80df02c7ab3f068f5db5281065c"
449dependencies = [456dependencies = [
450 "clap",457 "clap",
451 "lazy_static",458 "lazy_static",
@@ -454,9 +461,9 @@ dependencies = [ · 2 unmodified lines
454 461
455[[package]]462[[package]]
456name = "structopt-derive"463name = "structopt-derive"
457version = "0.4.7"464version = "0.4.8"
458source = "registry+https://github.com/rust-lang/crates.io-index"465source = "registry+https://github.com/rust-lang/crates.io-index"
459checksum = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a"466checksum = "510413f9de616762a4fbeab62509bf15c729603b72d7cd71280fbca431b1c118"
460dependencies = [467dependencies = [
461 "heck",468 "heck",
462 "proc-macro-error",469 "proc-macro-error",
git-object/Cargo.toml+1−1
@@ -10,7 +10,7 @@ doctest = false · 9 unmodified lines
10 10
11[dependencies]11[dependencies]
12quick-error = "1.2.3"12quick-error = "1.2.3"
13hex = "0.3.2"13hex = "0.4.2"
14btoi = "0.4.2"14btoi = "0.4.2"
15bstr = { version = "0.2.13", default-features = false, features = ["std"] }15bstr = { version = "0.2.13", default-features = false, features = ["std"] }
16nom = { version = "6.0.0-alpha1", default-features = false }16nom = { version = "6.0.0-alpha1", default-features = false }
git-odb/Cargo.toml+1−1
@@ -11,7 +11,7 @@ doctest = false · 10 unmodified lines
11[dependencies]11[dependencies]
12quick-error = "1.2.3"12quick-error = "1.2.3"
13walkdir = "2.1.4"13walkdir = "2.1.4"
14hex = "0.3.2"14hex = "0.4.2"
15miniz_oxide = "0.3.6"15miniz_oxide = "0.3.6"
16smallvec = "1.3.0"16smallvec = "1.3.0"
17filebuffer = "0.4.0"17filebuffer = "0.4.0"
git-odb/src/loose/object.rs+3−16
@@ -3,7 +3,6 @@ use crate::{ · 2 unmodified lines
3 zlib,3 zlib,
4};4};
5use git_object as object;5use git_object as object;
6use hex::ToHex;
7use object::borrowed;6use object::borrowed;
8use quick_error::quick_error;7use quick_error::quick_error;
9use smallvec::SmallVec;8use smallvec::SmallVec;
@@ -128,21 +127,9 @@ pub fn parse_header(input: &[u8]) -> Result<(object::Kind, usize, usize), Error> · 118 unmodified lines
128}127}
129 128
130fn sha1_path(id: &[u8; 20], mut root: PathBuf) -> PathBuf {129fn sha1_path(id: &[u8; 20], mut root: PathBuf) -> PathBuf {
131 struct Buf([u8; 40], usize);130 let mut buf = [0u8; 40];
132 let mut buf = Buf([0u8; 40], 0);131 hex::encode_to_slice(id, &mut buf).expect("no failure as everything is preset by now");
133 132 let buf = std::str::from_utf8(&buf).expect("ascii only in hex");
134 impl std::fmt::Write for Buf {
135 fn write_str(&mut self, s: &str) -> std::fmt::Result {
136 self.0[self.1..self.1 + buf.len()].copy_from_slice(buf);
137 self.1 += buf.len();
138 Ok(())
139 }
140 }
141
142 {
143 id.write_hex(&mut buf)
144 .expect("no failure as everything is preset by now");
145 }
146 root.push(&buf[..2]);133 root.push(&buf[..2]);
147 root.push(&buf[2..]);134 root.push(&buf[2..]);
148 root135 root