v0.17.0
jj-vcs/jjv0.17.0May 1, 2024by martinvonz
AI Summary
Introduces the `jj parallelize` command, template method additions, and experimental fileset support via config.
Key Highlights
- New `jj parallelize` command to rebase revisions into siblings.
- Templates gain new methods (`mine()`, `contained_in()`, `snapshot()`).
- Experimental fileset support enabled via config.
- `jj status` supports filtering by paths.
Breaking Changes
- Default template aliases changed.
- `jj rebase` `--revision` renamed to `--revisions`.
- Revsets now support `\`-escapes in string literals.
New Features
- `jj status` supports filtering by paths.
- `jj prev`/`next` work on merge working copies.
- `jj squash` `--use-destination-message` option.
- `jj rebase` accepts revsets with multiple revisions.
- `jj rebase` `--insert-after` and `--insert-before` options.
- `jj debug watchman status` command.
- `--ignore-immutable` global flag.
Full Release Notes
### Breaking changes
* The default template aliases were replaced as follows:
* `builtin_op_log_root(op_id: OperationId)` ->
`format_root_operation(root: Operation)`
* `builtin_log_root(change_id: ChangeId, commit_id: CommitId)` ->
`format_root_commit(root: Commit)`
* `builtin_change_id_with_hidden_and_divergent_info` ->
`format_short_change_id_with_hidden_and_divergent_info(commit: Commit)`
* The `--revision` option of `jj rebase` is renamed to `--revisions`. The short
alias `-r` is still supported.
### New features
* The list of conflicted paths is printed whenever the working copy changes.
This can be disabled with the `--quiet` option.
* Commit objects in templates now have a `mine() -> Boolean` method analog to
the same function in revsets. It evaluates to true if the email of the commit
author matches the current `user.email`.
* Commit objects in templates now have a `contained_in(revset: String) ->
Boolean` method.
* Operation objects in templates now have a `snapshot() -> Boolean` method that
evaluates to true if the operation was a snapshot created by a non-mutating
command (e.g. `jj log`).
* Revsets and templates now support single-quoted raw string literals.
* A new config option `ui.always-allow-large-revsets` has been added to
allow large revsets expressions in some commands, without the `all:` prefix.
* A new config option `ui.allow-filesets` has been added to enable ["fileset"
expressions](docs/filesets.md). Note that filesets are currently experimental,
but will be enabled by default in a future release.
* A new global flag `--ignore-immutable` lets you rewrite immutable commits.
* New command `jj parallelize` that rebases a set of revisions into siblings.
* `jj status` now supports filtering by paths. For example, `jj status .` will
only list changed files that are descendants of the current directory.
* `jj prev` and `jj next` now work when the working copy revision is a merge.
* `jj squash` now accepts a `--use-destination-message/-u` option that uses the
description of the destination for the new squashed revision and discards the
descriptions of the source revisions.
* You can check whether Watchman fsmonitor is enabled or installed with the new
`jj debug watchman status` command.
* `jj rebase` now accepts revsets resolving to multiple revisions with the
`--revisions`/`-r` option.
* `jj rebase -r` now accepts `--insert-after` and `--insert-before` options to
customize the location of the rebased revisions.
### Fixed bugs
* Revsets now support `\`-escapes in string literal.
* The builtin diff editor now allows empty files to be selected during
`jj split`.
* Fixed a bug with `jj split` introduced in 0.16.0 that caused it to incorrectly
rebase the children of the revision being split if they had other parents
(i.e. if the child was a merge).
* The `snapshot.max-new-file-size` option can now handle raw integer literals,
interpreted as a number of bytes, where previously it could only handle string
literals. This means that `snapshot.max-new-file-size="1"` and
`snapshot.max-new-file-size=1` are now equivalent.
* `jj squash <path>` is now a no-op if the path argument didn't match any paths
(it used to create new commits with bumped timestamp).
[#3334](https://github.com/martinvonz/jj/issues/3334)
### Contributors
Thanks to the people who made this release happen!
* Anton Älgmyr (@algmyr)
* Anton Bulakh (@necauqua)
* Austin Seipp (@thoughtpolice)
* Benjamin Tan (@bnjmnt4n)
* Cretezy (@Cretezy)
* Daniel Ploch (@torquestomp)
* Evan Mesterhazy (@emesterhazy)
* Ilya Grigoriev (@ilyagr)
* Martin von Zweigbergk (@martinvonz)
* Noah Mayr (@noahmayr)
* Jeremy O'Brien (@neutralinsomniac)
* Jonathan Lorimer (@JonathanLorimer)
* Philip Metzger (@PhilipMetzger)
* Poliorcetics (@poliorcetics)
* Rowan Walsh (@rowan-walsh)
* Scott Olson (@solson)
* Théo Daron (@Kaporos)
* Yuya Nishihara (@yuja)