Skip to content

v0.17.0

Compare
Choose a tag to compare
@martinvonz martinvonz released this 01 May 17:11

Breaking changes

  • The default template aliases were replaced as follows:

    • builtin_op_log_root(op_id: OperationId) ->
      format_root_operation(root: Operation)
    • builtin_log_root(change_id: ChangeId, commit_id: CommitId) ->
      format_root_commit(root: Commit)
    • builtin_change_id_with_hidden_and_divergent_info ->
      format_short_change_id_with_hidden_and_divergent_info(commit: Commit)
  • The --revision option of jj rebase is renamed to --revisions. The short
    alias -r is still supported.

New features

  • The list of conflicted paths is printed whenever the working copy changes.
    This can be disabled with the --quiet option.

  • Commit objects in templates now have a mine() -> Boolean method analog to
    the same function in revsets. It evaluates to true if the email of the commit
    author matches the current user.email.

  • Commit objects in templates now have a contained_in(revset: String) -> Boolean method.

  • Operation objects in templates now have a snapshot() -> Boolean method that
    evaluates to true if the operation was a snapshot created by a non-mutating
    command (e.g. jj log).

  • Revsets and templates now support single-quoted raw string literals.

  • A new config option ui.always-allow-large-revsets has been added to
    allow large revsets expressions in some commands, without the all: prefix.

  • A new config option ui.allow-filesets has been added to enable "fileset"
    expressions
    . Note that filesets are currently experimental,
    but will be enabled by default in a future release.

  • A new global flag --ignore-immutable lets you rewrite immutable commits.

  • New command jj parallelize that rebases a set of revisions into siblings.

  • jj status now supports filtering by paths. For example, jj status . will
    only list changed files that are descendants of the current directory.

  • jj prev and jj next now work when the working copy revision is a merge.

  • jj squash now accepts a --use-destination-message/-u option that uses the
    description of the destination for the new squashed revision and discards the
    descriptions of the source revisions.

  • You can check whether Watchman fsmonitor is enabled or installed with the new
    jj debug watchman status command.

  • jj rebase now accepts revsets resolving to multiple revisions with the
    --revisions/-r option.

  • jj rebase -r now accepts --insert-after and --insert-before options to
    customize the location of the rebased revisions.

Fixed bugs

  • Revsets now support \-escapes in string literal.

  • The builtin diff editor now allows empty files to be selected during
    jj split.

  • Fixed a bug with jj split introduced in 0.16.0 that caused it to incorrectly
    rebase the children of the revision being split if they had other parents
    (i.e. if the child was a merge).

  • The snapshot.max-new-file-size option can now handle raw integer literals,
    interpreted as a number of bytes, where previously it could only handle string
    literals. This means that snapshot.max-new-file-size="1" and
    snapshot.max-new-file-size=1 are now equivalent.

  • jj squash <path> is now a no-op if the path argument didn't match any paths
    (it used to create new commits with bumped timestamp).
    #3334

Contributors

Thanks to the people who made this release happen!