v0.7.0
Breaking changes
-
The minimum supported Rust version (MSRV) is now 1.61.0.
-
The
jj touchup
command was renamed tojj diffedit
. -
The
-i
option tojj restore
was removed in favor of new--from
/--to
options tojj diffedit
. -
To report the situation when a change id corresponds to multiple visible
commits,jj log
now prints the change id in red and puts??
after it.
Previously, it printed the word "divergent". -
jj log
prefixes commit descriptions with "(empty)" when they contain no
change compared to their parents. -
The
author
/committer
templates now display both name and email. Use
author.name()
/committer.name()
to extract the name. -
Storage of the "HEAD@git" reference changed and can now have conflicts.
Operations written by a newjj
binary will have a "HEAD@git" reference that
is not visible to older binaries. -
The
description
template keyword is now empty if no description set.
Useif(description, description, "(no description set)\n")
to get back
the previous behavior. -
The
template.log.graph
andtemplate.commit_summary
config keys were
renamed totemplates.log
andtemplates.commit_summary
respectively. -
If a custom
templates.log
template is set, working-copy commit will
no longer be highlighted automatically. Wrap your template with
label(if(current_working_copy, "working_copy"), ...)
to label the
working-copy entry. -
The
ui.relative-timestamps
option has been removed. Use the
format_timestamp()
template alias instead. For details on showing relative
timestamps injj log
andjj show
, see the documentation. -
jj op log
now shows relative timestamps by default. To disable, set
ui.oplog-relative-timestamps
tofalse
. -
The global
--no-commit-working-copy
is now called--ignore-working-copy
. -
The
diff.format
config option is now calledui.diff.format
. The old name
is still supported for now. -
merge-tools.<name>.edit-args
now requires$left
/$right
parameters.
The default isedit-args = ["$left", "$right"]
. -
The builtin
jj update
andjj up
aliases forjj checkout
have been
deleted. -
Change IDs are now rendered using letters from the end of the alphabet (from
'z' through 'k') instead of the usual hex digits ('0' through '9' and 'a'
through 'f'). This is to clarify the distinction between change IDs and commit
IDs, and to allow more efficient lookup of unique prefixes. This change
doesn't affect the storage format; existing repositories will remain usable.
New features
-
The default log format now uses the committer timestamp instead of the author
timestamp. -
jj log --summary --patch
now shows both summary and diff outputs. -
jj git push
now accepts multiple--branch
/--change
arguments -
jj config list
command prints values from config andconfig edit
opens
the config in an editor. -
jj debug config-schema
command prints out JSON schema for the jj TOML config
file format. -
jj resolve --list
can now describe the complexity of conflicts. -
jj resolve
now notifies the user of remaining conflicts, if any, on success.
This can be prevented by the new--quiet
option. -
Per-repository configuration is now read from
.jj/repo/config.toml
. -
Background colors, bold text, and underlining are now supported. You can set
e.g.color.error = { bg = "red", bold = true, underline = true }
in your
~/.jjconfig.toml
. -
The
empty
condition in templates is true when the commit makes no change to
the three compared to its parents. -
branches([needle])
revset function now takesneedle
as an optional
argument and matches just the branches whose name containsneedle
. -
remote_branches([branch_needle[, remote_needle]])
now takesbranch_needle
andremote_needle
as optional arguments and matches just the branches whose
name containsbranch_needle
and remote containsremote_needle
. -
jj git fetch
accepts repeated--remote
arguments. -
Default remotes can be configured for the
jj git fetch
andjj git push
operations ("origin" by default) using thegit.fetch
andgit.push
configuration entries.git.fetch
can be a list if multiple remotes must
be fetched from. -
jj duplicate
can now duplicate multiple changes in one go. This preserves
any parent-child relationships between them. For example, the entire tree of
descendants ofabc
can be duplicated withjj duplicate abc:
. -
jj log
now highlights the shortest unique prefix of every commit and change
id and shows the rest in gray. To customize the length and style, use the
format_short_id()
template alias. For details, see
the documentation. -
jj print
was renamed tojj cat
.jj print
remains as an alias. -
In content that goes to the terminal, the ANSI escape byte (0x1b) is replaced
by a "␛" character. That prevents them from interfering with the ANSI escapes
jj itself writes. -
jj workspace root
prints the root path of the current workspace. -
The
[alias]
config section was renamed to[aliases]
. The old name is
still accepted for backwards compatibility for some time. -
Commands that draw an ASCII graph (
jj log
,jj op log
,jj obslog
) now
have different styles available by setting e.g.ui.graph.style = "curved"
. -
jj split
accepts creating empty commits when given a path.jj split .
inserts an empty commit between the target commit and its children if any,
andjj split any-non-existent-path
inserts an empty commit between the
target commit and its parents. -
Command arguments to
ui.diff-editor
/ui.merge-editor
can now be specified
inline without referring to[merge-tools]
table. -
jj rebase
now accepts a new--allow-large-revsets
argument that allows the
revset in the-d
argument to expand to several revisions. For example,
jj rebase -s B -d B- -d C
now works even ifB
is a merge commit. -
jj new
now also accepts a--allow-large-revsets
argument that behaves
similarly tojj rebase --allow-large-revsets
. -
jj new --insert-before
inserts the new commit between the target commit and
its parents. -
jj new --insert-after
inserts the new commit between the target commit and
its children. -
author
/committer
templates now support.username()
, which leaves out the
domain information of.email()
. -
It is now possible to change the author format of
jj log
with the
format_short_signature()
template alias. For details, see
the documentation. -
Added support for template aliases. New symbols and functions can be
configured bytemplate-aliases.<name> = <expression>
. Be aware that
the template syntax isn't documented yet and is likely to change.
Fixed bugs
-
When sharing the working copy with a Git repo, we used to forget to export
branches to Git when only the working copy had changed. That's now fixed. -
Commit description set by
-m
/--message
is now terminated with a newline
character, just like descriptions set by editor are. -
The
-R
/--repository
path must be a valid workspace directory. Its
ancestor directories are no longer searched. -
Fixed a crash when trying to access a commit that's never been imported into
the jj repo from a Git repo. They will now be considered as non-existent if
referenced explicitly instead of crashing. -
Fixed handling of escaped characters in .gitignore (only keep trailing spaces
if escaped properly). -
jj undo
now works afterjj duplicate
. -
jj duplicate
followed byjj rebase
of a tree containing both the original
and duplicate commit no longer crashes. The fix should also resolve any remaining
instances of #27. -
Fix the output of
jj debug completion --help
by reversing fish and zsh text. -
Fixed edge case in
jj git fetch
when a pruned branch is a prefix of another
branch.
Contributors
Thanks to the people who made this release happen!
- Aleksandr Mikhailov (@AM5800)
- Augie Fackler (@durin42)
- Benjamin Saunders (@Ralith)
- Daniel Ploch (@torquestomp)
- Danny Hooper (@hooper)
- David Barnett (@dbarnett)
- Glen Choo (@chooglen)
- Herby Gillot (@herbygillot)
- Ilya Grigoriev (@ilyagr)
- Luke Granger-Brown (@lukegb)
- Martin von Zweigbergk (@martinvonz)
- Michael Forster (@MForster)
- Philip Metzger (@PhilipMetzger)
- Ruben Slabbert (@rslabbert)
- Samuel Tardieu (@samueltardieu)
- Tal Pressman (@talpr)
- Vamsi Avula (@avamsi)
- Waleed Khan (@arxanas)
- Yuya Nishihara (@yuja)