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)