Jujutsu v0.35.0

v0.35.0
Added 14
  • Workspaces can now have their own separate configuration via `.jj/workspace-config.toml` and `jj config` subcommands support `--workspace` layer option
  • Use `jj bookmark track` to associate local bookmarks with a specific remote before pushing without `--allow-new`
  • New `jj git colocation` command with `status`, `enable`, and `disable` subcommands to convert between colocated and non-colocated workspaces
  • New `jj tag set` and `jj tag delete` commands to create, update, and delete tags locally
  • Templates now support a `.split(separator, [limit])` method on strings
  • `-G` short form available for `--no-graph` in `jj log`, `jj evolog`, `jj op log`, `jj op show`, and `jj op diff`
Changed 1
  • Divergent changes are no longer marked red in immutable revisions
Fixed 5
  • `jj metaedit --author-timestamp` twice with the same value no longer edits the change twice
  • `jj squash` fixed improper revision rebase when both `--insert-after` and `--insert-before` were used
  • `jj undo` can now revert fetch and import operations involving tag updates
  • Fixed parsing of `files(expr)` revset expression including parentheses
  • Fixed `jj describe --stdin` to append a final newline character
Removed 3
  • The deprecated flag `--summary` of `jj abandon` has been removed
  • The deprecated command `jj backout` has been removed, use `jj revert` instead
  • Removed deprecated config options `signing.sign-all`, `core.watchman.register_snapshot_trigger`, and `diff.format`
Deprecated 2
  • `jj bisect run --command <cmd>` is deprecated in favor of `jj bisect run -- <cmd>`
  • `jj metaedit --update-committer-timestamp` was renamed to `jj metaedit --force-rewrite`
About

jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started.

Release highlights
  • Workspaces can now have their own separate configuration. For instance, you can use jj config set --workspace to update a configuration option only in the current workspace.

  • After creating a local bookmark, it is now possible to use jj bookmark track to associate the bookmark with a specific remote before pushing it. When pushing a tracked bookmark, it is not necessary to use --allow-new.

  • The new jj git colocation enable and jj git colocation disable commands allow converting between colocated and non-colocated workspaces.

Breaking changes
  • The remote_bookmarks(remote=pattern) revset now includes Git-tracking bookmarks if the specified pattern matches git. The default is remote=~exact:"git" as before.

  • The deprecated flag --summary of jj abandon has been removed.

  • The deprecated command jj backout has been removed, use jj revert instead.

  • The following deprecated config options have been removed:

    • signing.sign-all
    • core.watchman.register_snapshot_trigger
    • diff.format
Deprecations
  • jj bisect run --command <cmd> is deprecated in favor of jj bisect run -- <cmd>.

  • jj metaedit --update-committer-timestamp was renamed to jj metaedit --force-rewrite since the old name (and help text) incorrectly suggested that the committer name and email would not be updated.

New features
  • Workspaces may have an additional layered configuration, located at .jj/workspace-config.toml. jj config subcommands which took layer options like --repo now also support --workspace.

  • jj bookmark track can now associate new local bookmarks with remote. Tracked bookmarks can be pushed without --allow-new. #7072

  • The new jj git colocation command provides sub-commands to show the colocation state (status), to convert a non-colocated workspace into a colocated workspace (enable), and vice-versa (disable).

  • New jj tag set/delete commands to create/update/delete tags locally. Created/updated tags are currently always exported to Git as lightweight tags. If you would prefer them to be exported as annotated tags, please give us feedback on #7908.

  • Templates now support a .split(separator, [limit]) method on strings to split a string into a list of substrings.

  • -G is now available as a short form of --no-graph in jj log, jj evolog, jj op log, jj op show and jj op diff.

  • jj metaedit now accepts -m/--message option to non-interactively update the change description.

  • The CryptographicSignature.key() template method now also works for SSH signatures and returns the corresponding public key fingerprint.

  • Added template-aliases.empty_commit_marker. Users can override this value in their config to change the "(empty)" label on empty commits.

  • Add support for --when.workspaces config scopes.

  • Add support for --when.hostnames config scopes. This allows configuration to be conditionally applied based on the hostname set in operation.hostname.

  • jj bisect run accepts the command and arguments to pass to the command directly as positional arguments, such as jj bisect run --range=..main -- cargo check --all-targets.

  • Divergent changes are no longer marked red in immutable revisions. Since the revision is immutable, the user shouldn't take any action, so the red color was unnecessarily alarming.

  • New commit template keywords local/remote_tags to show only local/remote tags. These keywords may be useful in non-colocated Git repositories where local and exported @git tags can point to different revisions.

  • jj git clone now supports the --branch option to specify the branch(es) to fetch during clone. If present, the first matching branch is used as the working-copy parent.

  • Revsets now support logical operators in string patterns.

Fixed bugs
  • jj metaedit --author-timestamp twice with the same value no longer edits the change twice in some cases.

  • jj squash: fixed improper revision rebase when both --insert-after and --insert-before were used.

  • jj undo can now revert "fetch"/"import" operation that involves tag updates. #6325

  • Fixed parsing of files(expr) revset expression including parentheses. #7747

  • Fixed jj describe --stdin to append a final newline character.

Contributors

Thanks to the people who made this release happen!

  • Alpha Chen (@kejadlen)
  • Angel Ezquerra (@AngelEzquerra)
  • ase (@adamse)
  • Austin Seipp (@thoughtpolice)
  • Benjamin Brittain (@benbrittain)
  • bipul (@bipulmgr)
  • Brian Schroeder (@bts)
  • Bryce Berger (@bryceberger)
  • Cole Helbling (@cole-h)
  • Daniel Luz (@mernen)
  • David Higgs (@higgsd)
  • Defelo (@Defelo)
  • Fedor (@sheremetyev)
  • Gabriel Goller (@kaffarell)
  • Gaëtan Lehmann (@glehmann)
  • George Christou (@gechr)
  • Ilya Grigoriev (@ilyagr)
  • Isaac Corbrey (@icorbrey)
  • James Coman (@jamescoman)
  • Joseph Lou (@josephlou5)
  • Lander Brandt (@landaire)
  • Martin von Zweigbergk (@martinvonz)
  • Michael Chirico (@MichaelChirico)
  • Owen Brooks (@owenbrooks)
  • Peter Schilling (@schpet)
  • Philip Metzger (@PhilipMetzger)
  • Remo Senekowitsch (@senekor)
  • Ross Smyth (@RossSmyth)
  • Scott Taylor (@scott2000)
  • Steve Fink (@hotsphink)
  • Steve Klabnik (@steveklabnik)
  • Theo Buehler (@botovq)
  • Theodore Dubois (@tbodt)
  • Theodore Keloglou (@sirodoht)
  • Yuya Nishihara (@yuja)
View original

Upgraded? How did it go?

Discussion