## jj-vcs/jj — v0.40.0…v0.41.0

_164+ commits._

### Features
- **op_walk: add closest_common_ancestor() helper** (500d657)
- **mise: add task to generate protobuf definitions** (49d4668)
- **dag_walk_async: add a test of another tricky closest_common_node() case** (e9bdea7)
- **cli: git-clone: add experimental --tag=PATTERN flag** (46f0c24)
- **cli: add JJ_PAGER env override** (7f546fc)
- **templater: add support for dynamic time format strings** (cb8c12d)
- **cli: git: add remotes.<name>.fetch-bookmarks/tags config** (38cb8a2)
- **gerrit: add more push options** (6ee9eb2)
- **graph: add test helper for topo iterator with prioritized nodes** (2ee3547)
- **templater: add substr() to ByteString type** (dd3536c)
- **templater: add replace() to ByteString type** (4f2390e)
- **templater: add split() to ByteString type** (1923c52)
- **templater: add match() to ByteString type** (1d90f92)
- **cli: file-search: Support string pattern syntax for `--pattern`** (a97ce9a)
- **templater: add function to extract ByteString property from tagged union** (d12a3c5)
- **templater: add ByteString type, remove some unneeded UTF-8 round trip** (4d7f5c0)
- **lib: new methods to get merged trees without resolving.** (795e573)
- **templates: add `replace` function** (209f2ec)
- **text_util: add `write_replaced` function** (4c2146c)
- **gitignore: add test for match-all patterns** (d96cd7a)
- **cli: git-push: add --tag=NAME flag, push tracked tags** (85461a2)
- **diff.git: Add a show-path-prefix option to disable a/ and b/ prefixes** (09ede03)
- **git: add tags handling to push_refs()** (7738962)

### Fixes
- **cli: support line range based file fixing for 'jj fix'.** (fdf9f55)
- **fix: implement core logic for formatting only modified lines** (be85bb4)
- **github: fix bot-conditions zizmor warning in dependabot workflow** (9a31594)
- **tests: fix unused import on windows** (e903317)

### Backend
- **release: 0.41.0** (413f539)
- **lib: use ordering heuristic in dag_walk_async::closest_common_node** (afd9215)
- **cargo: bump gix-fs from 0.21.0 to 0.21.1** (e86b2b2)
- **github: bump the github-dependencies group with 2 updates** (32c690f)
- **cli: git: update generated repo config on remote rename/remove** (2c70ab0)
- **status: don't report clean working copy with filtered-out untracked paths** (252a65b)
- **status: suppress empty working-copy changes header** (6bb2eb7)
- **status: refactor working copy status setup** (5869a08)
- **cli: git-clone: save --branch patterns to jj's config file** (f7def80)
- **cli: git-clone: save --tag patterns to repo config file** (d3f0df4)
- **cargo: bump the cargo-dependencies group with 3 updates** (17623b0)
- **git: remove hint about not running `git clean -xdf`** (f2eea82)
- **git_util: use get_commit_async() + try_join_all() in print_imported_changes()** (4741abe)
- **cli: use get_commit_async() + try_join_all() in a few more places** (609b2eb)
- **working_copy: make start_mutation() async** (22b0497)
- **cli_util: make unchecked_start_working_copy_mutation() async** (fd2fcad)
- **test_fix: replace some `.unwrap()` by `?`** (327a3c1)
- **cli: use get_commit_async() in more places where trivial** (7ade7fc)
- **cli_util: make LogContentFormat::write() take async closure** (6ac9cf7)
- **templater: attach alias context to config name error** (0160c44)
- **gerrit: use check_rewritable() for default upload revision** (008e987)
- **gerrit: check default upload revisions are rewritable** (755b7b7)
- **cli: Update `jj op integrate` help text** (f522592)
- **cargo: update gix from 0.82 to 0.83, gix-ignore from 0.20 to 0.21** (e41b797)
- **progress: Reframe future work as working-as-intended** (0aa2f87)
- **gerrit: Don't use short hand for `reviewer` push option** (370d0a1)
- **gerrit: Use GitPushOptions::remote_push_options instead of extra_args** (aefe6de)
- **cli: git: disable implicit tag fetching when --branch is specified** (c7478a1)
- **cli: don't insert useless auto-track-bookmarks matchers** (bb9f986)
- **github: bump the github-dependencies group with 3 updates** (cc1aa77)
- **cargo: bump the cargo-dependencies group with 2 updates** (343354b)
- **cargo: bump the cargo-dependencies group with 3 updates** (693bb0f)
- **revset: delete unused RevsetIteratorExt** (706b5b5)
- **github: mention redacted log output in issue template (#9372)** (533a0c1)
- **revset: delete iter() and iter_graph()** (6ff647b)
- **tests: use Revset::stream()** (6c52650)
- **graph: make TopoGroupedGraph return a Stream** (fa00226)
- **graph: make TopoGroupedGraphIteratorBuilder take Stream as input** (07938b6)
- **graph: make TopoGroupedGraphIterator a builder** (8c47529)
- **graph: avoid looking inside topological iterator in tests** (5084000)
- **evolog: don't use block_on_stream() in --no-graph case** (cbf197d)
- **cargo: bump rand from 0.9.2 to 0.9.4** (c0b60f0)
- **cargo: bump rand from 0.8.5 to 0.8.6** (1ce92cf)
- **templater: use monadic functions in String::substr() for short** (de3ad0f)
- **evolution: make walk_predecessors() return a stream instead of iterator** (440f184)
- **evolution: leverage try_next() in  WalkPredecessors::try_next()** (4c26e32)
- **log: use Revset::stream in non-graph mode** (2029c5e)
- **examples: use Revset::stream()** (9be2a83)
- **templater: copy simple 1-ary methods to ByteString type** (1dbefa3)
- **templater: sort String methods in doc and code** (d3cc135)
- **templater: remove fallible UTF-8 conversion from unit tests** (2e93ecc)
- **github: bump the github-dependencies group with 5 updates** (670f746)
- **cargo: bump the cargo-dependencies group with 5 updates** (d6b13bb)
- **split: Update description of `--message` flag** (17557cd)
- **lib: Derive Hash for Signature** (61c0437)
- **templater: make other .try_into_<type>() functions recoverable** (c621f0d)
- **templater: import jj_lib::backend::Timestamp by name** (fe0c898)
- **templater: extract common template fallback from try_into_stringify()** (40a94eb)
- **lib: Derive Hash for ConflictLabels** (6743c86)
- **git: avoid changing subprocess encoding to latin variant** (93b964d)
- **contributing: Clarify that it's ok to resolve conversations** (3347daa)
- **ui: Make can_prompt return false when stdout is null** (15ac425)
- **working_copy: existing submodule directory on checkout is ok** (158f238)
- **working_copy: create and remove empty git submodule directories on checkout** (5fa9071)
- **git_backend: In write_file, compute hashes outside locks** (713a0d0)
- **github: bump the github-dependencies group with 5 updates** (46329c1)
- **github: replace actions/github-script ref with exact commit hash** (597c96e)
- **cargo: bump the cargo-dependencies group with 7 updates** (a0919e8)
- **gitignore: use RepoPath to guarantee that path is slash-separated** (b07d48c)
- **gitignore: pass plain path string to .chain() for consistency** (e34e35d)
- **gitignore: split matches() into matches_file/dir()** (fab5bf6)
- **gitignore: don't specify wrong "root" path when loading in-tree .gitignore** (830275a)
- **snapshot: Reduce lock contention in `snapshot_progress`** (ce60c37)
- **arrange: make rows as high as needed for template** (8df450a)
- **tests: update TestFileFixer to use explicit replacements map.** (9a6bcd2)
- **core_tenets: Clarify the "having as few states as possible" one** (6a52e64)
- **cli: git-push: push tracked tags in default/specified revsets** (0879d28)
- **status: filter untracked paths by fileset** (53e5ea6)
- **github: suppress github-env zizmor warning in setup-windows action** (0e9f7bb)
- **github: suppress dangerous-triggers zizmor warning in pr workflow** (c62044b)
- **github: bump taiki-e/install-action in the github-dependencies group** (f2e1e0a)
- **cli: git-push: extract remote_symbol variable to save vertical space** (dea4df9)
- **cli: git-push: pass around GitPushRefTargets, loop over bookmarks and tags** (a273365)
- **cli: git-push: rephrase stats messages for ease of constructing programmatically** (e1aaddb)
- **cli: git-push: move clap ArgGroup configuration to field attributes** (98619c8)
- **gitignore: Switch to the gix-ignore library** (0c96041)
- **description_util: delete unused field TextEditor::dir** (f7bbff7)
- **git: expand allowed branch keys to include rebase** (ae6edd6)
- **repo: make some functions async** (cc11f32)
- **evolution: make some functions async** (6ec0757)
- **dag_walk_async: make `topo_order_*` functions async** (222ebf5)
- **templater: deprecate `Operation.tags()` in favor of `.attributes()`** (c38d69e)
- **cargo: bump the cargo-dependencies group with 5 updates** (9014212)
- **gitignore: switch matching to non-recursive** (8129f48)
- **log: rely on revset engine for intersection of prioritized revset** (984dd28)
- **git: parameterize remote matcher of find_git_tag_oid_to_copy()** (91a1445)
- **git: use gix::ObjectId in low-level push functions** (733bae5)
- **git: extract and use helper to convert CommitId to gix::ObjectId** (2d19df8)
- **dag_walk_async: make heads() async and concurrent** (62aa9f0)
- **dag_walk_async: make heads() take Result of iterator instead of inverse** (50ef002)
- **dag_walk_async: make closest_common_node() concurrent** (9f62740)
- **dag_walk_async: further simplify error handling in closest_common_node()** (ac3505f)
- **dag_walk_async: simplify error handling in closest_common_node()** (09caac5)
- **dag_walk_async: make closest_common_node() not accept errors in inputs** (5665764)
- **dag_walk_async: make closest_common_node() async** (538309e)
- **dag_walk_async: drop redundant `_ok()` suffix** (b2a0d0a)
- **dag_walk_sync: delete infallible versions** (a03edfe)
- **dag_walk: delete unused functions** (74ba3f3)
- **dag_walk: switch over callers to dag_walk_async as appropriate** (2edf433)
- **dag_walk: duplicate module as dag_walk_async** (9895804)
- **dag_walk: remove obsolete reference to panicking behavior from test** (caf9ea7)
- **op_store: keep tags sorted** (427d469)

### Docs
- **docs: Add section about escapes in TOML strings** (402ffd8)
- **docs: Add myself to paid contributors file** (36113fb)
- **docs: fix setting name for Gerrit remote** (3eea1ed)
- **docs: Describe how to view a `change-id` header using `git` itself.** (eb3bc76)
- **docs: Update `git` compatibility to make it clear that the change ID is written by default.** (2bfceb2)
- **docs: rename 'Settings' to 'Configuration' in menu #7011** (8e5e0b3)
- **docs: add JayJay to community tools page** (ff85aad)
- **docs: add jj-idea IntelliJ integration** (7e10c3b)
- **docs: fix some documentation errors and improvements** (24905c8)

### Chore
- **ci: allow macos-x86_64 to fail** (15e2747)
- **build(deps): bump vite from 6.4.1 to 6.4.2 in /web/docs** (4a9101a)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/jj-vcs/jj?utm_source=github-action)._