Skip to content

v0.6.0

Compare
Choose a tag to compare
@martinvonz martinvonz released this 05 Dec 18:42

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

  • 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

  • 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

  • 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

  • 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

  • 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

  • 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!