Skip to content

Support refs to trees#1449

Merged
j178 merged 5 commits intoj178:masterfrom
jtamagnan:master
Jan 22, 2026
Merged

Support refs to trees#1449
j178 merged 5 commits intoj178:masterfrom
jtamagnan:master

Conversation

@jtamagnan
Copy link
Contributor

@jtamagnan jtamagnan commented Jan 21, 2026

Problem

Sometimes I want to run checks on a set of changes including my staged changes but not my unstaged changes. In pre-commit I do this by running:

$ pre-commit --from-ref=refs/remotes/origin/master --to-ref=$(git write-tree)

but in prek I get an error like:

$ prek --from-ref=refs/remotes/origin/master --to-ref=$(git write-tree)
error: Failed to collect files
  caused by: Command `get changed files` exited with an error:

[status]
exit status: 128

[stderr]
error: object 6824461bcaf59561411b9b4c1c66479a819ffb44 is a tree, not a commit
fatal: Invalid symmetric difference expression refs/remotes/origin/master...6824461bcaf59561411b9b4c1c66479a819ffb44

Evaluation

This fails because I am passing in a ref to a tree instead of a ref to a commit. When passing in a commit/branch everything works as expected.

This happens because the get_changed_files uses ... instead of ... A...B means "get all the differences in the A branch and the B branch when compared to their merge-base", A..B means "get all the differences between A and B". Importantly ... requires commits because it compares to the merge base, .. on the other hand compares any two references regardless of whether those references are commits or trees.

Solution

Try to use ... and fall back to ..

This change feels safe because:

  • it is consistent with pre-commit
  • get_changed_files is only used in the case where -to-ref and --from-ref are used
  • by default we use the same functionality as before. We just better handle the failure case
  • no existing test fail

Testing

I've added a new test that only passes with this code change and validated that no existing tests break because of this change.

@codecov
Copy link

codecov bot commented Jan 21, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.77%. Comparing base (5400299) to head (bab3fe0).
⚠️ Report is 3 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1449      +/-   ##
==========================================
+ Coverage   90.74%   90.77%   +0.02%     
==========================================
  Files          82       82              
  Lines       16776    16787      +11     
==========================================
+ Hits        15224    15238      +14     
+ Misses       1552     1549       -3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions
Copy link

github-actions bot commented Jan 21, 2026

📦 Cargo Bloat Comparison

Binary size change: +0.00% (22.5 MiB → 22.5 MiB)

Expand for cargo-bloat output

Head Branch Results

 File  .text    Size        Crate Name
 0.3%   0.8% 71.4KiB        prek? <prek::cli::Command as clap_builder::derive::Subcommand>::augment_subcommands
 0.3%   0.7% 62.5KiB         prek prek::languages::<impl prek::config::Language>::run::{{closure}}::{{closure}}
 0.2%   0.6% 55.3KiB         prek prek::languages::<impl prek::config::Language>::run::{{closure}}::{{closure}}
 0.2%   0.5% 46.7KiB         prek prek::run::{{closure}}
 0.2%   0.5% 42.7KiB         prek prek::cli::run::run::run::{{closure}}
 0.2%   0.5% 42.7KiB         prek prek::identify::by_extension::{{closure}}
 0.2%   0.4% 35.1KiB         prek prek::languages::<impl prek::config::Language>::install::{{closure}}
 0.1%   0.3% 31.8KiB        prek? <prek::cli::RunArgs as clap_builder::derive::Args>::augment_args
 0.1%   0.3% 30.0KiB  serde_json? <&mut serde_json::de::Deserializer<R> as serde_core::de::Deserializer>::deserialize_struct
 0.1%   0.2% 21.5KiB         prek prek::archive::unzip::{{closure}}
 0.1%   0.2% 21.3KiB clap_builder clap_builder::parser::parser::Parser::get_matches_with
 0.1%   0.2% 20.0KiB         prek prek::cli::run::filter::collect_files_from_args::{{closure}}
 0.1%   0.2% 19.6KiB         prek prek::cli::run::filter::collect_files_from_args::{{closure}}
 0.1%   0.2% 19.6KiB         prek <prek::languages::ruby::ruby::Ruby as prek::languages::LanguageImpl>::install::{{closure}}
 0.1%   0.2% 18.6KiB         ring ring_core_0_17_14__x25519_ge_frombytes_vartime
 0.1%   0.2% 18.3KiB         prek prek::hooks::meta_hooks::check_hooks_apply::{{closure}}
 0.1%   0.2% 18.3KiB         prek prek::hooks::meta_hooks::check_hooks_apply::{{closure}}
 0.1%   0.2% 18.2KiB         prek prek::cli::run::filter::collect_files_from_args::{{closure}}
 0.1%   0.2% 18.2KiB   hyper_util hyper_util::client::legacy::client::Client<C,B>::send_request::{{closure}}
 0.1%   0.2% 18.1KiB    [Unknown] fe_loose_invert
36.6%  91.5%  8.2MiB              And 19772 smaller methods. Use -n N to show more.
40.0% 100.0%  9.0MiB              .text section size, the file size is 22.5MiB

Base Branch Results

 File  .text    Size        Crate Name
 0.3%   0.8% 71.9KiB        prek? <prek::cli::Command as clap_builder::derive::Subcommand>::augment_subcommands
 0.3%   0.7% 60.0KiB         prek prek::languages::<impl prek::config::Language>::run::{{closure}}::{{closure}}
 0.2%   0.6% 55.1KiB         prek prek::languages::<impl prek::config::Language>::run::{{closure}}::{{closure}}
 0.2%   0.5% 46.3KiB         prek prek::run::{{closure}}
 0.2%   0.5% 42.7KiB         prek prek::cli::run::run::run::{{closure}}
 0.2%   0.5% 42.7KiB         prek prek::identify::by_extension::{{closure}}
 0.2%   0.4% 35.1KiB         prek prek::languages::<impl prek::config::Language>::install::{{closure}}
 0.1%   0.3% 31.8KiB        prek? <prek::cli::RunArgs as clap_builder::derive::Args>::augment_args
 0.1%   0.3% 30.0KiB  serde_json? <&mut serde_json::de::Deserializer<R> as serde_core::de::Deserializer>::deserialize_struct
 0.1%   0.2% 21.6KiB         prek prek::archive::unzip::{{closure}}
 0.1%   0.2% 21.3KiB clap_builder clap_builder::parser::parser::Parser::get_matches_with
 0.1%   0.2% 19.6KiB         prek <prek::languages::ruby::ruby::Ruby as prek::languages::LanguageImpl>::install::{{closure}}
 0.1%   0.2% 19.3KiB         prek prek::cli::run::filter::collect_files_from_args::{{closure}}
 0.1%   0.2% 18.9KiB         prek prek::cli::run::filter::collect_files_from_args::{{closure}}
 0.1%   0.2% 18.6KiB         ring ring_core_0_17_14__x25519_ge_frombytes_vartime
 0.1%   0.2% 18.3KiB         prek prek::hooks::meta_hooks::check_hooks_apply::{{closure}}
 0.1%   0.2% 18.3KiB         prek prek::hooks::meta_hooks::check_hooks_apply::{{closure}}
 0.1%   0.2% 18.2KiB   hyper_util hyper_util::client::legacy::client::Client<C,B>::send_request::{{closure}}
 0.1%   0.2% 18.1KiB    [Unknown] fe_loose_invert
 0.1%   0.2% 17.7KiB         prek prek::cli::run::filter::collect_files_from_args::{{closure}}
36.6%  91.6%  8.2MiB              And 19789 smaller methods. Use -n N to show more.
40.0% 100.0%  9.0MiB              .text section size, the file size is 22.5MiB

@j178 j178 added the enhancement New feature or request label Jan 22, 2026
@j178
Copy link
Owner

j178 commented Jan 22, 2026

Thanks!

@j178 j178 merged commit 1ea64fc into j178:master Jan 22, 2026
22 checks passed
@jtamagnan
Copy link
Contributor Author

Thanks for the super quick review and approval!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants