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 ofjj 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 currentuser.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 theall:
prefix. -
A new config option
ui.allow-filesets
has been added to enable "fileset"
expressions. 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
andjj 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 thatsnapshot.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
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)