v0.25.0
jj-vcs/jjv0.25.0Jan 2, 2025by thoughtpolice
AI Summary
This release introduces strict configuration parsing and conditional variables, alongside improvements to handling large files in the working copy.
Key Highlights
- Configuration variables are no longer 'stringly' typed.
- Support for conditional variables in configuration files.
- Large files in the working copy will no longer cause commands to fail.
- Conflict markers are now allowed to be longer than 7 characters.
Breaking Changes
- Configuration variables are now parsed strictly for specific settings.
- `jj config list` now prints inline tables literally.
- `jj config set` no longer accepts bare string values looking like TOML expressions.
- The deprecated `[alias]` config section is no longer respected.
New Features
- New `--config=NAME=VALUE` and `--config-file=PATH` options.
- Relational operators (`>=`, `>`, `<=`, `<`) for Integer types in templates.
- New Email template type.
- New `commit_timestamp(commit)` template alias.
- New `JJ: ignore-rest` line support in `jj describe`.
Full Release Notes
### About
jj is a Git-compatible version control system that is both simple and powerful. See the [installation instructions](https://jj-vcs.github.io/jj/v0.25.0/install-and-setup/) to get started.
### Release highlights
It's the holidays, and this release was overall pretty quiet, without many major
changes. Two select improvements:
* Improvements to configuration management, including support for [conditional
variables](https://jj-vcs.github.io/jj/v0.25.0/config#conditional-variables) in config files.
* Large files in the working copy will no longer cause commands to fail; instead
the large files will remain intact but untracked in the working copy.
### Breaking changes
* Configuration variables are no longer "stringly" typed. For example, `true` is
not converted to a string `"true"`, and vice versa.
* The following configuration variables are now parsed strictly:
`colors.<labels>`, `git.abandon-unreachable-commits`,
`git.auto-local-bookmark`, `git.push-bookmark-prefix`, `revsets.log`,
`revsets.short-prefixes` `signing.backend`, `operation.hostname`,
`operation.username`, `ui.allow-init-native`, `ui.color`,
`ui.default-description`, `ui.progress-indicator`, `ui.quiet`, `user.email`,
`user.name`
* `jj config list` now prints inline tables `{ key = value, .. }` literally.
Inner items of inline tables are no longer merged across configuration files.
See [the table syntax documentation](https://jj-vcs.github.io/jj/v0.25.0/config#dotted-style-headings-and-inline-tables) for details.
* `jj config edit --user` now opens a file even if `$JJ_CONFIG` points to a
directory. If there are multiple config files, the command will fail.
* `jj config set` no longer accepts a bare string value that looks like a TOML
expression. For example, `jj config set NAME '[foo]'` must be quoted as `jj
config set NAME '"[foo]"'`.
* The deprecated `[alias]` config section is no longer respected. Move command
aliases to the `[aliases]` section.
* `jj absorb` now abandons the source commit if it becomes empty and has no
description.
### Deprecations
* `--config-toml=TOML` is deprecated in favor of `--config=NAME=VALUE` and
`--config-file=PATH`.
* The `Signature.username()` template method is deprecated for
`Signature().email().local()`.
### New features
* `jj` command no longer fails due to new working-copy files larger than the
`snapshot.max-new-file-size` config option. It will print a warning and large
files will be left untracked.
* Configuration files now support [conditional variables](https://jj-vcs.github.io/jj/v0.25.0/config/#conditional-variables).
* New command options `--config=NAME=VALUE` and `--config-file=PATH` to set
string value without quoting and to load additional configuration from files.
* Templates now support the `>=`, `>`, `<=`, and `<` relational operators for
`Integer` types.
* A new Email template type is added. `Signature.email()` now returns an Email
template type instead of a String.
* Adds a new template alias `commit_timestamp(commit)` which defaults to the
committer date.
* Conflict markers are now allowed to be longer than 7 characters, allowing
conflicts to be materialized and parsed correctly in files which already
contain lines that look like conflict markers.
* New `$marker_length` variable to allow merge tools to support longer conflict
markers (equivalent to "%L" for Git merge drivers).
* `jj describe` now accepts a `JJ: ignore-rest` line that ignores everything
below it, similar to a "scissor line" in git. When editing multiple commits,
only ignore until the next `JJ: describe` line.
### Fixed bugs
* The `$NO_COLOR` environment variable must now be non-empty to be respected.
* Fixed incompatible rendering of empty hunks in git/unified diffs. [#5049](https://github.com/jj-vcs/jj/issues/5049)
* Fixed performance of progress bar rendering when fetching from Git remote. [#5057](https://github.com/jj-vcs/jj/issues/5057)
* `jj config path --user` no longer creates new file at the default config path.
* On Windows, workspace paths (printed by `jj root`) no longer use UNC-style
`\\?\` paths unless necessary.
* On Windows, `jj git clone` now converts local Git remote path to
slash-separated path.
* `jj resolve` no longer removes the executable bit on resolved files when using
an external merge tool.
### Contributors
Thanks to the people who made this release happen!
* Alex Stefanov (@umnikos)
* Anton Älgmyr (@algmyr)
* Austin Seipp (@thoughtpolice)
* Benjamin Tan (@bnjmnt4n)
* Bryce Berger (@bryceberger)
* Daniel Ploch (@torquestomp)
* David Crespo (@david-crespo)
* George Tsiamasiotis (@gtsiam)
* Jochen Kupperschmidt (@homeworkprod)
* Keane Nguyen (@keanemind)
* Martin von Zweigbergk (@martinvonz)
* Matt Kulukundis (@fowles)
* Milo Moisson (@mrnossiom)
* petricavalry (@petricavalry)
* Philip Metzger (@PhilipMetzger)
* Remo Senekowitsch (@senekor)
* Scott Taylor (@scott2000)
* Shane Sveller (@shanesveller)
* Stephen Jennings (@jennings)
* Tim Janik (@tim-janik)
* Vamsi Avula (@avamsi)
* Waleed Khan (@arxanas)
* Yuya Nishihara (@yuja)