v0.27.0
About
jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.
Release highlights
git.subprocessis now enabled by default, improving compatibility with Git
fetches and pushes by spawning an externalgitprocess. Users can opt out
of this by settinggit.subprocess = false, but this will likely be removed
in a future release. Please report any issues you run into.
Breaking changes
-
Bookmark name to be created/updated is now parsed as a revset
symbol. Quotation may be needed in addition to shell
quotes. Example:jj bookmark create -r@- "'name with space'" -
jj bookmark create,jj bookmark setandjj bookmark moveonto a hidden
commit make it visible. -
jj bookmark forgetnow untracks any corresponding remote bookmarks instead
of forgetting them, since forgetting a remote bookmark can be unintuitive.
The old behavior is still available with the new--include-remotesflag. -
jj fixnow always sets the working directory of invoked tools to be the
workspace root, instead of the working directory of thejj fix. -
The
ui.allow-filesetsconfiguration option has been removed.
The "fileset" language has been enabled by default since v0.20. -
templates.annotate_commit_summaryis renamed totemplates.file_annotate,
and now has an implicitselfparameter of typeAnnotationLine, instead of
Commit. All methods onCommitcan be accessed withcommit.method(), or
self.commit().method().
Deprecations
-
This release takes the first steps to make target revision required in
bookmark create,bookmark moveandbookmark set. Those commands will display
a warning if the user does not specify target revision explicitly. In the near
future those commands will fail if target revision is not specified. -
The
signing.sign-allconfig option has been deprecated in favor of
signing.behavior. The new option acceptsdrop(never sign),keep(preserve
existing signatures),own(sign own commits), orforce(sign all commits).
Existingsigning.sign-all = truetranslates tosigning.behavior = "own", and
falsetranslates to"keep". Invalid configuration is now an error.
New features
-
The new
jj signandjj unsigncommands allow for signing/unsigning commits.
jj signsupports configuring the default revset throughrevsets.signwhen
no--revisionsarguments are provided. -
jj git fetchnow supports string pattern syntax
on--remoteoption andgit.fetchconfiguration. -
Template functions
truncate_start()andtruncate_end()gained an optional
ellipsisparameter; passing this prepends or appends the ellipsis to the
content if it is truncated to fit the maximum width. -
Templates now support
stringify(x)function and string method
.escape_json(). The latter serializes the string in JSON format. It is
useful for making machine-readable templates by escaping problematic
characters like\n. -
Templates now support
trim(),trim_start()andtrim_end()methods
which remove whitespace from the start and end of aStringtype. -
The description of commits backed out by
jj backoutcan now be configured
usingtemplates.backout_description. -
New
AnnotationLinetemplater type. Used intemplates.file_annotate.
Providesself.commit(),.content(),.line_number(), and
.first_line_in_hunk(). -
Templates now have
format_short_operation_id(id)function for users to
customize the default operation id representation. -
The
jj init/jj revertstubs that print errors can now be overridden with
aliases. All ofjj clone/init/revertadd a hint to a generic error. -
Help text is now colored (when stdout is a terminal).
-
Commands that used to suggest
--ignore-immutablenow print the number of
immutable commits that would be rewritten if used and a link to the docs. -
jj undonow shows a hint when undoing an undo operation that the user may
be looking forjj op restoreinstead.
Fixed bugs
-
jj statusnow shows untracked files under untracked directories.
#5389 -
Added workaround for the bug that untracked files are ignored when watchman is
enabled. #5728 -
The
signing.backends.ssh.allowed-signersconfiguration option will now
expand~/to$HOME/.
#5626 -
config-schema.jsonnow allows arrays of strings for the settingsui.editor
andui.diff.tool. -
config-schema.jsonnow allows an array of strings or nested table for the
ui.pagersetting.
Contributors
Thanks to the people who made this release happen!
- Alain Leufroy (@aleufroy)
- Aleksey Kuznetsov (@zummenix)
- Alexander Mikhailov (@AM5800)
- Andrew Gilbert (@andyg0808)
- Antoine Martin (@alarsyo)
- Anton Bulakh (@necauqua)
- Austin Seipp (@thoughtpolice)
- Baltasar Dinis (@bsdinis)
- Benjamin Tan (@bnjmnt4n)
- Bryce Berger (@bryceberger)
- Burak Varlı (@unexge)
- David Rieber (@drieber)
- Emily (@emilazy)
- Evan Mesterhazy (@emesterhazy)
- George Christou (@gechr)
- HKalbasi (@HKalbasi)
- Ilya Grigoriev (@ilyagr)
- Jacob Hayes (@JacobHayes)
- Jonathan Frere (@MrJohz)
- Jonathan Tan (@jonathantanmy)
- Josh Steadmon (@steadmon)
- maan2003 (@maan2003)
- Martin von Zweigbergk (@martinvonz)
- Matthew Davidson (@KingMob)
- Philip Metzger (@PhilipMetzger)
- Philipp Albrecht (@pylbrecht)
- Roman Timushev (@rtimush)
- Samuel Tardieu (@samueltardieu)
- Scott Taylor (@scott2000)
- Stephan Hügel (@urschrei)
- Vincent Ging Ho Yim (@cenviity)
- Yuya Nishihara (@yuja)