cargo jj-cli 0.39.0
v0.39.0

5 hours ago

About

jj is a Git-compatible version control system that is both simple and powerful. See
the installation instructions to get started.

Release highlights

  • jj arrange command brings up a TUI where you can reorder and abandon
    revisions. #1531

  • jj bookmark advance automatically moves bookmarks forward to a
    target revision (defaults to @) using customization points
    revsets.bookmark-advance-from and revsets.bookmark-advance-to.
    It is heavily inspired by the longstanding community alias jj tug.

Breaking changes

  • Dropped support for legacy index files written by jj < 0.33. New index files
    will be created as needed.

  • The following deprecated config options have been removed:

    • core.fsmonitor
    • core.watchman.register-snapshot-trigger
  • The deprecated command jj op undo has been removed. Use jj op revert or
    jj undo/redo instead.

Deprecations

  • jj debug snapshot is deprecated in favor of jj util snapshot. Although
    this was an undocumented command in the first place, it will be removed after
    6 months (v0.45.0) to give people time to migrate away.

New features

  • Add support for push options in jj git push with the --option flag.
    This allows users to pass options to the remote server when pushing commits.
    The short alias -o is also supported.

  • jj new now evaluates the new_description template to populate the
    initial commit description when no -m message is provided.

  • Templates now support first(), last(), get(index), reverse(),
    skip(count), and take(count) methods on list types for more flexible
    list manipulation.

  • New builtin_draft_commit_description_with_diff template that includes the
    diff in the commit description editor, making it easier to review changes
    while writing commit messages.

  • Revsets and templates now support name:x pattern aliases such as 'grep:x' = 'description(regex:x)'.

  • Filesets now support user aliases.

  • jj workspace add now links with relative paths. This enables workspaces to work
    inside containers or when moved together. Existing workspaces with absolute paths
    will continue to work as before.

  • jj undo now also outputs what operation was undone, in addition to the
    operation restored to.

  • Bookmarks with two or more consecutive - characters no longer need to be quoted
    in revsets. For example, jj diff -r '"foo--bar"' can now be written as jj diff -r foo--bar.

  • New flag --simplify-parents on jj rebase to apply the same transformation
    as jj simplify-parents on the rebased commits.
    #7711

  • jj rebase --branch and jj rebase --source will no longer return an error
    if the given argument resolves to an empty revision set
    (jj rebase --revisions already behaved this way). Instead, a message will be
    printed to inform the user why nothing has changed.

  • Changed Git representation of conflicted commits to include files from the
    first side of the conflict. This should prevent unchanged files from being
    highlighted as "added" in editors when checking out a conflicted commit in a
    colocated workspace.

  • New template function Timestamp::since(ts) that returns the TimestampRange
    between two timestamps. It can be used in conjunction with .duration() in
    order to obtain a human-friendly duration between two Timestamps.

  • Added new jj util snapshot command to manually or programmatically trigger a
    snapshot. This introduces an official alternative to the
    previously-undocumented jj debug snapshot command. The Watchman integration
    has also been updated to use this command instead.

  • Changed background snapshotting to suppress stdout and stderr to avoid long
    hangs.

  • jj gerrit upload now supports a variety of new flags documented in
    gerrit's documentation.
    This includes, for example, --reviewer=foo@example.com and
    --label=Auto-Submit.

  • jj gerrit upload now recognizes Change-Id explicitly set via the alternative
    trailer Link, and will generate a Link: <review-url>/id/<change-id> trailer
    if gerrit.review-url option is set.

  • jj gerrit upload no longer requires the -r flag, and will default to
    uploading what you're currently working on.

  • Templates now support Serialize operations on the result of map() and
    if(), when supported by the underlying type.

  • jj bookmark rename now supports --overwrite-existing to allow renaming a
    bookmark even if the new name already exists, effectively replacing the
    existing bookmark.

  • Conditional configuration based on environment variables with --when.environments.
    #8779

Fixed bugs

  • Windows: use native file locks (LockFileEx) instead of polling with file
    creation, fixing issues with "pending delete" semantics leaving lock files
    stuck.

  • jj now safely detaches the HEAD of alternate Git worktrees if their
    checked-out branch is moved or deleted during Git export.

  • jj file track --include-ignored now works when fsmonitor.backend="watchman".
    #8427

Contributors

Thanks to the people who made this release happen!

Don't miss a new jj-cli release

NewReleases is sending notifications on new releases.