jj/cli
Scott Taylor c5b0b0b68f revset: insert HeadsRange in Ancestors for nested range/filter
This allows evaluating ancestors/ranges involving filters significantly
faster. For instance, naively evaluating `::mine()` requires reading
every commit in the repo to check `mine()` on each commit, then finding
the ancestors of that set. This optimization rewrites `::mine()` to
`::heads(mine())`, since `heads(mine())` can be evaluated more
efficiently by only reading commits until the first successful match.

If someone is unaware of how revsets are implemented, this case can come
up pretty easily, such as by including `~mine()` in `immutable_heads()`
to make other people's commits immutable. In my local `jj` repo, this
optimization reduces the runtime of `jj log` with `~mine()` in
`immutable_heads()` from about 800ms down to about 50ms.

Benchmark results on Git repo:

```
::(v1.0.0..v2.40.0)     55.5% faster
author(peff)..          96.8% faster
```
2025-08-02 01:40:23 +00:00
..
examples cli lib: make use of Self consistent 2025-07-27 00:12:02 +00:00
src templater: add commit.files() function to list existing files 2025-08-02 01:30:29 +00:00
testing revset: insert HeadsRange in Ancestors for nested range/filter 2025-08-02 01:40:23 +00:00
tests templater: add commit.files() function to list existing files 2025-08-02 01:30:29 +00:00
build.rs build.rs: separate commit ids if compiling at a merge commit 2025-07-08 02:38:21 +00:00
Cargo.toml cli: remove remaining users of glob crate 2025-07-25 08:22:35 +00:00
docs build: fix cargo publish by symlinking cli/docs->docs 2024-11-05 17:37:14 -08:00
LICENSE cargo: add LICENSE file to each crate we publish 2023-09-22 21:48:28 -07:00