From 7f50c3003ebfdcff044d142591ece1dcdab0b0ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20R=C3=BC=C3=9Fler?= Date: Mon, 9 Feb 2026 15:44:13 +0100 Subject: [PATCH 1/5] feat: use `GIX_TEST_FIXTURE_HASH` environment variable. For now, there is no direct way to set it, but that may change once we have tests that need it. Co-authored-by: Sebastian Thiel --- Cargo.lock | 1 + tests/tools/Cargo.toml | 1 + tests/tools/src/lib.rs | 75 ++++++++++++++++++++++++++++++---------- tests/tools/src/tests.rs | 7 +++- 4 files changed, 64 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e17bb71ffb4..60187483380 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2418,6 +2418,7 @@ dependencies = [ "fs_extra", "gix-discover", "gix-fs", + "gix-hash", "gix-lock", "gix-tempfile", "gix-worktree", diff --git a/tests/tools/Cargo.toml b/tests/tools/Cargo.toml index d65e8d92030..1a2625e171b 100644 --- a/tests/tools/Cargo.toml +++ b/tests/tools/Cargo.toml @@ -25,6 +25,7 @@ default = [] xz = ["dep:xz2"] [dependencies] +gix-hash = { version = "^0.22.0", path = "../../gix-hash" } gix-lock = { version = "^21.0.0", path = "../../gix-lock" } gix-discover = { version = "^0.46.0", path = "../../gix-discover" } gix-worktree = { version = "^0.47.0", path = "../../gix-worktree" } diff --git a/tests/tools/src/lib.rs b/tests/tools/src/lib.rs index 7f8001c24f2..79ac5b22faa 100644 --- a/tests/tools/src/lib.rs +++ b/tests/tools/src/lib.rs @@ -287,7 +287,7 @@ enum DirectoryRoot { StandaloneTest, } -/// Don't add a suffix to the archive name as `args` are platform dependent, none-deterministic, +/// Don't add a suffix to the archive name as `args` are platform dependent, non-deterministic, /// or otherwise don't influence the content of the archive. /// Note that this also means that `args` won't be used to control the hash of the archive itself. #[derive(Copy, Clone)] @@ -508,7 +508,7 @@ pub fn copy_recursively_into_existing_dir(src_dir: impl AsRef, dst_dir: im Ok(()) } -/// Like `scripted_fixture_read_only()`], but passes `args` to `script_name`. +/// Like [`scripted_fixture_read_only()`], but passes `args` to `script_name`. pub fn scripted_fixture_read_only_with_args( script_name: impl AsRef, args: impl IntoIterator>, @@ -874,7 +874,7 @@ pub fn rust_fixture_read_only(name: &str, version: u32, make_fixture: F) - where F: FnOnce(FixtureState<'_>) -> PostResult, { - rust_fixture_read_only_inner(name, version, make_fixture, None, DirectoryRoot::IntegrationTest) + rust_fixture_read_only_inner(name, version, None, make_fixture, None, DirectoryRoot::IntegrationTest) } /// Like [`rust_fixture_read_only()`], but does not prefix the fixture directory with `tests`. @@ -882,7 +882,7 @@ pub fn rust_fixture_read_only_standalone(name: &str, version: u32, make_fi where F: FnOnce(FixtureState<'_>) -> PostResult, { - rust_fixture_read_only_inner(name, version, make_fixture, None, DirectoryRoot::StandaloneTest) + rust_fixture_read_only_inner(name, version, None, make_fixture, None, DirectoryRoot::StandaloneTest) } /// Execute a Rust closure in a directory, returning a writable temporary directory. @@ -922,7 +922,7 @@ pub fn rust_fixture_writable( where F: FnMut(FixtureState<'_>) -> PostResult, { - rust_fixture_writable_inner(name, version, make_fixture, mode, DirectoryRoot::IntegrationTest) + rust_fixture_writable_inner(name, version, None, make_fixture, mode, DirectoryRoot::IntegrationTest) } /// Like [`rust_fixture_writable()`], but does not prefix the fixture directory with `tests`. @@ -935,12 +935,13 @@ pub fn rust_fixture_writable_standalone( where F: FnMut(FixtureState<'_>) -> PostResult, { - rust_fixture_writable_inner(name, version, make_fixture, mode, DirectoryRoot::StandaloneTest) + rust_fixture_writable_inner(name, version, None, make_fixture, mode, DirectoryRoot::StandaloneTest) } fn rust_fixture_writable_inner( name: &str, version: u32, + object_hash: Option, mut make_fixture: F, mode: Creation, root: DirectoryRoot, @@ -951,13 +952,15 @@ where let dst = tempfile::TempDir::new()?; let res = match mode { Creation::CopyFromReadOnly => { - let (ro_dir, _res_ignored) = rust_fixture_read_only_inner(name, version, &mut make_fixture, None, root)?; + let (ro_dir, _res_ignored) = + rust_fixture_read_only_inner(name, version, object_hash, &mut make_fixture, None, root)?; copy_recursively_into_existing_dir(ro_dir, dst.path())?; let res = make_fixture(FixtureState::Fresh(dst.path()))?; res } Creation::Execute => { - let (_, res) = rust_fixture_read_only_inner(name, version, make_fixture, Some(dst.path()), root)?; + let (_, res) = + rust_fixture_read_only_inner(name, version, object_hash, make_fixture, Some(dst.path()), root)?; res } }; @@ -967,6 +970,7 @@ where fn rust_fixture_read_only_inner( name: &str, version: u32, + object_hash: Option, make_fixture: F, destination_dir: Option<&Path>, root: DirectoryRoot, @@ -988,7 +992,8 @@ where Path::new(ARCHIVE_DIR_NAME).join(format!("{archive_name}.{}", tar_extension())), root, ); - let (force_run, script_result_directory) = force_and_dir(destination_dir, root, &archive_name, &script_identity); + let (force_run, script_result_directory) = + force_and_dir(destination_dir, root, &archive_name, object_hash, &script_identity); let _marker = marker_if_needed(destination_dir, archive_name)?; run_fixture_generator_with_marker_handling( @@ -1024,16 +1029,16 @@ fn force_and_dir( destination_dir: Option<&Path>, root: DirectoryRoot, archive_name: impl AsRef, + hash_kind: Option, script_identity: &dyn std::fmt::Display, ) -> (bool, PathBuf) { destination_dir.map_or_else( || { let dir = fixture_path_inner( - Path::new("generated-do-not-edit").join(archive_name).join(format!( - "{}-{}", - script_identity, - family_name() - )), + Path::new("generated-do-not-edit") + .join(archive_name) + .join(hash_kind.unwrap_or_else(hash_kind_from_env).to_string()) + .join(format!("{}-{}", script_identity, family_name())), root, ); (false, dir) @@ -1127,6 +1132,9 @@ where gix_tempfile::signal::handler::Mode::DeleteTempfilesOnTerminationAndRestoreDefaultBehaviour, ); + let hash_kind = hash_kind_from_env(); + eprintln!("Using hash '{hash_kind}' when determining which fixture to use or recreate"); + let script_location = script_name.as_ref(); let script_path = fixture_path_inner(script_location, root); @@ -1135,7 +1143,12 @@ where let post_version = post_process.as_ref().map(|(v, _)| *v); let script_identity = { let mut map = SCRIPT_IDENTITY.lock(); - let key = args.iter().fold(script_path.clone(), |p, a| p.join(a)); + let init = if hash_kind == gix_hash::Kind::Sha1 { + script_path.clone() + } else { + script_path.clone().join(hash_kind.to_string()) + }; + let key = args.iter().fold(init, |p, a| p.join(a)); // Include post_version in the key if present let key = if let Some(v) = post_version { key.join(format!("post-v{v}")) @@ -1178,15 +1191,26 @@ where } ArgsInHash::No => "".into(), }; + let potential_hash_suffix = if hash_kind == gix_hash::Kind::Sha1 { + "".into() + } else { + format!("_{hash_kind}") + }; Path::new(ARCHIVE_DIR_NAME).join(format!( - "{}{suffix}.{}", + "{}{suffix}{potential_hash_suffix}.{}", script_basename.to_str().expect("valid UTF-8"), tar_extension() )) }, root, ); - let (force_run, script_result_directory) = force_and_dir(destination_dir, root, script_basename, &script_identity); + let (force_run, script_result_directory) = force_and_dir( + destination_dir, + root, + script_basename, + Some(hash_kind), + &script_identity, + ); let _marker = marker_if_needed(destination_dir, script_basename)?; let script_identity_for_archive = match args_in_hash { @@ -1205,14 +1229,14 @@ where |fixture_state| { if let FixtureState::Uninitialized(dir) = fixture_state { let mut cmd = std::process::Command::new(&script_absolute_path); - let output = match configure_command(&mut cmd, &args, dir).output() { + let output = match configure_command(&mut cmd, hash_kind, &args, dir).output() { Ok(out) => out, Err(err) if err.kind() == std::io::ErrorKind::PermissionDenied || err.raw_os_error() == Some(193) /* windows */ => { cmd = std::process::Command::new(bash_program()); - configure_command(cmd.arg(&script_absolute_path), &args, dir).output()? + configure_command(cmd.arg(&script_absolute_path), hash_kind, &args, dir).output()? } Err(err) => return Err(err.into()), }; @@ -1233,6 +1257,17 @@ where Ok((script_result_directory, res)) } +fn hash_kind_from_env() -> gix_hash::Kind { + env::var_os("GIX_TEST_FIXTURE_HASH").and_then(|value| value.into_string().ok()).map(|object_kind| { + gix_hash::Kind::from_str(&object_kind).unwrap_or_else(|_| { + panic!( + "GIX_TEST_FIXTURE_HASH was set to {object_kind} which is an invalid value. Valid values are {}. Exiting.", + gix_hash::Kind::all().iter().map(std::string::ToString::to_string).collect::>().join(", ") + ) + }) + }).unwrap_or_default() +} + #[cfg(windows)] const NULL_DEVICE: &str = "nul"; // See `gix_path::env::git::NULL_DEVICE` on why this form is used. #[cfg(not(windows))] @@ -1240,6 +1275,7 @@ const NULL_DEVICE: &str = "/dev/null"; fn configure_command<'a, I: IntoIterator, S: AsRef>( cmd: &'a mut std::process::Command, + hash_kind: gix_hash::Kind, args: I, script_result_directory: &Path, ) -> &'a mut std::process::Command { @@ -1279,6 +1315,7 @@ fn configure_command<'a, I: IntoIterator, S: AsRef>( .env("GIT_CONFIG_VALUE_2", "main") .env("GIT_CONFIG_KEY_3", "protocol.file.allow") .env("GIT_CONFIG_VALUE_3", "always") + .env("GIT_DEFAULT_HASH", hash_kind.to_string()) } /// Get the path attempted as a `bash` interpreter, for fixture scripts having no `#!` we can use. diff --git a/tests/tools/src/tests.rs b/tests/tools/src/tests.rs index 049a379e127..e879cb2cc77 100644 --- a/tests/tools/src/tests.rs +++ b/tests/tools/src/tests.rs @@ -44,7 +44,12 @@ fn configure_command_clears_external_config() { let mut cmd = std::process::Command::new(GIT_PROGRAM); cmd.env("GIT_CONFIG_SYSTEM", SCOPE_ENV_VALUE); cmd.env("GIT_CONFIG_GLOBAL", SCOPE_ENV_VALUE); - configure_command(&mut cmd, ["config", "-l", "--show-origin"], temp.path()); + configure_command( + &mut cmd, + gix_hash::Kind::default(), + ["config", "-l", "--show-origin"], + temp.path(), + ); let output = cmd.output().expect("can run git"); let lines: Vec<_> = output From d51b858a6710367162dd2aeecd9f82c5ca7038c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20R=C3=BC=C3=9Fler?= Date: Mon, 9 Feb 2026 16:31:42 +0100 Subject: [PATCH 2/5] Use `GIX_TEST_FIXTURE_HASH` for `gix-commitgraph` and `gix-pack`. --- gix-commitgraph/Cargo.toml | 1 + .../generation_number_overflow_sha256.tar | Bin 0 -> 101376 bytes .../octopus_merges_sha256.tar | Bin 0 -> 81408 bytes .../single_commit_huge_dates_sha256.tar | Bin 0 -> 176128 bytes .../single_commit_sha256.tar | Bin 0 -> 64000 bytes .../single_parent_sha256.tar | Bin 0 -> 66560 bytes .../generated-archives/two_parents_sha256.tar | Bin 0 -> 69632 bytes gix-diff/src/tree/visit.rs | 7 +++++-- gix-index/src/extension/tree/mod.rs | 4 +++- gix-index/tests/Cargo.toml | 2 +- gix-index/tests/index/mod.rs | 4 +++- gix-negotiate/tests/negotiate.rs | 4 +++- gix-object/tests/object/main.rs | 7 +++++-- gix-pack/Cargo.toml | 1 + gix-pack/src/cache/delta/tree.rs | 4 +++- gix-pack/tests/Cargo.toml | 2 +- gix-pack/tests/pack/data/output/mod.rs | 8 ++++++-- gix-pack/tests/pack/iter.rs | 4 +++- gix-ref/src/raw.rs | 4 +++- gix-revwalk/tests/revwalk.rs | 4 +++- gix-worktree-state/tests/Cargo.toml | 2 +- gix-worktree/tests/Cargo.toml | 2 +- gix/Cargo.toml | 1 + gix/src/id.rs | 4 +++- gix/tests/gix/object/mod.rs | 8 ++++++-- gix/tests/gix/revision/spec/from_bytes/mod.rs | 2 +- gix/tests/gix/status.rs | 8 ++++++-- justfile | 11 +++++++---- 28 files changed, 67 insertions(+), 27 deletions(-) create mode 100644 gix-commitgraph/tests/fixtures/generated-archives/generation_number_overflow_sha256.tar create mode 100644 gix-commitgraph/tests/fixtures/generated-archives/octopus_merges_sha256.tar create mode 100644 gix-commitgraph/tests/fixtures/generated-archives/single_commit_huge_dates_sha256.tar create mode 100644 gix-commitgraph/tests/fixtures/generated-archives/single_commit_sha256.tar create mode 100644 gix-commitgraph/tests/fixtures/generated-archives/single_parent_sha256.tar create mode 100644 gix-commitgraph/tests/fixtures/generated-archives/two_parents_sha256.tar diff --git a/gix-commitgraph/Cargo.toml b/gix-commitgraph/Cargo.toml index 1bc5fd784a0..7257d14ff3c 100644 --- a/gix-commitgraph/Cargo.toml +++ b/gix-commitgraph/Cargo.toml @@ -33,6 +33,7 @@ document-features = { version = "0.2.0", optional = true } [dev-dependencies] gix-testtools = { path = "../tests/tools" } gix-date = { path = "../gix-date" } +gix-hash = { path = "../gix-hash", features = ["sha256"] } [package.metadata.docs.rs] all-features = true diff --git a/gix-commitgraph/tests/fixtures/generated-archives/generation_number_overflow_sha256.tar b/gix-commitgraph/tests/fixtures/generated-archives/generation_number_overflow_sha256.tar new file mode 100644 index 0000000000000000000000000000000000000000..96db68e7a87377a4638904e848720c2727f49f68 GIT binary patch literal 101376 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 M1sn>zS}5@U0d5^8bwa@7*}^!&$Kkt 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 StADSLfj$QM82Em{!2bt7?ND|A literal 0 HcmV?d00001 diff --git a/gix-commitgraph/tests/fixtures/generated-archives/single_commit_huge_dates_sha256.tar b/gix-commitgraph/tests/fixtures/generated-archives/single_commit_huge_dates_sha256.tar new file mode 100644 index 0000000000000000000000000000000000000000..b68642249e359b53bea8802ed116e6835064e4f1 GIT binary patch literal 176128 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 literal 0 HcmV?d00001 diff --git a/gix-commitgraph/tests/fixtures/generated-archives/two_parents_sha256.tar b/gix-commitgraph/tests/fixtures/generated-archives/two_parents_sha256.tar new file mode 100644 index 0000000000000000000000000000000000000000..06de56f9102ce8b516514cb642df920d7f3f47fe GIT binary patch literal 69632 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 + let sha1 = 48; + let sha256_extra = 24; + let ceiling = sha1 + sha256_extra; assert!( - actual <= 48, - "{actual} <= 48: this type shouldn't grow without us knowing" + actual <= ceiling, + "{actual} <= {ceiling}: this type shouldn't grow without us knowing" ); } } diff --git a/gix-index/src/extension/tree/mod.rs b/gix-index/src/extension/tree/mod.rs index 5e68ff7197f..6846c4a0016 100644 --- a/gix-index/src/extension/tree/mod.rs +++ b/gix-index/src/extension/tree/mod.rs @@ -18,7 +18,9 @@ mod tests { #[test] fn size_of_tree() { let actual = std::mem::size_of::(); - let expected = 88; + let sha1 = 88; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "the size of this structure should not change unexpectedly: {actual} <~ {expected}" diff --git a/gix-index/tests/Cargo.toml b/gix-index/tests/Cargo.toml index faaa0438296..5ace21e1ba8 100644 --- a/gix-index/tests/Cargo.toml +++ b/gix-index/tests/Cargo.toml @@ -24,6 +24,6 @@ gix-features = { path = "../../gix-features", features = ["progress"] } gix-testtools = { path = "../../tests/tools" } gix-odb = { path = "../../gix-odb" } gix-object = { path = "../../gix-object" } -gix-hash = { path = "../../gix-hash" } +gix-hash = { path = "../../gix-hash", features = ["sha256"] } filetime = "0.2.27" bstr = { version = "1.12.0", default-features = false } diff --git a/gix-index/tests/index/mod.rs b/gix-index/tests/index/mod.rs index 1878edcaa1f..ccb5c4d61ba 100644 --- a/gix-index/tests/index/mod.rs +++ b/gix-index/tests/index/mod.rs @@ -27,7 +27,9 @@ pub fn loose_file_path(name: &str) -> PathBuf { #[test] fn size_of_entry() { let actual = std::mem::size_of::(); - let expected = 80; + let sha1 = 80; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "the size of this structure should not change unexpectedly: {actual} <~ {expected}" diff --git a/gix-negotiate/tests/negotiate.rs b/gix-negotiate/tests/negotiate.rs index 9410308e39f..ac4244093a5 100644 --- a/gix-negotiate/tests/negotiate.rs +++ b/gix-negotiate/tests/negotiate.rs @@ -39,7 +39,9 @@ mod baseline; #[test] fn size_of_entry() { let actual = std::mem::size_of::>(); - let expected = 56; + let sha1 = 56; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "we may keep a lot of these, so let's not let them grow unnoticed: {actual} <~ {expected}" diff --git a/gix-object/tests/object/main.rs b/gix-object/tests/object/main.rs index bf7c8eeea55..7d5d3c005c0 100644 --- a/gix-object/tests/object/main.rs +++ b/gix-object/tests/object/main.rs @@ -80,9 +80,12 @@ fn fixture_name(kind: &str, path: &str) -> Vec { #[test] fn size_in_memory() { let actual = std::mem::size_of::(); + let sha1 = 272; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( - actual <= 272, - "{actual} <= 272: Prevent unexpected growth of what should be lightweight objects" + actual <= expected, + "{actual} <= {expected}: Prevent unexpected growth of what should be lightweight objects" ); } diff --git a/gix-pack/Cargo.toml b/gix-pack/Cargo.toml index 0dc5488b592..999f5bbdd4a 100644 --- a/gix-pack/Cargo.toml +++ b/gix-pack/Cargo.toml @@ -65,6 +65,7 @@ gix-tempfile = { version = "^21.0.0", default-features = false, path = "../gix-t [dev-dependencies] gix-testtools = { path = "../tests/tools" } +gix-hash = { version = "^0.22.0", path = "../gix-hash", features = ["sha256"] } [package.metadata.docs.rs] all-features = true diff --git a/gix-pack/src/cache/delta/tree.rs b/gix-pack/src/cache/delta/tree.rs index f93608727f4..b122ada5f6a 100644 --- a/gix-pack/src/cache/delta/tree.rs +++ b/gix-pack/src/cache/delta/tree.rs @@ -255,7 +255,9 @@ mod tests { } let actual = std::mem::size_of::<[Item; 7_500_000]>(); - let expected = 840_000_000; + let sha1 = 840_000_000; + let sha256_extra = 120_000_000; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "we don't want these to grow unnoticed: {actual} <~ {expected}" diff --git a/gix-pack/tests/Cargo.toml b/gix-pack/tests/Cargo.toml index 82725f7ae79..b946acf760d 100644 --- a/gix-pack/tests/Cargo.toml +++ b/gix-pack/tests/Cargo.toml @@ -27,5 +27,5 @@ bstr = { version = "1.12.0", default-features = false, features = ["std"] } maplit = "1.0.2" gix-object = { path = "../../gix-object" } gix-traverse = { path = "../../gix-traverse" } -gix-hash = { path = "../../gix-hash" } +gix-hash = { path = "../../gix-hash", features = ["sha256"] } memmap2 = "0.9.7" diff --git a/gix-pack/tests/pack/data/output/mod.rs b/gix-pack/tests/pack/data/output/mod.rs index 59e80d2b303..961ee1ae4b1 100644 --- a/gix-pack/tests/pack/data/output/mod.rs +++ b/gix-pack/tests/pack/data/output/mod.rs @@ -6,7 +6,9 @@ use gix_testtools::size_ok; #[test] fn size_of_entry() { let actual = std::mem::size_of::(); - let expected = 80; + let sha1 = 80; + let sha256_extra = 32; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "The size of the structure shouldn't change unexpectedly: {actual} <~ {expected}" @@ -16,7 +18,9 @@ fn size_of_entry() { #[test] fn size_of_count() { let actual = std::mem::size_of::(); - let expected = 56; + let sha1 = 56; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "The size of the structure shouldn't change unexpectedly: {actual} <~ {expected}" diff --git a/gix-pack/tests/pack/iter.rs b/gix-pack/tests/pack/iter.rs index 4b7b0cb32f3..b4c829a158e 100644 --- a/gix-pack/tests/pack/iter.rs +++ b/gix-pack/tests/pack/iter.rs @@ -4,7 +4,9 @@ use gix_testtools::size_ok; #[test] fn size_of_entry() { let actual = std::mem::size_of::(); - let expected = 104; + let sha1 = 104; + let sha256_extra = 32; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "let's keep the size in check as we have many of them: {actual} <~ {expected}" diff --git a/gix-ref/src/raw.rs b/gix-ref/src/raw.rs index d476bd17cf9..d5d6978048e 100644 --- a/gix-ref/src/raw.rs +++ b/gix-ref/src/raw.rs @@ -100,7 +100,9 @@ mod tests { #[test] fn size_of_reference() { let actual = std::mem::size_of::(); - let expected = 80; + let sha1 = 80; + let sha256_extra = 24; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "let's not let it change size undetected: {actual} <~ {expected}" diff --git a/gix-revwalk/tests/revwalk.rs b/gix-revwalk/tests/revwalk.rs index 371eee9a781..3f532b43d7c 100644 --- a/gix-revwalk/tests/revwalk.rs +++ b/gix-revwalk/tests/revwalk.rs @@ -5,7 +5,9 @@ mod graph { #[test] fn size_of_commit() { let actual = std::mem::size_of::>(); - let expected = 48; + let sha1 = 48; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "We might see quite a lot of these, so they shouldn't grow unexpectedly: {actual} <~ {expected}" diff --git a/gix-worktree-state/tests/Cargo.toml b/gix-worktree-state/tests/Cargo.toml index b9790e00142..10fa4400731 100644 --- a/gix-worktree-state/tests/Cargo.toml +++ b/gix-worktree-state/tests/Cargo.toml @@ -24,7 +24,7 @@ gix-object = { path = "../../gix-object" } gix-discover = { path = "../../gix-discover" } gix-filter = { path = "../../gix-filter" } gix-index = { path = "../../gix-index" } -gix-hash = { path = "../../gix-hash" } +gix-hash = { path = "../../gix-hash", features = ["sha256"] } gix-fs = { path = "../../gix-fs" } gix-features = { path = "../../gix-features" } gix-testtools = { path = "../../tests/tools" } diff --git a/gix-worktree/tests/Cargo.toml b/gix-worktree/tests/Cargo.toml index fb8bd2a2920..827ba3e6fea 100644 --- a/gix-worktree/tests/Cargo.toml +++ b/gix-worktree/tests/Cargo.toml @@ -22,7 +22,7 @@ gix-features-parallel = ["gix-features/parallel"] gix-worktree = { path = "..", features = ["attributes"] } gix-index = { path = "../../gix-index" } gix-fs = { path = "../../gix-fs" } -gix-hash = { path = "../../gix-hash" } +gix-hash = { path = "../../gix-hash", features = ["sha256"] } gix-object = { path = "../../gix-object" } gix-glob = { path = "../../gix-glob" } gix-path = { path = "../../gix-path" } diff --git a/gix/Cargo.toml b/gix/Cargo.toml index 918fcfce1ca..8152a79ba6e 100644 --- a/gix/Cargo.toml +++ b/gix/Cargo.toml @@ -411,6 +411,7 @@ document-features = { version = "0.2.0", optional = true } gix = { path = ".", default-features = false, features = [ "need-more-recent-msrv", "tree-error" ] } +gix-hash = { version = "^0.22.0", path = "../gix-hash", features = ["sha256"] } pretty_assertions = "1.4.0" gix-testtools = { path = "../tests/tools" } is_ci = "1.1.1" diff --git a/gix/src/id.rs b/gix/src/id.rs index 317f9340b50..fa6c7e13ad5 100644 --- a/gix/src/id.rs +++ b/gix/src/id.rs @@ -198,7 +198,9 @@ mod tests { #[test] fn size_of_oid() { let actual = std::mem::size_of::>(); - let ceiling = 32; + let sha1 = 32; + let sha256_extra = 16; + let ceiling = sha1 + sha256_extra; assert!( actual <= ceiling, "size of oid shouldn't change without notice: {actual} <= {ceiling}" diff --git a/gix/tests/gix/object/mod.rs b/gix/tests/gix/object/mod.rs index 8dd1aedaae5..2bc05ba122f 100644 --- a/gix/tests/gix/object/mod.rs +++ b/gix/tests/gix/object/mod.rs @@ -7,7 +7,9 @@ use gix_testtools::size_ok; #[test] fn object_ref_size_in_memory() { let actual = std::mem::size_of::>(); - let expected = 56; + let sha1 = 56; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "the size of this structure should not change unexpectedly: {actual} <~ {expected}" @@ -17,7 +19,9 @@ fn object_ref_size_in_memory() { #[test] fn oid_size_in_memory() { let actual = std::mem::size_of::>(); - let expected = 32; + let sha1 = 32; + let sha256_extra = 16; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "the size of this structure should not change unexpectedly: {actual} <~ {expected}" diff --git a/gix/tests/gix/revision/spec/from_bytes/mod.rs b/gix/tests/gix/revision/spec/from_bytes/mod.rs index 2755ff00f25..109b263369e 100644 --- a/gix/tests/gix/revision/spec/from_bytes/mod.rs +++ b/gix/tests/gix/revision/spec/from_bytes/mod.rs @@ -147,7 +147,7 @@ fn bad_objects_are_valid_until_they_are_actually_read_from_the_odb() { | └─ An error occurred while obtaining an object from the loose object store | - └─ decompression of loose object at 'tests/fixtures/generated-do-not-edit/make_rev_spec_parse_repos/2990428670-unix/blob.corrupt/objects/ca/fea31147e840161a1860c50af999917ae1536b' failed + └─ decompression of loose object at 'tests/fixtures/generated-do-not-edit/make_rev_spec_parse_repos/sha1/2990428670-unix/blob.corrupt/objects/ca/fea31147e840161a1860c50af999917ae1536b' failed | └─ Could not decode zip stream, status was 'Invalid input data' | diff --git a/gix/tests/gix/status.rs b/gix/tests/gix/status.rs index 8b832f5c2c8..eb7f69355ee 100644 --- a/gix/tests/gix/status.rs +++ b/gix/tests/gix/status.rs @@ -29,7 +29,9 @@ mod into_iter { #[test] fn item_size() { let actual = std::mem::size_of::(); - let expected = 264; + let sha1 = 264; + let sha256_extra = 56; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "The size is the same as the one for the index-worktree-item: {actual} <~ {expected}" @@ -303,7 +305,9 @@ mod index_worktree { #[test] fn item_size() { let actual = std::mem::size_of::(); - let expected = 264; + let sha1 = 264; + let sha256_extra = 56; + let expected = sha1 + sha256_extra; assert!( size_ok(actual, expected), "The size is pretty huge and goes down ideally: {actual} <~ {expected}" diff --git a/justfile b/justfile index 62fdbc85dab..d633dc6a45f 100755 --- a/justfile +++ b/justfile @@ -155,13 +155,15 @@ unit-tests: cargo nextest run -p gix-archive --no-default-features --features tar_gz --no-fail-fast cargo nextest run -p gix-archive --no-default-features --features zip --no-fail-fast cargo nextest run -p gix-status-tests --features gix-features-parallel --no-fail-fast - cargo nextest run -p gix-worktree-state-tests --features gix-features-parallel --no-fail-fast - cargo nextest run -p gix-worktree-tests --features gix-features-parallel --no-fail-fast + env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-worktree-state-tests --features gix-features-parallel --no-fail-fast + env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-worktree-tests --features gix-features-parallel --no-fail-fast cargo nextest run -p gix-error --no-fail-fast --test auto-chain-error --features auto-chain-error cargo nextest run -p gix-error --no-fail-fast cargo nextest run -p gix-hash --no-fail-fast cargo nextest run -p gix-hash --features sha256 --no-fail-fast cargo nextest run -p gix-hash --no-default-features --features sha256 --no-fail-fast # TODO: make this actually work by removing 'sha1' from default features. + env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-commitgraph --no-fail-fast + env GIX_TEST_FIXTURE_HASH=sha256 cargo nextest run -p gix-commitgraph --no-fail-fast cargo nextest run -p gix-object --no-fail-fast cargo nextest run -p gix-object --features verbose-object-parsing-errors --no-fail-fast cargo nextest run -p gix-tempfile --features signals --no-fail-fast @@ -169,10 +171,11 @@ unit-tests: cargo nextest run -p gix-ref-tests --all-features --no-fail-fast cargo nextest run -p gix-odb --all-features --no-fail-fast cargo nextest run -p gix-odb-tests --features gix-features-parallel --no-fail-fast - cargo nextest run -p gix-pack --all-features --no-fail-fast + env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-pack --all-features --no-fail-fast + env GIX_TEST_FIXTURE_HASH=sha256 cargo nextest run -p gix-pack --all-features --no-fail-fast cargo nextest run -p gix-pack-tests --features all-features --no-fail-fast cargo nextest run -p gix-pack-tests --features gix-features-parallel --no-fail-fast - cargo nextest run -p gix-index-tests --features gix-features-parallel --no-fail-fast + env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-index-tests --features gix-features-parallel --no-fail-fast cargo nextest run -p gix-packetline --features blocking-io,maybe-async/is_sync --test blocking-packetline --no-fail-fast cargo nextest run -p gix-packetline --features async-io --test async-packetline --no-fail-fast cargo nextest run -p gix-transport --features http-client-curl,maybe-async/is_sync --no-fail-fast From dc06493432408b8b97f4479d64e439c89a96fe17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20R=C3=BC=C3=9Fler?= Date: Mon, 9 Feb 2026 16:32:04 +0100 Subject: [PATCH 3/5] feat: Add `Graph::object_hash()` --- gix-commitgraph/src/access.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gix-commitgraph/src/access.rs b/gix-commitgraph/src/access.rs index e09ff635047..85cd5daf5c1 100644 --- a/gix-commitgraph/src/access.rs +++ b/gix-commitgraph/src/access.rs @@ -11,6 +11,20 @@ impl Graph { r.file.commit_at(r.pos) } + /// The kind of hash used in this `Graph`. + /// + /// Note that it is always conforming to the hash used in the owning repository. + /// + /// # Panics + /// + /// If the graph does not contain any `File`. + pub fn object_hash(&self) -> gix_hash::Kind { + self.files + .first() + .map(super::File::object_hash) + .expect("graph to have at least one file") + } + /// Returns the commit matching the given `id`. pub fn commit_by_id(&self, id: impl AsRef) -> Option> { let r = self.lookup_by_id(id.as_ref())?; From 5932e8858d7853c1e51be87f89b9984269fa712f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20R=C3=BC=C3=9Fler?= Date: Mon, 9 Feb 2026 16:32:33 +0100 Subject: [PATCH 4/5] chore: improve crate description --- gix-pack/tests/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gix-pack/tests/Cargo.toml b/gix-pack/tests/Cargo.toml index b946acf760d..1e401a21d66 100644 --- a/gix-pack/tests/Cargo.toml +++ b/gix-pack/tests/Cargo.toml @@ -6,7 +6,7 @@ version = "0.0.0" repository = "https://github.com/GitoxideLabs/gitoxide" authors = ["Sebastian Thiel "] license = "MIT OR Apache-2.0" -description = "Please use `gix-` instead ('git' -> 'gix')" +description = "Tests for the gix-pack crate" edition = "2021" rust-version = "1.82" From 8ccd760621a54d14ca9386b2123d7fedb02931ac Mon Sep 17 00:00:00 2001 From: Sebastian Thiel Date: Sun, 15 Feb 2026 10:49:23 +0100 Subject: [PATCH 5/5] refactor - add object-hash test - add env variable docs - remove seemingly unnecessary fixture hash setup. Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com> --- gix-commitgraph/tests/commitgraph.rs | 8 ++++++++ justfile | 6 +++--- tests/tools/src/lib.rs | 9 +++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/gix-commitgraph/tests/commitgraph.rs b/gix-commitgraph/tests/commitgraph.rs index 8b2ae8776dc..1952b2be37e 100644 --- a/gix-commitgraph/tests/commitgraph.rs +++ b/gix-commitgraph/tests/commitgraph.rs @@ -81,6 +81,14 @@ pub fn graph_and_expected_named( let expected = inspect_refs(&repo_dir, refs); let cg = Graph::from_info_dir(&repo_dir.join(".git").join("objects").join("info")).expect("graph present and valid"); + let object_hash = cg.object_hash(); + let any_ref = expected.values().next().expect("at least one ref"); + assert_eq!( + object_hash, + any_ref.id().kind(), + "graph hash kind should match fixture object IDs" + ); + (cg, expected) } diff --git a/justfile b/justfile index d633dc6a45f..1b0d568e566 100755 --- a/justfile +++ b/justfile @@ -155,8 +155,8 @@ unit-tests: cargo nextest run -p gix-archive --no-default-features --features tar_gz --no-fail-fast cargo nextest run -p gix-archive --no-default-features --features zip --no-fail-fast cargo nextest run -p gix-status-tests --features gix-features-parallel --no-fail-fast - env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-worktree-state-tests --features gix-features-parallel --no-fail-fast - env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-worktree-tests --features gix-features-parallel --no-fail-fast + cargo nextest run -p gix-worktree-state-tests --features gix-features-parallel --no-fail-fast + cargo nextest run -p gix-worktree-tests --features gix-features-parallel --no-fail-fast cargo nextest run -p gix-error --no-fail-fast --test auto-chain-error --features auto-chain-error cargo nextest run -p gix-error --no-fail-fast cargo nextest run -p gix-hash --no-fail-fast @@ -175,7 +175,7 @@ unit-tests: env GIX_TEST_FIXTURE_HASH=sha256 cargo nextest run -p gix-pack --all-features --no-fail-fast cargo nextest run -p gix-pack-tests --features all-features --no-fail-fast cargo nextest run -p gix-pack-tests --features gix-features-parallel --no-fail-fast - env GIX_TEST_FIXTURE_HASH=sha1 cargo nextest run -p gix-index-tests --features gix-features-parallel --no-fail-fast + cargo nextest run -p gix-index-tests --features gix-features-parallel --no-fail-fast cargo nextest run -p gix-packetline --features blocking-io,maybe-async/is_sync --test blocking-packetline --no-fail-fast cargo nextest run -p gix-packetline --features async-io --test async-packetline --no-fail-fast cargo nextest run -p gix-transport --features http-client-curl,maybe-async/is_sync --no-fail-fast diff --git a/tests/tools/src/lib.rs b/tests/tools/src/lib.rs index 79ac5b22faa..f236f8ea005 100644 --- a/tests/tools/src/lib.rs +++ b/tests/tools/src/lib.rs @@ -1,5 +1,14 @@ //! Utilities for testing `gitoxide` crates, many of which might be useful for testing programs that use `git` in general. //! +//! ## Environment Variables +//! +//! ### `GIX_TEST_FIXTURE_HASH` +//! +//! Set this variable to control which hash function is used when creating or loading test fixtures. +//! Valid values are the names of hash functions supported by `gix_hash::Kind` (e.g., `sha1`, `sha256`). +//! If not set, the default hash function via `gix_hash::Kind::default()` is used. +//! + //! ## Feature Flags #![cfg_attr( all(doc, feature = "document-features"),