170 Commits

Author SHA1 Message Date
Austin Seipp
e060ef20c1 cli: delete deprecated jj merge command
This has been deprecated for almost a year now.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
2024-11-21 11:50:03 -06:00
Austin Seipp
037134147d cli: delete deprecated jj checkout command
This has been deprecated for almost a year now.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
2024-11-21 11:50:03 -06:00
Martin von Zweigbergk
7323c2e5e0 cli: delete the deprecated jj move command
I hope we'll have support for copies and renames in not too long. It's
good to have as many versions before that as possible without support
for `jj move`, in case we want to later use that to record a moved
file (maybe as an alias for `jj file move`).
2024-11-18 13:24:16 -08:00
Remo Senekowitsch
26ccc1c4cc completion: teach jj about aliases
This makes completions suggest aliases from the user or repository
configuration. It's more useful for long aliases that aren't used very often,
but serve the purpose of "executable documentation" of complex and useful jj
commands.

An earlier patch "resolved" aliases, meaning that any arguments following an
alias would be completed as if the normal command had been used. So it only
made sure that using aliases doesn't degrade the rest of the completions.
Commit ID: 325402dc9463ccaa70822069b3e94716d9cc7417
2024-11-14 19:51:11 +01:00
Yuya Nishihara
ce3436b92b cli: add "absorb" machinery and command
The destination commits are selected based on annotation, which I think is
basically the same as "hg absorb" (except for handling of consecutive hunks.)
However, we don't compute a full interleaved delta right now, and the hunks are
merged in the same way as "jj squash". This means absorbed hunks might produce
conflicts if no context lines exist. Still I think this is more intuitive than
selecting destination commits based on patch commutativity.

I've left inline comments to the tests where behavior is different from "hg
absorb", but these aren't exhaustively checked.

Closes #170
2024-11-12 08:26:42 +09:00
Arthur Grillo
f2acb98ef2 help: Add a keyword feature
It would be nice to not need to go the documentation website. This aims
to solve that by introducing the concept of keyword to the help
command.

Basically, keywords are things that we want to add help messages to,
but they don't necessarily have an associated subcommand.

For now we only have two keywords:
	- `revsets`: Shows the docs for revsets
	- `tutorial`: Shows the tutorial that is on the documentation

You get the keyword content by tipping `jj help --keyword revsets` or
`jj help -k revsets`.

You can also list the available keywords with `jj help --help`.

It would be nice to have all the documentation on the keywords, maybe
a next commit could do it.
2024-10-31 16:55:18 -03:00
Arthur Grillo
536c629df8 cli: Explicitly add a Help command to accept the early args after it
The default clap's help command doesn't have the ability to accept flags
(e.g --no-pager). The recommended way[1] to solve this is to manually
implement it.

[1]: https://github.com/clap-rs/clap/discussions/5332

Fixes: #4501
2024-10-12 10:17:12 -03:00
dploch
95344f9e05 simplify-parents: add a command to remove redundant parents 2024-10-07 20:15:33 -04:00
Samuel Tardieu
baf25ba482 unsquash: deprecate in favor of squash and diffedit
Everything that could be done with `jj unsquash` can be done with
`jj squash` or `jj diffedit --preserve-descendants`.
2024-09-26 16:34:48 +02:00
Philip Metzger
d9c68e08b1 everything: Rename branches to bookmarks
Jujutsu's branches do not behave like Git branches, which is a major
hurdle for people adopting it from Git. They rather behave like
Mercurial's (hg) bookmarks. 

We've had multiple discussions about it in the last ~1.5 years about this rename in the Discord, 
where multiple people agreed that this _false_ familiarity does not help anyone. Initially we were 
reluctant to do it but overtime, more and more users agreed that `bookmark` was a better for name 
the current mechanism. This may be hard break for current `jj branch` users, but it will immensly 
help Jujutsu's future, by defining it as our first own term. The `[experimental-moving-branches]` 
config option is currently left alone, to force not another large config update for
users, since the last time this happened was when `jj log -T show` was removed, which immediately 
resulted in breaking users and introduced soft deprecations.

This name change will also make it easier to introduce Topics (#3402) as _topological branches_ 
with a easier model. 

This was mostly done via LSP, ripgrep and sed and a whole bunch of manual changes either from
me being lazy or thankfully pointed out by reviewers.
2024-09-11 18:54:45 +02:00
Martin von Zweigbergk
a0fae76622 cli: rename obslog to evolution-log/evolog
It seems everyone agrees that `obslog` is not an intuitive name. There
was some discussion about alternatives in #3592 and on #4146. The
alternatives included `evolution`, `evolutionlog`, `evolog`,
`rewritelog`, `revlog`, and `changelog`. It seemed like
`evolution-log`/`evolog` was the most popular option. That also
matches the command's current help text ("Show how a change has
evolved over time").
2024-09-05 13:45:17 -07:00
Yuya Nishihara
6b65f8abec cli: move "untrack" to "file" subcommand
I don't think "jj untrack" is frequently used, and I think it is a "file"
command rather than "workspace".
2024-08-26 01:19:15 +09:00
Yuya Nishihara
3c15f8106a cli: add deprecation comment to cat, chmod, and files 2024-08-26 01:19:15 +09:00
Yuya Nishihara
3762f890f6 cli: extract helper that issues deprecation warning and invoke command fn 2024-08-26 01:19:15 +09:00
Matt Kulukundis
8ead72e99f formatting only: switch to Item level import ganularity 2024-08-22 14:52:54 -04:00
Ilya Grigoriev
e21e5e69d2 cli chore: standardize subcommand function and argument type names
Now, the command for `jj git remote add` is `cmd_git_remote_add` and its
argument type is `GitRemoteAddArgs`. This should make it easier to find
the CLI docs and the implementation for commands.

This is how `jj branch` commands were already set up in this way. The
`jj op` commands were also already set up in this way, except the
functions are called e.g. `cmd_op_undo`, I kept this for simplicity.

I was mainly motivated by the `jj file` commands. Most other commands
had functions already named in the above pattern, but used to have
shorter argument type names.
2024-06-28 13:38:04 -07:00
Ilya Grigoriev
e6c2108d4d cli: rename jj file print (formerly jj cat) to jj file show
We now have two `cmd_show` in the repo. I think this one should become
`cmd_file_show`, but this should be done uniformly over all the commands
for consistency.

I did *not* keep `print` as an alias (I couldn't find a compelling
reason to do it), but let me know if anyone feels like keeping it.
2024-06-26 17:11:16 -07:00
Martin von Zweigbergk
15e0d62380 cli: split up commands/operation.rs into one file per command 2024-06-22 08:49:02 +09:00
Yuya Nishihara
78dba90ac8 cli: sort match arms in run_command() 2024-06-21 09:43:14 +09:00
Yuya Nishihara
ef9633135e cli: rename derived_subcommands to subcommand, remove redundant type annotation
I don't think "derived" here makes much sense.
2024-06-21 09:43:14 +09:00
Yuya Nishihara
20f1ba5a08 cli: rename "sub_args" variables to "args"
Just for consistency.
2024-06-21 09:43:14 +09:00
Yuya Nishihara
026d83b61f cli: rename SparseArgs to SparseCommand 2024-06-21 09:43:14 +09:00
Matt Kulukundis
5d307e628b cli: create jj file list and deprecate jj files 2024-06-17 14:13:36 -04:00
Matt Kulukundis
47bd6f4aa4 feat: Create a file command containing print and chmod
- rearrange the files involved to be more clear about structure
- deprecate existing `jj cat` and `jj chmod`
2024-06-17 12:17:49 -04:00
Danny Hooper
3050685ff3 cli: implement enough of jj fix to run a single tool on all files 2024-06-04 14:28:21 -05:00
Martin von Zweigbergk
650eeb8935 cli: add jj fix proof of concept 2024-06-04 14:28:21 -05:00
Ilya Grigoriev
21b9453d59 jj help: note that move, checkout, and merge as deprecated 2024-06-01 18:38:23 -07:00
Ilya Grigoriev
ab195339b4 docs and jj help: hide deprecated jj move
Fixes #3807
2024-06-01 18:38:23 -07:00
Evan Mesterhazy
64e242ab3a Implement jj parallelize
Parallelize revisions by making them siblings

Running `jj parallelize 1::2` will transform the history like this:
```text
3
|             3
2            / \
|    ->     1   2
1            \ /
|             0
0
```

Each of the target revisions is rebased onto the parents of the root(s) of
the target revset (not to be confused with the repo root). The children of
the head(s) of the target revset are rebased onto the target revisions.

The target revset is the union of the REVISIONS arguments.

The target revset being parallelized must satisfy several conditions,
otherwise the command will fail.

1. The heads of the target revset must not have different children.
2. The roots of the target revset must not have different parents.
3. The parents of all target revisions except the roots must also be
   parallelized. This means that the target revisions must be connected.
2024-04-05 12:43:10 -04:00
Yuya Nishihara
97024e5be4 cli: extract CommandError and helper functions to new module
The cli_util module is big enough to slow down Emacs, so let's split it up.
This change is an easy one.
2024-03-03 01:11:46 +09:00
Austin Seipp
7a7f76cbfb cli: deprecate jj merge
Summary: As discussed in Discord, on GitHub, and elsewhere, this change
deprecates the use of `jj merge` and suggests users use `jj new` exclusively
instead. `merge` isn't completely unfit as a name; but we think it obscures
the generality of `new` and we want people to use it instead.

To further drive the bit home, by default, `jj merge` is now hidden. This will
hopefully stop new users from running into it.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
Change-Id: I94938aca9d3e2aa12d1394a5fbc58acce3185b56
2024-02-03 17:21:56 -06:00
Austin Seipp
3f13ea39e2 cli: deprecate jj checkout
Summary: As discussed in Discord, on GitHub, and elsewhere, this change
deprecates the use of `jj checkout` and suggests users use `jj new` exclusively
instead. The verb `checkout` is a relic of a bygone era the — days of RCS
file locking, before 3-way merge — and is not a good, fitting name for the
functionality it provides.

To further drive the bit home, by default, `jj checkout` (and `jj co`) is now
hidden. This will hopefully stop new users from running into it.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
Change-Id: I7a1adfc9168fce1f25cf5d4c4c313304769e41a1
2024-02-03 17:21:56 -06:00
Valentin Gatien-Baron
3b7678d9c5 cli: move jj workspace root to `jj root, for discoverability
This is a convenient command, for scripting things like `cd $(jj root)
&& do something`, and it seems better to allow people to find it
before they learn about workspaces.
2024-01-25 16:31:44 -05:00
Daehyeok Mun
ad05a8750a Renaming \'BranchSubCommand\' and \'ConfigSubCommand\' 2024-01-22 10:12:00 -08:00
Daehyeok Mun
02f94653e6 Implement tag command. 2024-01-22 09:23:18 -08:00
Martin von Zweigbergk
a0cbe7ced0 cli: rename *Commands enums to *Command
Each instance of the enum represents a single command, so singular
`*Command` seems better. That also seems to match the examples in
clap's documentation.
2023-12-01 16:53:54 -08:00
Ilya Grigoriev
0357915778 cli: move make_branch_term out of commands/mod.rs
It is now out of place in mod.rs. It is only used in two places, so
I copied it to each of them.

Follows up on @AntoineCezar 's work.
2023-11-18 12:21:36 -08:00
Ilya Grigoriev
af81cbd942 cli: make dummy revert command accept any arguments
Before, `jj revert qq` would say that `qq` is an extraneous argument.
Now, it says "Error: No such subcommand: revert".
2023-11-18 10:25:53 -08:00
Ilya Grigoriev
1c5d0e0d63 cli: adjust error message for dummy revert command 2023-11-18 10:25:53 -08:00
Benjamin Saunders
2526620f82 cli: Suggest jj backout or jj restore in place of jj revert 2023-11-14 15:35:13 -08:00
Antoine Cezar
afc2382833 cli: move description utils to description_util.rs 2023-11-06 17:49:02 +01:00
Antoine Cezar
5973ab47b9 commands: move rebase_to_dest_parent to jj_lib::rewrite
What make rebase_to_dest_parent a good candidate for jj_lib::rewrite module:

- It is used both in obslog and interdiff. It's a sign that it may be moved to a lower layer
- CommandError is returned by converting from TreeMergeError. Not explicitly.
- It only use jj_lib::rewrite fonctions.
2023-11-03 20:48:00 +01:00
Antoine Cezar
b7c480a575 commands: move show_predecessor_patch code to obslog.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
5d45bd194a commands: move workspace code to workspace.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
9e462509f8 commands: move version code to version.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
04eddc666c commands: move untrack code to untrack.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
9d72fa2a51 commands: move unsquash code to unsquash.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
8bb0383ad5 commands: move util code to util.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
abe658d966 commands: move status code to status.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
116214a79d commands: move squash code to squash.rs 2023-11-03 04:45:55 +01:00