v0.18.0
jj-vcs/jjv0.18.0Jun 6, 2024by martinvonz
AI Summary
Introduces the `jj fix` command for code formatting, adds new revsets (`reachable`, `mutable`, `immutable`), and improves config parsing for TOML keys.
Key Highlights
- New `jj fix` command for automatic code formatting.
- Revsets `reachable(srcs, domain)`, `mutable()`, and `immutable()` added.
- Config parsing improved for TOML keys.
- `jj branch list`/`tag list` now support templates.
Breaking Changes
- `ui.default-revset` config dropped.
- Template `commit_summary_no_branches` superseded by `templates.branch_list`.
- `jj split` refuses to split empty commits.
- `jj config` parse name as TOML keys.
- `jj new` options `--insert-before`/`--after` must be set per commit.
New Features
- `jj branch track` shows conflicts.
- `jj new` supports both insert options simultaneously.
- `jj git push` supports `--allow-empty-description`.
- Conflict markers include explanations.
- Prebuilt binaries for `aarch64-linux-unknown-musl`.
Full Release Notes
### Breaking changes * Dropped support for `ui.default-revset` config (replaced by `revsets.log` in 0.8.0). * The `commit_summary_no_branches` template is superseded by `templates.branch_list`. * `jj split` will now refuse to split an empty commit. * `jj config list` now uses multi-line strings and single-quoted strings in the output when appropriate. * `jj config get`/`list`/`set` now parse `name` argument as [TOML key](https://toml.io/en/v1.0.0#keys). Quote meta characters as needed. Example: `jj config get "revset-aliases.'trunk()'"` * When updating the working copy away from an empty and undescribed commit, it is now abandoned even if it is a merge commit. * If a new working-copy commit is created because the old one was abandoned, and the old commit was merge, then the new commit will now also be. [#2859](https://github.com/martinvonz/jj/issues/2859) * `jj new`'s `--insert-before`/`--insert-after` options must now be set for each commit the new commit will be inserted before/after. Previously, those options were global flags and specifying them once would insert the new commit before/ after all the specified commits. ### Deprecations * Attempting to alias a built-in command now gives a warning, rather than being silently ignored. ### New features * `jj branch list`/`tag list` now accept `-T`/`--template` option. The tag list prints commit summary along with the tag name by default. * Conflict markers now include an explanation of what each part of the conflict represents. * `ui.color = "debug"` prints active labels alongside the regular colored output. * `jj branch track` now show conflicts if there are some. * A new revset `reachable(srcs, domain)` will return all commits that are reachable from `srcs` within `domain`. * There are now prebuilt binaries for `aarch64-linux-unknown-musl`. Note, these are cross compiled and currently untested. We plan on providing fully tested builds later once our CI system allows it. * Added new revsets `mutable()` and `immutable()`. * Upgraded `scm-record` from v0.2.0 to v0.3.0. See release notes at <https://github.com/arxanas/scm-record/releases/tag/v0.3.0> * New command `jj fix` that can be configured to update commits by running code formatters (or similar tools) on changed files. The configuration schema and flags are minimal for now, with a number of improvements planned (for example, [#3800](https://github.com/martinvonz/jj/issues/3800) and [#3801](https://github.com/martinvonz/jj/issues/3801)). * `jj new`'s `--insert-before` and `--insert-after` options can now be used simultaneously. * `jj git push` now can push commits with empty descriptions with the `--allow-empty-description` flag ### Fixed bugs * Previously, `jj git push` only made sure that the branch is in the expected location on the remote server when pushing a branch forward (as opposed to sideways or backwards). Now, `jj git push` makes a safety check in all cases and fails whenever `jj git fetch` would have introduced a conflict. In other words, previously branches that moved sideways or backward were pushed similarly to Git's `git push --force`; now they have protections similar to `git push --force-with-lease` (though not identical to it, to match the behavior of `jj git fetch`). Note also that because of the way `jj git fetch` works, `jj` does not suffer from the same problems as Git's `git push --force-with-lease` in situations when `git fetch` is run in the background. * When the working copy commit becomes immutable, a new one is automatically created on top of it to avoid letting the user edit the immutable one. * `jj config list` now properly escapes TOML keys (#1322). * Files with conflicts are now checked out as executable if all sides of the conflict are executable. * The progress bar (visible when using e.g. `jj git clone`) clears the remainder of the cursor row after drawing rather than clearing the entire row before drawing, eliminating the "flicker" effect seen on some terminals. ### Contributors Thanks to the people who made this release happen! * Alexander Potashev (@aspotashev) * Austin Seipp (@thoughtpolice) * Benjamin Tan (@bnjmnt4n) * Charles Crete (@Cretezy) * Daniel Ploch (@torquestomp) * Danny Hooper (@hooper) * Eidolon (@HybridEidolon) * Glen Choo (@chooglen) * Gregory Anders (@gpanders) * Ilya Grigoriev (@ilyagr) * jyn (@jyn514) * Martin von Zweigbergk (@martinvonz) * Matt Stark (@matts1) * Matthew Davidson (@KingMob) * Michael Gattozzi (@mgattozzi) * mlcui (@mlcui-corp) * Philip Metzger (@PhilipMetzger) * Remo Senekowitsch (@senekor) * Thomas Castiglione (@gulbanana) * Théo Daron (@tdaron) * tinger (@tingerrr) * Waleed Khan (@arxanas) * Yuya Nishihara (@yuja)