just playing with tangled
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 3471 lines 130 kB view raw view rendered
1# Changelog 2 3All notable changes to this project will be documented in this file. 4 5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6and this project adheres 7to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 8 9## [Unreleased] 10 11### Release highlights 12 13* The experimental support from release 0.29.0 for transferring the change ID 14 to/from Git remotes has been enabled by default. The change ID is stored in 15 the Git commit itself (in a commit header called `change-id`), which means 16 it will be transferred by regular `git push` etc. Please let us know if you 17 run into any problems with it. You can disable it setting 18 `git.write-change-id-header`. Note that some Git remotes (e.g GitLab) and 19 some Git commands (e.g. `git rebase`) do not preserve the change ids when 20 they rewrite commits. 21 22### Breaking changes 23 24* The old `libgit2` code path for fetches and pushes has been removed, 25 and the `git.subprocess` setting along with it. 26 27* In templates, bookmark/tag/remote names are now formatted in revset symbol 28 notation. The type of `bookmark.remote()` is changed to `Option<_>`. 29 `bookmark.remote() == "foo"` still works, but `bookmark.remote().<method>()` 30 might need `if(bookmark.remote(), ..)` to suppress error. 31 32* The deprecated `jj branch` subcommands have been removed. Use the `jj bookmark` 33 subcommands instead. 34 35* `jj rebase` now automatically abandons divergent commits if another commit 36 with the same change ID is already present in the destination with identical 37 changes. To keep these divergent commits, use the `--keep-divergent` flag. 38 39* `jj util completion` now requires the name of the shell as a positional argument and 40 no longer produces Bash completions by default. The deprecated optional arguments for 41 different shells have been removed. 42 43* The deprecated `--skip-empty` flag for `jj rebase` has been removed. Use the 44 `--skip-emptied` flag instead. 45 46### Deprecations 47 48* The `ui.diff.format` and `ui.diff.tool` config options have been merged as 49 `ui.diff-formatter`. The builtin format can be specified as `:<format>` 50 (e.g. `ui.diff-formatter=":git"` for Git diffs.) 51 52* The `.normal_hex()` method will be removed from the `CommitId` template type. 53 It's useful only for the `ChangeId` type. 54 55### New features 56 57* `jj split` has gained a `--message` option to set the description of the 58 commit with the selected changes. 59 60* `jj split` has gained the ability to place the revision with the selected changes 61 anywhere in the revision tree with the `--insert-before`, `--insert-after` and 62 `--destination` command line flags. 63 64* Added `git.track-default-bookmark-on-clone` setting to control whether to 65 track the default remote bookmark on `jj git clone`. 66 67* Templates can now do arithmetic on integers with the `+`, `-`, `*`, `/`, and `%` 68 infix operators. 69 70* Evolution history is now stored in the operation log. `jj evolog` can show 71 associated operations for commits created by new jj. 72 73### Fixed bugs 74 75* Work around a git issue that could cause subprocess operations to hang if the 76 `core.fsmonitor` gitconfig is set in the global or system gitconfigs. 77 [#6440](https://github.com/jj-vcs/jj/issues/6440) 78 79* `jj parallelize` can now parallelize groups of changes that _start_ with an 80 immutable change, but do not contain any other immutable changes. 81 82* `jj` will no longer warn about deprecated paths on macOS if the configured 83 XDG directory is the deprecated one (~/Library/Application Support). 84 85### Packaging changes 86 87* Due to the removal of the `libgit2` code path, packagers should 88 remove any dependencies on `libgit2`, `libssh2`, Zlib, OpenSSL, and 89 `pkg-config`, and ensure they are not setting the Cargo `git2` or 90 `vendored-openssl` features. 91 92## [0.29.0] - 2025-05-07 93 94### Release highlights 95 96* Experimental support for transferring the change ID to/from Git remotes behind configuration 97 setting `git.write-change-id-header`. If this is enabled, the change ID will be stored in the Git 98 commit itself (in a commit header called `change-id`), which means it will be transferred by 99 regular `git push` etc. This is an evolving feature that currently defaults to "false". This 100 default will likely change in the future as we gain confidence with forge support and user 101 expectations. 102 103### Breaking changes 104 105* `jj git push -c`/`--change` no longer moves existing local bookmarks. 106 107* The `editor-*.jjdescription` files passed to your editor by e.g. `jj describe` 108 are now written to your system's temporary directory instead of `.jj/repo/`. 109 110### Deprecations 111 112* `git.subprocess = false` has been deprecated, and the old `libgit2` 113 code path for fetches and pushes will be removed entirely in 0.30. 114 Please report any remaining issues you have with the Git 115 subprocessing path. 116 117* `ui.default-description` has been deprecated, and will be migrated to 118 `template-aliases.default_commit_description`. Please also consider using 119 [`templates.draft_commit_description`](docs/config.md#default-description), 120 and/or [`templates.commit_trailers`](docs/config.md#commit-trailers). 121 122* On macOS, config.toml files in `~/Library/Application Support/jj` are 123 deprecated; one should instead use `$XDG_CONFIG_HOME/jj` 124 (defaults to `~/.config/jj`) 125 126### New features 127 128* Color-words diff has gained [an option to compare conflict pairs without 129 materializing](docs/config.md#color-words-diff-options). 130 131* `jj show` patches can now be suppressed with `--no-patch`. 132 133* Added `ui.bookmark-list-sort-keys` setting to configure default sort keys for the 134 `jj bookmark list` command. 135 136* New `signed` revset function to filter for cryptographically signed commits. 137 138* `jj describe`, `jj commit`, `jj new`, `jj squash` and `jj split` add the 139 commit trailers, configured in the `commit_trailers` template, to the commit 140 description. Use cases include DCO Sign Off and Gerrit Change Id. 141 142* Added `duplicate_description` template, which allows [customizing the descriptions 143 of the commits `jj duplicate` creates](docs/config.md#duplicate-commit-description). 144 145* `jj absorb` can now squash a deleted file if it was added by one of the 146 destination revisions. 147 148* Added `ui.streampager.show-ruler` setting to configure whether the ruler should be 149 shown when the builtin pager starts up. 150 151* `jj git fetch` now warns instead of erroring for unknown `git.fetch` remotes 152 if other remotes are available. 153 154* Commit objects in templates now have `trailers() -> List<Trailer>`, the Trailer 155 objects have `key() -> String` and `value() -> String`. 156 157* `jj config edit` will now roll back to previous version if a syntax error has been introduced in the new config. 158 159* When using dynamic command-line completion, revision names will be completed 160 in more complex expressions. For example, typing 161 `jj log -r first-bookmark..sec` and then pressing Tab could complete the 162 expression to `first-bookmark..second-bookmark`. 163 164* External diff tools are now run in the temporary directory containing 165 the before (`left`) and after (`right`) directories, making diffs appear 166 more pleasing for tools that display file paths prominently. Users can 167 opt out of this by setting `merge-tools.<tool>.diff-do-chdir = false`, 168 but this will likely be removed in a future release. Please report any 169 issues you run into. 170 171### Fixed bugs 172 173* Fixed crash on change-delete conflict resolution. 174 [#6250](https://github.com/jj-vcs/jj/issues/6250) 175 176* The builtin diff editor now tries to preserve unresolved conflicts. 177 [#4963](https://github.com/jj-vcs/jj/issues/4963) 178 179* Fixed bash and zsh shell completion when completing aliases of multiple arguments. 180 [#5377](https://github.com/jj-vcs/jj/issues/5377) 181 182### Packaging changes 183 184* Jujutsu now uses 185 [`zlib-rs`](https://github.com/trifectatechfoundation/zlib-rs), a 186 fast compression library written in Rust. Packagers should remove any 187 dependency on CMake and drop the `packaging` Cargo feature. 188 189### Contributors 190 191Thanks to the people who made this release happen! 192 193* Aleksey Kuznetsov (@zummenix) 194* Austin Seipp (@thoughtpolice) 195* Benjamin Brittain (@benbrittain) 196* Benjamin Tan (@bnjmnt4n) 197* Caleb White (@calebdw) 198* Daniel Luz (@mernen) 199* Emily (@emilazy) 200* Emily (@neongreen) 201* Gaëtan Lehmann (@glehmann) 202* George Christou (@gechr) 203* Ilya Grigoriev (@ilyagr) 204* Jacob Hayes (@JacobHayes) 205* Jonas Greitemann (@jgreitemann) 206* Josh Steadmon (@steadmon) 207* Martin von Zweigbergk (@martinvonz) 208* Mateus Auler (@mateusauler) 209* Nicole Patricia Mazzuca (@strega-nil) 210* Nils Koch (@nilskch) 211* Philip Metzger (@PhilipMetzger) 212* Remo Senekowitsch (@senekor) 213* Sam (@Samasaur1) 214* Steve Fink (@hotsphink) 215* Théo Daron (@tdaron) 216* TimerErTim (@TimerErTim) 217* Vincent Ging Ho Yim (@cenviity) 218* Winter (@winterqt) 219* Yuya Nishihara (@yuja) 220 221## [0.28.2] - 2025-04-07 222 223### Fixed bugs 224 225* Fixed problem that old commits could be re-imported from Git. 226 https://github.com/GitoxideLabs/gitoxide/issues/1928 227 228## [0.28.1] - 2025-04-04 229 230### Security fixes 231 232* Fixed SHA-1 collision attacks not being detected. 233 ([GHSA-794x-2rpg-rfgr](https://github.com/jj-vcs/jj/security/advisories/GHSA-794x-2rpg-rfgr)) 234 235### Fixed bugs 236 237* Resolved some potential build issues for packagers. 238 [#6232](https://github.com/jj-vcs/jj/pull/6232) 239 240* Fix a bug with `:ours` and `:theirs` merge tools involving conflicted trees 241 with more than two sides. [#6227](https://github.com/jj-vcs/jj/pull/6227) 242 243### Contributors 244 245Thanks to the people who made this release happen! 246 247* Emily (@emilazy) 248* Ilya Grigoriev (@ilyagr) 249* Nicole Patricia Mazzuca (@strega-nil) 250* Scott Taylor (@scott2000) 251* Yuya Nishihara (@yuja) 252 253## [0.28.0] - 2025-04-02 254 255### Release highlights 256 257* jj's configuration can now be split into multiple files more easily. 258 259* `jj resolve` now accepts built-in tools `:ours` and `:theirs`. 260 261* In colocated repos, newly-created files will now appear in `git diff`. 262 263* A long-standing bug relating to empty files in the built-in diff editor was 264 fixed. [#3702](https://github.com/jj-vcs/jj/issues/3702) 265 266### Breaking changes 267 268* The minimum supported Rust version (MSRV) is now 1.84.0. 269 270* The `git.push-branch-prefix` config has been removed in favor of 271 `git.push-bookmark-prefix`. 272 273* `jj abandon` no longer supports `--summary` to suppress the list of abandoned 274 commits. The list won't show more than 10 commits to not clutter the console. 275 276* `jj unsquash` has been removed in favor of `jj squash` and 277 `jj diffedit --restore-descendants`. 278 279* The `jj untrack` subcommand has been removed in favor of `jj file untrack`. 280 281* The following deprecated revset functions have been removed: 282 - `branches()`, `remote_branches()`, `tracked_remote_branches()`, and 283 `untracked_remote_branches()`, which were renamed to "bookmarks". 284 - `file()` and `conflict()`, which were renamed to plural forms. 285 - `files(x, y, ..)` with multiple patterns. Use `files(x|y|..)` instead. 286 287* The following deprecated template functions have been removed: 288 - `branches()`, `local_branches()`, and `remote_branches()`, which were 289 renamed to "bookmarks". 290 291* The flags `--all` and `--tracked` on `jj git push` by themself do not cause 292 deleted bookmarks to be pushed anymore, as an additional safety measure. They 293 can now be combined with `--deleted` instead. 294 295### Deprecations 296 297* `core.watchman.register_snapshot_trigger` has been renamed to `core.watchman.register-snapshot-trigger` for consistency with other configuration options. 298 299* `jj backout` is deprecated in favor of `jj revert`. 300 301### New features 302 303* `jj sign` can now sign with PKCS#12 certificates through the `gpgsm` backend. 304 305* `jj sign` will automatically use the gpg key associated with the author's email 306 in the absence of a `signing.key` configuration. 307 308* Multiple user configs are now supported and are loaded in the following precedence order: 309 - `$HOME/.jjconfig.toml` 310 - `$XDG_CONFIG_HOME/jj/config.toml` 311 - `$XDG_CONFIG_HOME/jj/conf.d/*.toml` 312 313* The `JJ_CONFIG` environment variable can now contain multiple paths separated 314 by a colon (or semicolon on Windows). 315 316* The command `jj config list` now supports showing the origin of each variable 317 via the `builtin_config_list_detailed` template. 318 319* `jj config {edit,set,unset}` now prompt when multiple config files are found. 320 321* `jj diff -r` now allows multiple revisions (as long as there are no gaps in 322 the revset), such as `jj diff -r 'mutable()'`. 323 324* `jj git push` now accepts a `--named NAME=REVISION` argument to create a named 325 bookmark and immediately push it. 326 327* The 'how to resolve conflicts' hint that is shown when conflicts appear can 328 be hidden by setting `hints.resolving-conflicts = false`. 329 330* `jj op diff` and `jj op log --op-diff` now show changes to which commits 331 correspond to working copies. 332 333* `jj op log -d` is now an alias for `jj op log --op-diff`. 334 335* `jj bookmark move --to/--from` can now be abbreviated to `jj bookmark move -t/-f` 336 337* `jj bookmark list` now supports `--sort` option. Similar to `git branch --sort`. 338 See `jj bookmark list --help` for more details. 339 340* A new command `jj revert` is added, which is similar to `jj backout` but 341 adds the `--destination`, `--insert-after`, and `--insert-before` options to 342 customize the location of reverted commits. 343 344* A new command `jj git root` is added, which prints the location of the Git 345 directory of a repository using the Git backend. 346 347* In colocated repos, any files that jj considers added in the working copy will 348 now show up in `git diff` (as if you had run `git add --intent-to-add` on 349 them). 350 351* Reversing colors is now supported. For example, to highlight words by 352 reversing colors rather than underlining, you can set 353 `colors."diff token"={ underline = false, reverse = true }` in your config. 354 355* Added `revsets.log-graph-prioritize`, which can be used to configure 356 which branch in the `jj log` graph is displayed on the left instead of `@` 357 (e.g. `coalesce(description("megamerge\n"), trunk())`) 358 359* `jj resolve` now accepts new built-in merge tools `:ours` and `:theirs`. 360 These merge tools accept side #1 and side #2 of the conflict respectively. 361 362### Fixed bugs 363 364* `jj log -p --stat` now shows diff stats as well as the default color-words/git 365 diff output. [#5986](https://github.com/jj-vcs/jj/issues/5986) 366 367* The built-in diff editor now correctly handles deleted files. 368 [#3702](https://github.com/jj-vcs/jj/issues/3702) 369 370* The built-in diff editor now correctly retains the executable bit on newly 371 added files when splitting. [#3846](https://github.com/jj-vcs/jj/issues/3846) 372 373* `jj config set`/`--config` value parsing rule is relaxed in a way that 374 unquoted apostrophes are allowed. 375 [#5748](https://github.com/jj-vcs/jj/issues/5748) 376 377* `jj fix` could previously create new conflicts when a descendant of a fixed 378 revision was already correctly formatted. 379 380### Contributors 381 382Thanks to the people who made this release happen! 383 384* Aleksey Kuznetsov (@zummenix) 385* Anton Älgmyr (@algmyr) 386* Austin Seipp (@thoughtpolice) 387* Baltasar Dinis (@bsdinis) 388* Benjamin Tan (@bnjmnt4n) 389* Brandon Hall (@tenkabuto) 390* Caleb White (@calebdw) 391* Daniel Luz (@mernen) 392* David Rieber (@drieber) 393* demize (@demize) 394* Emily (@emilazy) 395* Evan Mesterhazy (@emesterhazy) 396* Fedor Sheremetyev (@sheremetyev) 397* George Christou (@gechr) 398* Ilya Grigoriev (@ilyagr) 399* Jakob Hellermann (@jakobhellermann) 400* Jo Liss (@joliss) 401* Joachim Desroches (@jedesroches) 402* Johannes Altmanninger (@krobelus) 403* Jonathan Gilchrist (@jgilchrist) 404* Kenyon Ralph (@kenyon) 405* Lucas Garron (@lgarron) 406* Martin von Zweigbergk (@martinvonz) 407* Nick Pupko (@npupko) 408* Philip Metzger (@PhilipMetzger) 409* Raphael Borun Das Gupta (@das-g) 410* Remo Senekowitsch (@senekor) 411* Robin Stocker (@robinst) 412* Scott Taylor (@scott2000) 413* Siva Mahadevan (@svmhdvn) 414* Vincent Ging Ho Yim (@cenviity) 415* Yuya Nishihara (@yuja) 416 417## [0.27.0] - 2025-03-05 418 419### Release highlights 420 421* `git.subprocess` is now enabled by default, improving compatibility with Git 422 fetches and pushes by spawning an external `git` process. Users can opt out 423 of this by setting `git.subprocess = false`, but this will likely be removed 424 in a future release. Please report any issues you run into. 425 426### Breaking changes 427 428* Bookmark name to be created/updated is now parsed as [a revset 429 symbol](docs/revsets.md#symbols). Quotation may be needed in addition to shell 430 quotes. Example: `jj bookmark create -r@- "'name with space'"` 431 432* `jj bookmark create`, `jj bookmark set` and `jj bookmark move` onto a hidden 433 commit make it visible. 434 435* `jj bookmark forget` now untracks any corresponding remote bookmarks instead 436 of forgetting them, since forgetting a remote bookmark can be unintuitive. 437 The old behavior is still available with the new `--include-remotes` flag. 438 439* `jj fix` now always sets the working directory of invoked tools to be the 440 workspace root, instead of the working directory of the `jj fix`. 441 442* The `ui.allow-filesets` configuration option has been removed. 443 [The "fileset" language](docs/filesets.md) has been enabled by default since v0.20. 444 445* `templates.annotate_commit_summary` is renamed to `templates.file_annotate`, 446 and now has an implicit `self` parameter of type `AnnotationLine`, instead of 447 `Commit`. All methods on `Commit` can be accessed with `commit.method()`, or 448 `self.commit().method()`. 449 450### Deprecations 451 452* This release takes the first steps to make target revision required in 453 `bookmark create`, `bookmark move` and `bookmark set`. Those commands will display 454 a warning if the user does not specify target revision explicitly. In the near 455 future those commands will fail if target revision is not specified. 456 457* The `signing.sign-all` config option has been deprecated in favor of 458 `signing.behavior`. The new option accepts `drop` (never sign), `keep` (preserve 459 existing signatures), `own` (sign own commits), or `force` (sign all commits). 460 Existing `signing.sign-all = true` translates to `signing.behavior = "own"`, and 461 `false` translates to `"keep"`. Invalid configuration is now an error. 462 463### New features 464 465* The new `jj sign` and `jj unsign` commands allow for signing/unsigning commits. 466 `jj sign` supports configuring the default revset through `revsets.sign` when 467 no `--revisions` arguments are provided. 468 469* `jj git fetch` now supports [string pattern syntax](docs/revsets.md#string-patterns) 470 on `--remote` option and `git.fetch` configuration. 471 472* Template functions `truncate_start()` and `truncate_end()` gained an optional 473 `ellipsis` parameter; passing this prepends or appends the ellipsis to the 474 content if it is truncated to fit the maximum width. 475 476* Templates now support `stringify(x)` function and string method 477 `.escape_json()`. The latter serializes the string in JSON format. It is 478 useful for making machine-readable templates by escaping problematic 479 characters like `\n`. 480 481* Templates now support `trim()`, `trim_start()` and `trim_end()` methods 482 which remove whitespace from the start and end of a `String` type. 483 484* The description of commits backed out by `jj backout` can now be configured 485 using `templates.backout_description`. 486 487* New `AnnotationLine` templater type. Used in `templates.file_annotate`. 488 Provides `self.commit()`, `.content()`, `.line_number()`, and 489 `.first_line_in_hunk()`. 490 491* Templates now have `format_short_operation_id(id)` function for users to 492 customize the default operation id representation. 493 494* The `jj init`/`jj revert` stubs that print errors can now be overridden with 495 aliases. All of `jj clone/init/revert` add a hint to a generic error. 496 497* Help text is now colored (when stdout is a terminal). 498 499* Commands that used to suggest `--ignore-immutable` now print the number of 500 immutable commits that would be rewritten if used and a link to the docs. 501 502* `jj undo` now shows a hint when undoing an undo operation that the user may 503 be looking for `jj op restore` instead. 504 505### Fixed bugs 506 507* `jj status` now shows untracked files under untracked directories. 508 [#5389](https://github.com/jj-vcs/jj/issues/5389) 509 510* Added workaround for the bug that untracked files are ignored when watchman is 511 enabled. [#5728](https://github.com/jj-vcs/jj/issues/5728) 512 513* The `signing.backends.ssh.allowed-signers` configuration option will now 514 expand `~/` to `$HOME/`. 515 [#5626](https://github.com/jj-vcs/jj/pull/5626) 516 517* `config-schema.json` now allows arrays of strings for the settings `ui.editor` 518 and `ui.diff.tool`. 519 520* `config-schema.json` now allows an array of strings or nested table for the 521 `ui.pager` setting. 522 523### Contributors 524 525Thanks to the people who made this release happen! 526 527* Alain Leufroy (@aleufroy) 528* Aleksey Kuznetsov (@zummenix) 529* Alexander Mikhailov (@AM5800) 530* Andrew Gilbert (@andyg0808) 531* Antoine Martin (@alarsyo) 532* Anton Bulakh (@necauqua) 533* Austin Seipp (@thoughtpolice) 534* Baltasar Dinis (@bsdinis) 535* Benjamin Tan (@bnjmnt4n) 536* Bryce Berger (@bryceberger) 537* Burak Varlı (@unexge) 538* David Rieber (@drieber) 539* Emily (@emilazy) 540* Evan Mesterhazy (@emesterhazy) 541* George Christou (@gechr) 542* HKalbasi (@HKalbasi) 543* Ilya Grigoriev (@ilyagr) 544* Jacob Hayes (@JacobHayes) 545* Jonathan Frere (@MrJohz) 546* Jonathan Tan (@jonathantanmy) 547* Josh Steadmon (@steadmon) 548* maan2003 (@maan2003) 549* Martin von Zweigbergk (@martinvonz) 550* Matthew Davidson (@KingMob) 551* Philip Metzger (@PhilipMetzger) 552* Philipp Albrecht (@pylbrecht) 553* Roman Timushev (@rtimush) 554* Samuel Tardieu (@samueltardieu) 555* Scott Taylor (@scott2000) 556* Stephan Hügel (@urschrei) 557* Vincent Ging Ho Yim (@cenviity) 558* Yuya Nishihara (@yuja) 559 560## [0.26.0] - 2025-02-05 561 562### Release highlights 563 564* Improved Git push/fetch compatibility by spawning an external `git` process. 565 This can be enabled by the `git.subprocess=true` config knob, and will be the 566 default in a future release. 567 568* `jj log` can now show cryptographic commit signatures. The output can be 569 controlled by the `ui.show-cryptographic-signatures=true` config knob. 570 571### Breaking changes 572 573* `jj abandon` now deletes bookmarks pointing to the revisions to be abandoned. 574 Use `--retain-bookmarks` to move bookmarks backwards. If deleted bookmarks 575 were tracking remote bookmarks, the associated bookmarks (or branches) will be 576 deleted from the remote on `jj git push --all`. 577 [#3505](https://github.com/jj-vcs/jj/issues/3505) 578 579* `jj init --git` and `jj init --git-repo` have been removed. They were 580 deprecated in early 2024. Use `jj git init` instead. 581 582* The following deprecated commands have been removed: 583 - `jj cat` is replaced by `jj file show`. 584 - `jj chmod` is replaced by `jj file chmod`. 585 - `jj files` is replaced by `jj file list`. 586 587* The deprecated `-l` short alias for `--limit` in `jj log`, `jj op log` 588 and `jj obslog` has been removed. The `-n` short alias can be used instead. 589 590* The deprecated `--siblings` options for `jj split` has been removed. 591 `jj split --parallel` can be used instead. 592 593* The deprecated `fix.tool-command` config option has been removed. 594 595* In colocated repos, the Git index now contains the changes from all parents 596 of the working copy instead of just the first parent (`HEAD`). 2-sided 597 conflicts from the merged parents are now added to the Git index as conflicts 598 as well. 599 600* The following change introduced in 0.25.0 is reverted: 601 - `jj config list` now prints inline tables `{ key = value, .. }` literally. 602 Inner items of inline tables are no longer merged across configuration 603 files. 604 605* `jj resolve` will now attempt to resolve all conflicted files instead of 606 resolving the first conflicted file. To resolve a single file, pass a file 607 path to `jj resolve`. 608 609* `jj util mangen` is replaced with `jj util install-man-pages`, which can 610 install man pages for all `jj` subcommands to a given path. 611 612* In `jj config list` template, `value` is now typed as `ConfigValue`, not as 613 `String` serialized in TOML syntax. 614 615* `jj git remote add`/`set-url` now converts relative Git remote path to 616 absolute path. 617 618* `jj log`/`op log` now applies `-n`/`--limit` *before* the items are reversed. 619 Rationale: It's more useful to see the N most recent commits/operations, and 620 is more performant. The old behavior can be achieved by `jj log .. | head`. 621 [#5403](https://github.com/jj-vcs/jj/issues/5403) 622 623* Upgraded `scm-record` from v0.4.0 to v0.5.0. See release notes at 624 <https://github.com/arxanas/scm-record/releases/tag/v0.5.0>. 625 626* The builtin pager is switched to 627 [streampager](https://github.com/markbt/streampager/). It can handle large 628 inputs better and can be configured. 629 630* Conflicts materialized in the working copy before `jj 0.19.0` may no longer 631 be parsed correctly. If you are using version 0.18.0 or earlier, check out a 632 non-conflicted commit before upgrading to prevent issues. 633 634### Deprecations 635 636### New features 637 638* `jj git {push,clone,fetch}` can now spawn an external `git` subprocess, via 639 the `git.subprocess = true` config knob. This provides an alternative that, 640 when turned on, fixes SSH bugs when interacting with Git remotes due to 641 `libgit2`s limitations [#4979](https://github.com/jj-vcs/jj/issues/4979). 642 643* `jj describe` now accepts `--edit`. 644 645* `jj evolog` and `jj op log` now accept `--reversed`. 646 647* `jj restore` now supports `-i`/`--interactive` selection. 648 649* `jj file list` now supports templating. 650 651* There is a new `builtin_op_log_oneline` template alias you can pass to `jj op 652 log -T` for a more compact output. You can use `format_operation_oneline` and 653 `format_snapshot_operation_oneline` to customize parts of it. 654 655* New template function `config(name)` to access to configuration variable from 656 template. 657 658* New template function `pad_centered()` to center content within a minimum 659 width. 660 661* Templater now supports `list.filter(|x| ..)` method. 662 663* The `diff` commit template keyword now supports custom formatting via 664 `diff.files()`. For example, `diff.files().map(|e| e.path().display())` prints 665 changed file paths. 666 667* The `diff.stat()` template method now provides methods to get summary values. 668 669* `jj log` can now show cryptographic commit signatures. The output can be 670 controlled by the `ui.show-cryptographic-signatures=true` config knob. The 671 signature template can be customized using 672 `format_detailed_cryptographic_signature(signature)` and 673 `format_short_cryptographic_signature(signature)`. 674 675* New `git.sign-on-push` config option to automatically sign commits which are 676 being pushed to a Git remote. 677 678* New `git.push-new-bookmarks` config option to push new bookmarks without 679 `--allow-new`. 680 681* `jj status` now shows untracked files when they reside directly under a 682 tracked directory. There's still an issue that files under untracked 683 directories aren't listed. [#5389](https://github.com/jj-vcs/jj/issues/5389) 684 685* New `merge-tools.<TOOL>.diff-expected-exit-codes` config option to suppress 686 warnings from tools exiting with non-zero exit codes. 687 688* New `fix.tools.TOOL.enabled` config option to enable/disable tools. This is 689 useful for defining disabled tools in user configuration that can be enabled 690 in individual repositories with one config setting. 691 692* Added `--into` flag to `jj restore`, similarly to `jj squash` and `jj 693 absorb`. It is equivalent to `--to`, but `--into` is the recommended name. 694 695* Italic text is now supported. You can set e.g. `color.error = { fg = "red", 696 italic = true }` in your config. 697 698* New `author_name`/`author_email`/`committer_name`/`committer_email(pattern)` 699 revset functions to match either name or email field explicitly. 700 701* New `subject(pattern)` revset function that matches first line of commit 702 descriptions. 703 704* Conditional configuration now supports `--when.commands` to change 705 configuration based on subcommand. 706 707* The Jujutsu documentation site now publishes a schema for the official 708 configuration file, which can be integrated into your editor for autocomplete, 709 inline errors, and more. 710 Please [see the documentation](/docs/config.md#json-schema-support) for more 711 on this. 712 713### Fixed bugs 714 715* `jj git fetch` with multiple remotes will now fetch from all remotes before 716 importing refs into the jj repo. This fixes a race condition where the 717 treatment of a commit that is found in multiple fetch remotes depended on the 718 order the remotes were specified. 719 720* Fixed diff selection by external tools with `jj split`/`commit -i FILESETS`. 721 [#5252](https://github.com/jj-vcs/jj/issues/5252) 722 723* Conditional configuration now applies when initializing new repository. 724 [#5144](https://github.com/jj-vcs/jj/issues/5144) 725 726* `[diff.<format>]` configuration now applies to `.diff().<format>()` commit 727 template methods. 728 729* Conflicts at the end of files which don't end with a newline character are 730 now materialized in a way that can be parsed correctly. 731 [#3968](https://github.com/jj-vcs/jj/issues/3968) 732 733* Bookmark and remote names written by `jj git clone` to 734 `revset-aliases.'trunk()'` are now escaped if necessary. 735 [#5359](https://github.com/jj-vcs/jj/issues/5359) 736 737### Contributors 738 739Thanks to the people who made this release happen! 740 741* Angel Ezquerra (@AngelEzquerra) 742* Antoine Martin (@alarsyo) 743* Anton Bulakh (@necauqua) 744* Austin Seipp (@thoughtpolice) 745* Baltasar Dinis (@bsdinis) 746* Benjamin Tan (@bnjmnt4n) 747* blinry (@blinry) 748* Bryce Berger (@bryceberger) 749* Charlie-83 (@Charlie-83) 750* Christian Stoitner (@cstoitner) 751* Evan Martin (@evmar) 752* George Christou (@gechr) 753* Ilya Grigoriev (@ilyagr) 754* Jakob Hellermann (@jakobhellermann) 755* JDSeiler (@JDSeiler) 756* Jonathan Frere (@MrJohz) 757* Jonathan Gilchrist (@jgilchrist) 758* Josh Steadmon (@steadmon) 759* Martin von Zweigbergk (@martinvonz) 760* Matt Kulukundis (@fowles) 761* Ollivier Robert (@keltia) 762* Philip Metzger (@PhilipMetzger) 763* Philipp Albrecht (@pylbrecht) 764* Robert Jackson (@rwjblue) 765* Samuel Tardieu (@samueltardieu) 766* Scott Taylor (@scott2000) 767* Stephen Jennings (@jennings) 768* Valentin Gatien-Baron (@v-gb) 769* Vincent Ging Ho Yim (@cenviity) 770* Waleed Khan (@arxanas) 771* Yuya Nishihara (@yuja) 772 773## [0.25.0] - 2025-01-01 774 775### Release highlights 776 777It's the holidays, and this release was overall pretty quiet, without many major 778changes. Two select improvements: 779 780* Improvements to configuration management, including support for [conditional 781 variables](docs/config.md#conditional-variables) in config files. 782 783* Large files in the working copy will no longer cause commands to fail; instead 784 the large files will remain intact but untracked in the working copy. 785 786### Breaking changes 787 788* Configuration variables are no longer "stringly" typed. For example, `true` is 789 not converted to a string `"true"`, and vice versa. 790 791* The following configuration variables are now parsed strictly: 792 `colors.<labels>`, `git.abandon-unreachable-commits`, 793 `git.auto-local-bookmark`, `git.push-bookmark-prefix`, `revsets.log`, 794 `revsets.short-prefixes`, `signing.backend`, `operation.hostname`, 795 `operation.username`, `ui.allow-init-native`, `ui.color`, 796 `ui.default-description`, `ui.progress-indicator`, `ui.quiet`, `user.email`, 797 `user.name` 798 799* `jj config list` now prints inline tables `{ key = value, .. }` literally. 800 Inner items of inline tables are no longer merged across configuration files. 801 See [the table syntax 802 documentation](docs/config.md#dotted-style-headings-and-inline-tables) for 803 details. 804 805* `jj config edit --user` now opens a file even if `$JJ_CONFIG` points to a 806 directory. If there are multiple config files, the command will fail. 807 808* `jj config set` no longer accepts a bare string value that looks like a TOML 809 expression. For example, `jj config set NAME '[foo]'` must be quoted as `jj 810 config set NAME '"[foo]"'`. 811 812* The deprecated `[alias]` config section is no longer respected. Move command 813 aliases to the `[aliases]` section. 814 815* `jj absorb` now abandons the source commit if it becomes empty and has no 816 description. 817 818### Deprecations 819 820* `--config-toml=TOML` is deprecated in favor of `--config=NAME=VALUE` and 821 `--config-file=PATH`. 822 823* The `Signature.username()` template method is deprecated for 824 `Signature.email().local()`. 825 826### New features 827 828* `jj` command no longer fails due to new working-copy files larger than the 829 `snapshot.max-new-file-size` config option. It will print a warning and large 830 files will be left untracked. 831 832* Configuration files now support [conditional 833 variables](docs/config.md#conditional-variables). 834 835* New command options `--config=NAME=VALUE` and `--config-file=PATH` to set 836 string value without quoting and to load additional configuration from files. 837 838* Templates now support the `>=`, `>`, `<=`, and `<` relational operators for 839 `Integer` types. 840 841* A new Email template type is added. `Signature.email()` now returns an Email 842 template type instead of a String. 843 844* Adds a new template alias `commit_timestamp(commit)` which defaults to the 845 committer date. 846 847* Conflict markers are now allowed to be longer than 7 characters, allowing 848 conflicts to be materialized and parsed correctly in files which already 849 contain lines that look like conflict markers. 850 851* New `$marker_length` variable to allow merge tools to support longer conflict 852 markers (equivalent to "%L" for Git merge drivers). 853 854* `jj describe` now accepts a `JJ: ignore-rest` line that ignores everything 855 below it, similar to a "scissor line" in git. When editing multiple commits, 856 only ignore until the next `JJ: describe` line. 857 858### Fixed bugs 859 860* The `$NO_COLOR` environment variable must now be non-empty to be respected. 861 862* Fixed incompatible rendering of empty hunks in git/unified diffs. 863 [#5049](https://github.com/jj-vcs/jj/issues/5049) 864 865* Fixed performance of progress bar rendering when fetching from Git remote. 866 [#5057](https://github.com/jj-vcs/jj/issues/5057) 867 868* `jj config path --user` no longer creates new file at the default config path. 869 870* On Windows, workspace paths (printed by `jj root`) no longer use UNC-style 871 `\\?\` paths unless necessary. 872 873* On Windows, `jj git clone` now converts local Git remote path to 874 slash-separated path. 875 876* `jj resolve` no longer removes the executable bit on resolved files when using 877 an external merge tool. 878 879### Contributors 880 881Thanks to the people who made this release happen! 882 883* Alex Stefanov (@umnikos) 884* Anton Älgmyr (@algmyr) 885* Austin Seipp (@thoughtpolice) 886* Benjamin Tan (@bnjmnt4n) 887* Bryce Berger (@bryceberger) 888* Daniel Ploch (@torquestomp) 889* David Crespo (@david-crespo) 890* George Tsiamasiotis (@gtsiam) 891* Jochen Kupperschmidt (@homeworkprod) 892* Keane Nguyen (@keanemind) 893* Martin von Zweigbergk (@martinvonz) 894* Matt Kulukundis (@fowles) 895* Milo Moisson (@mrnossiom) 896* petricavalry (@petricavalry) 897* Philip Metzger (@PhilipMetzger) 898* Remo Senekowitsch (@senekor) 899* Scott Taylor (@scott2000) 900* Shane Sveller (@shanesveller) 901* Stephen Jennings (@jennings) 902* Tim Janik (@tim-janik) 903* Vamsi Avula (@avamsi) 904* Waleed Khan (@arxanas) 905* Yuya Nishihara (@yuja) 906 907## [0.24.0] - 2024-12-04 908 909### Release highlights 910 911* New [`jj absorb`](https://jj-vcs.github.io/jj/latest/cli-reference/#jj-absorb) command automatically squashes changes from the current commit into relevant ancestor commits. 912 913* Experimental dynamic shell completions have been added; see [the docs](https://jj-vcs.github.io/jj/latest/install-and-setup/#command-line-completion) for configuration. 914 915* [`jj duplicate`](https://jj-vcs.github.io/jj/latest/cli-reference/#jj-duplicate) now accepts `--destination`/`--insert-before`/`--insert-after`. 916 917* Some deprecated commands have been removed (`jj move`, `jj checkout`, `jj merge`). 918 919### Breaking changes 920 921* `jj move` has been removed. It was deprecated in 0.16.0. 922 923* `jj checkout` and the built-in alias `jj co` have been removed. 924 It was deprecated in 0.14.0. 925 926* `jj merge` has been removed. It was deprecated in 0.14.0. 927 928* `jj git push` no longer pushes new bookmarks by default. Use `--allow-new` to 929 bypass this restriction. 930 931* Lines prefixed with "JJ:" in commit descriptions and in sparse patterns (from 932 `jj sparse edit`) are now stripped even if they are not immediately followed 933 by a space. [#5004](https://github.com/jj-vcs/jj/issues/5004) 934 935### Deprecations 936 937### New features 938 939* Templates now support the `==` and `!=` logical operators for `Boolean`, 940 `Integer`, and `String` types. 941 942* New command `jj absorb` that moves changes to stack of mutable revisions. 943 944* New command `jj util exec` that can be used for arbitrary aliases. 945 946* `jj rebase -b` can now be used with the `--insert-after` and `--insert-before` 947 options, like `jj rebase -r` and `jj rebase -s`. 948 949* A preview of improved shell completions was added. Please refer to the 950 [documentation](https://jj-vcs.github.io/jj/latest/install-and-setup/#command-line-completion) 951 to activate them. They additionally complete context-dependent, dynamic values 952 like bookmarks, aliases, revisions, operations and files. 953 954* Added the config setting `snapshot.auto-update-stale` for automatically 955 running `jj workspace update-stale` when applicable. 956 957* `jj duplicate` now accepts `--destination`, `--insert-after` and 958 `--insert-before` options to customize the location of the duplicated 959 revisions. 960 961* `jj log` now displays the working-copy branch first. 962 963* New `fork_point()` revset function can be used to obtain the fork point 964 of multiple commits. 965 966* The `tags()` revset function now takes an optional `pattern` argument, 967 mirroring that of `bookmarks()`. 968 969* Several commands now support `-f/-t` shorthands for `--from/--to`: 970 - `diff` 971 - `diffedit` 972 - `interdiff` 973 - `op diff` 974 - `restore` 975 976* New `ui.conflict-marker-style` config option to change how conflicts are 977 materialized in the working copy. The default option ("diff") renders 978 conflicts as a snapshot with a list of diffs to apply to the snapshot. 979 The new "snapshot" option renders conflicts as a series of snapshots, showing 980 each side and base of the conflict. The new "git" option replicates Git's 981 "diff3" conflict style, meaning it is more likely to work with external tools, 982 but it doesn't support conflicts with more than 2 sides. 983 984* New `merge-tools.<TOOL>.conflict-marker-style` config option to override the 985 conflict marker style used for a specific merge tool. 986 987* New `merge-tools.<TOOL>.merge-conflict-exit-codes` config option to allow a 988 merge tool to exit with a non-zero code to indicate that not all conflicts 989 were resolved. 990 991* `jj simplify-parents` now supports configuring the default revset when no 992 `--source` or `--revisions` arguments are provided with the 993 `revsets.simplify-parents` config. 994 995### Fixed bugs 996 997* `jj config unset <TABLE-NAME>` no longer removes a table (such as `[ui]`.) 998 999 1000### Contributors 1001 1002Thanks to the people who made this release happen! 1003 1004* Austin Seipp (@thoughtpolice) 1005* Benjamin Tan (@bnjmnt4n) 1006* Daniel Ploch (@torquestomp) 1007* Emily (@neongreen) 1008* Essien Ita Essien (@essiene) 1009* Herman J. Radtke III (@hjr3) 1010* Ilya Grigoriev (@ilyagr) 1011* Joaquín Triñanes (@JoaquinTrinanes) 1012* Lars Francke (@lfrancke) 1013* Luke Randall (@lukerandall) 1014* Martin von Zweigbergk (@martinvonz) 1015* Nathanael Huffman (@nathanaelhuffman) 1016* Philip Metzger (@PhilipMetzger) 1017* Remo Senekowitsch (@senekor) 1018* Robin Stocker (@robinst) 1019* Scott Taylor (@scott2000) 1020* Shane Sveller (@shanesveller) 1021* Tim Janik (@tim-janik) 1022* Yuya Nishihara (@yuja) 1023 1024## [0.23.0] - 2024-11-06 1025 1026### Security fixes 1027 1028* Fixed path traversal by cloning/checking out crafted Git repository containing 1029 `..`, `.jj`, `.git` paths. 1030 ([GHSA-88h5-6w7m-5w56](https://github.com/jj-vcs/jj/security/advisories/GHSA-88h5-6w7m-5w56);CVE-2024-51990) 1031 1032### Breaking changes 1033 1034* Revset function names can no longer start with a number. 1035 1036* Evaluation error of `revsets.short-prefixes` configuration is now reported. 1037 1038* The `HEAD@git` symbol no longer resolves to the Git HEAD revision. Use 1039 `git_head()` or `@-` revset expression instead. The `git_head` template 1040 keyword now returns a boolean. 1041 1042* Help command doesn't work recursively anymore, i.e. `jj workspace help root` 1043 doesn't work anymore. 1044 1045* The color label `op_log` from the `[colors]` config section now **only** 1046 applies to the op log and not to the other places operations are displayed. In 1047 almost all cases, if you configured `op_log` before, you should use the new 1048 `operation` label instead. 1049 1050* Default operation log template now shows end times of operations instead of 1051 start times. 1052 1053### Deprecations 1054 1055* `git.auto-local-bookmark` replaces `git.auto-local-branch`. The latter remains 1056 supported for now (at lower precedence than the former). 1057 1058### New features 1059 1060* Added diff options to ignore whitespace when comparing lines. Whitespace 1061 changes are still highlighted. 1062 1063* New command `jj simplify-parents` will remove redundant parent edges. 1064 1065* `jj squash` now supports `-f/-t` shorthands for `--from/--[in]to`. 1066 1067* Initial support for shallow Git repositories has been implemented. However, 1068 deepening the history of a shallow repository is not yet supported. 1069 1070* `jj git clone` now accepts a `--depth <DEPTH>` option, which 1071 allows to clone the repository with a given depth. 1072 1073* New command `jj file annotate` that annotates files line by line. This is similar 1074 in functionality to `git blame`. Invoke the command with `jj file annotate <file_path>`. 1075 The output can be customized via the `templates.annotate_commit_summary` 1076 config variable. 1077 1078* `jj bookmark list` gained a `--remote REMOTE` option to display bookmarks 1079 belonging to a remote. This option can be combined with `--tracked` or 1080 `--conflicted`. 1081 1082* New command `jj config unset` that unsets config values. For example, 1083 `jj config unset --user user.name`. 1084 1085* `jj help` now has the flag `--keyword` (shorthand `-k`), which can give help 1086 for some keywords (e.g. `jj help -k revsets`). To see a list of the available 1087 keywords you can do `jj help --help`. 1088 1089* New `at_operation(op, expr)` revset can be used in order to query revisions 1090 based on historical state. 1091 1092* String literals in filesets, revsets and templates now support hex bytes 1093 (with `\e` as escape / shorthand for `\x1b`). 1094 1095* New `coalesce(revsets...)` revset which returns commits in the first revset 1096 in the `revsets` list that does not evaluate to `none()`. 1097 1098* New template function `raw_escape_sequence(...)` preserves escape sequences. 1099 1100* Timestamp objects in templates now have `after(date) -> Boolean` and 1101 `before(date) -> Boolean` methods for comparing timestamps to other dates. 1102 1103* New template functions `pad_start()`, `pad_end()`, `truncate_start()`, and 1104 `truncate_end()` are added. 1105 1106* Add a new template alias `builtin_log_compact_full_description()`. 1107 1108* Added the config settings `diff.color-words.context` and `diff.git.context` to 1109 control the default number of lines of context shown. 1110 1111### Fixed bugs 1112 1113* Error on `trunk()` revset resolution is now handled gracefully. 1114 [#4616](https://github.com/jj-vcs/jj/issues/4616) 1115 1116* Updated the built-in diff editor `scm-record` to version 1117 [0.4.0](https://github.com/arxanas/scm-record/releases/tag/v0.4.0), which 1118 includes multiple fixes. 1119 1120### Contributors 1121 1122Thanks to the people who made this release happen! 1123 1124* Alec Snyder (@allonsy) 1125* Arthur Grillo (Grillo-0) 1126* Austin Seipp (@thoughtpolice) 1127* Benjamin Tan (@bnjmnt4n) 1128* Dave Townsend (@Mossop) 1129* Daniel Ploch (@torquestomp) 1130* Emily (@neongreen) 1131* Essien Ita Essien (@essiene) 1132* Fedor Sheremetyev (@sheremetyev) 1133* Ilya Grigoriev (@ilyagr) 1134* Jakub Okoński (@farnoy) 1135* Jcparkyn (@Jcparkyn) 1136* Joaquín Triñanes (@JoaquinTrinanes) 1137* Lukas Wirth (@Veykril) 1138* Marco Neumann (@crepererum) 1139* Martin von Zweigbergk (@martinvonz) 1140* Matt Stark (@matts1) 1141* Philip Metzger (@PhilipMetzger) 1142* Philipp Albrecht (@pylbrecht) 1143* Remo Senekowitsch (@senekor) 1144* Richard Macklin (@rmacklin) 1145* Robin Stocker (@robinst) 1146* Samuel Tardieu (@samueltardieu) 1147* Sora (@SoraTenshi) 1148* Stephen Jennings (@jennings) 1149* Theodore Ehrenborg (@TheodoreEhrenborg) 1150* Vamsi Avula (@avamsi) 1151* Vincent Ging Ho Yim (@cenviity) 1152* Yuya Nishihara (@yuja) 1153 1154## [0.22.0] - 2024-10-02 1155 1156### Breaking changes 1157 1158* Fixing [#4239](https://github.com/jj-vcs/jj/issues/4239) means the 1159 ordering of some messages have changed. 1160 1161* Invalid `ui.graph.style` configuration is now an error. 1162 1163* The builtin template `branch_list` has been renamed to `bookmark_list` as part 1164 of the `jj branch` deprecation. 1165 1166### Deprecations 1167 1168* `jj branch` has been deprecated in favor of `jj bookmark`. 1169 1170 **Rationale:** Jujutsu's branches don't behave like Git branches, which a 1171 confused many newcomers, as they expected a similar behavior given the name. 1172 We've renamed them to "bookmarks" to match the actual behavior, as we think 1173 that describes them better, and they also behave similar to Mercurial's 1174 bookmarks. 1175 1176* `jj obslog` is now called `jj evolution-log`/`jj evolog`. `jj obslog` remains 1177 as an alias. 1178 1179* `jj unsquash` has been deprecated in favor of `jj squash` and 1180 `jj diffedit --restore-descendants`. 1181 1182 **Rationale:** `jj squash` can be used in interactive mode to pull 1183 changes from one commit to another, including from a parent commit 1184 to a child commit. For fine-grained dependent diffs, such as when 1185 the parent and the child commits must successively modify the same 1186 location in a file, `jj diffedit --restore-descendants` can be used 1187 to set the parent commit to the desired content without altering the 1188 content of the child commit. 1189 1190* The `git.push-branch-prefix` config has been deprecated in favor of 1191 `git.push-bookmark-prefix`. 1192 1193* `conflict()` and `file()` revsets have been renamed to `conflicts()` and `files()` 1194 respectively. The old names are still around and will be removed in a future 1195 release. 1196 1197### New features 1198 1199* The new config option `snapshot.auto-track` lets you automatically track only 1200 the specified paths (all paths by default). Use the new `jj file track` 1201 command to manually tracks path that were not automatically tracked. There is 1202 no way to list untracked files yet. Use `git status` in a colocated workspace 1203 as a workaround. 1204 [#323](https://github.com/jj-vcs/jj/issues/323) 1205 1206* `jj fix` now allows fixing unchanged files with the `--include-unchanged-files` flag. This 1207 can be used to more easily introduce automatic formatting changes in a new 1208 commit separate from other changes. 1209 1210* `jj workspace add` now accepts a `--sparse-patterns=<MODE>` option, which 1211 allows control of the sparse patterns for a newly created workspace: `copy` 1212 (inherit from parent; default), `full` (full working copy), or `empty` (the 1213 empty working copy). 1214 1215* New command `jj workspace rename` that can rename the current workspace. 1216 1217* `jj op log` gained an option to include operation diffs. 1218 1219* `jj git clone` now accepts a `--remote <REMOTE NAME>` option, which 1220 allows to set a name for the remote instead of using the default 1221 `origin`. 1222 1223* `jj op undo` now reports information on the operation that has been undone. 1224 1225* `jj squash`: the `-k` flag can be used as a shorthand for `--keep-emptied`. 1226 1227* CommitId / ChangeId template types now support `.normal_hex()`. 1228 1229* `jj commit` and `jj describe` now accept `--author` option allowing to quickly change 1230 author of given commit. 1231 1232* `jj diffedit`, `jj abandon`, and `jj restore` now accept a `--restore-descendants` 1233 flag. When used, descendants of the edited or deleted commits will keep their original 1234 content. 1235 1236* `jj git fetch -b <remote-git-branch-name>` will now warn if the branch(es) 1237 can not be found in any of the specified/configured remotes. 1238 1239* `jj split` now lets the user select all changes in interactive mode. This may be used 1240 to keeping all changes into the first commit while keeping the current commit 1241 description for the second commit (the newly created empty one). 1242 1243* Author and committer names are now yellow by default. 1244 1245### Fixed bugs 1246 1247* Update working copy before reporting changes. This prevents errors during reporting 1248 from leaving the working copy in a stale state. 1249 1250* Fixed panic when parsing invalid conflict markers of a particular form. 1251 ([#2611](https://github.com/jj-vcs/jj/pull/2611)) 1252 1253* Editing a hidden commit now makes it visible. 1254 1255* The `present()` revset now suppresses missing working copy error. For example, 1256 `present(@)` evaluates to `none()` if the current workspace has no 1257 working-copy commit. 1258 1259### Contributors 1260 1261Thanks to the people who made this release happen! 1262 1263* Austin Seipp (@thoughtpolice) 1264* Danny Hooper (@hooper) 1265* Emily Shaffer (@nasamuffin) 1266* Essien Ita Essien (@essiene) 1267* Ethan Brierley (@eopb) 1268* Ilya Grigoriev (@ilyagr) 1269* Kevin Liao (@kevincliao) 1270* Lukas Wirth (@Veykril) 1271* Martin von Zweigbergk (@martinvonz) 1272* Mateusz Mikuła (@mati865) 1273* mlcui (@mlcui-corp) 1274* Philip Metzger (@PhilipMetzger) 1275* Samuel Tardieu (@samueltardieu) 1276* Stephen Jennings (@jennings) 1277* Tyler Goffinet (@qubitz) 1278* Vamsi Avula (@avamsi) 1279* Yuya Nishihara (@yuja) 1280 1281## [0.21.0] - 2024-09-04 1282 1283### Breaking changes 1284 1285* `next/prev` will no longer infer when to go into edit mode when moving from 1286 commit to commit. It now either follows the flags `--edit|--no-edit` or it 1287 gets the mode from `ui.movement.edit`. 1288 1289### Deprecations 1290 1291* `jj untrack` has been renamed to `jj file untrack`. 1292 1293### New features 1294 1295* Add new boolean config knob, `ui.movement.edit` for controlling the behaviour 1296 of `prev/next`. The flag turns `edit` mode `on` and `off` permanently when set 1297 respectively to `true` or `false`. 1298 1299* All diff formats except `--name-only` now include information about copies and 1300 moves. So do external diff tools in file-by-file mode. `jj status` also 1301 includes information about copies and moves. 1302 1303* Color-words diff has gained [an option to display complex changes as separate 1304 lines](docs/config.md#color-words-diff-options). It's enabled by default. To 1305 restore the old behavior, set `diff.color-words.max-inline-alternation = -1`. 1306 1307* A tilde (`~`) at the start of the path will now be expanded to the user's home 1308 directory when configuring a `signing.key` for SSH commit signing. 1309 1310* When reconfiguring the author, warn that the working copy won't be updated 1311 1312* `jj rebase -s` can now be used with the `--insert-after` and `--insert-before` 1313 options, like `jj rebase -r`. 1314 1315### Fixed bugs 1316 1317* Release binaries for Intel Macs have been restored. They were previously 1318 broken due to using a sunset version of GitHub's macOS runners (but nobody had 1319 previously complained.) 1320 1321### Contributors 1322 1323Thanks to the people who made this release happen! 1324 1325* Aaron Bull Schaefer (@elasticdog) 1326* Austin Seipp (@thoughtpolice) 1327* Benjamin Tan (@bnjmnt4n) 1328* Raniz Daniel Raneland (@Raniz85) 1329* Daniel Ploch (@torquestomp) 1330* Essien Ita Essien (@essiene) 1331* Ilya Grigoriev (@ilyagr) 1332* Kaleb Pace (@kalebpace) 1333* Marie (@NyCodeGHG) 1334* Marijan Smetko (@InCogNiTo124) 1335* Martin von Zweigbergk (@martinvonz) 1336* Matt Kulukundis (@fowles) 1337* Scott Taylor (@scott2000) 1338* Stephen Jennings (@jennings) 1339* tingerrr (@tingerrr) 1340* Yuya Nishihara (@yuja) 1341 1342## [0.20.0] - 2024-08-07 1343 1344### Note to packagers 1345 1346* `jj` now links `libgit2` statically by default. To use dynamic linking, you 1347 need to set the environment variable `LIBGIT2_NO_VENDOR=1` while compiling. 1348 ([#4163](https://github.com/jj-vcs/jj/pull/4163)) 1349 1350### Breaking changes 1351 1352* `jj rebase --skip-empty` has been renamed to `jj rebase --skip-emptied` 1353 1354* `jj backout --revision` has been renamed to `jj backout --revisions`. 1355 The short alias `-r` is still supported. 1356 1357* [The default `immutable_heads()` set](docs/config.md#set-of-immutable-commits) 1358 now includes `untracked_remote_branches()` with the assumption that untracked 1359 branches aren't managed by you. Therefore, untracked branches are no longer 1360 displayed in `jj log` by default. 1361 1362* Updated defaults for graph node symbol templates `templates.log_node` and 1363 `templates.op_log_node`. 1364 1365* [The "fileset" language](docs/filesets.md) is now enabled by default. It can 1366 still be disabled by setting `ui.allow-filesets=false`. 1367 1368* On `jj git fetch`/`import`, commits referred to by `HEAD@git` are no longer 1369 preserved. If a checked-out named branch gets deleted locally or remotely, the 1370 corresponding commits will be abandoned. 1371 1372* `jj --at-op=@` no longer merges concurrent operations if explicitly specified. 1373 1374* `jj obslog -p` no longer shows diffs at non-partial squash operations. 1375 Previously, it showed the same diffs as the second predecessor. 1376 1377### Deprecations 1378 1379* The original configuration syntax for `jj fix` is now deprecated in favor of 1380 one that allows defining multiple tools that can affect different filesets. 1381 These can be used in combination for now. See `jj help fix` for details. 1382 1383### New features 1384 1385* Define `immutable_heads()` revset alias in terms of a new `builtin_immutable_heads()`. 1386 This enables users to redefine `immutable_heads()` as they wish, but still 1387 have `builtin_immutable_heads()` which should not be redefined. 1388 1389* External diff tools can now be configured to invoke the tool on each file 1390 individually instead of being passed a directory by setting 1391 `merge-tools.$TOOL.diff-invocation-mode="file-by-file"` in config.toml. 1392 1393* In git diffs, word-level hunks are now highlighted with underline. See [diff 1394 colors and styles](docs/config.md#diff-colors-and-styles) for customization. 1395 1396* New `.diff().<format>()` commit template methods are added. They can be used 1397 in order to show diffs conditionally. For example, 1398 `if(current_working_copy, diff.summary())`. 1399 1400* `jj git clone` and `jj git init` with an existing git repository adds the 1401 default branch of the remote as repository settings for 1402 `revset-aliases."trunk()"`.` 1403 1404* `jj workspace forget` now abandons the workspace's working-copy commit if it 1405 was empty. 1406 1407* `jj backout` now includes the backed out commit's subject in the new commit 1408 message. 1409 1410* `jj backout` can now back out multiple commits at once. 1411 1412* `jj git clone some/nested/path` now creates the full directory tree for 1413 nested destination paths if they don't exist. 1414 1415* String patterns now support case‐insensitive matching by suffixing any 1416 pattern kind with `-i`. `mine()` uses case‐insensitive matching on your email 1417 address unconditionally. Only ASCII case folding is currently implemented, 1418 but this will likely change in the future. 1419 1420* String patterns now support `regex:"pattern"`. 1421 1422* New `tracked_remote_branches()` and `untracked_remote_branches()` revset 1423 functions can be used to select tracked/untracked remote branches. 1424 1425* The `file()` revset function now accepts fileset as argument. 1426 1427* New `diff_contains()` revset function can be used to search diffs. 1428 1429* New command `jj operation diff` that can compare changes made between two 1430 operations. 1431 1432* New command `jj operation show` that can show the changes made in a single 1433 operation. 1434 1435* New config setting `git.private-commits` to prevent commits from being pushed. 1436 1437* [The default commit description template](docs/config.md#default-description) 1438 can now be configured by `templates.draft_commit_description`. 1439 1440* `jj fix` can now be configured to run different tools on different filesets. 1441 This simplifies the use case of configuring code formatters for specific file 1442 types. See `jj help fix` for details. 1443 1444* Added revset functions `author_date` and `committer_date`. 1445 1446* `jj describe` can now update the description of multiple commits. 1447 1448### Fixed bugs 1449 1450* `jj status` will show different messages in a conflicted tree, depending 1451 on the state of the working commit. In particular, if a child commit fixes 1452 a conflict in the parent, this will be reflected in the hint provided 1453 by `jj status` 1454 1455* `jj diff --git` no longer shows the contents of binary files. 1456 1457* Windows binaries no longer require `vcruntime140.dll` to be installed 1458 (normally through Visual Studio.) 1459 1460* On quit, the builtin pager no longer waits for all outputs to be discarded. 1461 1462* `jj branch rename` no longer shows a warning in colocated repos. 1463 1464### Contributors 1465 1466Thanks to the people who made this release happen! 1467 1468* Anton Älgmyr (@algmyr) 1469* Austin Seipp (@thoughtpolice) 1470* Benjamin Tan (@bnjmnt4n) 1471* Daniel Ploch (@torquestomp) 1472* Danny Hooper (@hooper) 1473* Emily (@emilazy) 1474* Essien Ita Essien (@essiene) 1475* Fedor Sheremetyev (@sheremetyev) 1476* Ilya Grigoriev (@ilyagr) 1477* Jonathan Tan (@jonathantanmy) 1478* Julien Vincent (@julienvincent) 1479* Martin von Zweigbergk (@martinvonz) 1480* Matt Kulukundis (@fowles) 1481* Matt Stark (@matts1) 1482* mlcui (@mlcui-corp) 1483* Philip Metzger (@PhilipMetzger) 1484* Scott Taylor (@scott2000) 1485* Skyler Grey (@Minion3665) 1486* Stephen Jennings (@jennings) 1487* Tim Janik (@tim-janik) 1488* Vincent Ging Ho Yim (@cenviity) 1489* Vladimír Čunát (@vcunat) 1490* Vladimir (@0xdeafbeef) 1491* Yuya Nishihara (@yuja) 1492 1493## [0.19.0] - 2024-07-03 1494 1495### Breaking changes 1496 1497* In revset aliases, top-level `kind:pattern` expression is now parsed as 1498 modifier. Surround with parentheses if it should be parsed as string/file 1499 pattern. 1500 1501* Dropped support for automatic upgrade of repo formats used by versions before 1502 0.12.0. 1503 1504* `jj fix` now defaults to the broader revset `-s reachable(@, mutable())` 1505 instead of `-s @`. 1506 1507* Dropped support for deprecated `jj branch delete`/`forget` `--glob` option. 1508 1509* `jj branch set` now creates new branch if it doesn't exist. Use `jj branch 1510 move` to ensure that the target branch already exists. 1511 [#3584](https://github.com/jj-vcs/jj/issues/3584) 1512 1513### Deprecations 1514 1515* Replacing `-l` shorthand for `--limit` with `-n` in `jj log`, `jj op log` 1516 and `jj obslog`. 1517 1518* `jj split --siblings` is deprecated in favor of `jj split --parallel` (to 1519 match `jj parallelize`). 1520 1521* A new `jj file` subcommand now replaces several existing uncategorized 1522 commands, which are deprecated. 1523 - `jj file show` replaces `jj cat`. 1524 - `jj file chmod` replaces `jj chmod`. 1525 - `jj file list` replaces `jj files`. 1526 1527### New features 1528 1529* Support background filesystem monitoring via watchman triggers enabled with 1530 the `core.watchman.register_snapshot_trigger = true` config. 1531 1532* Show paths to config files when configuration errors occur. 1533 1534* `jj fix` now supports configuring the default revset for `-s` using the 1535 `revsets.fix` config. 1536 1537* The `descendants()` revset function now accepts an optional `depth` argument; 1538 like the `ancestors()` depth argument, it limits the depth of the set. 1539 1540* Revset/template aliases now support function overloading. 1541 [#2966](https://github.com/jj-vcs/jj/issues/2966) 1542 1543* Conflicted files are individually simplified before being materialized. 1544 1545* The `jj file` subcommand now contains several existing file utilities. 1546 - `jj file show`, replacing `jj cat`. 1547 - `jj file chmod` replacing `jj chmod`. 1548 - `jj file list` replacing `jj files`. 1549 1550* New command `jj branch move` let you update branches by name pattern or source 1551 revision. 1552 1553* New diff option `jj diff --name-only` allows for easier shell scripting. 1554 1555* In color-words diffs, hunks are now highlighted with underline. See [diff 1556 colors and styles](docs/config.md#diff-colors-and-styles) for customization. 1557 1558* `jj git push -c <arg>` can now accept revsets that resolve to multiple 1559 revisions. This means that `jj git push -c xyz -c abc` is now equivalent to 1560 `jj git push -c 'all:(xyz | abc)'`. 1561 1562* `jj prev` and `jj next` have gained a `--conflict` flag which moves you 1563 to the next conflict in a child commit. 1564 1565* New command `jj git remote set-url` that sets the url of a git remote. 1566 1567* Author timestamp is now reset when rewriting discardable commits (empty 1568 commits with no description) if authored by the current user. 1569 [#2000](https://github.com/jj-vcs/jj/issues/2000) 1570 1571* `jj commit` now accepts `--reset-author` option to match `jj describe`. 1572 1573* `jj squash` now accepts a `--keep-emptied` option to keep the source commit. 1574 1575### Fixed bugs 1576 1577* `jj git push` now ignores immutable commits when checking whether a 1578 to-be-pushed commit has conflicts, or has no description / committer / author 1579 set. [#3029](https://github.com/jj-vcs/jj/issues/3029) 1580 1581* `jj` will look for divergent changes outside the short prefix set even if it 1582 finds the change id inside the short prefix set. 1583 [#2476](https://github.com/jj-vcs/jj/issues/2476) 1584 1585### Contributors 1586 1587Thanks to the people who made this release happen! 1588 1589* Austin Seipp (@thoughtpolice) 1590* Benjamin Tan (@bnjmnt4n) 1591* Daniel Ploch (@torquestomp) 1592* Danny Hooper (@hooper) 1593* Ilya Grigoriev (@ilyagr) 1594* James Sully (@sullyj3) 1595* Jonathan Tan (@jonathantanmy) 1596* Kyle J Strand (@BatmanAoD) 1597* Manuel Caldeira (@KiitoX) 1598* Martin von Zweigbergk (@martinvonz) 1599* Matt Kulukundis (@fowles) 1600* Matt Stark (@matts1) 1601* mlcui (@mlcui-corp) 1602* Philip Metzger (@PhilipMetzger) 1603* Scott Taylor (@scott2000) 1604* Simon Wollwage (@Kintaro) 1605* Tal Pressman (@tp-woven) 1606* Yuya Nishihara (@yuja) 1607 1608## [0.18.0] - 2024-06-05 1609 1610### Breaking changes 1611 1612* Dropped support for `ui.default-revset` config (replaced by `revsets.log` in 1613 0.8.0). 1614 1615* The `commit_summary_no_branches` template is superseded by 1616 `templates.branch_list`. 1617 1618* `jj split` will now refuse to split an empty commit. 1619 1620* `jj config list` now uses multi-line strings and single-quoted strings in the 1621 output when appropriate. 1622 1623* `jj config get`/`list`/`set` now parse `name` argument as [TOML 1624 key](https://toml.io/en/v1.0.0#keys). Quote meta characters as needed. 1625 Example: `jj config get "revset-aliases.'trunk()'"` 1626 1627* When updating the working copy away from an empty and undescribed commit, it 1628 is now abandoned even if it is a merge commit. 1629 1630* If a new working-copy commit is created because the old one was abandoned, and 1631 the old commit was merge, then the new commit will now also be. 1632 [#2859](https://github.com/jj-vcs/jj/issues/2859) 1633 1634* `jj new`'s `--insert-before`/`--insert-after` options must now be set for each 1635 commit the new commit will be inserted before/after. Previously, those options 1636 were global flags and specifying them once would insert the new commit before/ 1637 after all the specified commits. 1638 1639### Deprecations 1640 1641* Attempting to alias a built-in command now gives a warning, rather than being 1642 silently ignored. 1643 1644### New features 1645 1646* `jj branch list`/`tag list` now accept `-T`/`--template` option. The tag list 1647 prints commit summary along with the tag name by default. 1648 1649* Conflict markers now include an explanation of what each part of the conflict 1650 represents. 1651 1652* `ui.color = "debug"` prints active labels alongside the regular colored 1653 output. 1654 1655* `jj branch track` now show conflicts if there are some. 1656 1657* A new revset `reachable(srcs, domain)` will return all commits that are 1658 reachable from `srcs` within `domain`. 1659 1660* There are now prebuilt binaries for `aarch64-linux-unknown-musl`. 1661 Note, these are cross compiled and currently untested. 1662 We plan on providing fully tested builds later once our CI system allows it. 1663 1664* Added new revsets `mutable()` and `immutable()`. 1665 1666* Upgraded `scm-record` from v0.2.0 to v0.3.0. See release notes at 1667 <https://github.com/arxanas/scm-record/releases/tag/v0.3.0> 1668 1669* New command `jj fix` that can be configured to update commits by running code 1670 formatters (or similar tools) on changed files. The configuration schema and 1671 flags are minimal for now, with a number of improvements planned (for example, 1672 [#3800](https://github.com/jj-vcs/jj/issues/3800) and 1673 [#3801](https://github.com/jj-vcs/jj/issues/3801)). 1674 1675* `jj new`'s `--insert-before` and `--insert-after` options can now be used 1676 simultaneously. 1677 1678* `jj git push` now can push commits with empty descriptions with the 1679 `--allow-empty-description` flag 1680 1681### Fixed bugs 1682 1683* Previously, `jj git push` only made sure that the branch is in the expected 1684 location on the remote server when pushing a branch forward (as opposed to 1685 sideways or backwards). Now, `jj git push` makes a safety check in all cases 1686 and fails whenever `jj git fetch` would have introduced a conflict. 1687 1688 In other words, previously branches that moved sideways or backward were 1689 pushed similarly to Git's `git push --force`; now they have protections 1690 similar to `git push --force-with-lease` (though not identical to it, to match 1691 the behavior of `jj git fetch`). Note also that because of the way `jj git 1692 fetch` works, `jj` does not suffer from the same problems as Git's `git push 1693 --force-with-lease` in situations when `git fetch` is run in the background. 1694 1695* When the working copy commit becomes immutable, a new one is automatically 1696 created 1697 on top of it to avoid letting the user edit the immutable one. 1698 1699* `jj config list` now properly escapes TOML keys (#1322). 1700 1701* Files with conflicts are now checked out as executable if all sides of the 1702 conflict are executable. 1703 1704* The progress bar (visible when using e.g. `jj git clone`) clears the 1705 remainder of the cursor row after drawing rather than clearing the entire row 1706 before drawing, eliminating the "flicker" effect seen on some terminals. 1707 1708### Contributors 1709 1710Thanks to the people who made this release happen! 1711 1712* Alexander Potashev (@aspotashev) 1713* Austin Seipp (@thoughtpolice) 1714* Benjamin Tan (@bnjmnt4n) 1715* Charles Crete (@Cretezy) 1716* Daniel Ploch (@torquestomp) 1717* Danny Hooper (@hooper) 1718* Eidolon (@HybridEidolon) 1719* Glen Choo (@chooglen) 1720* Gregory Anders (@gpanders) 1721* Ilya Grigoriev (@ilyagr) 1722* jyn (@jyn514) 1723* Martin von Zweigbergk (@martinvonz) 1724* Matt Stark (@matts1) 1725* Matthew Davidson (@KingMob) 1726* Michael Gattozzi (@mgattozzi) 1727* mlcui (@mlcui-corp) 1728* Philip Metzger (@PhilipMetzger) 1729* Remo Senekowitsch (@senekor) 1730* Thomas Castiglione (@gulbanana) 1731* Théo Daron (@tdaron) 1732* tinger (@tingerrr) 1733* Waleed Khan (@arxanas) 1734* Yuya Nishihara (@yuja) 1735 1736## [0.17.1] - 2024-05-07 1737 1738### Fixed bugs 1739 1740* `jj status` no longer scans through the entire history to look for ancestors 1741 with conflicts. 1742 1743## [0.17.0] - 2024-05-01 1744 1745### Breaking changes 1746 1747* The default template aliases were replaced as follows: 1748 * `builtin_op_log_root(op_id: OperationId)` -> 1749 `format_root_operation(root: Operation)` 1750 * `builtin_log_root(change_id: ChangeId, commit_id: CommitId)` -> 1751 `format_root_commit(root: Commit)` 1752 * `builtin_change_id_with_hidden_and_divergent_info` -> 1753 `format_short_change_id_with_hidden_and_divergent_info(commit: Commit)` 1754 1755* The `--revision` option of `jj rebase` is renamed to `--revisions`. The short 1756 alias `-r` is still supported. 1757 1758### New features 1759 1760* The list of conflicted paths is printed whenever the working copy changes. 1761 This can be disabled with the `--quiet` option. 1762 1763* Commit objects in templates now have a `mine() -> Boolean` method analog to 1764 the same function in revsets. It evaluates to true if the email of the commit 1765 author matches the current `user.email`. 1766 1767* Commit objects in templates now have a `contained_in(revset: String) -> 1768 Boolean` method. 1769 1770* Operation objects in templates now have a `snapshot() -> Boolean` method that 1771 evaluates to true if the operation was a snapshot created by a non-mutating 1772 command (e.g. `jj log`). 1773 1774* Revsets and templates now support single-quoted raw string literals. 1775 1776* A new config option `ui.always-allow-large-revsets` has been added to 1777 allow large revsets expressions in some commands, without the `all:` prefix. 1778 1779* A new config option `ui.allow-filesets` has been added to enable ["fileset" 1780 expressions](docs/filesets.md). Note that filesets are currently experimental, 1781 but will be enabled by default in a future release. 1782 1783* A new global flag `--ignore-immutable` lets you rewrite immutable commits. 1784 1785* New command `jj parallelize` that rebases a set of revisions into siblings. 1786 1787* `jj status` now supports filtering by paths. For example, `jj status .` will 1788 only list changed files that are descendants of the current directory. 1789 1790* `jj prev` and `jj next` now work when the working copy revision is a merge. 1791 1792* `jj squash` now accepts a `--use-destination-message/-u` option that uses the 1793 description of the destination for the new squashed revision and discards the 1794 descriptions of the source revisions. 1795 1796* You can check whether Watchman fsmonitor is enabled or installed with the new 1797 `jj debug watchman status` command. 1798 1799* `jj rebase` now accepts revsets resolving to multiple revisions with the 1800 `--revisions`/`-r` option. 1801 1802* `jj rebase -r` now accepts `--insert-after` and `--insert-before` options to 1803 customize the location of the rebased revisions. 1804 1805### Fixed bugs 1806 1807* Revsets now support `\`-escapes in string literal. 1808 1809* The builtin diff editor now allows empty files to be selected during 1810 `jj split`. 1811 1812* Fixed a bug with `jj split` introduced in 0.16.0 that caused it to incorrectly 1813 rebase the children of the revision being split if they had other parents 1814 (i.e. if the child was a merge). 1815 1816* The `snapshot.max-new-file-size` option can now handle raw integer literals, 1817 interpreted as a number of bytes, where previously it could only handle string 1818 literals. This means that `snapshot.max-new-file-size="1"` and 1819 `snapshot.max-new-file-size=1` are now equivalent. 1820 1821* `jj squash <path>` is now a no-op if the path argument didn't match any paths 1822 (it used to create new commits with bumped timestamp). 1823 [#3334](https://github.com/jj-vcs/jj/issues/3334) 1824 1825### Contributors 1826 1827Thanks to the people who made this release happen! 1828 1829* Anton Älgmyr (@algmyr) 1830* Anton Bulakh (@necauqua) 1831* Austin Seipp (@thoughtpolice) 1832* Benjamin Tan (@bnjmnt4n) 1833* Cretezy (@Cretezy) 1834* Daniel Ploch (@torquestomp) 1835* Evan Mesterhazy (@emesterhazy) 1836* Ilya Grigoriev (@ilyagr) 1837* Martin von Zweigbergk (@martinvonz) 1838* Noah Mayr (@noahmayr) 1839* Jeremy O'Brien (@neutralinsomniac) 1840* Jonathan Lorimer (@JonathanLorimer) 1841* Philip Metzger (@PhilipMetzger) 1842* Poliorcetics (@poliorcetics) 1843* Rowan Walsh (@rowan-walsh) 1844* Scott Olson (@solson) 1845* Théo Daron (@tdaron) 1846* Yuya Nishihara (@yuja) 1847 1848## [0.16.0] - 2024-04-03 1849 1850### Deprecations 1851 1852* `jj move` was deprecated in favor of `jj squash`. 1853 1854### Breaking changes 1855 1856* The `git_head` template keyword now returns an optional value instead of a 1857 list of 0 or 1 element. 1858 1859* The `jj sparse set --edit`/`--reset` flags were split up into `jj sparse 1860 edit`/`reset` subcommands respectively. 1861 1862* The `jj sparse` subcommands now parse and print patterns as workspace-relative 1863 paths. 1864 1865* The `jj log` command no longer uses the default revset when a path is 1866 specified. 1867 1868### New features 1869 1870* Config now supports rgb hex colors (in the form `#rrggbb`) wherever existing 1871 color names are supported. 1872 1873* `ui.default-command` now accepts multiple string arguments, for more complex 1874 default `jj` commands. 1875 1876* Graph node symbols are now configurable via templates 1877 * `templates.log_node` 1878 * `templates.op_log_node` 1879 1880* `jj log` now includes synthetic nodes in the graph where some revisions were 1881 elided. 1882 1883* `jj squash` now accepts `--from` and `--into` (also aliased as `--to`) if `-r` 1884 is not specified. It can now be used for all use cases where `jj move` could 1885 previously be used. The `--from` argument accepts a revset that resolves to 1886 more than one revision. 1887 1888* Commit templates now support `immutable` keyword. 1889 1890* New template function `coalesce(content, ..)` is added. 1891 1892* Timestamps are now shown in local timezone and without milliseconds and 1893 timezone offset by default. 1894 1895* `jj git push` now prints messages from the remote. 1896 1897* `jj branch list` now supports a `--conflicted/-c` option to show only 1898 conflicted branches. 1899 1900* `jj duplicate` and `jj abandon` can now take more than a single `-r` argument, 1901 for consistency with other commands. 1902 1903* `jj branch list` now allows combining `-r REVISIONS`/`NAMES` and `-a` options. 1904 1905* `--all` is now named `--all-remotes` for `jj branch list` 1906 1907* There is a new global `--quiet` flag to silence commands' non-primary output. 1908 1909* `jj split` now supports a `--siblings/-s` option that splits the target 1910 revision into siblings with the same parents and children. 1911 1912* New function `working_copies()` for revsets to show the working copy commits 1913 of all workspaces. 1914 1915### Fixed bugs 1916 1917None. 1918 1919### Contributors 1920 1921Thanks to the people who made this release happen! 1922 1923* Aleksey Kuznetsov (@zummenix) 1924* Anton Älgmyr (@algmyr) 1925* Austin Seipp (@thoughtpolice) 1926* Benjamin Tan (@bnjmnt4n) 1927* Chris Krycho (@chriskrycho) 1928* Christoph Koehler (@ckoehler) 1929* Daniel Ploch (@torquestomp) 1930* Evan Mesterhazy (@emesterhazy) 1931* Ilya Grigoriev (@ilyagr) 1932* Khionu Sybiern (@khionu) 1933* Martin von Zweigbergk (@martinvonz) 1934* Matthew Davidson (@KingMob) 1935* mrstanwell (@mrstanwell) 1936* Noah Mayr (@noahmayr) 1937* Patric Stout (@TrueBrain) 1938* Poliorcetics (@poliorcetics) 1939* Simon Wollwage (@Kintaro) 1940* Steve Klabnik (@steveklabnik) 1941* Tom Ward (@tomafro) 1942* TrashCan (@TrashCan69420) 1943* Yuya Nishihara (@yuja) 1944 1945## [0.15.1] - 2024-03-06 1946 1947No code changes (fixing Rust `Cargo.toml` stuff). 1948 1949## [0.15.0] - 2024-03-06 1950 1951### Breaking changes 1952 1953* The minimum supported Rust version (MSRV) is now 1.76.0. 1954 1955* The on-disk index format changed. New index files will be created 1956 automatically, but it can fail if the repository is co-located and predates 1957 Git GC issues [#815](https://github.com/jj-vcs/jj/issues/815). If 1958 reindexing failed, you'll need to clean up corrupted operation history by 1959 `jj op abandon ..<bad operation ID>`. 1960 1961* Dropped support for the "legacy" graph-drawing style. Use "ascii" for a very 1962 similar result. 1963 1964* The default log output no longer lists all tagged heads. Set `revsets.log = 1965 "@ | ancestors(immutable_heads().., 2) | heads(immutable_heads())"` to restore 1966 the old behavior. 1967 1968* Dropped support for the deprecated `:` revset operator. Use `::` instead. 1969 1970* `jj rebase --skip-empty` no longer abandons commits that were already empty 1971 before the rebase. 1972 1973### New features 1974 1975* Partial support for commit signing. Currently you can configure jj to "keep" 1976 commit signatures by making new ones for rewritten commits, and to sign new 1977 commits when they are created. 1978 1979 This comes with out-of-the-box support for the following backends: 1980 * GnuPG 1981 * SSH 1982 1983 Signature verification and an explicit sign command will hopefully come soon. 1984 1985* Templates now support logical operators: `||`, `&&`, `!` 1986 1987* Templates now support the `self` keyword, which is the current commit in `jj 1988 log`/`obslog` templates. 1989 1990* `jj show` now accepts `-T`/`--template` option to render its output using 1991 template 1992 1993* `jj config list` now accepts `-T`/`--template` option. 1994 1995* `jj git fetch` now accepts `-b` as a shorthand for `--branch`, making it more 1996 consistent with other commands that accept a branch 1997 1998* In the templating language, Timestamps now have a `.local()` method for 1999 converting to the local timezone. 2000 2001* `jj next/prev` now infer `--edit` when you're already editing a non-head 2002 commit (a commit with children). 2003 2004* A new built-in pager named `:builtin` is available on all platforms, 2005 implemented with [minus](https://github.com/arijit79/minus/) 2006 2007* Set config `ui.log-synthetic-elided-nodes = true` to make `jj log` include 2008 synthetic nodes in the graph where some revisions were elided 2009 ([#1252](https://github.com/jj-vcs/jj/issues/1252), 2010 [#2971](https://github.com/jj-vcs/jj/issues/2971)). This may become the 2011 default depending on feedback. 2012 2013* When creating a new workspace, the sparse patterns are now copied over from 2014 the current workspace. 2015 2016* `jj git init --colocate` can now import an existing Git repository. This is 2017 equivalent to `jj git init --git-repo=.`. 2018 2019* `jj git fetch` now automatically prints new remote branches and tags by 2020 default. 2021 2022* `--verbose/-v` is now `--debug` (no short option since it's not intended to be 2023 used often) 2024 2025* `jj move --from/--to` can now be abbreviated to `jj move -f/-t` 2026 2027* `jj commit`/`diffedit`/`move`/`resolve`/`split`/`squash`/`unsquash` now accept 2028 `--tool=<NAME>` option to override the default. 2029 [#2575](https://github.com/jj-vcs/jj/issues/2575) 2030 2031* Added completions for [Nushell](https://nushell.sh) to `jj util completion` 2032 2033* `jj branch list` now supports a `--tracked/-t` option which can be used to 2034 show tracked branches only. Omits local Git-tracking branches by default. 2035 2036* Commands producing diffs now accept a `--context` flag for the number of 2037 lines of context to show. 2038 2039* `jj` commands with the `-T`/`--template` option now provide a hint containing 2040 defined template names when no argument is given, assisting the user in making 2041 a selection. 2042 2043### Fixed bugs 2044 2045* On Windows, symlinks in the repo are now supported when Developer Mode is 2046 enabled. 2047 When symlink support is unavailable, they will be materialized as regular 2048 files in the 2049 working copy (instead of resulting in a crash). 2050 [#2](https://github.com/jj-vcs/jj/issues/2) 2051 2052* On Windows, the `:builtin` pager is now used by default, rather than being 2053 disabled entirely. 2054 2055* Auto-rebase now preserves the shape of history even for merge commits where 2056 one parent is an ancestor of another. 2057 [#2600](https://github.com/jj-vcs/jj/issues/2600) 2058 2059### Contributors 2060 2061Thanks to the people who made this release happen! 2062 2063* Aleksey Kuznetsov (@zummenix) 2064* Anton Bulakh (@necauqua) 2065* Anton Älgmyr (@algmyr) 2066* Austin Seipp (@thoughtpolice) 2067* Benjamin Brittain (@benbrittain) 2068* Benjamin Tan (@bnjmnt4n) 2069* Daehyeok Mun (@daehyeok) 2070* Daniel Ploch (@torquestomp) 2071* Evan Mesterhazy (@emesterhazy) 2072* gulbanana (@gulbanana) 2073* Ilya Grigoriev (@ilyagr) 2074* Jonathan Tan (@jonathantanmy) 2075* Julien Vincent (@julienvincent) 2076* jyn (@jyn514) 2077* Martin von Zweigbergk (@martinvonz) 2078* Paulo Coelho (@prscoelho) 2079* Philip Metzger (@PhilipMetzger) 2080* Poliorcetics (@poliorcetics) 2081* Stephen Jennings (@jennings) 2082* Vladimir (@0xdeafbeef) 2083* Yuya Nishihara (@yuja) 2084 2085## [0.14.0] - 2024-02-07 2086 2087### Deprecations 2088 2089* `jj checkout` and `jj merge` are both deprecated; use `jj new` instead to 2090 replace both of these commands in all instances. 2091 2092 **Rationale**: `jj checkout` and `jj merge` both implement identical 2093 functionality, which is a subset of `jj new`. `checkout` creates a new working 2094 copy commit on top of a single specified revision, i.e. with one parent. 2095 `merge` creates a new working copy commit on top of *at least* two specified 2096 revisions, i.e. with two or more parents. 2097 2098 The only difference between these commands and `jj new`, which *also* creates 2099 a new working copy commit, is that `new` can create a working copy commit on 2100 top of any arbitrary number of revisions, so it can handle both the previous 2101 cases at once. The only actual difference between these three commands is the 2102 command syntax and their name. These names were chosen to be familiar to users 2103 of other version control systems, but we instead encourage all users to adopt 2104 `jj new` instead; it is more general and easier to remember than both of 2105 these. 2106 2107 `jj checkout` and `jj merge` will no longer be shown as part of `jj help`, but 2108 will still function for now, emitting a warning about their deprecation. 2109 2110 **Deadline**: `jj checkout` and `jj merge` will be deleted and are expected 2111 become a **hard error later in 2024**. 2112 2113* `jj init --git` and `jj init --git-repo` are now deprecated and will be 2114 removed 2115 in the near future. 2116 2117 Use `jj git init` instead. 2118 2119### Breaking changes 2120 2121* (Minor) Diff summaries (e.g. `jj diff -s`) now use `D` for "Deleted" instead 2122 of `R` for "Removed". @joyously pointed out that `R` could also mean 2123 "Renamed". 2124 2125* `jj util completion` now takes the shell as a positional argument, not a flag. 2126 the previous behavior is deprecated, but supported for now. it will be removed 2127 in the future. 2128 2129* `jj rebase` now preserves the shape of history even for merge commits where 2130 one parent is an ancestor of another. You can follow the `jj rebase` by 2131 `jj rebase -s <merge commit> -d <single parent>` if you want to linearize the 2132 history. 2133 2134### New features 2135 2136* `jj util completion` now supports powershell and elvish. 2137 2138* Official binaries for macOS running on Apple Silicon (`aarch64-apple-darwin`) 2139 are now available, alongside the existing macOS x86 binaries. 2140 2141* New `jj op abandon` command is added to clean up the operation history. Git 2142 refs and commit objects can be further compacted by `jj util gc`. 2143 2144* `jj util gc` now removes unreachable operation, view, and Git objects. 2145 2146* `jj branch rename` will now warn if the renamed branch has a remote branch, 2147 since 2148 those will have to be manually renamed outside of `jj`. 2149 2150* `jj git push` gained a `--tracked` option, to push all the tracked branches. 2151 2152* There's now a virtual root operation, similar to the [virtual root 2153 commit](docs/glossary.md#root-commit). It appears at the end of `jj op log`. 2154 2155* `jj config list` gained a `--include-overridden` option to allow 2156 printing overridden config values. 2157 2158* `jj config list` now accepts `--user` or `--repo` option to specify 2159 config origin. 2160 2161* New `jj config path` command to print the config file path without launching 2162 an editor. 2163 2164* `jj tag list` command prints imported git tags. 2165 2166* `jj next` and `jj prev` now prompt in the event of the next/previous commit 2167 being ambiguous, instead of failing outright. 2168 2169* `jj resolve` now displays the file being resolved. 2170 2171* `jj workspace root` was aliased to `jj root`, for ease of discoverability 2172 2173* `jj diff` no longer shows the contents of binary files. 2174 2175* `jj git` now has an `init` command that initializes a git backed repo. 2176 2177* New template function `surround(prefix, suffix, content)` is added. 2178 2179### Fixed bugs 2180 2181* Fixed snapshots of symlinks in `gitignore`-d directory. 2182 [#2878](https://github.com/jj-vcs/jj/issues/2878) 2183 2184* Fixed data loss in dirty working copy when checked-out branch is rebased or 2185 abandoned by Git. 2186 [#2876](https://github.com/jj-vcs/jj/issues/2876) 2187 2188### Contributors 2189 2190Thanks to the people who made this release happen! 2191 2192* Austin Seipp (@thoughtpolice) 2193* Benjamin Brittain (@benbrittain) 2194* Chris Krycho (@chriskrycho) 2195* Daehyeok Mun (@daehyeok) 2196* Daniel Ploch (@torquestomp) 2197* Essien Ita Essien (@essiene) 2198* Ikko Eltociear Ashimine (@eltociear) 2199* Ilya Grigoriev (@ilyagr) 2200* Jonathan Tan (@jonathantanmy) 2201* jyn (@jyn514) 2202* Martin von Zweigbergk (@martinvonz) 2203* Matt Stark (@matts1) 2204* Michael Pratt (prattmic) 2205* Philip Metzger (@PhilipMetzger) 2206* Stephen Jennings (@jennings) 2207* Valentin Gatien-Baron (@v-gb) 2208* vwkd (@vwkd) 2209* Yuya Nishihara (@yuja) 2210 2211## [0.13.0] - 2024-01-03 2212 2213### Breaking changes 2214 2215* `jj git fetch` no longer imports new remote branches as local branches. Set 2216 `git.auto-local-branch = true` to restore the old behavior. 2217 2218### New features 2219 2220* Information about new and resolved conflicts is now printed by every command. 2221 2222* `jj branch` has gained a new `rename` subcommand that allows changing a branch 2223 name atomically. `jj branch help rename` for details. 2224 2225### Fixed bugs 2226 2227* Command aliases can now be loaded from repository config relative to the 2228 current working directory. 2229 [#2414](https://github.com/jj-vcs/jj/issues/2414) 2230 2231### Contributors 2232 2233Thanks to the people who made this release happen! 2234 2235* Austin Seipp (@thoughtpolice) 2236* Essien Ita Essien (@essiene) 2237* Gabriel Scherer (@gasche) 2238* Ilya Grigoriev (@ilyagr) 2239* Martin von Zweigbergk (@martinvonz) 2240* Philip Metzger (@PhilipMetzger) 2241* Waleed Khan (@arxanas) 2242* Yuya Nishihara (@yuja) 2243 2244## [0.12.0] - 2023-12-05 2245 2246### Breaking changes 2247 2248* The `remote_branches()` revset no longer includes branches exported to the Git 2249 repository (so called Git-tracking branches.) 2250 2251* `jj branch set` no longer creates a new branch. Use `jj branch create` 2252 instead. 2253 2254* `jj init --git` in an existing Git repository now errors and exits rather than 2255 creating a second Git store. 2256 2257### New features 2258 2259* `jj workspace add` can now take _multiple_ `--revision` arguments, which will 2260 create a new workspace with its working-copy commit on top of all the parents, 2261 as if you had run `jj new r1 r2 r3 ...`. 2262 2263* You can now set `git.abandon-unreachable-commits = false` to disable the 2264 usual behavior where commits that became unreachable in the Git repo are 2265 abandoned ([#2504](https://github.com/jj-vcs/jj/pull/2504)). 2266 2267* `jj new` gained a `--no-edit` option to prevent editing the newly created 2268 commit. For example, `jj new a b --no-edit -m Merge` creates a merge commit 2269 without affecting the working copy. 2270 2271* `jj rebase` now takes the flag `--skip-empty`, which doesn't copy over commits 2272 that would become empty after a rebase. 2273 2274* There is a new `jj util gc` command for cleaning up the repository storage. 2275 For now, it simply runs `git gc` on the backing Git repo (when using the Git 2276 backend). 2277 2278### Fixed bugs 2279 2280* Fixed another file conflict resolution issue where `jj status` would disagree 2281 with the actual file content. 2282 [#2654](https://github.com/jj-vcs/jj/issues/2654) 2283 2284### Contributors 2285 2286Thanks to the people who made this release happen! 2287 2288* Antoine Cezar (@AntoineCezar) 2289* Anton Bulakh (@necauqua) 2290* Austin Seipp (@thoughtpolice) 2291* Benjamin Saunders (@Ralith) 2292* Carlos Precioso (@cprecioso) 2293* Chris Krycho (@chriskrycho) 2294* Ilya Grigoriev (@ilyagr) 2295* Jason R. Coombs (@jaraco) 2296* Jesse Somerville (@jessesomerville) 2297* Łukasz Kurowski (@crackcomm) 2298* Martin von Zweigbergk (@martinvonz) 2299* mlcui (@mlcui-corp) 2300* Philip Metzger (@PhilipMetzger) 2301* Waleed Khan (@arxanas) 2302* Yuya Nishihara (@yuja) 2303 2304## [0.11.0] - 2023-11-01 2305 2306### Breaking changes 2307 2308* Conflicts are now stored in a different way. Commits written by a new `jj` 2309 binary will not be read correctly by older `jj` binaries. The new model 2310 solves some performance problems with the old model. For example, `jj log` 2311 should be noticeably faster on large repos. You may need to create a new 2312 clone to see the full speedup. 2313 2314* The `remote_branches()` revset now includes branches exported to the Git 2315 repository (so called Git-tracking branches.) *This change will be reverted 2316 in 0.12.0.* 2317 2318* Status messages are now printed to stderr. 2319 2320* `jj config set` now interprets the value as TOML also if it's a valid TOML 2321 array or table. For example, `jj config set --user 'aliases.n' '["new"]'` 2322 2323* Remote branches now have tracking or non-tracking flags. The 2324 `git.auto-local-branch` setting is applied only to newly fetched remote 2325 branches. Existing remote branches are migrated as follows: 2326 2327 * If local branch exists, the corresponding remote branches are considered 2328 tracking branches. 2329 * Otherwise, the remote branches are non-tracking branches. 2330 2331 If the deduced tracking flags are wrong, use `jj branch track`/`untrack` 2332 commands to fix them up. 2333 2334 See [automatic local branch creation](docs/config.md#automatic-local-branch-creation) 2335 for details. 2336 2337* Non-tracking remote branches aren't listed by default. Use `jj branch list 2338 --all` to show all local and remote branches. 2339 2340* It's not allowed to push branches if non-tracking remote branches of the same 2341 name exist. 2342 2343* Pushing deleted/moved branches no longer abandons the local commits referenced 2344 by the remote branches. 2345 2346* `jj git fetch --branch` now requires `glob:` prefix to expand `*` in branch 2347 name. 2348 2349### New features 2350 2351* `jj`'s stable release can now be installed 2352 with [`cargo binstall jj-cli`](https://github.com/cargo-bins/cargo-binstall). 2353 2354* `jj workspace add` now takes a `--revision` argument. 2355 2356* `jj workspace forget` can now forget multiple workspaces at once. 2357 2358* `branches()`/`remote_branches()`/`author()`/`committer()`/`description()` 2359 revsets now support glob matching. 2360 2361* `jj branch delete`/`forget`/`list`, and `jj git push --branch` now support 2362 [string pattern syntax](docs/revsets.md#string-patterns). The `--glob` option 2363 is deprecated in favor of `glob:` pattern. 2364 2365* The `branches`/`tags`/`git_refs`/`git_head` template keywords now return a 2366 list of `RefName`s. They were previously pre-formatted strings. 2367 2368* The new template keywords `local_branches`/`remote_branches` are added to show 2369 only local/remote branches. 2370 2371* `jj workspace add` now preserves all parents of the old working-copy commit 2372 instead of just the first one. 2373 2374* `jj rebase -r` gained the ability to rebase a revision `A` onto a descendant 2375 of `A`. 2376 2377### Fixed bugs 2378 2379* Updating the working copy to a commit where a file that's currently ignored 2380 in the working copy no longer leads to a crash 2381 ([#976](https://github.com/jj-vcs/jj/issues/976)). 2382 2383* Conflicts in executable files can now be resolved just like conflicts in 2384 non-executable files ([#1279](https://github.com/jj-vcs/jj/issues/1279)). 2385 2386* `jj new --insert-before` and `--insert-after` now respect immutable revisions 2387 ([#2468](https://github.com/jj-vcs/jj/pull/2468)). 2388 2389### Contributors 2390 2391Thanks to the people who made this release happen! 2392 2393* Antoine Cezar (@AntoineCezar) 2394* Austin Seipp (@thoughtpolice) 2395* Benjamin Saunders (@Ralith) 2396* Gabriel Scherer (@gasche) 2397* Ilya Grigoriev (@ilyagr) 2398* Infra (@1011X) 2399* Isabella Basso (@isinyaaa) 2400* Martin von Zweigbergk (@martinvonz) 2401* Tal Pressman (@talpr) 2402* Waleed Khan (@arxanas) 2403* Yuya Nishihara (@yuja) 2404 2405## [0.10.0] - 2023-10-04 2406 2407### Breaking changes 2408 2409* A default revset-alias function `trunk()` now exists. If you previously 2410 defined 2411 your own `trunk()` alias it will continue to overwrite the built-in one. 2412 Check [revsets.toml](cli/src/config/revsets.toml) 2413 and [revsets.md](docs/revsets.md) 2414 to understand how the function can be adapted. 2415 2416### New features 2417 2418* The `ancestors()` revset function now takes an optional `depth` argument 2419 to limit the depth of the ancestor set. For example, use `jj log -r 2420 'ancestors(@, 5)` to view the last 5 commits. 2421 2422* Support for the Watchman filesystem monitor is now bundled by default. Set 2423 `core.fsmonitor = "watchman"` in your repo to enable. 2424 2425* You can now configure the set of immutable commits via 2426 `revset-aliases.immutable_heads()`. For example, set it to 2427 `"remote_branches() | tags()"` to prevent rewriting those those. Their 2428 ancestors are implicitly also immutable. 2429 2430* `jj op log` now supports `--no-graph`. 2431 2432* Templates now support an additional escape: `\0`. This will output a literal 2433 null byte. This may be useful for e.g. 2434 `jj log -T 'description ++ "\0"' --no-graph` to output descriptions only, but 2435 be able to tell where the boundaries are 2436 2437* jj now bundles a TUI tool to use as the default diff and merge editors. (The 2438 previous default was `meld`.) 2439 2440* `jj split` supports the `--interactive` flag. (This is already the default if 2441 no paths are provided.) 2442 2443* `jj commit` accepts an optional list of paths indicating a subset of files to 2444 include in the first commit 2445 2446* `jj commit` accepts the `--interactive` flag. 2447 2448### Fixed bugs 2449 2450### Contributors 2451 2452Thanks to the people who made this release happen! 2453 2454* Austin Seipp (@thoughtpolice) 2455* Emily Kyle Fox (@emilykfox) 2456* glencbz (@glencbz) 2457* Hong Shin (@honglooker) 2458* Ilya Grigoriev (@ilyagr) 2459* James Sully (@sullyj3) 2460* Martin von Zweigbergk (@martinvonz) 2461* Philip Metzger (@PhilipMetzger) 2462* Ruben Slabbert (@rslabbert) 2463* Vamsi Avula (@avamsi) 2464* Waleed Khan (@arxanas) 2465* Willian Mori (@wmrmrx)) 2466* Yuya Nishihara (@yuja) 2467* Zachary Dremann (@Dr-Emann) 2468 2469## [0.9.0] - 2023-09-06 2470 2471### Breaking changes 2472 2473* The minimum supported Rust version (MSRV) is now 1.71.0. 2474 2475* The storage format of branches, tags, and git refs has changed. Newly-stored 2476 repository data will no longer be loadable by older binaries. 2477 2478* The `:` revset operator is deprecated. Use `::` instead. We plan to delete the 2479 `:` form in jj 0.15+. 2480 2481* The `--allow-large-revsets` flag for `jj rebase` and `jj new` was replaced by 2482 a `all:` before the revset. For example, use `jj rebase -d 'all:foo-'` 2483 instead of `jj rebase --allow-large-revsets -d 'foo-'`. 2484 2485* The `--allow-large-revsets` flag for `jj rebase` and `jj new` can no longer be 2486 used for allowing duplicate destinations. Include the potential duplicates 2487 in a single expression instead (e.g. `jj new 'all:x|y'`). 2488 2489* The `push.branch-prefix` option was renamed to `git.push-branch-prefix`. 2490 2491* The default editor on Windows is now `Notepad` instead of `pico`. 2492 2493* `jj` will fail attempts to snapshot new files larger than 1MiB by default. 2494 This behavior 2495 can be customized with the `snapshot.max-new-file-size` config option. 2496 2497* Author and committer signatures now use empty strings to represent unset 2498 names and email addresses. The `author`/`committer` template keywords and 2499 methods also return empty strings. 2500 Older binaries may not warn user when attempting to `git push` commits 2501 with such signatures. 2502 2503* In revsets, the working-copy or remote symbols (such as `@`, `workspace_id@`, 2504 and `branch@remote`) can no longer be quoted as a unit. If a workspace or 2505 branch name contains whitespace, quote the name like `"branch name"@remote`. 2506 Also, these symbols will not be resolved as revset aliases or function 2507 parameters. For example, `author(foo@)` is now an error, and the revset alias 2508 `'revset-aliases.foo@' = '@'` will be failed to parse. 2509 2510* The `root` revset symbol has been converted to function `root()`. 2511 2512* The `..x` revset is now evaluated to `root()..x`, which means the root commit 2513 is no longer included. 2514 2515* `jj git push` will now push all branches in the range `remote_branches()..@` 2516 instead of only branches pointing to `@` or `@-`. 2517 2518* It's no longer allowed to create a Git remote named "git". Use `jj git remote 2519 rename` to rename the existing remote. 2520 [#1690](https://github.com/jj-vcs/jj/issues/1690) 2521 2522* Revset expression like `origin/main` will no longer resolve to a 2523 remote-tracking branch. Use `main@origin` instead. 2524 2525### New features 2526 2527* Default template for `jj log` now does not show irrelevant information 2528 (timestamp, empty, message placeholder etc.) about the root commit. 2529 2530* Commit templates now support the `root` keyword, which is `true` for the root 2531 commit and `false` for every other commit. 2532 2533* `jj init --git-repo` now works with bare repositories. 2534 2535* `jj config edit --user` and `jj config set --user` will now pick a default 2536 config location if no existing file is found, potentially creating parent 2537 directories. 2538 2539* `jj log` output is now topologically grouped. 2540 [#242](https://github.com/jj-vcs/jj/issues/242) 2541 2542* `jj git clone` now supports the `--colocate` flag to create the git repo 2543 in the same directory as the jj repo. 2544 2545* `jj restore` gained a new option `--changes-in` to restore files 2546 from a merge revision's parents. This undoes the changes that `jj diff -r` 2547 would show. 2548 2549* `jj diff`/`log` now supports `--tool <name>` option to generate diffs by 2550 external program. For configuration, see [the documentation](docs/config.md). 2551 [#1886](https://github.com/jj-vcs/jj/issues/1886) 2552 2553* A new experimental diff editor `meld-3` is introduced that sets up Meld to 2554 allow you to see both sides of the original diff while editing. This can be 2555 used with `jj split`, `jj move -i`, etc. 2556 2557* `jj log`/`obslog`/`op log` now supports `--limit N` option to show the first 2558 `N` entries. 2559 2560* Added the `ui.paginate` option to enable/disable pager usage in commands 2561 2562* `jj checkout`/`jj describe`/`jj commit`/`jj new`/`jj squash` can take repeated 2563 `-m/--message` arguments. Each passed message will be combined into paragraphs 2564 (separated by a blank line) 2565 2566* It is now possible to set a default description using the new 2567 `ui.default-description` option, to use when describing changes with an empty 2568 description. 2569 2570* `jj split` will now leave the description empty on the second part if the 2571 description was empty on the input commit. 2572 2573* `branches()`/`remote_branches()`/`author()`/`committer()`/`description()` 2574 revsets now support exact matching. For example, `branch(exact:main)` 2575 selects the branch named "main", but not "maint". `description(exact:"")` 2576 selects commits whose description is empty. 2577 2578* Revsets gained a new function `mine()` that 2579 aliases `author(exact:"your_email")`. 2580 2581* Added support for `::` and `..` revset operators with both left and right 2582 operands omitted. These expressions are equivalent to `all()` and `~root()` 2583 respectively. 2584 2585* `jj log` timestamp format now accepts `.utc()` to convert a timestamp to UTC. 2586 2587* templates now support additional string 2588 methods `.starts_with(x)`, `.ends_with(x)` 2589 `.remove_prefix(x)`, `.remove_suffix(x)`, and `.substr(start, end)`. 2590 2591* `jj next` and `jj prev` are added, these allow you to traverse the history 2592 in a linear style. For people coming from Sapling and `git-branchles` 2593 see [#2126](https://github.com/jj-vcs/jj/issues/2126) for 2594 further pending improvements. 2595 2596* `jj diff --stat` has been implemented. It shows a histogram of the changes, 2597 same as `git diff --stat`. 2598 Fixes [#2066](https://github.com/jj-vcs/jj/issues/2066) 2599 2600* `jj git fetch --all-remotes` has been implemented. It fetches all remotes 2601 instead of just the default remote 2602 2603### Fixed bugs 2604 2605* Fix issues related to .gitignore handling of untracked directories 2606 [#2051](https://github.com/jj-vcs/jj/issues/2051). 2607 2608* `jj config set --user` and `jj config edit --user` can now be used outside of 2609 any repository. 2610 2611* SSH authentication could hang when ssh-agent couldn't be reached 2612 [#1970](https://github.com/jj-vcs/jj/issues/1970) 2613 2614* SSH authentication can now use ed25519 and ed25519-sk keys. They still need 2615 to be password-less. 2616 2617* Git repository managed by the repo tool can now be detected as a "colocated" 2618 repository. 2619 [#2011](https://github.com/jj-vcs/jj/issues/2011) 2620 2621### Contributors 2622 2623Thanks to the people who made this release happen! 2624 2625* Alexander Potashev (@aspotashev) 2626* Anton Bulakh (@necauqua) 2627* Austin Seipp (@thoughtpolice) 2628* Benjamin Brittain (@benbrittain) 2629* Benjamin Saunders (@Ralith) 2630* Christophe Poucet (@poucet) 2631* Emily Kyle Fox (@emilykfox) 2632* Glen Choo (@chooglen) 2633* Ilya Grigoriev (@ilyagr) 2634* Kevin Liao (@kevincliao) 2635* Linus Arver (@listx) 2636* Martin Clausen (@maacl) 2637* Martin von Zweigbergk (@martinvonz) 2638* Matt Freitas-Stavola (@mbStavola) 2639* Oscar Bonilla (@ob) 2640* Philip Metzger (@PhilipMetzger) 2641* Piotr Kufel (@qfel) 2642* Preston Van Loon (@prestonvanloon) 2643* Tal Pressman (@talpr) 2644* Vamsi Avula (@avamsi) 2645* Vincent Breitmoser (@Valodim) 2646* Vladimir (@0xdeafbeef) 2647* Waleed Khan (@arxanas) 2648* Yuya Nishihara (@yuja) 2649* Zachary Dremann (@Dr-Emann) 2650 2651## [0.8.0] - 2023-07-09 2652 2653### Breaking changes 2654 2655* The `jujutsu` and `jujutsu-lib` crates were renamed to `jj-cli` and `jj-lib`, 2656 respectively. 2657 2658* The `ui.oplog-relative-timestamps` option has been removed. Use the 2659 `format_time_range()` template alias instead. For details, see 2660 [the documentation](docs/config.md). 2661 2662* Implicit concatenation of template expressions has been disabled. Use 2663 `++` operator, `concat()`, or `separate()` function instead. 2664 Example: `description ++ "\n"` 2665 2666* `jj git push` will consider pushing the parent commit only when the 2667 current commit has no content and no description, such as right after 2668 a `jj squash`. 2669 2670* The minimum supported Rust version (MSRV) is now 1.64.0. 2671 2672* The `heads()` revset function was split up into two functions. `heads()` 2673 without arguments is now called `visible_heads()`. `heads()` with one argument 2674 is unchanged. 2675 2676* The `ui.default-revset` config was renamed to `revsets.log`. 2677 2678* The `jj sparse` command was split up into `jj sparse list` and 2679 `jj sparse set`. 2680 2681* `jj hide` (alias for `jj abandon`) is no longer available. Use `jj abandon` 2682 instead. 2683 2684* `jj debug completion`, `jj debug mangen` and `jj debug config-schema` have 2685 been moved from `jj debug` to `jj util`. 2686 2687* `jj` will no longer parse `br` as a git_ref `refs/heads/br` when a branch `br` 2688 does not exist but the git_ref does (this is rare). Use `br@git` instead. 2689 2690* `jj git fetch` will no longer import unrelated branches from the underlying 2691 Git repo. 2692 2693### New features 2694 2695* `jj git push --deleted` will remove all locally deleted branches from the 2696 remote. 2697 2698* `jj restore` without `--from` works correctly even if `@` is a merge 2699 commit. 2700 2701* `jj rebase` now accepts multiple `-s` and `-b` arguments. Revsets with 2702 multiple commits are allowed with `--allow-large-revsets`. 2703 2704* `jj git fetch` now supports a `--branch` argument to fetch some of the 2705 branches only. 2706 2707* `jj config get` command allows retrieving config values for use in scripting. 2708 2709* `jj config set` command allows simple config edits like 2710 `jj config set --repo user.email "somebody@example.com"` 2711 2712* Added `ui.log-word-wrap` option to wrap `jj log`/`obslog`/`op log` content 2713 based on terminal width. [#1043](https://github.com/jj-vcs/jj/issues/1043) 2714 2715* Nodes in the (text-based) graphical log output now use a `` symbol instead 2716 of the letter `o`. The ASCII-based graph styles still use `o`. 2717 2718* Commands that accept a diff format (`jj diff`, `jj interdiff`, `jj show`, 2719 `jj log`, and `jj obslog`) now accept `--types` to show only the type of file 2720 before and after. 2721 2722* `jj describe` now supports `--reset-author` for resetting a commit's author 2723 to the configured user. `jj describe` also gained a `--no-edit` option to 2724 avoid opening the editor. 2725 2726* Added `latest(x[, n])` revset function to select the latest `n` commits. 2727 2728* Added `conflict()` revset function to select commits with conflicts. 2729 2730* `jj squash` AKA `jj amend` now accepts a `--message` option to set the 2731 description of the squashed commit on the command-line. 2732 2733* The progress display on `jj git clone/fetch` now includes the downloaded size. 2734 2735* The formatter now supports a "default" color that can override another color 2736 defined by a parent style. 2737 2738* `jj obslog` and `jj log` now show abandoned commits as hidden. 2739 2740* `jj git fetch` and `jj git push` will now use the single defined remote even 2741 if it is not named "origin". 2742 2743* `jj git push` now accepts `--branch` and `--change` arguments together. 2744 2745* `jj git push` now accepts a `-r/--revisions` flag to specify revisions to 2746 push. All branches pointing to any of the specified revisions will be pushed. 2747 The flag can be used together with `--branch` and `--change`. 2748 2749* `jj` with no subcommand now defaults to `jj log` instead of showing help. This 2750 command can be overridden by setting `ui.default-command`. 2751 2752* Description tempfiles created via `jj describe` now have the file extension 2753 `.jjdescription` to help external tooling detect a unique filetype. 2754 2755* The shortest unique change ID prefixes and commit ID prefixes in `jj log` are 2756 now shorter within the default log revset. You can override the default by 2757 setting the `revsets.short-prefixes` config to a different revset. 2758 2759* The last seen state of branches in the underlying git repo is now presented by 2760 `jj branch list`/`jj log` as a remote called `git` (e.g. `main@git`). They can 2761 also be referenced in revsets. Such branches exist in colocated repos or if 2762 you use `jj git export`. 2763 2764* The new `jj chmod` command allows setting or removing the executable bit on 2765 paths. Unlike the POSIX `chmod`, it works on Windows, on conflicted files, and 2766 on arbitrary revisions. Bits other than the executable bit are not planned to 2767 be supported. 2768 2769* `jj sparse set` now accepts an `--edit` flag which brings up the `$EDITOR` to 2770 edit sparse patterns. 2771 2772* `jj branch list` can now be filtered by revset. 2773 2774* Initial support for the Watchman filesystem monitor. Set 2775 `core.fsmonitor = "watchman"` in your repo to enable. 2776 2777### Fixed bugs 2778 2779* Modify/delete conflicts now include context lines 2780 [#1244](https://github.com/jj-vcs/jj/issues/1244). 2781 2782* It is now possible to modify either side of a modify/delete conflict (any 2783 change used to be considered a resolution). 2784 2785* Fixed a bug that could get partially resolved conflicts to be interpreted 2786 incorrectly. 2787 2788* `jj git fetch`: when re-adding a remote repository that had been previously 2789 removed, in some situations the remote branches were not recreated. 2790 2791* `jj git remote rename`: the git remote references were not rewritten with 2792 the new name. If a new remote with the old name and containing the same 2793 branches was added, the remote branches may not be recreated in some cases. 2794 2795* `jj workspace update-stale` now snapshots the working-copy changes before 2796 updating to the new working-copy commit. 2797 2798* It is no longer allowed to create branches at the root commit. 2799 2800* `git checkout` (without using `jj`) in colocated repo no longer abandons 2801 the previously checked-out anonymous branch. 2802 [#1042](https://github.com/jj-vcs/jj/issues/1042). 2803 2804* `jj git fetch` in a colocated repo now abandons branches deleted on the 2805 remote, just like in a non-colocated repo. 2806 [#864](https://github.com/jj-vcs/jj/issues/864) 2807 2808* `jj git fetch` can now fetch forgotten branches even if they didn't move on 2809 the remote. 2810 [#1714](https://github.com/jj-vcs/jj/pull/1714) 2811 [#1771](https://github.com/jj-vcs/jj/pull/1771) 2812 2813* It is now possible to `jj branch forget` deleted branches. 2814 [#1537](https://github.com/jj-vcs/jj/issues/1537) 2815 2816* Fixed race condition when assigning change id to Git commit. If you've 2817 already had unreachable change ids, run `jj debug reindex`. 2818 [#924](https://github.com/jj-vcs/jj/issues/924) 2819 2820* Fixed false divergence on racy working-copy snapshots. 2821 [#697](https://github.com/jj-vcs/jj/issues/697), 2822 [#1608](https://github.com/jj-vcs/jj/issues/1608) 2823 2824* In colocated repos, a bug causing conflicts when undoing branch moves (#922) 2825 has been fixed. Some surprising behaviors related to undoing `jj git push` or 2826 `jj git fetch` remain. 2827 2828### Contributors 2829 2830Thanks to the people who made this release happen! 2831 2832* Aaron Bull Schaefer (@elasticdog) 2833* Anton Bulakh (@necauqua) 2834* Austin Seipp (@thoughtpolice) 2835* Benjamin Saunders (@Ralith) 2836* B Wilson (@xelxebar) 2837* Christophe Poucet (@poucet) 2838* David Barnett (@dbarnett) 2839* Glen Choo (@chooglen) 2840* Grégoire Geis (@71) 2841* Ilya Grigoriev (@ilyagr) 2842* Isabella Basso (@isinyaaa) 2843* Kevin Liao (@kevincliao) 2844* Martin von Zweigbergk (@martinvonz) 2845* mlcui (@mlcui-corp) 2846* Samuel Tardieu (@samueltardieu) 2847* Tal Pressman (@talpr) 2848* Vamsi Avula (@avamsi) 2849* Waleed Khan (@arxanas) 2850* Yuya Nishihara (@yuja) 2851 2852## [0.7.0] - 2023-02-16 2853 2854### Breaking changes 2855 2856* The minimum supported Rust version (MSRV) is now 1.61.0. 2857 2858* The `jj touchup` command was renamed to `jj diffedit`. 2859 2860* The `-i` option to `jj restore` was removed in favor of new `--from`/`--to` 2861 options to `jj diffedit`. 2862 2863* To report the situation when a change id corresponds to multiple visible 2864 commits, `jj log` now prints the change id in red and puts `??` after it. 2865 Previously, it printed the word "divergent". 2866 2867* `jj log` prefixes commit descriptions with "(empty)" when they contain no 2868 change compared to their parents. 2869 2870* The `author`/`committer` templates now display both name and email. Use 2871 `author.name()`/`committer.name()` to extract the name. 2872 2873* Storage of the "HEAD@git" reference changed and can now have conflicts. 2874 Operations written by a new `jj` binary will have a "HEAD@git" reference that 2875 is not visible to older binaries. 2876 2877* The `description` template keyword is now empty if no description set. 2878 Use `if(description, description, "(no description set)\n")` to get back 2879 the previous behavior. 2880 2881* The `template.log.graph` and `template.commit_summary` config keys were 2882 renamed to `templates.log` and `templates.commit_summary` respectively. 2883 2884* If a custom `templates.log` template is set, working-copy commit will 2885 no longer be highlighted automatically. Wrap your template with 2886 `label(if(current_working_copy, "working_copy"), ...)` to label the 2887 working-copy entry. 2888 2889* The `ui.relative-timestamps` option has been removed. Use the 2890 `format_timestamp()` template alias instead. For details on showing relative 2891 timestamps in `jj log` and `jj show`, see [the documentation](docs/config.md). 2892 2893* `jj op log` now shows relative timestamps by default. To disable, set 2894 `ui.oplog-relative-timestamps` to `false`. 2895 2896* The global `--no-commit-working-copy` is now called `--ignore-working-copy`. 2897 2898* The `diff.format` config option is now called `ui.diff.format`. The old name 2899 is still supported for now. 2900 2901* `merge-tools.<name>.edit-args` now requires `$left`/`$right` parameters. 2902 The default is `edit-args = ["$left", "$right"]`. 2903 2904* The builtin `jj update` and `jj up` aliases for `jj checkout` have been 2905 deleted. 2906 2907* Change IDs are now rendered using letters from the end of the alphabet (from 2908 'z' through 'k') instead of the usual hex digits ('0' through '9' and 'a' 2909 through 'f'). This is to clarify the distinction between change IDs and commit 2910 IDs, and to allow more efficient lookup of unique prefixes. This change 2911 doesn't affect the storage format; existing repositories will remain usable. 2912 2913### New features 2914 2915* The default log format now uses the committer timestamp instead of the author 2916 timestamp. 2917 2918* `jj log --summary --patch` now shows both summary and diff outputs. 2919 2920* `jj git push` now accepts multiple `--branch`/`--change` arguments 2921 2922* `jj config list` command prints values from config and `config edit` opens 2923 the config in an editor. 2924 2925* `jj debug config-schema` command prints out JSON schema for the jj TOML config 2926 file format. 2927 2928* `jj resolve --list` can now describe the complexity of conflicts. 2929 2930* `jj resolve` now notifies the user of remaining conflicts, if any, on success. 2931 This can be prevented by the new `--quiet` option. 2932 2933* Per-repository configuration is now read from `.jj/repo/config.toml`. 2934 2935* Background colors, bold text, and underlining are now supported. You can set 2936 e.g. `color.error = { bg = "red", bold = true, underline = true }` in your 2937 `~/.jjconfig.toml`. 2938 2939* The `empty` condition in templates is true when the commit makes no change to 2940 the three compared to its parents. 2941 2942* `branches([needle])` revset function now takes `needle` as an optional 2943 argument and matches just the branches whose name contains `needle`. 2944 2945* `remote_branches([branch_needle[, remote_needle]])` now takes `branch_needle` 2946 and `remote_needle` as optional arguments and matches just the branches whose 2947 name contains `branch_needle` and remote contains `remote_needle`. 2948 2949* `jj git fetch` accepts repeated `--remote` arguments. 2950 2951* Default remotes can be configured for the `jj git fetch` and `jj git push` 2952 operations ("origin" by default) using the `git.fetch` and `git.push` 2953 configuration entries. `git.fetch` can be a list if multiple remotes must 2954 be fetched from. 2955 2956* `jj duplicate` can now duplicate multiple changes in one go. This preserves 2957 any parent-child relationships between them. For example, the entire tree of 2958 descendants of `abc` can be duplicated with `jj duplicate abc:`. 2959 2960* `jj log` now highlights the shortest unique prefix of every commit and change 2961 id and shows the rest in gray. To customize the length and style, use the 2962 `format_short_id()` template alias. For details, see 2963 [the documentation](docs/config.md). 2964 2965* `jj print` was renamed to `jj cat`. `jj print` remains as an alias. 2966 2967* In content that goes to the terminal, the ANSI escape byte (0x1b) is replaced 2968 by a "␛" character. That prevents them from interfering with the ANSI escapes 2969 jj itself writes. 2970 2971* `jj workspace root` prints the root path of the current workspace. 2972 2973* The `[alias]` config section was renamed to `[aliases]`. The old name is 2974 still accepted for backwards compatibility for some time. 2975 2976* Commands that draw an ASCII graph (`jj log`, `jj op log`, `jj obslog`) now 2977 have different styles available by setting e.g. `ui.graph.style = "curved"`. 2978 2979* `jj split` accepts creating empty commits when given a path. `jj split .` 2980 inserts an empty commit between the target commit and its children if any, 2981 and `jj split any-non-existent-path` inserts an empty commit between the 2982 target commit and its parents. 2983 2984* Command arguments to `ui.diff-editor`/`ui.merge-editor` can now be specified 2985 inline without referring to `[merge-tools]` table. 2986 2987* `jj rebase` now accepts a new `--allow-large-revsets` argument that allows the 2988 revset in the `-d` argument to expand to several revisions. For example, 2989 `jj rebase -s B -d B- -d C` now works even if `B` is a merge commit. 2990 2991* `jj new` now also accepts a `--allow-large-revsets` argument that behaves 2992 similarly to `jj rebase --allow-large-revsets`. 2993 2994* `jj new --insert-before` inserts the new commit between the target commit and 2995 its parents. 2996 2997* `jj new --insert-after` inserts the new commit between the target commit and 2998 its children. 2999 3000* `author`/`committer` templates now support `.username()`, which leaves out the 3001 domain information of `.email()`. 3002 3003* It is now possible to change the author format of `jj log` with the 3004 `format_short_signature()` template alias. For details, see 3005 [the documentation](docs/config.md). 3006 3007* Added support for template aliases. New symbols and functions can be 3008 configured by `template-aliases.<name> = <expression>`. Be aware that 3009 the template syntax isn't documented yet and is likely to change. 3010 3011* The `ui.diff-instructions` config setting can be set to `false` to inhibit the 3012 creation of the `JJ-INSTRUCTIONS` file as part of diff editing. 3013 3014### Fixed bugs 3015 3016* When sharing the working copy with a Git repo, we used to forget to export 3017 branches to Git when only the working copy had changed. That's now fixed. 3018 3019* Commit description set by `-m`/`--message` is now terminated with a newline 3020 character, just like descriptions set by editor are. 3021 3022* The `-R`/`--repository` path must be a valid workspace directory. Its 3023 ancestor directories are no longer searched. 3024 3025* Fixed a crash when trying to access a commit that's never been imported into 3026 the jj repo from a Git repo. They will now be considered as non-existent if 3027 referenced explicitly instead of crashing. 3028 3029* Fixed handling of escaped characters in .gitignore (only keep trailing spaces 3030 if escaped properly). 3031 3032* `jj undo` now works after `jj duplicate`. 3033 3034* `jj duplicate` followed by `jj rebase` of a tree containing both the original 3035 and duplicate commit no longer crashes. The fix should also resolve any 3036 remaining 3037 instances of https://github.com/jj-vcs/jj/issues/27. 3038 3039* Fix the output of `jj debug completion --help` by reversing fish and zsh text. 3040 3041* Fixed edge case in `jj git fetch` when a pruned branch is a prefix of another 3042 branch. 3043 3044### Contributors 3045 3046Thanks to the people who made this release happen! 3047 3048* Aleksandr Mikhailov (@AM5800) 3049* Augie Fackler (@durin42) 3050* Benjamin Saunders (@Ralith) 3051* Daniel Ploch (@torquestomp) 3052* Danny Hooper (@hooper) 3053* David Barnett (@dbarnett) 3054* Glen Choo (@chooglen) 3055* Herby Gillot (@herbygillot) 3056* Ilya Grigoriev (@ilyagr) 3057* Luke Granger-Brown (@lukegb) 3058* Martin von Zweigbergk (@martinvonz) 3059* Michael Forster (@MForster) 3060* Philip Metzger (@PhilipMetzger) 3061* Ruben Slabbert (@rslabbert) 3062* Samuel Tardieu (@samueltardieu) 3063* Tal Pressman (@talpr) 3064* Vamsi Avula (@avamsi) 3065* Waleed Khan (@arxanas) 3066* Yuya Nishihara (@yuja) 3067 3068## [0.6.1] - 2022-12-05 3069 3070No changes, only changed to a released version of the `thrift` crate dependency. 3071 3072## [0.6.0] - 2022-12-05 3073 3074### Breaking changes 3075 3076* Dropped candidates set argument from `description(needle)`, `author(needle)`, 3077 `committer(needle)`, `merges()` revsets. Use `x & description(needle)` 3078 instead. 3079 3080* Adjusted precedence of revset union/intersection/difference operators. 3081 `x | y & z` is now equivalent to `x | (y & z)`. 3082 3083* Support for open commits has been dropped. The `ui.enable-open-commits` config 3084 that was added in 0.5.0 is no longer respected. The `jj open/close` commands 3085 have been deleted. 3086 3087* `jj commit` is now a separate command from `jj close` (which no longer 3088 exists). The behavior has changed slightly. It now always asks for a 3089 description, even if there already was a description set. It now also only 3090 works on the working-copy commit (there's no `-r` argument). 3091 3092* If a workspace's working-copy commit has been updated from another workspace, 3093 most commands in that workspace will now fail. Use the new 3094 `jj workspace update-stale` command to update the workspace to the new 3095 working-copy commit. (The old behavior was to automatically update the 3096 workspace.) 3097 3098### New features 3099 3100* Commands with long output are paginated. 3101 [#9](https://github.com/jj-vcs/jj/issues/9) 3102 3103* The new `jj git remote rename` command allows git remotes to be renamed 3104 in-place. 3105 3106* The new `jj resolve` command allows resolving simple conflicts with 3107 an external 3-way-merge tool. 3108 3109* `jj git push` will search `@-` for branches to push if `@` has none. 3110 3111* The new revset function `file(pattern..)` finds commits modifying the 3112 paths specified by the `pattern..`. 3113 3114* The new revset function `empty()` finds commits modifying no files. 3115 3116* Added support for revset aliases. New symbols and functions can be configured 3117 by `revset-aliases.<name> = <expression>`. 3118 3119* It is now possible to specify configuration options on the command line 3120 with the new `--config-toml` global option. 3121 3122* `jj git` subcommands will prompt for credentials when required for HTTPS 3123 remotes rather than failing. 3124 [#469](https://github.com/jj-vcs/jj/issues/469) 3125 3126* Branches that have a different target on some remote than they do locally are 3127 now indicated by an asterisk suffix (e.g. `main*`) in `jj log`. 3128 [#254](https://github.com/jj-vcs/jj/issues/254) 3129 3130* The commit ID was moved from first on the line in `jj log` output to close to 3131 the end. The goal is to encourage users to use the change ID instead, since 3132 that is generally more convenient, and it reduces the risk of creating 3133 divergent commits. 3134 3135* The username and hostname that appear in the operation log are now 3136 configurable via config options `operation.username` and `operation.hostname`. 3137 3138* `jj git` subcommands now support credential helpers. 3139 3140* `jj log` will warn if it appears that the provided path was meant to be a 3141 revset. 3142 3143* The new global flag `-v/--verbose` will turn on debug logging to give 3144 some additional insight into what is happening behind the scenes. 3145 Note: This is not comprehensively supported by all operations yet. 3146 3147* `jj log`, `jj show`, and `jj obslog` now all support showing relative 3148 timestamps by setting `ui.relative-timestamps = true` in the config file. 3149 3150### Fixed bugs 3151 3152* A bug in the export of branches to Git caused spurious conflicted branches. 3153 This typically occurred when running in a working copy colocated with Git 3154 (created by running `jj init --git-dir=.`). 3155 [#463](https://github.com/jj-vcs/jj/issues/463) 3156 3157* When exporting branches to Git, we used to fail if some branches could not be 3158 exported (e.g. because Git doesn't allow a branch called `main` and another 3159 branch called `main/sub`). We now print a warning about these branches 3160 instead. 3161 [#493](https://github.com/jj-vcs/jj/issues/493) 3162 3163* If you had modified branches in jj and also modified branches in conflicting 3164 ways in Git, `jj git export` used to overwrite the changes you made in Git. 3165 We now print a warning about these branches instead. 3166 3167* `jj edit root` now fails gracefully. 3168 3169* `jj git import` used to abandon a commit if Git branches and tags referring 3170 to it were removed. We now keep it if a detached HEAD refers to it. 3171 3172* `jj git import` no longer crashes when all Git refs are removed. 3173 3174* Git submodules are now ignored completely. Earlier, files present in the 3175 submodule directory in the working copy would become added (tracked), and 3176 later removed if you checked out another commit. You can now use `git` to 3177 populate the submodule directory and `jj` will leave it alone. 3178 3179* Git's GC could remove commits that were referenced from jj in some cases. We 3180 are now better at adding Git refs to prevent that. 3181 [#815](https://github.com/jj-vcs/jj/issues/815) 3182 3183* When the working-copy commit was a merge, `jj status` would list only the 3184 first parent, and the diff summary would be against that parent. The output 3185 now lists all parents and the diff summary is against the auto-merged parents. 3186 3187### Contributors 3188 3189Thanks to the people who made this release happen! 3190 3191* Martin von Zweigbergk (@martinvonz) 3192* Benjamin Saunders (@Ralith) 3193* Yuya Nishihara (@yuja) 3194* Glen Choo (@chooglen) 3195* Ilya Grigoriev (@ilyagr) 3196* Ruben Slabbert (@rslabbert) 3197* Waleed Khan (@arxanas) 3198* Sean E. Russell (@xxxserxxx) 3199* Pranay Sashank (@pranaysashank) 3200* Luke Granger-Brown (@lukegb) 3201 3202## [0.5.1] - 2022-10-17 3203 3204No changes (just trying to get automated GitHub release to work). 3205 3206## [0.5.0] - 2022-10-17 3207 3208### Breaking changes 3209 3210* Open commits are now disabled by default. That means that `jj checkout` will 3211 always create a new change on top of the specified commit and will let you 3212 edit that in the working copy. Set `ui.enable-open-commits = true` to restore 3213 the old behavior and let us know that you did so we know how many people 3214 prefer the workflow with open commits. 3215 3216* `jj [op] undo` and `jj op restore` used to take the operation to undo or 3217 restore to as an argument to `-o/--operation`. It is now a positional 3218 argument instead (i.e. `jj undo -o abc123` is now written `jj undo abc123`). 3219 3220* An alias that is not configured as a string list (e.g. `my-status = "status"` 3221 instead of `my-status = ["status"]`) is now an error instead of a warning. 3222 3223* `jj log` now defaults to showing only commits that are not on any remote 3224 branches (plus their closest commit on the remote branch for context). This 3225 set of commits can be overridden by setting `ui.default-revset`. Use 3226 `jj log -r 'all()'` for the old behavior. Read more about revsets 3227 [here](https://github.com/jj-vcs/jj/blob/main/docs/revsets.md). 3228 [#250](https://github.com/jj-vcs/jj/issues/250) 3229 3230* `jj new` now always checks out the new commit (used to be only if the parent 3231 was `@`). 3232 3233* `jj merge` now checks out the new commit. The command now behaves exactly 3234 like `jj new`, except that it requires at least two arguments. 3235 3236* When the working-copy commit is abandoned by `jj abandon` and the parent 3237 commit is open, a new working-copy commit will be created on top (the open 3238 parent commit used to get checked out). 3239 3240* `jj branch` now uses subcommands like `jj branch create` and 3241 `jj branch forget` instead of options like `jj branch --forget`. 3242 [#330](https://github.com/jj-vcs/jj/issues/330) 3243 3244* The [`$NO_COLOR` environment variable](https://no-color.org/) no longer 3245 overrides the `ui.color` configuration if explicitly set. 3246 3247* `jj edit` has been renamed to `jj touchup`, and `jj edit` is now a new command 3248 with different behavior. The new `jj edit` lets you edit a commit in the 3249 working copy, even if the specified commit is closed. 3250 3251* `jj git push` no longer aborts if you attempt to push an open commit (but it 3252 now aborts if a commit does not have a description). 3253 3254* `jj git push` now pushes only branches pointing to the `@` by default. Use 3255 `--all` to push all branches. 3256 3257* The `checkouts` template keyword is now called `working_copies`, and 3258 `current_checkout` is called `current_working_copy`. 3259 3260### New features 3261 3262* The new `jj interdiff` command compares the changes in commits, ignoring 3263 changes from intervening commits. 3264 3265* `jj rebase` now accepts a `--branch/-b <revision>` argument, which can be used 3266 instead of `-r` or `-s` to specify which commits to rebase. It will rebase the 3267 whole branch, relative to the destination. The default mode has changed from 3268 `-r @` to `-b @`. 3269 3270* The new `jj print` command prints the contents of a file in a revision. 3271 3272* The new `jj git remotes list` command lists the configured remotes and their 3273 URLs. 3274 [#243](https://github.com/jj-vcs/jj/issues/243) 3275 3276* `jj move` and `jj squash` now lets you limit the set of changes to move by 3277 specifying paths on the command line (in addition to the `--interactive` 3278 mode). For example, use `jj move --to @-- foo` to move the changes to file 3279 (or directory) `foo` in the working copy to the grandparent commit. 3280 3281* When `jj move/squash/unsquash` abandons the source commit because it became 3282 empty and both the source and the destination commits have non-empty 3283 descriptions, it now asks for a combined description. If either description 3284 was empty, it uses the other without asking. 3285 3286* `jj split` now lets you specify on the CLI which paths to include in the first 3287 commit. The interactive diff-editing is not started when you do that. 3288 3289* Sparse checkouts are now supported. In fact, all working copies are now 3290 "sparse", only to different degrees. Use the `jj sparse` command to manage 3291 the paths included in the sparse checkout. 3292 3293* Configuration is now also read from `~/.jjconfig.toml`. 3294 3295* The `$JJ_CONFIG` environment variable can now point to a directory. If it 3296 does, all files in the directory will be read, in alphabetical order. 3297 3298* The `$VISUAL` environment is now respected and overrides `$EDITOR`. The new 3299 `ui.editor` config has higher priority than both of them. There is also a new 3300 `$JJ_EDITOR` environment variable, which has even higher priority than the 3301 config. 3302 3303* You can now use `-` and `+` in revset symbols. You used to have to quote 3304 branch names like `my-feature` in nested quotes (outer layer for your shell) 3305 like `jj co '"my-feature"'`. The quoting is no longer needed. 3306 3307* The new revset function `connected(x)` is the same as `x:x`. 3308 3309* The new revset function `roots(x)` finds commits in the set that are not 3310 descendants of other commits in the set. 3311 3312* ssh-agent is now detected even if `$SSH_AGENT_PID` is not set (as long as 3313 `$SSH_AUTH_SOCK` is set). This should help at least macOS users where 3314 ssh-agent is launched by default and only `$SSH_AUTH_SOCK` is set. 3315 3316* When importing from a git, any commits that are no longer referenced on the 3317 git side will now be abandoned on the jj side as well. That means that 3318 `jj git fetch` will now abandon unreferenced commits and rebase any local 3319 changes you had on top. 3320 3321* `jj git push` gained a `--change <revision>` argument. When that's used, it 3322 will create a branch named after the revision's change ID, so you don't have 3323 to create a branch yourself. By default, the branch name will start with 3324 `push-`, but this can be overridden by the `push.branch-prefix` config 3325 setting. 3326 3327* `jj git push` now aborts if you attempt to push a commit without a 3328 description or with the placeholder "(no name/email configured)" values for 3329 author/committer. 3330 3331* Diff editor command arguments can now be specified by config file. 3332 Example: 3333 3334 [merge-tools.kdiff3] 3335 program = "kdiff3" 3336 edit-args = ["--merge", "--cs", "CreateBakFiles=0"] 3337 3338* `jj branch` can accept any number of branches to update, rather than just one. 3339 3340* Aliases can now call other aliases. 3341 3342* `jj log` now accepts a `--reversed` option, which will show older commits 3343 first. 3344 3345* `jj log` now accepts file paths. 3346 3347* `jj obslog` now accepts `-p`/`--patch` option, which will show the diff 3348 compared to the previous version of the change. 3349 3350* The "(no name/email configured)" placeholder value for name/email will now be 3351 replaced if once you modify a commit after having configured your name/email. 3352 3353* Color setting can now be overridden by `--color=always|never|auto` option. 3354 3355* `jj checkout` now lets you specify a description with `--message/-m`. 3356 3357* `jj new` can now be used for creating merge commits. If you pass more than 3358 one argument to it, the new commit will have all of them as parents. 3359 3360### Fixed bugs 3361 3362* When rebasing a conflict where one side modified a file and the other side 3363 deleted it, we no longer automatically resolve it in favor of the modified 3364 content (this was a regression from commit c0ae4b16e8c4). 3365 3366* Errors are now printed to stderr (they used to be printed to stdout). 3367 3368* Updating the working copy to a commit where a file's executable bit changed 3369 but the contents was the same used to lead to a crash. That has now been 3370 fixed. 3371 3372* If one side of a merge modified a directory and the other side deleted it, it 3373 used to be considered a conflict. The same was true if both sides added a 3374 directory with different files in. They are now merged as if the missing 3375 directory had been empty. 3376 3377* When using `jj move` to move part of a commit into an ancestor, any branches 3378 pointing to the source commit used to be left on a hidden intermediate commit. 3379 They are now correctly updated. 3380 3381* `jj untrack` now requires at least one path (allowing no arguments was a UX 3382 bug). 3383 3384* `jj rebase` now requires at least one destination (allowing no arguments was a 3385 UX bug). 3386 3387* `jj restore --to <rev>` now restores from the working copy (it used to restore 3388 from the working copy's parent). 3389 3390* You now get a proper error message instead of a crash when `$EDITOR` doesn't 3391 exist or exits with an error. 3392 3393* Global arguments, such as `--at-op=<operation>`, can now be passed before 3394 an alias. 3395 3396* Fixed relative path to the current directory in output to be `.` instead of 3397 empty string. 3398 3399* When adding a new workspace, the parent of the current workspace's current 3400 checkout will be checked out. That was always the intent, but the root commit 3401 was accidentally checked out instead. 3402 3403* When checking out a commit, the previous commit is no longer abandoned if it 3404 has a non-empty description. 3405 3406* All commands now consistently snapshot the working copy (it was missing from 3407 e.g. `jj undo` and `jj merge` before). 3408 3409## [0.4.0] - 2022-04-02 3410 3411### Breaking changes 3412 3413* Dropped support for config in `~/.jjconfig`. Your configuration is now read 3414 from `<config dir>/jj/config.toml`, where `<config dir>` is 3415 `${XDG_CONFIG_HOME}` or `~/.config/` on Linux, 3416 `~/Library/Application Support/` on macOS, and `~\AppData\Roaming\` on 3417 Windows. 3418 3419### New features 3420 3421* You can now set an environment variable called `$JJ_CONFIG` to a path to a 3422 config file. That will then be read instead of your regular config file. This 3423 is mostly intended for testing and scripts. 3424 3425* The [standard `$NO_COLOR` environment variable](https://no-color.org/) is now 3426 respected. 3427 3428* `jj new` now lets you specify a description with `--message/-m`. 3429 3430* When you check out a commit, the old commit no longer automatically gets 3431 abandoned if it's empty and has descendants, it only gets abandoned if it's 3432 empty and does not have descendants. 3433 3434* When undoing an earlier operation, any new commits on top of commits from the 3435 undone operation will be rebased away. For example, let's say you rebase 3436 commit A so it becomes a new commit A', and then you create commit B on top of 3437 A'. If you now undo the rebase operation, commit B will be rebased to be on 3438 top of A instead. The same logic is used if the repo was modified by 3439 concurrent operations (so if one operation added B on top of A, and one 3440 operation rebased A as A', then B would be automatically rebased on top of 3441 A'). See #111 for more examples. 3442 [#111](https://github.com/jj-vcs/jj/issues/111) 3443 3444* `jj log` now accepts `-p`/`--patch` option. 3445 3446### Fixed bugs 3447 3448* Fixed crash on `jj init --git-repo=.` (it almost always crashed). 3449 3450* When sharing the working copy with a Git repo, the automatic importing and 3451 exporting (sometimes?) didn't happen on Windows. 3452 3453## [0.3.3] - 2022-03-16 3454 3455No changes, only trying to get the automated build to work. 3456 3457## [0.3.2] - 2022-03-16 3458 3459No changes, only trying to get the automated build to work. 3460 3461## [0.3.1] - 2022-03-13 3462 3463### Fixed bugs 3464 3465- Fixed crash when `core.excludesFile` pointed to nonexistent file, and made 3466 leading `~/` in that config expand to `$HOME/` 3467 [#131](https://github.com/jj-vcs/jj/issues/131) 3468 3469## [0.3.0] - 2022-03-12 3470 3471Last release before this changelog started.