2527 Commits

Author SHA1 Message Date
Yuya Nishihara
2fd842ebf7 tests: normalize formatting in insta macro that could leave trailing whitespace
rustfmt occasionally complains about that.
2025-02-25 15:40:14 +00:00
Yuya Nishihara
7fa8420908 tests: resolve directory path to run_jj_in() relative to env_root
Suppose we'll add test_env.init_workspace(path) or something, this will probably
make sense.
2025-02-25 15:40:14 +00:00
Yuya Nishihara
3634ff298c tests: simplify jj_cmd() interface, rename to new_jj_cmd() 2025-02-25 15:40:14 +00:00
Yuya Nishihara
28803eef94 tests: rewrite remaining callers of jj_cmd() to use run_jj_in/with() 2025-02-25 15:40:14 +00:00
pylbrecht
f7ceac3bf4 unsign: implement jj unsign command
The output of `jj unsign` is based on that of `jj abandon`.

We output warnings when unsigning commits, which are not authored by the
user. This is encouraging to use `jj undo`, in case one unintentionally
drops signatures of others.

---

Co-authored-by: julienvincent <m@julienvincent.io>
Co-authored-by: necauqua <him@necauq.ua>
2025-02-25 13:36:44 +00:00
Anton Bulakh
76f79961fb sign: implement the jj sign command
We always sign commits. This means commits, which are already signed,
will be resigned. While this is cumbersome for people using hardware
devices for signatures, we cannot reliably check if a commit is already
signed at the moment (see https://github.com/jj-vcs/jj/issues/5786).

We output warnings when signing commits, which are not authored by the
user. This is encouraging to use `jj undo`, in case one unintentionally
signs commits of others.

The output of `jj sign` is based on that of `jj abandon`.

---

Co-authored-by: julienvincent <m@julienvincent.io>
Co-authored-by: necauqua <him@necauq.ua>
2025-02-25 13:36:44 +00:00
Yuya Nishihara
ad6985fd9c tests: migrate unusual patterns of jj_cmd_ok() to run_jj_in()
These callers are manually ported to run_jj_in().
2025-02-24 15:39:11 +00:00
Yuya Nishihara
804d175fd9 tests: migrate non-snapshot users of jj_cmd_ok() to run_jj_in().success()
These callers were mostly substituted mechanically.
2025-02-24 15:39:11 +00:00
Yuya Nishihara
3193513049 tests: migrate snapshot users of jj_cmd_ok() to run_jj_in()
These callers were mostly substituted mechanically, then fixed up formatting.
2025-02-24 15:39:11 +00:00
Yuya Nishihara
255532b6b8 tests: reorder comments and snapshots, split insta::allow_duplicates! { .. }
This helps replace jj_cmd_ok() by pattern matching.
2025-02-24 15:39:11 +00:00
Yuya Nishihara
37bfc64cf2 working_copy: do not update watchman clock if untracked files exist
This means that watchman is partially disabled until the user cleans up
untracked files. This isn't nice, but should be better than hiding untracked
files forever.

Fixes #5728
Fixes #5602
2025-02-24 08:22:21 +00:00
Yuya Nishihara
b7e2932dba tests: compare CommandOutput where makes sense 2025-02-24 00:57:24 +00:00
Yuya Nishihara
c9926eae4c tests: implement Debug and Eq for CommandOutput
This helps assert that two command invocations generate exactly the same
results.
2025-02-24 00:57:24 +00:00
Yuya Nishihara
a1270f0149 tests: remove stale comment about CommandOutput wrapper 2025-02-24 00:57:24 +00:00
Yuya Nishihara
c83abc9dec tests: migrate non-snapshot users of jj_cmd_success() to run_jj_in().success() 2025-02-23 13:34:17 +00:00
Yuya Nishihara
cdcc777730 tests: migrate snapshot users of jj_cmd_success() to run_jj_in()
These callers were mostly substituted mechanically, then fixed up minor
formatting and name errors.
2025-02-23 13:34:17 +00:00
Yuya Nishihara
317993894b tests: migrate unusual users of jj_cmd_success() to run_jj_in/with()
These callers are manually ported to run_jj_in(). assert_eq!() is changed to
insta::assert_snapshot!() where possible.
2025-02-23 13:34:17 +00:00
Yuya Nishihara
a326b6e792 tests: migrate jj_cmd_success() output wrappers to run_jj_in() 2025-02-23 13:34:17 +00:00
Yuya Nishihara
2543329c78 tests: remove unused jj_cmd_panic() 2025-02-23 03:06:59 +00:00
Yuya Nishihara
79a0867050 tests: migrate callers of jj_cmd_internal_error() to run_jj_in() 2025-02-23 03:06:59 +00:00
Yuya Nishihara
b79b29c288 tests: migrate callers of jj_cmd_cli_error() to run_jj_in() 2025-02-23 03:06:59 +00:00
Yuya Nishihara
14ad894e47 tests: rewrite some alias tests to use normalize_stderr_with() 2025-02-23 03:06:59 +00:00
Yuya Nishihara
d19e58f591 tests: migrate callers of jj_cmd_failure() to run_jj_in() 2025-02-23 03:06:59 +00:00
Yuya Nishihara
696cfee55f tests: stop using assert_eq!() in cli tests where possible
Normalize the output instead.
2025-02-23 03:06:59 +00:00
Yuya Nishihara
7c2f723935 tests: unify parsing output helpers in revset and templater tests
run_jj_in() can handle both success and failure cases.
2025-02-23 03:06:59 +00:00
Bryce Berger
708e1c58cd cli: improve hint message when suggesting --ignore-immutable
There have been a number of users confused about why
their commits are immutable, or what to do about it, ex.
[https://github.com/jj-vcs/jj/discussions/5659].

Separately, I feel that the cli is too quick to suggest
`--ignore-immutable`, without context of the consequences. A new user
could see that the command is failing, see a helpful hint to make it not
fail, apply it and move on. This has wildly different consequences, from
`jj squash --into someone_elses_branch@origin` rewriting a single commit,
to `jj edit 'root()+'` rewriting your entire history.

This commit changes the immutable hint by doing the following:

* Adds a short description of what immutable commits are used for, and a
  link to the relevant docs, to the hint message.
* Shows the number of immutable commits that would be rewritten if
  the operation had succeeded.
* Removes the suggestion to use `--ignore-immutable`.
2025-02-23 02:24:43 +00:00
Bryce Berger
a17ed203ab fix: invoke tools from the workspace root
Previously, tools invoked by `jj fix` did not have their
`.current_dir()` set, and would just run from whatever directory the
user was in.

Now, the tools will always be invoked from the same directory that
`jj root` gives.

As a motivating example, consider a configuration path that's always at
the workspace root:

```toml
[fix.tools.something]
# previous:
command = ["cmd", "--config", "$root/tool.toml"]
#                              ^^^^^^ not possible
# now:
command = ["cmd", "--config", "./tool.toml"]
#                              ^^ now, just use a relative path
```
2025-02-23 02:21:57 +00:00
Bryce Berger
35936463ed cli: warn when command differs after --config, including when subcommand not found
Aliases and `ui.default-command` are loaded before `--config` and
`--config-file` arguments are parsed (#5282).

There is supposed to be a warning when the result of these arguments
would change the parsed args: #5286.

However, that warning was not being printed if the arguments failed to
parse due to an unrecognized subcommand. Example:

```bash
# correct:
$ jj --config ui.default-command=nonsense
Warning: Command aliases cannot be loaded from -R/--repository path or --config/--config-file arguments.

# previous, confusing:
$ jj --config aliases.some-alias=nonsense some-alias
error: unrecognized subcommand 'some-alias'

# now:
$ jj --config aliases.some-alias=nonsense some-alias
Warning: Command aliases cannot be loaded from -R/--repository path or --config/--config-file arguments.
error: unrecognized subcommand 'some-alias'
```
2025-02-22 20:19:42 +00:00
Yuya Nishihara
679a5c567a tests: migrate some jj_cmd_ok() output wrappers to run_jj_in()
Some of the wrapper functions are deduplicated as we can now handle success
and failure cases in the same way.
2025-02-22 01:23:04 +00:00
Yuya Nishihara
f1cd3a4e53 tests: migrate some jj_cmd_success() output wrappers to run_jj_in() 2025-02-22 01:23:04 +00:00
Yuya Nishihara
18ea718113 tests: migrate some helper functions that uses jj_cmd_*() to run_jj_in()
Snapshotted operation IDs are changed because this patch reorders "jj new"
command arguments.
2025-02-22 01:23:04 +00:00
George Christou
e1abaca21c templater: add trim methods to String type 2025-02-21 21:23:11 +00:00
Antoine Martin
631b9ada3d track: only print snapshot stats and hints once
Move the `track` specific logic to track.rs, let print_snapshot_stats
handle just the default case.

Previously print_snapshot_stats would get called twice and could warn
twice about a file (if that file was both in the auto-track fileset as
well as in the fileset passed to `jj file track`), so now we merge the
snapshot stats and display appropriate hints for each file.
2025-02-21 17:35:04 +00:00
Antoine Martin
0d02e855cd cli_utils: extract warning printing code from print_snapshot_stats
This will be re-used in the `track` command.
2025-02-21 17:35:04 +00:00
Antoine Martin
984c7aae20 cli_utils: make snapshot stats printing optional
Snapshot stats were automatically printed when calling
`WorkspaceCommandHelper::snapshot_working_copy`. This has been moved up
the call chain to allow more choice in when to actually print stats.

These functions used to trigger printing of the snapshot stats via
(direct or indirect) calls to `snapshot_working_copy`:

- CommandHelper::workspace_helper_with_stats
- CommandHelper::recover_stale_working_copy
- WorkspaceCommandHelper::maybe_snapshot_impl

This means we can now chose not to print the snapshot stats if we know
we will perform another snapshot operation during the same command, to
reduce the number of warnings and hints shown to the user.

Calling `workspace_helper`, or `maybe_snapshot` instead of
`workspace_helper_with_stats` and `maybe_snapshot_impl` still prints
stats automatically.
2025-02-21 17:35:04 +00:00
George Christou
f77e64391d cli: add support for Sublime Merge 2025-02-21 05:44:53 +00:00
George Christou
19cf1368f1 cli: restore: Fix --to placeholder 2025-02-21 05:40:43 +00:00
Yuya Nishihara
e23290d95d tests: migrate users of strip_last_line() to run_jj_in() function 2025-02-21 01:49:41 +00:00
Yuya Nishihara
2581cd82be tests: migrate users of normalize_with() to run_jj_in() function 2025-02-21 01:49:41 +00:00
Yuya Nishihara
cf7f1dfc88 tests: migrate users of normalize_exit_status() to run_jj_in() function 2025-02-21 01:49:41 +00:00
Yuya Nishihara
53664ce2a4 tests: migrate jj_cmd_stdin*() to run_jj*() functions 2025-02-21 01:49:41 +00:00
Yuya Nishihara
6308897a23 cli: mention revsets doc on syntax error
Maybe we can show more specific hints on certain cases, but this should be good
as a fallback. The message is copied from the FilesetParseError hint.
2025-02-20 08:05:20 +00:00
Yuya Nishihara
b1eca3710c cli: parse bookmark name to be created/updated as revset symbol
This should help prevent misuse of "jj bookmark set" with e.g. remote bookmark
name. A remote-looking bookmark can be created by quoting the name if needed.

This patch doesn't change the parsing of name patterns. For patterns, I think
it's better to add support for compound expressions (e.g. `glob:foo* & ~bar`)
rather than adding revset::parse_string_pattern(text) -> StringPattern.

Closes #5705
2025-02-20 08:05:20 +00:00
Baltasar Dinis
683ee9287e tests: move gitoxide test helpers to testutils
These helpers are going to be needed to port the git2 code in the lib
tests to gitoxide. Since the cli tests already depend on testutils, this
helps with avoiding duplicating the code
2025-02-20 06:13:20 +00:00
Baltasar Dinis
c8ee6b7088 cli/tests: move bookmark_command test to gitoxide
An in-flight PR snuck in another git2 usage, moved to gitoxide
2025-02-20 05:33:22 +00:00
Yuya Nishihara
de462a6268 tests: add helper to snapshot command output and exit status all at once
It's easier to review insta snapshot diffs than scanning panic log containing
lengthy output. I think this will also help printf debugging.

test_global_opts.rs is migrated to new API as an example.
2025-02-20 05:22:32 +00:00
Yuya Nishihara
740d8a2b1b tests: add #[must_use] to helper functions that return value to be tested 2025-02-20 05:22:32 +00:00
George Christou
a5e079f543 ui: add color to help text 2025-02-20 01:22:02 +00:00
Stephan Hügel
fececd9174 cli: add mergiraf to the default merge tools config
Added as per Martin's suggestion: https://discord.com/channels/968932220549103686/969291218347524238/1341910959601614893
2025-02-20 01:14:39 +00:00
Baltasar Dinis
f233de5f69 cli: remove error hint for invalid remote names
Existing hint suggests using `jj git remote rename`, but that's not
applicable to `jj git clone`.

This commit removes that hint.
2025-02-19 07:14:00 +00:00