383 Commits

Author SHA1 Message Date
Yuya Nishihara
f239b1e8f0 settings: pass around &UserSettings instead of &config::Config consistently
Ui::with_config() is unchanged because I'm not sure if UserSettings should be
constructed earlier. I assume UserSettings will hold an immutable copy of
LayerdConfigs object, whereas Ui has to be initialized before all config layers
get loaded.
2024-11-23 10:20:27 +09:00
Yuya Nishihara
6d26d53eab config: add type alias for config::ConfigError
We'll probably add our own ConfigError type later.
2024-11-23 10:20:27 +09:00
Yuya Nishihara
c0250f1904 config: rename jj_cli::config::ConfigError to ConfigEnvError
It was confusing because we often refer to config::ConfigError as ConfigError.
2024-11-23 10:20:27 +09:00
Yuya Nishihara
5ad0f3dcf6 config: extract ConfigNamePathBuf to jj-lib
I'm planning to rewrite config store layer by leveraging toml_edit instead of
the config crate. It will allow us to merge config overlays in a way that
deprecated keys are resolved within a layer prior to merging, for example.

This patch moves ConfigNamePathBuf to jj-lib where new config API will be
hosted. We'll probably extract LayeredConfigs to this module, but we'll first
need to split environment dependencies from it.
2024-11-23 10:20:27 +09:00
Yuya Nishihara
5e13a4a719 signing: remove unused SignInitError::Backend variant, simplify error handling
Since signing backends shouldn't do non-trivial work at the initialization
stage, the error type would never be categorized as an internal error.
2024-11-22 08:20:45 +09:00
Yuya Nishihara
200581164e completion: pad empty argument at $_CLAP_COMPLETE_INDEX
This is a workaround for command name completion. On zsh, the complete position
is specified by $_CLAP_COMPLETE_INDEX, and an empty argument isn't padded. So,
for "jj <TAB>", { args = ["jj"], index = 1 } is provided, and our expand_args()
helpfully fills in the default command "log". Since args[index] is now "log",
no other commands are listed.
2024-11-18 17:06:24 +09:00
Remo Senekowitsch
2def0ced7d completion: teach operation commands about ids 2024-11-16 11:01:42 +01:00
Benjamin Tan
43169680ce cli: warn if trunk() cannot be resolved after each transaction
Closes #4846.
2024-11-15 18:31:28 +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
dploch
e1416981aa cli_util: consolidate update_stale command fully into cli_util 2024-11-14 11:12:02 -05:00
dploch
49890fa2d9 cli_util: enable automatic update of stale workspaces if config is set
This significantly reduces toil for multi-workspace users, resolving issue #3820
2024-11-14 11:12:02 -05:00
dploch
2c54848e63 cli_util: move snapshotting of the stale working copy into cli_util
This centralizes the logic so cli helpers can use it.
2024-11-14 11:12:02 -05:00
dploch
afb07110b2 cli_util: move update-stale checkout operation into cli_util
This centralizes the logic so the cli helpers can use it.
2024-11-14 11:12:02 -05:00
dploch
0a5bc2bbed workspace: move recovery commit logic into lib for sharing
This is to facilitate automatic update-stale in extensions and in the CommandHelper layer.
2024-11-14 11:12:02 -05:00
dploch
afe25464fe working_copy: move freshness calculation into lib for sharing
This is to facilitate automatic update-stale in extensions and in the CommandHelper layer.
2024-11-14 11:12:02 -05:00
Martin von Zweigbergk
de6da1a088 transaction: propagate errors from commit() 2024-11-13 23:05:24 -08:00
Remo Senekowitsch
325402dc94 completion: resolve aliases 2024-11-11 21:41:42 +01:00
Benjamin Tan
51675a2c14 cli: include commit summary when attempting to modify an immutable commit
Previously, attempting to modify an immutable commit only showed the
ID of the commit being modified, which wasn't very helpful when trying
to figure out which immutable commit is being modified at a quick
glance.

This commit prints the commit summary as a hint to make it simpler for
the user to see what the immutable commit is without having to run
`jj show <commit-id>`.
2024-11-12 01:17:41 +08:00
Remo Senekowitsch
c9e751ae6e completion: teach rename about local bookmarks 2024-11-10 07:26:22 +01:00
Yuya Nishihara
7d34194502 cli: do not swallow error when checking working copy that became immutable
.is_err() doesn't always mean the commit is immutable.

Fixes #4798
2024-11-09 09:40:29 +09:00
Yuya Nishihara
62e4943c04 revset: reorganize expression resolution/evaluation methods
Both user and programmatic expressions use the same .evaluate() function now.
optimize() is applied globally after symbol resolution. The order shouldn't
matter, but it might be nicer because union of commit refs could be rewritten
to a single Commits(Vec<CommitId>) node.
2024-11-08 10:34:02 +09:00
Yuya Nishihara
e55d03a2ee revset: introduce type-safe user/resolved expression states
This helps add library API that takes resolved revset expressions. For example,
"jj absorb" will first compute annotation within a user-specified ancestor range
such as "mutable()". Because the range expression may contain symbols, it should
be resolved by caller.

There are two ideas to check resolution state at compile time:
<https://github.com/martinvonz/jj/pull/4374>

 a. add RevsetExpressionWrapper<PhantomState> and guarantee inner tree
    consistency at public API boundary
 b. parameterize RevsetExpression variant types in a way that invalid variants
    can never be constructed

(a) is nice if we want to combine "resolved" and "unresolved" expressions. The
inner expression types are the same, so we can just calculate new state as
Resolved & Unresolved = Unresolved. (b) is stricter as the compiler can
guarantee invariants. This patch implements (b) because there are no existing
callers who need to construct "resolved" expression and convert it to "user"
expression.

.evaluate_programmatic() now requires that the expression is resolved.
2024-11-08 09:56:33 +09:00
Yuya Nishihara
15da697616 cli: insert dummy -h/--help flag when parsing early args
Fixes #4746
2024-11-03 13:32:12 +09:00
Yuya Nishihara
8e1eb23246 cli: remove special case for clap's default "help" subcommand
Since 536c629d "cli: Explicitly add a Help command to accept the early args
after it", "jj help" is a normal subcommand.
2024-11-03 13:32:12 +09:00
dploch
49e9003c4e revset: allow iterators to return evaluation errors
Custom backends may rely on networking or other unreliable implementations to support revsets, this change allows them to return errors cleanly instead of panicking.

For simplicity, only the public-facing Revset and RevsetGraph types are changed in this commit; the internal revset engine remains mostly unchanged and error-free since it cannot generally produce errors.
2024-10-18 17:09:35 -04:00
Ilya Grigoriev
eaab8bbc36 formatter & colors.toml: replace op_log color label with operation
Cleans up after 7051effa8f

It's split into "op_log operation" and just "operation" for the
summaries (as suggested by Yuya). The color labels use "operation".
2024-10-15 19:30:19 -07:00
Yuya Nishihara
ad4b940daa object_id: implement Display on ObjectId types
It's convenient if id can be inlined in error messages.
2024-10-16 09:12:16 +09:00
Yuya Nishihara
59c635bfd0 object_id: add ChangeId::reverse_hex() for convenience
Borrowed from #4470.
2024-10-16 09:12:16 +09:00
Ilya Grigoriev
7051effa8f templates: Fix bug where operation summary was printed w/o color 2024-10-13 20:06:03 -07:00
Arthur Grillo
4a7295eead cli_util: Remove unnecessary value_name attribute to no_pager flag
The value_name is not necessary for boolean flags.
2024-10-12 10:17:12 -03:00
Yuya Nishihara
c6568787f3 cli: warn if trunk() alias cannot be resolved, fall back to none()
This patch replaces all call sites with present(trunk()), and adds an explicit
check for unresolvable trunk(). If we add coalesce() expression, maybe it can
be rewritten to coalesce(present(trunk()), builtin_trunk()).

Fixes #4616
2024-10-11 09:37:47 +09:00
Benjamin Tan
eec3b8c228 cli: remove additional space in --quiet help message 2024-10-10 22:15:40 +08:00
Yuya Nishihara
33f0472fcf repo: add convenient methods to load operation object
It's hosted by RepoLoader for now. I'm not sure if we'll need a higher-level
abstraction like Store.
2024-10-08 13:21:03 +09:00
Samuel Tardieu
3f2ef2ee04 style: add semicolon at the end of expressions used as statements 2024-10-04 22:29:13 +02:00
Samuel Tardieu
46e2723464 style: inline variables into format strings 2024-10-04 22:29:13 +02:00
Samuel Tardieu
fb12e48fc9 cli: add short method summary to its documentation 2024-10-04 17:09:54 +02:00
Lukas Wirth
72c5bbb4e6 Be more specific when warning the user about missing identity configs
Check if only the email or the name are missing in the config and specifically name the missing one, instead of always defaulting to potentially both missing.
2024-10-02 18:10:46 +02:00
Yuya Nishihara
11286b3072 templater: pass diagnostics receiver around 2024-09-23 07:07:07 +09:00
Yuya Nishihara
8b1760ca5d revset: pass diagnostics receiver around
Stacking at AliasExpanded node looks wonky. If we migrate error handling to
Diagnostics API, it might make sense to remove AliasExpanded node and add
node.aliases: vec![(id, span), ..] field instead.

Some closure arguments are inlined in order to help type inference.
2024-09-23 07:07:07 +09:00
Yuya Nishihara
4b477fa59e fileset: pass diagnostics receiver around, add printing function
CLI tests will be added later.
2024-09-23 07:07:07 +09:00
Essien Ita Essien
76f40e5990 cli: reorder updating and reporting for consistency.
* See #4239 for details.
* For now, update working copy before reporting repo changes, so that
  potential errors in reporting changes don't leave the repo in a stale
  state.

Fixes: #4239
2024-09-22 15:02:21 +01:00
Yuya Nishihara
4533e81957 cli: pass &Ui to parse fileset/revset/template functions
Deprecation warnings will be printed there. auto_tracking_matcher(ui) could
be cached, but there aren't many callers right now, so it should be okay to
parse and emit warnings for each invocation. Other than that, the changes are
straightforward.
2024-09-20 23:01:12 +09:00
Yuya Nishihara
09cedd83a7 cli: add specialized function for pre-validated templates
I'll make parse_<language>_template() require &Ui, but these cached templates
should be re-constructible without access to a Ui.

Maybe we can split a parsed template object into RevsetExpression-like
evaluation tree and interpreter environment, but that'll be a big challenge.
2024-09-20 23:01:12 +09:00
Yuya Nishihara
7e04af1729 cli: cache immutable heads revset expression
This will help simplify warning handling in future patches. I'm going to add
deprecation warnings to revset, so Ui will be required in order to parse a user
revset expression.

revset_util::parse_immutable_expression() is inlined as it's a thin wrapper
around parse_immutable_heads_expression().
2024-09-20 06:56:03 +09:00
Yuya Nishihara
1d86e325c6 cli: move check_repo_rewritable() to WorkspaceCommandEnvironment
This ensures that the repo argument is used instead of self.repo(). store() is
now obtained from the repo argument (which shouldn't matter, though.)
2024-09-20 06:56:03 +09:00
Lukas Wirth
7ff12ec8b0 op-diff: Use op_summary template 2024-09-15 14:11:33 +02:00
Yuya Nishihara
9dc2cf802c cli: add helper to set up op template environment for the current repo state
We'll add a few more callers.
2024-09-15 20:40:46 +09:00
Yuya Nishihara
41ef9a76de cli: actually test if format_short_change_id() can be parsed
It's usually included in the commit_summary template, but not guaranteed.
2024-09-13 21:59:35 +09:00
Lukas Wirth
bccd8214df conflicts: Highlight change ids in rebase advice 2024-09-13 12:57:56 +02:00
Martin von Zweigbergk
1aa2aec141 bookmarks: update some leftover uses of the word "branch" 2024-09-11 19:19:31 -07:00