Jujutsu is a Git-compatible DVCS. It combines features from Git (data model,
distributed file system).
to replace (rare in English). The project is called "Jujutsu" because it
2024-12-11 11:28:18 by Thomas Klausner | Files touched by this commit (3) | |
Log message:
jj: update to 0.24.0.
## [0.24.0] - 2024-12-04
### Breaking changes
* `jj move` has been removed. It was deprecated in 0.16.0.
* `jj checkout` and the built-in alias `jj co` have been removed.
It was deprecated in 0.14.0.
* `jj merge` has been removed. It was deprecated in 0.14.0.
* `jj git push` no longer pushes new bookmarks by default. Use `--allow-new` to
bypass this restriction.
* Lines prefixed with "JJ:" in commit descriptions and in sparse \
patterns (from
`jj sparse edit`) are now stripped even if they are not immediately followed
by a space. [#5004](https://github.com/martinvonz/jj/issues/5004)
### Deprecations
### New features
* Templates now support the `==` and `!=` logical operators for `Boolean`,
`Integer`, and `String` types.
* New command `jj absorb` that moves changes to stack of mutable revisions.
* New command `jj util exec` that can be used for arbitrary aliases.
* `jj rebase -b` can now be used with the `--insert-after` and `--insert-before`
options, like `jj rebase -r` and `jj rebase -s`.
* A preview of improved shell completions was added. Please refer to the
\
[documentation](https://martinvonz.github.io/jj/latest/install-and-setup/#command-line-completion)
to activate them. They additionally complete context-dependent, dynamic values
like bookmarks, aliases, revisions, operations and files.
* Added the config setting `snapshot.auto-update-stale` for automatically
running `jj workspace update-stale` when applicable.
* `jj duplicate` now accepts `--destination`, `--insert-after` and
`--insert-before` options to customize the location of the duplicated
revisions.
* `jj log` now displays the working-copy branch first.
* New `fork_point()` revset function can be used to obtain the fork point
of multiple commits.
* The `tags()` revset function now takes an optional `pattern` argument,
mirroring that of `bookmarks()`.
* Several commands now support `-f/-t` shorthands for `--from/--to`:
- `diff`
- `diffedit`
- `interdiff`
- `op diff`
- `restore`
* New `ui.conflict-marker-style` config option to change how conflicts are
materialized in the working copy. The default option ("diff") renders
conflicts as a snapshot with a list of diffs to apply to the snapshot.
The new "snapshot" option renders conflicts as a series of \
snapshots, showing
each side and base of the conflict. The new "git" option replicates Git's
"diff3" conflict style, meaning it is more likely to work with \
external tools,
but it doesn't support conflicts with more than 2 sides.
* New `merge-tools.<TOOL>.conflict-marker-style` config option to override the
conflict marker style used for a specific merge tool.
* New `merge-tools.<TOOL>.merge-conflict-exit-codes` config option to allow a
merge tool to exit with a non-zero code to indicate that not all conflicts
were resolved.
* `jj simplify-parents` now supports configuring the default revset when no
`--source` or `--revisions` arguments are provided with the
`revsets.simplify-parents` config.
### Fixed bugs
* `jj config unset <TABLE-NAME>` no longer removes a table (such as `[ui]`.)
|
2024-11-10 10:56:13 by Thomas Klausner | Files touched by this commit (3) | |
Log message:
jj: update to 0.23.0.
## [0.23.0] - 2024-11-06
### Security fixes
* Fixed path traversal by cloning/checking out crafted Git repository containing
`..`, `.jj`, `.git` paths.
\
([GHSA-88h5-6w7m-5w56](https://github.com/martinvonz/jj/security/advisories/GHSA-88h5-6w7m-5w56);CVE-2024-51990)
### Breaking changes
* Revset function names can no longer start with a number.
* Evaluation error of `revsets.short-prefixes` configuration is now reported.
* The `HEAD@git` symbol no longer resolves to the Git HEAD revision. Use
`git_head()` or `@-` revset expression instead. The `git_head` template
keyword now returns a boolean.
* Help command doesn't work recursively anymore, i.e. `jj workspace help root`
doesn't work anymore.
* The color label `op_log` from the `[colors]` config section now **only**
applies to the op log and not to the other places operations are displayed. In
almost all cases, if you configured `op_log` before, you should use the new
`operation` label instead.
* Default operation log template now shows end times of operations instead of
start times.
### Deprecations
* `git.auto-local-bookmark` replaces `git.auto-local-branch`. The latter remains
supported for now (at lower precedence than the former).
### New features
* Added diff options to ignore whitespace when comparing lines. Whitespace
changes are still highlighted.
* New command `jj simplify-parents` will remove redundant parent edges.
* `jj squash` now supports `-f/-t` shorthands for `--from/--[in]to`.
* Initial support for shallow Git repositories has been implemented. However,
deepening the history of a shallow repository is not yet supported.
* `jj git clone` now accepts a `--depth <DEPTH>` option, which
allows to clone the repository with a given depth.
* New command `jj file annotate` that annotates files line by line. This is similar
in functionality to `git blame`. Invoke the command with `jj file annotate \
<file_path>`.
The output can be customized via the `templates.annotate_commit_summary`
config variable.
* `jj bookmark list` gained a `--remote REMOTE` option to display bookmarks
belonging to a remote. This option can be combined with `--tracked` or
`--conflicted`.
* New command `jj config unset` that unsets config values. For example,
`jj config unset --user user.name`.
* `jj help` now has the flag `--keyword` (shorthand `-k`), which can give help
for some keywords (e.g. `jj help -k revsets`). To see a list of the available
keywords you can do `jj help --help`.
* New `at_operation(op, expr)` revset can be used in order to query revisions
based on historical state.
* String literals in filesets, revsets and templates now support hex bytes
(with `\e` as escape / shorthand for `\x1b`).
* New `coalesce(revsets...)` revset which returns commits in the first revset
in the `revsets` list that does not evaluate to `none()`.
* New template function `raw_escape_sequence(...)` preserves escape sequences.
* Timestamp objects in templates now have `after(date) -> Boolean` and
`before(date) -> Boolean` methods for comparing timestamps to other dates.
* New template functions `pad_start()`, `pad_end()`, `truncate_start()`, and
`truncate_end()` are added.
* Add a new template alias `bultin_log_compact_full_description()`.
* Added the config settings `diff.color-words.context` and `diff.git.context` to
control the default number of lines of context shown.
### Fixed bugs
* Error on `trunk()` revset resolution is now handled gracefully.
[#4616](https://github.com/martinvonz/jj/issues/4616)
* Updated the built-in diff editor `scm-record` to version
[0.4.0](https://github.com/arxanas/scm-record/releases/tag/v0.4.0), which
includes multiple fixes.
|
2024-10-08 17:29:58 by Thomas Klausner | Files touched by this commit (3) | |
Log message:
jj: update to 0.22.0.
## [0.22.0] - 2024-10-02
### Breaking changes
* Fixing [#4239](https://github.com/martinvonz/jj/issues/4239) means the
ordering of some messages have changed.
* Invalid `ui.graph.style` configuration is now an error.
* The builtin template `branch_list` has been renamed to `bookmark_list` as part
of the `jj branch` deprecation.
### Deprecations
* `jj branch` has been deprecated in favor of `jj bookmark`.
**Rationale:** Jujutsu's branches don't behave like Git branches, which a
confused many newcomers, as they expected a similar behavior given the name.
We've renamed them to "bookmarks" to match the actual behavior, as \
we think
that describes them better, and they also behave similar to Mercurial's
bookmarks.
* `jj obslog` is now called `jj evolution-log`/`jj evolog`. `jj obslog` remains
as an alias.
* `jj unsquash` has been deprecated in favor of `jj squash` and
`jj diffedit --restore-descendants`.
**Rationale:** `jj squash` can be used in interactive mode to pull
changes from one commit to another, including from a parent commit
to a child commit. For fine-grained dependent diffs, such as when
the parent and the child commits must successively modify the same
location in a file, `jj diffedit --restore-descendants` can be used
to set the parent commit to the desired content without altering the
content of the child commit.
* The `git.push-branch-prefix` config has been deprecated in favor of
`git.push-bookmark-prefix`.
* `conflict()` and `file()` revsets have been renamed to `conflicts()` and `files()`
respectively. The old names are still around and will be removed in a future
release.
### New features
* The new config option `snapshot.auto-track` lets you automatically track only
the specified paths (all paths by default). Use the new `jj file track`
command to manually tracks path that were not automatically tracked. There is
no way to list untracked files yet. Use `git status` in a colocated workspace
as a workaround.
[#323](https://github.com/martinvonz/jj/issues/323)
* `jj fix` now allows fixing unchanged files with the \
`--include-unchanged-files` flag. This
can be used to more easily introduce automatic formatting changes in a new
commit separate from other changes.
* `jj workspace add` now accepts a `--sparse-patterns=<MODE>` option, which
allows control of the sparse patterns for a newly created workspace: `copy`
(inherit from parent; default), `full` (full working copy), or `empty` (the
empty working copy).
* New command `jj workspace rename` that can rename the current workspace.
* `jj op log` gained an option to include operation diffs.
* `jj git clone` now accepts a `--remote <REMOTE NAME>` option, which
allows to set a name for the remote instead of using the default
`origin`.
* `jj op undo` now reports information on the operation that has been undone.
* `jj squash`: the `-k` flag can be used as a shorthand for `--keep-emptied`.
* CommitId / ChangeId template types now support `.normal_hex()`.
* `jj commit` and `jj describe` now accept `--author` option allowing to quickly \
change
author of given commit.
* `jj diffedit`, `jj abandon`, and `jj restore` now accept a `--restore-descendants`
flag. When used, descendants of the edited or deleted commits will keep their \
original
content.
* `jj git fetch -b <remote-git-branch-name>` will now warn if the branch(es)
can not be found in any of the specified/configured remotes.
* `jj split` now lets the user select all changes in interactive mode. This may \
be used
to keeping all changes into the first commit while keeping the current commit
description for the second commit (the newly created empty one).
* Author and committer names are now yellow by default.
### Fixed bugs
* Update working copy before reporting changes. This prevents errors during reporting
from leaving the working copy in a stale state.
* Fixed panic when parsing invalid conflict markers of a particular form.
([#2611](https://github.com/martinvonz/jj/pull/2611))
* Editing a hidden commit now makes it visible.
* The `present()` revset now suppresses missing working copy error. For example,
`present(@)` evaluates to `none()` if the current workspace has no
working-copy commit.
|
2024-09-13 10:13:43 by Thomas Klausner | Files touched by this commit (3) | |
Log message:
jj: update to 0.21.0.
## [0.21.0] - 2024-09-04
### Breaking changes
* `next/prev` will no longer infer when to go into edit mode when moving from
commit to commit. It now either follows the flags `--edit|--no-edit` or it
gets the mode from `ui.movement.edit`.
### Deprecations
* `jj untrack` has been renamed to `jj file untrack`.
### New features
* Add new boolean config knob, `ui.movement.edit` for controlling the behaviour
of `prev/next`. The flag turns `edit` mode `on` and `off` permanently when set
respectively to `true` or `false`.
* All diff formats except `--name-only` now include information about copies and
moves. So do external diff tools in file-by-file mode. `jj status` also
includes information about copies and moves.
* Color-words diff has gained [an option to display complex changes as separate
lines](docs/config.md#color-words-diff-options). It's enabled by default. To
restore the old behavior, set `diff.color-words.max-inline-alternation = -1`.
* A tilde (`~`) at the start of the path will now be expanded to the user's home
directory when configuring a `signing.key` for SSH commit signing.
* When reconfiguring the author, warn that the working copy won't be updated
|
2024-07-07 14:46:33 by Thomas Klausner | Files touched by this commit (3) | |
Log message:
jj: update to 0.19.0.
## [0.19.0] - 2024-07-03
### Breaking changes
* In revset aliases, top-level `kind:pattern` expression is now parsed as
modifier. Surround with parentheses if it should be parsed as string/file
pattern.
* Dropped support for automatic upgrade of repo formats used by versions before
0.12.0.
* `jj fix` now defaults to the broader revset `-s reachable(@, mutable())`
instead of `-s @`.
* Dropped support for deprecated `jj branch delete`/`forget` `--glob` option.
* `jj branch set` now creates new branch if it doesn't exist. Use `jj branch
move` to ensure that the target branch already exists.
[#3584](https://github.com/martinvonz/jj/issues/3584)
### Deprecations
* Replacing `-l` shorthand for `--limit` with `-n` in `jj log`, `jj op log`
and `jj obslog`.
* `jj split --siblings` is deprecated in favor of `jj split --parallel` (to
match `jj parallelize`).
* A new `jj file` subcommand now replaces several existing uncategorized
commands, which are deprecated.
- `jj file show` replaces `jj cat`.
- `jj file chmod` replaces `jj chmod`.
- `jj file list` replaces `jj files`.
### New features
* Support background filesystem monitoring via watchman triggers enabled with
the `core.watchman.register_snapshot_trigger = true` config.
* Show paths to config files when configuration errors occur.
* `jj fix` now supports configuring the default revset for `-s` using the
`revsets.fix` config.
* The `descendants()` revset function now accepts an optional `depth` argument;
like the `ancestors()` depth argument, it limits the depth of the set.
* Revset/template aliases now support function overloading.
[#2966](https://github.com/martinvonz/jj/issues/2966)
* Conflicted files are individually simplified before being materialized.
* The `jj file` subcommand now contains several existing file utilities.
- `jj file show`, replacing `jj cat`.
- `jj file chmod` replacing `jj chmod`.
- `jj file list` replacing `jj files`.
* New command `jj branch move` let you update branches by name pattern or source
revision.
* New diff option `jj diff --name-only` allows for easier shell scripting.
* In color-words diffs, hunks are now highlighted with underline. See [diff
colors and styles](docs/config.md#diff-colors-and-styles) for customization.
* `jj git push -c <arg>` can now accept revsets that resolve to multiple
revisions. This means that `jj git push -c xyz -c abc` is now equivalent to
`jj git push -c 'all:(xyz | abc)'`.
* `jj prev` and `jj next` have gained a `--conflict` flag which moves you
to the next conflict in a child commit.
* New command `jj git remote set-url` that sets the url of a git remote.
* Author timestamp is now reset when rewriting discardable commits (empty
commits with no description) if authored by the current user.
[#2000](https://github.com/martinvonz/jj/issues/2000)
* `jj commit` now accepts `--reset-author` option to match `jj describe`.
* `jj squash` now accepts a `--keep-emptied` option to keep the source commit.
### Fixed bugs
* `jj git push` now ignores immutable commits when checking whether a
to-be-pushed commit has conflicts, or has no description / committer / author
set. [#3029](https://github.com/martinvonz/jj/issues/3029)
* `jj` will look for divergent changes outside the short prefix set even if it
finds the change id inside the short prefix set.
[#2476](https://github.com/martinvonz/jj/issues/2476)
|
2024-06-09 16:04:28 by Thomas Klausner | Files touched by this commit (3) | |
Log message:
jj: update to 0.18.0.
Breaking changes
Dropped support for ui.default-revset config (replaced by revsets.log in
0.8.0).
The commit_summary_no_branches template is superseded by
templates.branch_list.
jj split will now refuse to split an empty commit.
jj config list now uses multi-line strings and single-quoted strings in the
output when appropriate.
jj config get/list/set now parse name argument as TOML
key. Quote meta characters as needed.
Example: jj config get "revset-aliases.'trunk()'"
When updating the working copy away from an empty and undescribed commit, it
is now abandoned even if it is a merge commit.
If a new working-copy commit is created because the old one was abandoned, and
the old commit was merge, then the new commit will now also be.
#2859
jj new's --insert-before/--insert-after options must now be set for each
commit the new commit will be inserted before/after. Previously, those options
were global flags and specifying them once would insert the new commit before/
after all the specified commits.
Deprecations
Attempting to alias a built-in command now gives a warning, rather than being
silently ignored.
New features
jj branch list/tag list now accept -T/--template option. The tag list
prints commit summary along with the tag name by default.
Conflict markers now include an explanation of what each part of the conflict
represents.
ui.color = "debug" prints active labels alongside the regular \
colored output.
jj branch track now show conflicts if there are some.
A new revset reachable(srcs, domain) will return all commits that are
reachable from srcs within domain.
There are now prebuilt binaries for aarch64-linux-unknown-musl.
Note, these are cross compiled and currently untested.
We plan on providing fully tested builds later once our CI system allows it.
Added new revsets mutable() and immutable().
Upgraded scm-record from v0.2.0 to v0.3.0. See release notes at
https://github.com/arxanas/scm-record/releases/tag/v0.3.0
New command jj fix that can be configured to update commits by running code
formatters (or similar tools) on changed files. The configuration schema and
flags are minimal for now, with a number of improvements planned (for example,
#3800 and
#3801).
jj new's --insert-before and --insert-after options can now be used
simultaneously.
jj git push now can push commits with empty descriptions with the
--allow-empty-description flag
Fixed bugs
Previously, jj git push only made sure that the branch is in the expected
location on the remote server when pushing a branch forward (as opposed to
sideways or backwards). Now, jj git push makes a safety check in all cases
and fails whenever jj git fetch would have introduced a conflict.
In other words, previously branches that moved sideways or backward were
pushed similarly to Git's git push --force; now they have protections
similar to git push --force-with-lease (though not identical to it, to match
the behavior of jj git fetch). Note also that because of the way jj git \
fetch works, jj does not suffer from the same problems as Git's git push \
--force-with-lease in situations when git fetch is run in the background.
When the working copy commit becomes immutable, a new one is automatically \
created
on top of it to avoid letting the user edit the immutable one.
jj config list now properly escapes TOML keys (#1322).
Files with conflicts are now checked out as executable if all sides of the
conflict are executable.
The progress bar (visible when using e.g. jj git clone) clears the
remainder of the cursor row after drawing rather than clearing the entire row
before drawing, eliminating the "flicker" effect seen on some \
terminals.
|
2024-05-12 20:46:05 by Thomas Klausner | Files touched by this commit (2) | |
Log message:
jj: update to 0.17.1.
Fixed bugs
jj status no longer scans through the entire history to look for ancestors with \
conflicts.
|
2024-05-05 12:04:19 by Thomas Klausner | Files touched by this commit (3) | |
Log message:
jj: update to 0.17.0.
## [0.17.0] - 2024-05-01
### Breaking changes
* The default template aliases were replaced as follows:
* `builtin_op_log_root(op_id: OperationId)` ->
`format_root_operation(root: Operation)`
* `builtin_log_root(change_id: ChangeId, commit_id: CommitId)` ->
`format_root_commit(root: Commit)`
* `builtin_change_id_with_hidden_and_divergent_info` ->
`format_short_change_id_with_hidden_and_divergent_info(commit: Commit)`
* The `--revision` option of `jj rebase` is renamed to `--revisions`. The short
alias `-r` is still supported.
### New features
* The list of conflicted paths is printed whenever the working copy changes.
This can be disabled with the `--quiet` option.
* Commit objects in templates now have a `mine() -> Boolean` method analog to
the same function in revsets. It evaluates to true if the email of the commit
author matches the current `user.email`.
* Commit objects in templates now have a `contained_in(revset: String) ->
Boolean` method.
* Operation objects in templates now have a `snapshot() -> Boolean` method that
evaluates to true if the operation was a snapshot created by a non-mutating
command (e.g. `jj log`).
* Revsets and templates now support single-quoted raw string literals.
* A new config option `ui.always-allow-large-revsets` has been added to
allow large revsets expressions in some commands, without the `all:` prefix.
* A new config option `ui.allow-filesets` has been added to enable \
["fileset"
expressions](docs/filesets.md). Note that filesets are currently experimental,
but will be enabled by default in a future release.
* A new global flag `--ignore-immutable` lets you rewrite immutable commits.
* New command `jj parallelize` that rebases a set of revisions into siblings.
* `jj status` now supports filtering by paths. For example, `jj status .` will
only list changed files that are descendants of the current directory.
* `jj prev` and `jj next` now work when the working copy revision is a merge.
* `jj squash` now accepts a `--use-destination-message/-u` option that uses the
description of the destination for the new squashed revision and discards the
descriptions of the source revisions.
* You can check whether Watchman fsmonitor is enabled or installed with the new
`jj debug watchman status` command.
* `jj rebase` now accepts revsets resolving to multiple revisions with the
`--revisions`/`-r` option.
* `jj rebase -r` now accepts `--insert-after` and `--insert-before` options to
customize the location of the rebased revisions.
### Fixed bugs
* Revsets now support `\`-escapes in string literal.
* The builtin diff editor now allows empty files to be selected during
`jj split`.
* Fixed a bug with `jj split` introduced in 0.16.0 that caused it to incorrectly
rebase the children of the revision being split if they had other parents
(i.e. if the child was a merge).
* The `snapshot.max-new-file-size` option can now handle raw integer literals,
interpreted as a number of bytes, where previously it could only handle string
literals. This means that `snapshot.max-new-file-size="1"` and
`snapshot.max-new-file-size=1` are now equivalent.
* `jj squash <path>` is now a no-op if the path argument didn't match any paths
(it used to create new commits with bumped timestamp).
[#3334](https://github.com/martinvonz/jj/issues/3334)
|