Commit Graph

3373 Commits

Author SHA1 Message Date
Martin von Zweigbergk
b409aa3189 colocation: rename from "colocated repo" to "colocated workspace"
Colocation is about sharing the working copy between jj and git. It's
less important where the repo is stored. I therefore think we should
not call it "colocated repo". I considered renaming it to "colocated
working copy" but that sounded awkward in many places because we often
talk about the whole workspace (repo + working copy), so "In colocated
workspaces with a very large number of branches or other refs" sounds
better than "In colocated working copies with a very large number of
branches or other refs".

Once we support colocate workspaces in non-main Git worktrees, I think
this rename will be even more relevant because then all those
workspaces share the same repo but only some of them may be colocated.
2025-11-03 16:53:26 +00:00
Remo Senekowitsch
3899e178a0 cli undo: warn about undoing push operations
Undoing a push operation does not undo the effects on the remote.
Bookmarks on the remote will stay in place, but the local repository
will forget about their state. If the bookmarks are subsequently
moved and pushed, that later push will fail, since the bookmarks have
"unexpectedly" moved on the remote. Therefore, add a warning telling
users to run `jj redo` to avoid these complications.
2025-11-02 16:13:00 +00:00
David Higgs
4140f9499c tests: exercise more bisect behaviors 2025-11-01 23:17:31 +00:00
Ilya Grigoriev
e921bfaa05 diff_util: move unified diff utils to jj-lib 2025-10-31 18:16:48 +00:00
Yuya Nishihara
53f18f3bb1 git: replace remaining users of is_special_git_remote()
We no longer need jj-lib functions.
2025-10-31 00:37:50 +00:00
Yuya Nishihara
d6b5530513 revset: do not ignore "git" remote if user pattern is specified
Since we can now express the default pattern as `remote=~exact:"git"`, we can
unblock queries matching the "git" remote.
2025-10-31 00:37:50 +00:00
Yuya Nishihara
626e5b29a6 revset: parameterize special "git" remote that is ignored by default
The default remote parameter of remote_bookmarks() will be derived from this
parameter. It doesn't make sense to exclude @git bookmarks if the backend isn't
Git. It's also nice that parsing tests don't depend on the feature flag.
2025-10-31 00:37:50 +00:00
Martin von Zweigbergk
e96af181df cli: document that jj git import/export are not needed when colocated
Closes #7910
2025-10-30 20:21:05 +00:00
Ilya Grigoriev
5aee657c0c colocation docs: reflow some paragraphs
There was an annoying extra line in the CLI help. I fixed up that and a
few additional paragraphs.

Fixup to c32b476
2025-10-30 18:40:29 +00:00
Peter Schilling
5597ea2b33 docs: use long-form flag names in command documentation
in clap, the visible_aliases, e.g. '[aliases: --after]' are shown at 
the very end, which makes it confusing if you're reading from top to
bottom.

aliases are currently omitted entirely from the man pages, making it
confusing to see undocumented aliases being used.
2025-10-30 16:28:31 +00:00
Ilya Grigoriev
c32b476645 docs: fix and improve colocation docs
Follows up on 7c0328f

Fixes #7776
2025-10-30 01:30:11 +00:00
Yuya Nishihara
f7256f611c revset: parse string patterns into StringExpression
A typical use case is to query bookmarked revisions ignoring auto-generated
bookmarks. `bookmarks() ~ bookmarks(x)` doesn't work because a revision may have
multiple bookmarks. It's also nice that we can document the default of
`remote_bookmarks()` as `remote_bookmarks(remote=~exact:"git")`.

Closes #7665
2025-10-29 23:59:58 +00:00
David Higgs
821240b579 tests: exercise edit of current change 2025-10-29 13:15:23 +00:00
David Higgs
88fd87b243 tests: exercise --quiet for undo, redo, duplicate 2025-10-29 13:15:23 +00:00
David Higgs
f524ba436a tests: exercise status with conflicting bookmarks 2025-10-29 13:15:23 +00:00
Yuya Nishihara
ace8ab6d46 view: migrate pattern.filter_btree_map*() to StringMatcher
I'll add support for filtering bookmarks and tags by compound string
expressions.
2025-10-29 11:19:42 +00:00
Yuya Nishihara
b30fd5b9db cli: collect matching tags/bookmarks to temporary vec to simplify lifetime
If we removed 'b lifetime to use locally-constructed StringMatcher in place of
StringPattern, find_matches() would have to return iterator capturing the
argument of higher-rank lifetime. This patch makes the callback function collect
items. The cost of extra allocation wouldn't matter.
2025-10-29 11:19:42 +00:00
Yuya Nishihara
843b45b7cb str_util: rename StringPattern::everything() to all()
I'm going to add AST type for compound string match expressions, and this type
will be similar to Revset/FilesetExpression which implement all().
2025-10-29 11:19:42 +00:00
Brian Schroeder
7810926c35 index: make Index::is_ancestor fallible
This is part of a series of changes to make most methods on index traits
(i.e. `ChangeIdIndex`, `MutableIndex`, `ReadonlyIndex`, `Index`)
fallible. This will enable networked implementations of these traits,
which may produce I/O errors during operation. See #7825 for more
information.

- Introduced a few more instances of the existing anti-pattern, `TODO:
  indexing error shouldn't be a "BackendError"`. We're tracking this
  known issue in #7849.
- Converted `MutableRepo::merge_view` to return a `RepoLoaderError`
  instead of a `BackendError`. The only caller, `MutableRepo::merge`,
  already returns a `RepoLoaderError`.
- Added three "`fallible_`" iterator helpers to reduce the amount of
  noise at `is_ancestor` call sites due to the method now being
  fallible. Using these helpers seem to produce code that's a little
  more readable than using `process_results` from itertools. One
  consideration in this trade-off is that these helpers do not
  themselves return iterators: if we find that we need more support for
  fallible combinators mid-"chain" of iterator combinators, we might
  either want to use `process_results` only in those cases, or switch to
  use of `process_results` across the board (in lieu of these new
  helpers).
2025-10-28 13:47:44 +00:00
Martin von Zweigbergk
e8a7f1824d cargo: bump gix to 0.74.1
We need to do this manually (not Dependabot) because a method became
deprecated, so we need to migrate off of it to please CI.
2025-10-28 05:54:49 +00:00
Martin von Zweigbergk
9d81ad4ae3 cleanup: remove some unnecessary anonymous lifetime annotations
This change was motived by the next Gitoxide version adding an
additional lifetime to `gix::reference::iter::Iter`, which currently
breaks the automated Dependabot upgrade.

I left annonymous lifetime annotations on ref-like types like
`RemoteRefSymbol`.
2025-10-28 03:05:32 +00:00
Martin von Zweigbergk
15b0225547 tests: test attempt to create identical commits
We currently don't allow you to create two identical commits. It
results in an internal error. I think we need to allow it. Let's start
by testing the current behavior.

I created these as CLI tests because I want to make sure that `evolog`
and `op diff` get tested, including rendering.
2025-10-27 16:35:47 +00:00
Martin von Zweigbergk
284fadda3a tests: allow overriding $JJ_TIMESTAMP and $JJ_RANDOMNESS_SEED in tests
I think if a particular test sets e.g. $JJ_TIMESTAMP, they would
expect it to get used by `run_jj()` but we currently overwrite a few
variables in that method. This patch makes it so we respect all
environment added to the test environment.

I'm going to use this for a test case that attempts to create
identical commits.
2025-10-27 16:35:47 +00:00
Cole Helbling
d1d8048538 metaedit: replace --update-committer-timestamp with --force-rewrite
Just moments ago, I ran into a case where I wanted to change both the
author and committer of a change. I knew about the new `jj metaedit`
command, but until now that only gave me the ability to update the
author of my change, so the committer would remain the same. My only
other option was to reach for `jj desc ... --reset-author`, which has
a deprecation warning:

    Warning: `jj describe --reset-author` is deprecated; use `jj metaedit --update-author` instead

In spite of that warning, this had the desired effect: both the author
and committer were updated.

So I figured I'd help `metaedit` grow these flags so it can be a _true_
replacement for `jj desc --reset-author`.

---

The above all happened before I was kindly informed in Discord
(https://discord.com/channels/968932220549103686/1431315533164314674)
that `jj metaedit --update-committer-timestamp` should do what I was
hoping for, which I had initially disregarded and never tried because
the help text originally said:

    This updates the committer date to now, without modifying the committer.

However, after trying it out, I noticed it actually _did_ modify the
committer.

So, I set out to improve the situation by renaming the flag (so it's
not partially-wrong: it does update the committer timestamp, as well as
everything else about the committer) and improving the help text in the
various flags.

---

In no particular order, thanks to:

* obtuse, for informing me that the `--update-committer-timestamp`
flag does what I wanted in the first place
* gaetan, for pointing out that my way of thinking was not quite meshing
with how jj does things (every modification will update the committer)
* Martin, for the new flag name
2025-10-25 22:31:16 +00:00
Brian Schroeder
b8fa9ecf9c index: make Index::has_id fallible
This is part of a series of changes to make most methods on index traits
(i.e. `ChangeIdIndex`, `MutableIndex`, `ReadonlyIndex`, `Index`)
fallible. This will enable networked implementations of these traits,
which may produce I/O errors during operation. See #7825 for more
information.
2025-10-25 18:05:13 +00:00
Yuya Nishihara
5f40f62494 cleanup: remove redundant + use<'_> after migrating to 2024 edition
AliasFunctionOverloads::arities() doesn't need to capture &self, but it's not
important to describe the lifetime precisely here.
2025-10-25 02:09:31 +00:00
David Higgs
0034daa9ac describe: ensure --stdin messages get trailing newlines 2025-10-24 12:05:27 +00:00
Brian Schroeder
385fb064b9 index: make Index::shortest_unique_commit_id_prefix_len fallible
This is part of a series of changes to make most methods on index traits
(i.e. `ChangeIdIndex`, `MutableIndex`, `ReadonlyIndex`, `Index`)
fallible. This will enable networked implementations of these traits,
which may produce I/O errors during operation. See #7825 for more
information.
2025-10-24 10:51:56 +00:00
David Higgs
708baa13de tests: exercise describe revset matching no commits 2025-10-24 01:13:04 +00:00
David Higgs
902e9e4541 tests: exercise metaedit more with empty author/email 2025-10-24 01:13:04 +00:00
David Higgs
60d8cab25a tests: exercise metaedit --quiet 2025-10-24 01:13:04 +00:00
David Higgs
f2d27dd538 tests: exercise hidden metaedit -r option 2025-10-24 01:13:04 +00:00
David Higgs
8d06c6fcb3 tests: exercise metaedit revset matching no commits 2025-10-24 01:13:04 +00:00
Brian Schroeder
37da011be8 index: make MutableRepo::merge_in fallible
This is part of a series of changes to make most methods on index traits
(i.e. `ChangeIdIndex`, `MutableIndex`, `ReadonlyIndex`, `Index`)
fallible. This will enable networked implementations of these traits,
which may produce I/O errors during operation. See #7825 for more
information.
2025-10-23 20:52:16 +00:00
Brian Schroeder
5468bb49d3 index: make ChangeIdIndex::resolve_prefix fallible
This is part of a series of changes to make most methods on index traits
(i.e. `ChangeIdIndex`, `MutableIndex`, `ReadonlyIndex`, `Index`)
fallible. This will enable networked implementations of these traits,
which can produce I/O errors during operation. See #7825 for more
information.
2025-10-23 15:28:33 +00:00
Yuya Nishihara
3d43b556c3 cli: git colocation: fix check for non-main workspace
Also removed period from the error message per convention.

Fixes #7812
2025-10-23 01:50:55 +00:00
Yuya Nishihara
3a10ca3824 cli: git colocation: sort subcommands lexicographically 2025-10-23 01:50:55 +00:00
Martin von Zweigbergk
1f49e52d42 cli: check for immutable commits without evaluating full set in more cases
This updates a somewhat arbitrary set of commands that were easy to
update.
2025-10-22 15:12:14 +00:00
Martin von Zweigbergk
62ac4d3eab abandon: check for immutable commmits without evaluating set
This should make things like accidental `jj abandon ..main` error out
much more quickly on large repos like the one at Google (without first
reading hundreds of millions of commits into memory).

I think we should update other commands in a similar way.
2025-10-22 15:12:14 +00:00
Martin von Zweigbergk
6bcab3b937 cli_util: pass unevaluted revset into find_immutable()
This will help us error out on things like `jj abandon ..main` without
first evaluating the revset to all the commits in the set.
2025-10-22 15:12:14 +00:00
Martin von Zweigbergk
6a39a81039 cli_util: treat --ignore-immutable less special in immutable_heads()
I'm about to add a version of `check_rewritable()` that works on a
revset expression instead of an evaluated revset. This patch prepares
for that by having the `--ignore-immutable` case also evaluate a
revset instead of iterating over the commits looking for the root
commit.
2025-10-22 15:12:14 +00:00
Martin von Zweigbergk
b734cd8fa0 cli: test that jj log --ignore-immutable still renders immutable commits
I had missed that `jj log` is supposed to render commits as immutable
even when `--ignore-immutable` is passed. Thanks to @yuja for pointing
this out.
2025-10-22 15:12:14 +00:00
Yuya Nishihara
34b8191c9f cli: tests: let TestEnvironment store extra env vars in OsString
We don't need to support variables in arbitrary encoding, but it's simpler to
just accept any OsString inputs.
2025-10-22 14:46:24 +00:00
Yuya Nishihara
3523e753d5 cli: tests: remove unneeded unicode conversion from TestEnvironment 2025-10-22 14:46:24 +00:00
Angel Ezquerra
3c98f9a7d3 git: add git colocation enable | disable | status commands (fixes #4624)
This new command lets you turn a non colocated git repo into a colocated repo or vice-versa (by using the `jj git colocation enable` and `jj git colocation disable` commands respectively).
These commands simply implement the instructions found in https://github.com/jj-vcs/jj/blob/main/docs/git-compatibility.md#converting-a-repo-into-a-co-located-repo

You can also call `jj git colocation status` to show the current colocation status and `jj colocation` to show a help message (with the list of sub-commands).
2025-10-22 06:39:23 +00:00
Daniel Luz
b77bb24114 cli: restore: provide modified file completion for --changes-in/-c 2025-10-21 21:22:00 +00:00
Martin von Zweigbergk
3a511becd6 cargo: bump ignore crate to 0.4.24
This includes the fix for
https://github.com/BurntSushi/ripgrep/issues/3127. The fix let us
optionally allow unclosed character classes in .gitignore files. It is
allowed by default when using the `GitignoreBuilder` (as we do), so we
get the fix without code changes.
2025-10-20 17:20:14 +00:00
David Higgs
2c3b7a3240 tests: prevent cli tests from failing when generating code coverage 2025-10-20 13:00:50 +00:00
Benjamin Brittain
94ad20f00e fake-formatter: remove unused clap::arg import 2025-10-20 02:02:38 +00:00
Scott Taylor
141832414a backend: remove MergedTreeId::Legacy variant
I'm planning to try to add conflict labels to `MergedTree` and
`MergedTreeId`, and it will be easier to add them if both are structs
with similar methods. Since we don't support reading/writing legacy
conflicts anymore (as far as I'm aware), I think it should be safe to
delete the `MergedTreeId::Legacy` variant now.
2025-10-19 13:14:27 +00:00