github martinvonz/jj v0.20.0

latest release: v0.21.0
one month ago

Note to packagers

  • jj now links libgit2 statically by default. To use dynamic linking, you
    need to set the environment variable LIBGIT2_NO_VENDOR=1 while compiling.
    (#4163)

Breaking changes

  • jj rebase --skip-empty has been renamed to jj rebase --skip-emptied

  • jj backout --revision has been renamed to jj backout --revisions.
    The short alias -r is still supported.

  • The default immutable_heads() set
    now includes untracked_remote_branches() with the assumption that untracked
    branches aren't managed by you. Therefore, untracked branches are no longer
    displayed in jj log by default.

  • Updated defaults for graph node symbol templates templates.log_node and
    templates.op_log_node.

  • The "fileset" language is now enabled by default. It can
    still be disable by setting ui.allow-filesets=false.

  • On jj git fetch/import, commits referred to by HEAD@git are no longer
    preserved. If a checked-out named branch gets deleted locally or remotely, the
    corresponding commits will be abandoned.

  • jj --at-op=@ no longer merges concurrent operations if explicitly specified.

  • jj obslog -p no longer shows diffs at non-partial squash operations.
    Previously, it showed the same diffs as the second predecessor.

Deprecations

  • The original configuration syntax for jj fix is now deprecated in favor of
    one that allows defining multiple tools that can affect different filesets.
    These can be used in combination for now. See jj help fix for details.

New features

  • External diff tools can now be configured to invoke the tool on each file
    individually instead of being passed a directory by setting
    merge-tools.$TOOL.diff-invocation-mode="file-by-file" in config.toml.

  • In git diffs, word-level hunks are now highlighted with underline. See diff
    colors and styles for customization.

  • New .diff().<format>() commit template methods are added. They can be used
    in order to show diffs conditionally. For example,
    if(current_working_copy, diff.summary()).

  • jj git clone and jj git init with an existing git repository adds the
    default branch of the remote as repository settings for
    revset-aliases."trunk()".`

  • jj workspace forget now abandons the workspace's working-copy commit if it
    was empty.

  • jj backout now includes the backed out commit's subject in the new commit
    message.

  • jj backout can now back out multiple commits at once.

  • jj git clone some/nested/path now creates the full directory tree for
    nested destination paths if they don't exist.

  • String patterns now support case‐insensitive matching by suffixing any
    pattern kind with -i. mine() uses case‐insensitive matching on your email
    address unconditionally. Only ASCII case folding is currently implemented,
    but this will likely change in the future.

  • String patterns now support regex:"pattern".

  • New tracked_remote_branches() and untracked_remote_branches() revset
    functions can be used to select tracked/untracked remote branches.

  • The file() revset function now accepts fileset as argument.

  • New diff_contains() revset function can be used to search diffs.

  • New command jj operation diff that can compare changes made between two
    operations.

  • New command jj operation show that can show the changes made in a single
    operation.

  • New config setting git.private-commits to prevent commits from being pushed.

  • The default commit description template
    can now be configured by templates.draft_commit_description.

  • jj fix can now be configured to run different tools on different filesets.
    This simplifies the use case of configuring code formatters for specific file
    types. See jj help fix for details.

  • Added revset functions author_date and committer_date.

  • jj describe can now update the description of multiple commits.

Fixed bugs

  • jj status will show different messages in a conflicted tree, depending
    on the state of the working commit. In particular, if a child commit fixes
    a conflict in the parent, this will be reflected in the hint provided
    by jj status

  • jj diff --git no longer shows the contents of binary files.

  • Windows binaries no longer require vcruntime140.dll to be installed
    (normally through Visual Studio.)

  • On quit, the builtin pager no longer waits for all outputs to be discarded.

  • jj branch rename no longer shows a warning in colocated repos.

Contributors

Thanks to the people who made this release happen!

Don't miss a new jj release

NewReleases is sending notifications on new releases.