Jujutsu v0.41.0

v0.41.0
Added 9
  • jj fix now supports formatting specific line ranges via line-range-arg and run-tool-if-zero-line-ranges configs
  • New global flag --no-integrate-operation to run commands without impacting repo state or working copy
  • The --pattern flag for file search now accepts various pattern kinds through kind:pattern syntax
  • New config option diff.git.show-path-prefix to suppress a/ and b/ path prefixes in diff --git output
  • New replace(pattern, content, replacement) template function supporting pattern replacement with lambda formatting
  • New ByteString template type for things like file content
Changed 3
  • The --pattern flag for file search now defaults to regex: instead of glob:
  • jj git push --all/--tracked/-r REVSETS no longer fails when revisions are private or have conflicts
  • Branch/bookmark patterns passed to jj git clone are now saved to jj repo settings file instead of .git/config
Fixed 8
  • Improved consistency with git handling of .gitignore including / after entries and \r\r\n for macOS files
  • jj status now filters untracked paths by fileset
  • Improved performance for snapshotting, visibly improving jj status speed for large repositories
  • Pre-existing Git submodule directories are no longer considered conflicts in checkouts
  • Fixed a panic in jj gerrit upload when run without -r and the inferred revision was immutable
  • jj status now respects path filters in working copy summaries
  • jj git remote rename/remove now updates the trunk() alias
  • Commands no longer incorrectly diagnose a stale working copy and suggest running jj op integrate when it would have no effect
Deprecated 1
  • In the templating language, Operation type's .tags() function has been deprecated in favor of .attributes()
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 fix now supports formatting specific line ranges (allowing you to format only modified lines); see the configuration manual and notes below for more.

  • The new global flag --no-integrate-operation will let you run a command without impacting the repo state or the working copy, which is useful when automated tools may create snapshots in the background.

Breaking changes
  • The --pattern flag for file search now defaults to regex: instead of glob:.

  • jj git push --all/--tracked/-r REVSETS no longer fails when revisions to push are private or have conflicts. Bookmarks which aren't eligible to push will be skipped.

  • Branch/bookmark patterns passed to jj git clone are now saved to jj's repo settings file instead of .git/config. Git fetch refspecs are set to the default value.

Deprecations
  • In the templating language, the Operation type's .tags() function has been deprecated in favor of .attributes().
New features
  • The --pattern flag for file search now accepts various pattern kinds through kind:pattern syntax.

  • A new global flag --no-integrate-operation lets you run a command without impacting the repo state or the working copy.

  • A new config option diff.git.show-path-prefix can be used to suppress the a/ and b/ path prefixes in the diff --git output.

  • jj fix now supports line range-limited formatting via the fix.tools.<name>.line-range-arg and run-tool-if-zero-line-ranges configs. This allows running tools only on modified lines and fine-grained control over when the tool is run. If you have set the line-range-arg config, use --all-lines to match the previous behavior of formatting the entire file.

  • A new replace(pattern, content, replacement) template function is added which supports replacement of content in templates, using a lambda to format replacement text. It supports all string patterns, including regexes with capture groups (e.g. replace(regex:'(\w+) (\w+)', "hello world", |c| c.get(1) ++ " " ++ c.get(2))).

  • New ByteString template type for things like file content.

  • jj gerrit upload now supports the new options --message (-m), --edit and --merged. You can now also pass multiple hashtags by repeating the --hashtag option.

  • New remotes.<name>.fetch-bookmarks/fetch-tags options to configure default fetch targets.

  • JJ_PAGER can now override the ui.pager config, matching JJ_EDITOR for callers that need a jj-specific environment override.

Fixed bugs
  • Improving consistency with git handling of .gitignore, including / after entries and \r\r\n for MacOS files.

  • jj status filters untracked paths by fileset #9287

  • Improved performance for snapshotting, visibly improving jj status speed for large repositories.

  • Pre-existing Git submodule directories are no longer considered conflicts in checkouts. #8065.

  • Fixed a panic in jj gerrit upload when run without -r and the inferred revision was immutable. #9398

  • jj status respects path filters in working copy summaries.

  • jj git remote rename/remove now updates the trunk() alias.

  • Commands would sometimes incorrectly diagnose a stale working copy and suggest running jj op integrate when it would have no effect. This should now be much less likely to happen in practice. #9314

Contributors

Thanks to the people who made this release happen!

  • Adrian Freund (@freundTech)
  • ase (@adamse)
  • Austin Seipp (@thoughtpolice)
  • Benjamin Tan (@bnjmnt4n)
  • Björn Kautler (@Vampire)
  • David Higgs (@higgsd)
  • David Rieber (@drieber)
  • dzaima (@dzaima)
  • Federico G. Schwindt (@fgsch)
  • Gaëtan Lehmann (@glehmann)
  • hewigovens (@hewigovens)
  • Ilya Grigoriev (@ilyagr)
  • jonmeow (@jonmeow)
  • Joseph Lou (@josephlou5)
  • Josh McKinney (@joshka)
  • Jun Mukai (@jmuk)
  • Lucas Garron (@lgarron)
  • Martin von Zweigbergk (@martinvonz)
  • Matt Stark (@matts1)
  • Maximilian Gaß (@mxey)
  • OlshaMB (@OlshaMB)
  • Philip Metzger (@PhilipMetzger)
  • rayaq
  • Remo Senekowitsch (@senekor)
  • rishiad (@rishiad)
  • Ryan Patterson (@CGamesPlay)
  • Sebastian Barfurth (@sbarfurth)
  • Thomas Axelsson (@thomasa88)
  • xtqqczze (@xtqqczze)
  • Yuya Nishihara (@yuja)
View original

Upgraded? How did it go?

Discussion