v0.8.0
jj-vcs/jjv0.8.0Jul 16, 2023by martinvonz
AI Summary
This release renames the `jujutsu` crates to `jj-cli` and `jj-lib`, disables implicit template concatenation, splits the `sparse` command into `list` and `set`, and introduces the new `jj chmod` command.
Key Highlights
- The `jujutsu` and `jujutsu-lib` crates were renamed to `jj-cli` and `jj-lib`.
- Implicit concatenation of template expressions has been disabled; use `++` or `concat()`.
- The `jj sparse` command was split up into `jj sparse list` and `jj sparse set`.
- The new `jj chmod` command allows setting or removing the executable bit on paths.
- `jj obslog` and `jj log` now show abandoned commits as hidden.
Breaking Changes
- The `jujutsu` and `jujutsu-lib` crates were renamed to `jj-cli` and `jj-lib`.
- `ui.oplog-relative-timestamps` option has been removed.
- Implicit concatenation of template expressions has been disabled.
- `jj git push` will consider pushing the parent commit only when the current commit has no content and no description.
- The minimum supported Rust version (MSRV) is now 1.64.0.
- The `heads()` revset function was split up into `visible_heads()` and `heads()`.
- `jj sparse` command was split up into `jj sparse list` and `jj sparse set`.
- `jj hide` (alias for `jj abandon`) is no longer available.
- `jj git fetch` will no longer import unrelated branches from the underlying Git repo.
New Features
- `jj git push --deleted` will remove all locally deleted branches from the remote.
- `jj restore` without `--from` works correctly even if `@` is a merge commit.
- `jj rebase` now accepts multiple `-s` and `-b` arguments.
- `jj git fetch` now supports a `--branch` argument.
- `jj config get` and `config set` commands allow retrieving and setting config values.
- `ui.log-word-wrap` option to wrap content based on terminal width.
- Nodes in the graphical log output now use a `◉` symbol.
- Commands that accept a diff format now accept `--types` to show only the type of file.
- `jj describe` now supports `--reset-author` and `--no-edit`.
- `latest(x[, n])` and `conflict()` revset functions added.
- Progress display on `jj git clone/fetch` now includes the downloaded size.
- `jj obslog` and `jj log` now show abandoned commits as hidden.
- `jj git push` now accepts `--branch`, `--change`, and `-r` flags.
- `jj` with no subcommand now defaults to `jj log`.
- Description tempfiles created via `jj describe` now have the file extension `.jjdescription`.
- `jj sparse set` now accepts an `--edit` flag.
Full Release Notes
### Breaking changes * The `jujutsu` and `jujutsu-lib` crates were renamed to `jj-cli` and `jj-lib`, respectively. * The `ui.oplog-relative-timestamps` option has been removed. Use the `format_time_range()` template alias instead. For details, see [the documentation](docs/config.md). * Implicit concatenation of template expressions has been disabled. Use `++` operator, `concat()`, or `separate()` function instead. Example: `description ++ "\n"` * `jj git push` will consider pushing the parent commit only when the current commit has no content and no description, such as right after a `jj squash`. * The minimum supported Rust version (MSRV) is now 1.64.0. * The `heads()` revset function was split up into two functions. `heads()` without arguments is now called `visible_heads()`. `heads()` with one argument is unchanged. * The `ui.default-revset` config was renamed to `revsets.log`. * The `jj sparse` command was split up into `jj sparse list` and `jj sparse set`. * `jj hide` (alias for `jj abandon`) is no longer available. Use `jj abandon` instead. * `jj debug completion`, `jj debug mangen` and `jj debug config-schema` have been moved from `jj debug` to `jj util`. * `jj` will no longer parse `br` as a git_ref `refs/heads/br` when a branch `br` does not exist but the git_ref does (this is rare). Use `br@git` instead. * `jj git fetch` will no longer import unrelated branches from the underlying Git repo. ### New features * `jj git push --deleted` will remove all locally deleted branches from the remote. * `jj restore` without `--from` works correctly even if `@` is a merge commit. * `jj rebase` now accepts multiple `-s` and `-b` arguments. Revsets with multiple commits are allowed with `--allow-large-revsets`. * `jj git fetch` now supports a `--branch` argument to fetch some of the branches only. * `jj config get` command allows retrieving config values for use in scripting. * `jj config set` command allows simple config edits like `jj config set --repo user.email "somebody@example.com"` * Added `ui.log-word-wrap` option to wrap `jj log`/`obslog`/`op log` content based on terminal width. [#1043](https://github.com/martinvonz/jj/issues/1043) * Nodes in the (text-based) graphical log output now use a `◉` symbol instead of the letter `o`. The ASCII-based graph styles still use `o`. * Commands that accept a diff format (`jj diff`, `jj interdiff`, `jj show`, `jj log`, and `jj obslog`) now accept `--types` to show only the type of file before and after. * `jj describe` now supports `--reset-author` for resetting a commit's author to the configured user. `jj describe` also gained a `--no-edit` option to avoid opening the editor. * Added `latest(x[, n])` revset function to select the latest `n` commits. * Added `conflict()` revset function to select commits with conflicts. * `jj squash` AKA `jj amend` now accepts a `--message` option to set the description of the squashed commit on the command-line. * The progress display on `jj git clone/fetch` now includes the downloaded size. * The formatter now supports a "default" color that can override another color defined by a parent style. * `jj obslog` and `jj log` now show abandoned commits as hidden. * `jj git fetch` and `jj git push` will now use the single defined remote even if it is not named "origin". * `jj git push` now accepts `--branch` and `--change` arguments together. * `jj git push` now accepts a `-r/--revisions` flag to specify revisions to push. All branches pointing to any of the specified revisions will be pushed. The flag can be used together with `--branch` and `--change`. * `jj` with no subcommand now defaults to `jj log` instead of showing help. This command can be overridden by setting `ui.default-command`. * Description tempfiles created via `jj describe` now have the file extension `.jjdescription` to help external tooling detect a unique filetype. * The shortest unique change ID prefixes and commit ID prefixes in `jj log` are now shorter within the default log revset. You can override the default by setting the `revsets.short-prefixes` config to a different revset. * The last seen state of branches in the underlying git repo is now presented by `jj branch list`/`jj log` as a remote called `git` (e.g. `main@git`). They can also be referenced in revsets. Such branches exist in colocated repos or if you use `jj git export`. * The new `jj chmod` command allows setting or removing the executable bit on paths. Unlike the POSIX `chmod`, it works on Windows, on conflicted files, and on arbitrary revisions. Bits other than the executable bit are not planned to be supported. * `jj sparse set` now accepts an `--edit` flag which brings up the `$EDITOR` to edit sparse patterns. * `jj branch list` can now be filtered by revset. * Initial support for the Watchman filesystem monitor. Set `core.fsmonitor = "watchman"` in your repo to enable. ### Fixed bugs * Modify/delete conflicts now include context lines [#1244](https://github.com/martinvonz/jj/issues/1244). * It is now possible to modify either side of a modify/delete conflict (any change used to be considered a resolution). * Fixed a bug that could get partially resolved conflicts to be interpreted incorrectly. * `jj git fetch`: when re-adding a remote repository that had been previously removed, in some situations the remote branches were not recreated. * `jj git remote rename`: the git remote references were not rewritten with the new name. If a new remote with the old name and containing the same branches was added, the remote branches may not be recreated in some cases. * `jj workspace update-stale` now snapshots the working-copy changes before updating to the new working-copy commit. * It is no longer allowed to create branches at the root commit. * `git checkout` (without using `jj`) in colocated repo no longer abandons the previously checked-out anonymous branch. [#1042](https://github.com/martinvonz/jj/issues/1042). * `jj git fetch` in a colocated repo now abandons branches deleted on the remote, just like in a non-colocated repo. [#864](https://github.com/martinvonz/jj/issues/864) * `jj git fetch` can now fetch forgotten branches even if they didn't move on the remote. [#1714](https://github.com/martinvonz/jj/pull/1714) [#1771](https://github.com/martinvonz/jj/pull/1771) * It is now possible to `jj branch forget` deleted branches. [#1537](https://github.com/martinvonz/jj/issues/1537) * Fixed race condition when assigning change id to Git commit. If you've already had unreachable change ids, run `jj debug reindex`. [#924](https://github.com/martinvonz/jj/issues/924) * Fixed false divergence on racy working-copy snapshots. [#697](https://github.com/martinvonz/jj/issues/697), [#1608](https://github.com/martinvonz/jj/issues/1608) * In colocated repos, a bug causing conflicts when undoing branch moves (#922) has been fixed. Some surprising behaviors related to undoing `jj git push` or `jj git fetch` remain. ### Contributors Thanks to the people who made this release happen! * Aaron Bull Schaefer (@elasticdog) * Anton Bulakh (@necauqua) * Austin Seipp (@thoughtpolice) * Benjamin Saunders (@Ralith) * B Wilson (@xelxebar) * Christophe Poucet (@poucet) * David Barnett (@dbarnett) * Glen Choo (@chooglen) * Grégoire Geis (@71) * Ilya Grigoriev (@ilyagr) * Isabella Basso (@isinyaaa) * Kevin Liao (@kevincliao) * Martin von Zweigbergk (@martinvonz) * mlcui (@mlcui-google) * Samuel Tardieu (@samueltardieu) * Tal Pressman (@talpr) * Vamsi Avula (@avamsi) * Waleed Khan (@arxanas) * Yuya Nishihara (@yuja)