v0.11.0
jj-vcs/jjv0.11.0Nov 1, 2023by martinvonz
AI Summary
Major internal change to conflict storage for performance, adds tracking flags to remote branches, and string pattern support.
Key Highlights
- Conflicts stored in new way for performance.
- Remote branches now have tracking/non-tracking flags.
- `jj branch` commands support string pattern syntax.
Breaking Changes
- Conflict storage model changed (incompatible with older binaries).
- `remote_branches()` includes Git-tracking branches.
- Status messages moved to stderr.
- `jj config set` TOML array/table parsing.
- `jj git fetch --branch` requires `glob:` prefix.
- Non-tracking remote branches not listed by default.
- Pushing disabled if non-tracking remote exists.
- `jj git push` no longer abandons local commits on delete/move.
New Features
- `jj git push -c` accepts revsets.
- `jj workspace add` `--revision` argument.
- `jj workspace forget` multiple workspaces.
- Revsets support glob matching.
- Template keywords return `RefName` objects.
- `jj workspace add` preserves all parents.
Full Release Notes
### Breaking changes
* Conflicts are now stored in a different way. Commits written by a new `jj`
binary will not be read correctly by older `jj` binaries. The new model
solves some performance problems with the old model. For example, `jj log`
should be noticeably faster on large repos. You may need to create a new
clone to see the full speedup.
* The `remote_branches()` revset now includes branches exported to the Git
repository (so called Git-tracking branches.) Use
`remote_branches(remote=exact:"origin")` to query branches of certain remote.
* Status messages are now printed to stderr.
* `jj config set` now interprets the value as TOML also if it's a valid TOML
array or table. For example, `jj config set --user 'aliases.n' '["new"]'`
* Remote branches now have tracking or non-tracking flags. The
`git.auto-local-branch` setting is applied only to newly fetched remote
branches. Existing remote branches are migrated as follows:
* If local branch exists, the corresponding remote branches are considered
tracking branches.
* Otherwise, the remote branches are non-tracking branches.
If the deduced tracking flags are wrong, use `jj branch track`/`untrack`
commands to fix them up.
See [automatic local branch creation](docs/config.md#automatic-local-branch-creation)
for details.
* Non-tracking remote branches aren't listed by default. Use `jj branch list
--all` to show all local and remote branches.
* It's not allowed to push branches if non-tracking remote branches of the same
name exist.
* Pushing deleted/moved branches no longer abandons the local commits referenced
by the remote branches.
* `jj git fetch --branch` now requires `glob:` prefix to expand `*` in branch
name.
### New features
* `jj`'s stable release can now be installed with [`cargo binstall jj-cli`](https://github.com/cargo-bins/cargo-binstall).
* `jj workspace add` now takes a `--revision` argument.
* `jj workspace forget` can now forget multiple workspaces at once.
* `branches()`/`remote_branches()`/`author()`/`committer()`/`description()`
revsets now support glob matching.
* `jj branch delete`/`forget`/`list`, and `jj git push --branch` now support
[string pattern syntax](docs/revsets.md#string-patterns). The `--glob` option
is deprecated in favor of `glob:` pattern.
* The `branches`/`tags`/`git_refs`/`git_head` template keywords now return a
list of `RefName`s. They were previously pre-formatted strings.
* The new template keywords `local_branches`/`remote_branches` are added to show
only local/remote branches.
* `jj workspace add` now preserves all parents of the old working-copy commit
instead of just the first one.
* `jj rebase -r` gained the ability to rebase a revision `A` onto a descendant
of `A`.
### Fixed bugs
* Updating the working copy to a commit where a file that's currently ignored
in the working copy no longer leads to a crash
([#976](https://github.com/martinvonz/jj/issues/976)).
* Conflicts in executable files can now be resolved just like conflicts in
non-executable files ([#1279](https://github.com/martinvonz/jj/issues/1279)).
* `jj new --insert-before` and `--insert-after` now respect immutable revisions
([#2468](https://github.com/martinvonz/jj/pull/2468)).
### Contributors
Thanks to the people who made this release happen!
* Antoine Cezar (@AntoineCezar)
* Austin Seipp (@thoughtpolice)
* Benjamin Saunders (@Ralith)
* Gabriel Scherer (@gasche)
* Ilya Grigoriev (@ilyagr)
* Infra (@1011X)
* Isabella Basso (@isinyaaa)
* Martin von Zweigbergk (@martinvonz)
* Tal Pressman (@talpr)
* Waleed Khan (@arxanas)
* Yuya Nishihara (@yuja)