v0.6.0
jj-vcs/jjv0.6.0Dec 5, 2022by martinvonz
AI Summary
This release drops support for open commits, introduces the `jj resolve` command for conflict resolution, adds revset aliases, and improves pagination and Git credential handling.
Key Highlights
- Support for open commits has been dropped.
- The new `jj resolve` command allows resolving simple conflicts with an external 3-way-merge tool.
- The new `jj git remote rename` command allows git remotes to be renamed in-place.
- Revset aliases can now be configured by `revset-aliases.<name> = <expression>`.
- Commands with long output are now paginated.
Breaking Changes
- Dropped candidates set argument from `description(needle)`, `author(needle)`, `committer(needle)`, `merges()` revsets.
- Adjusted precedence of revset union/intersection/difference operators.
- Support for open commits has been dropped.
- `jj commit` is now a separate command from `jj close`.
- If a workspace's working-copy commit has been updated from another workspace, most commands will now fail.
New Features
- `jj git push` will search `@-` for branches to push if `@` has none.
- The new revset function `file(pattern..)` finds commits modifying the paths specified.
- The new revset function `empty()` finds commits modifying no files.
- It is now possible to specify configuration options on the command line with `--config-toml`.
- Branches that have a different target on some remote are now indicated by an asterisk suffix.
- The commit ID was moved from first on the line in `jj log` output to close to the end.
- `jj log`, `jj show`, and `jj obslog` now all support showing relative timestamps.
Full Release Notes
### Breaking changes * Dropped candidates set argument from `description(needle)`, `author(needle)`, `committer(needle)`, `merges()` revsets. Use `x & description(needle)` instead. * Adjusted precedence of revset union/intersection/difference operators. `x | y & z` is now equivalent to `x | (y & z)`. * Support for open commits has been dropped. The `ui.enable-open-commits` config that was added in 0.5.0 is no longer respected. The `jj open/close` commands have been deleted. * `jj commit` is now a separate command from `jj close` (which no longer exists). The behavior has changed slightly. It now always asks for a description, even if there already was a description set. It now also only works on the working-copy commit (there's no `-r` argument). * If a workspace's working-copy commit has been updated from another workspace, most commands in that workspace will now fail. Use the new `jj workspace update-stale` command to update the workspace to the new working-copy commit. (The old behavior was to automatically update the workspace.) ### New features * Commands with long output are paginated. [#9](https://github.com/martinvonz/jj/issues/9) * The new `jj git remote rename` command allows git remotes to be renamed in-place. * The new `jj resolve` command allows resolving simple conflicts with an external 3-way-merge tool. * `jj git push` will search `@-` for branches to push if `@` has none. * The new revset function `file(pattern..)` finds commits modifying the paths specified by the `pattern..`. * The new revset function `empty()` finds commits modifying no files. * Added support for revset aliases. New symbols and functions can be configured by `revset-aliases.<name> = <expression>`. * It is now possible to specify configuration options on the command line with the new `--config-toml` global option. * `jj git` subcommands will prompt for credentials when required for HTTPS remotes rather than failing. [#469](https://github.com/martinvonz/jj/issues/469) * Branches that have a different target on some remote than they do locally are now indicated by an asterisk suffix (e.g. `main*`) in `jj log`. [#254](https://github.com/martinvonz/jj/issues/254) * The commit ID was moved from first on the line in `jj log` output to close to the end. The goal is to encourage users to use the change ID instead, since that is generally more convenient, and it reduces the risk of creating divergent commits. * The username and hostname that appear in the operation log are now configurable via config options `operation.username` and `operation.hostname`. * `jj git` subcommands now support credential helpers. * `jj log` will warn if it appears that the provided path was meant to be a revset. * The new global flag `-v/--verbose` will turn on debug logging to give some additional insight into what is happening behind the scenes. Note: This is not comprehensively supported by all operations yet. * `jj log`, `jj show`, and `jj obslog` now all support showing relative timestamps by setting `ui.relative-timestamps = true` in the config file. ### Fixed bugs * A bug in the export of branches to Git caused spurious conflicted branches. This typically occurred when running in a working copy colocated with Git (created by running `jj init --git-dir=.`). [#463](https://github.com/martinvonz/jj/issues/463) * When exporting branches to Git, we used to fail if some branches could not be exported (e.g. because Git doesn't allow a branch called `main` and another branch called `main/sub`). We now print a warning about these branches instead. [#493](https://github.com/martinvonz/jj/issues/493) * If you had modified branches in jj and also modified branches in conflicting ways in Git, `jj git export` used to overwrite the changes you made in Git. We now print a warning about these branches instead. * `jj edit root` now fails gracefully. * `jj git import` used to abandon a commit if Git branches and tags referring to it were removed. We now keep it if a detached HEAD refers to it. * `jj git import` no longer crashes when all Git refs are removed. * Git submodules are now ignored completely. Earlier, files present in the submodule directory in the working copy would become added (tracked), and later removed if you checked out another commit. You can now use `git` to populate the submodule directory and `jj` will leave it alone. * Git's GC could remove commits that were referenced from jj in some cases. We are now better at adding Git refs to prevent that. [#815](https://github.com/martinvonz/jj/issues/815) * When the working-copy commit was a merge, `jj status` would list only the first parent, and the diff summary would be against that parent. The output now lists all parents and the diff summary is against the auto-merged parents. ### Contributors Thanks to the people who made this release happen! * Martin von Zweigbergk (@martinvonz) * Benjamin Saunders (@Ralith) * Yuya Nishihara (@yuja) * Glen Choo (@chooglen) * Ilya Grigoriev (@ilyagr) * Ruben Slabbert (@rslabbert) * Waleed Khan (@arxanas) * Sean E. Russell (@xxxserxxx) * Pranay Sashank (@pranaysashank) * Luke Granger-Brown (@lukegb)