2532 Commits

Author SHA1 Message Date
Benjamin Tan
8d560748c7 cli: help: fix typos 2024-12-28 04:08:52 +08:00
Yuya Nishihara
e4a350fcaa config: extract jj-lib's default values to embedded TOML file
It's nice that "jj config list --include-defaults" can show these default
values.

I just copied the jj-cli directory structure, but it's unlikely we'll add more
config/*.toml files.
2024-12-25 10:44:37 +09:00
Bryce Berger
1d3c3b8ab2 describe: ignore everything below ignore-rest line
This implements "scissor" lines. For example:

    this text is included in the commit message
    JJ: ignore-rest
    this text is not, and is encouraged to be rendered as a diff
    JJ: ignore-rest
    this text is *still not* included in the commit message

When editing multiple commit messages, the `JJ: describe {}` lines
are parsed before the description is cleaned up. That means that the
following will correctly add descriptions to multiple commits:

    JJ: describe aaaaaaaaaaaa
    this text is included in the first commit message
    JJ: ignore-rest
    scissored...
    
    JJ: describe bbbbbbbbbbbb
    this text is included in the first commit message
    JJ: ignore-rest
    scissored...
2024-12-23 16:31:55 -07:00
Scott Taylor
542d09c6a9 merge_tools: add "$marker_length" variable
Git supports passing the conflict marker length to merge drivers using
"%L". It would be useful if we also had a way to pass the marker length
to merge tools, since it would allow Git merge drivers to be used with
`jj resolve` in more cases. Without this variable, any merge tool that
parses or generates conflict markers could fail on files which require
conflict markers longer than 7 characters.

https://git-scm.com/docs/gitattributes#_defining_a_custom_merge_driver
2024-12-23 08:42:10 -06:00
Yuya Nishihara
6374dd0cfe cli: abandon, describe: parse -rREV option properly
I often do "jj log -rREV" to preview the commits to abandon, and it's annoying
that I have to remove -r or insert space to "jj abandon ..".

The implementation is basically the same as b0c7d0a7e262.
2024-12-23 22:58:06 +09:00
Yuya Nishihara
d91e355674 cli: git clone: convert local Git remote path to slash-separated path
Since source.contains(':') can't be used for non-local path detection on
Windows, we now use gix::url for parsing. It might be stricter, but I assume it
would be more reliable.

Closes #4188
2024-12-23 09:40:52 +09:00
Yuya Nishihara
6f00c565b2 graph: inline ReverseGraphIterator to callers 2024-12-23 09:28:03 +09:00
Scott Taylor
7bf31c1557 merge_tools: preserve executable bit on resolve 2024-12-22 10:12:22 -06:00
Scott Taylor
afa2f2deca resolve: demo executable bit being lost
Currently, `jj resolve` always sets the file to be non-executable
whenever a conflict is fully resolved. This is confusing, because it can
cause the executable bit to be lost even if every side agrees that the
file is executable.
2024-12-22 10:12:22 -06:00
Yuya Nishihara
2aaf6cc3c9 cli: remove now redundant dunce::simplified() from run_ui_editor()
The tests still use dunce::simplified() so we won't reintroduce the problem.
2024-12-22 09:45:37 +09:00
Yuya Nishihara
78b5766993 repo, workspace: use dunce::canonicalize() to normalize paths
These paths may be printed, compared with user inputs, or passed to external
programs. It's probably better to avoid unusual "\\?\C:\" paths on Windows.

Fixes #5143
2024-12-22 09:45:37 +09:00
Scott Taylor
6baa43624c local_working_copy: store materialized conflict marker length
Storing the conflict marker length in the working copy makes conflict
parsing more consistent, and it allows us to parse valid conflict hunks
even if the user left some invalid conflict markers in the file while
resolving the conflicts.
2024-12-21 11:36:30 -06:00
Yuya Nishihara
75ce7f6b7f absorb: abandon source commit if it becomes discardable
I don't think we need --keep-emptied flag. IIRC, "jj squash" has that flag in
order not to squash commit description to the destination commits. Since
"jj absorb" never moves commit description, the source commit is preserved in
that situation.

Closes #5141
2024-12-21 09:19:54 +09:00
Yuya Nishihara
f7fd523dd8 rewrite: remove unneeded Result from CommitRewriter::reparent()
reparent() just configures new CommitBuilder instance, which should never fail.
2024-12-21 09:19:54 +09:00
Yuya Nishihara
d0f0e8dcff settings: propagate error from git_settings() and signing_backend() 2024-12-21 09:19:44 +09:00
Yuya Nishihara
52511f491e settings: inline CLI options to callers, propagate type error
This patch moves max_new_file_size() and conflict_marker_style() to CLI, but
there isn't a clear boundary whether the configuration should be managed by
UserSettings or not. I decided to move them to CLI just because we can eliminate
.optional() handling. The default parameters are defined in config/misc.toml.
2024-12-21 09:19:44 +09:00
Yuya Nishihara
3381dd2a2c cli: extract helper function that constructs SnapshotOptions
It's a bit weird that we have to construct a start-tracking matcher by caller,
but it has to be parameterized anyway.
2024-12-21 09:19:44 +09:00
Yuya Nishihara
1b4e210524 help: move "git push --remote" explanation to main paragraph, some clarification
We might add --all-remotes at some point, but "jj git push" doesn't support
bulk push right now.

https://github.com/jj-vcs/jj/discussions/4901#discussioncomment-11607150
2024-12-21 09:19:33 +09:00
Yuya Nishihara
ef49643128 tests: use toml_edit::Value in more places 2024-12-20 19:28:01 +09:00
Yuya Nishihara
d7e0ab6119 tests: use toml_edit to escape editor path, set ui.editor instead of $EDITOR
Most callers don't need the $EDITOR variable.
2024-12-20 19:28:01 +09:00
Yuya Nishihara
36b7f007eb tests: split test_describe() that doesn't depend on fake-editor
Makes it clear that test_describe_editor_env() doesn't need edit_script.
2024-12-20 19:28:01 +09:00
Yuya Nishihara
124970c81b tests: leverage set_up_fake_diff_editor() in test_diffedit_3pane() 2024-12-20 19:28:01 +09:00
Yuya Nishihara
7ab5b6852b tests: accept convertible type by set_config_path(), add_config(), add_env_var()
It's convenient. We occasionally pass format!()-ed value to these functions.
2024-12-20 19:28:01 +09:00
George Tsiamasiotis
79421c6685 cli: fix typo in comment 2024-12-19 11:35:44 -08:00
Yuya Nishihara
f5d450d7c3 cli: resolve conditional config scopes
This is an alternative way to achieve includeIf of Git without adding "include"
directive. Conditional include (or include in general) is a bit trickier to
implement than loading all files and filtering the contents.

Closes #616
2024-12-19 11:09:02 +09:00
Yuya Nishihara
1a0d3ae3d7 cli: keep separate copy of "raw" StackedConfig loaded from files
The next patch will introduce the resolution stage of conditional tables.

Since it wasn't easy to detect misuse of "raw" StackedConfig, I added a thin
newtype.
2024-12-19 11:09:02 +09:00
Yuya Nishihara
38d0ca7234 cli: just parse config args in helper function, apply them by caller
I'm going to add config post-processing stage in order to enable config
variables conditionally, and handle/parse_early_args() doesn't have enough
information to evaluate the condition.

The deprecation warning could be emitted by parse_early_args(), but it's
probably better to print it after --color option is applied.
2024-12-19 11:09:02 +09:00
Yuya Nishihara
eecb8d0746 cli: normalize repository path specified by -R
This will simplify path comparison in config resolver. <cwd>/.. shouldn't match
path prefix <cwd>. Maybe we should do path canonicalization globally (or never
do canonicalization), but I'm not sure where that should be made.
2024-12-19 11:09:02 +09:00
Stephen Jennings
3316180dc1 config: Add commit_timestamp(commit) template alias
Adds an extension point for changing which date is displayed in log
formats. The function should return a timestamp, not a formatted string.
2024-12-18 17:55:03 -08:00
Martin von Zweigbergk
822f01648d cli: refer to revset argument using REVSET(S) in synopsis
This should help clarify that the arguments are not just simple change
ids or commit ids.
2024-12-18 10:13:44 -08:00
Martin von Zweigbergk
a414441dd6 cli: refer to fileset argument using FILESETS in synopsis
This should help clarify that the arguments are not just simple paths
(assuming `ui.allow-filesets` is not disabled).
2024-12-18 10:13:44 -08:00
Tim Janik
779272c105 cli/src/diff_util.rs: fix typo in diff --name-only
cli/tests/cli-reference@.md.snap: update snapshots

Signed-off-by: Tim Janik <timj@gnu.org>
2024-12-18 14:04:40 +01:00
Yuya Nishihara
6bbaf79ca5 settings: parse TOML date-time value as well as string timestamp
We can usually omit quotes in --config=NAME=VALUE, but an RFC3339 string is a
valid TOML date-time expression. It's weird that quoting is required to specify
a date-time value.
2024-12-18 09:51:56 +09:00
Yuya Nishihara
4f08c62fe5 settings: propagate error from UserSettings::from_config()
All variables parsed here are debug options, but it would be annoying if
timestamp options were silently ignored because of a typo.
2024-12-18 09:51:56 +09:00
Martin von Zweigbergk
b836e0ae95 docs/cli: update URLs to from martinvonz user to jj-vcs org
We just migrated to the jj-vcs GitHub org, so we should point to the
new GitHub URLs.
2024-12-17 12:44:44 -08:00
dploch
396833f803 absorb: move core functionality from cli to lib 2024-12-17 14:42:30 -05:00
Yuya Nishihara
f87c6ed337 cli: deprecate --config-toml
Typical usage should now be covered by --config=NAME=VALUE.

Closes #3867
2024-12-17 20:12:12 +09:00
Yuya Nishihara
abf48576ea cli: replace --config-toml=TOML with --config=NAME=VALUE 2024-12-17 20:12:12 +09:00
Yuya Nishihara
60078e9887 cli: add simpler --config=NAME=VALUE argument
This supersedes #3867. I'll probably replace all uses of --config-toml and
mark --config-toml as deprecated.
2024-12-17 10:33:29 +09:00
Yuya Nishihara
7a1e27daed completion: pass --config-file down to jj command
Spotted while adding --config NAME=VALUE.
2024-12-17 10:33:29 +09:00
Yuya Nishihara
17ad708e44 cli: externalize ConfigArg value from enum, group arguments of the same type
This will simplify handling of multiple ConfigArg items of the same type.
Consecutive --config NAME=VALUE arguments will be inserted to the same
ConfigLayer.
2024-12-17 10:33:29 +09:00
Yuya Nishihara
3f115cbea5 cli: parse "jj config set" value a bit stricter, report syntax error
The same parsing function will be used for --config NAME=VALUE.

I don't think we'll add schema-based type inference anytime soon, so I moved
the value parsing to clap layer.
2024-12-17 10:33:29 +09:00
Milo Moisson
f3a9b6d84b cli_util: use JJ_LOG to specify log configuration
Using the default `RUST_LOG` env var, conflicts when
working on rust projects.
2024-12-17 01:51:35 +01:00
Scott Taylor
9591523db4 gitignore: add more detail to errors on invalid pattern 2024-12-16 18:49:48 -06:00
Scott Taylor
7f1d902f57 snapshot: demo unreadable error message on invalid ignore
A user on Discord ran into this error message, and they were confused
about why they were getting it. The next commit will improve the error
messages.
2024-12-16 18:49:48 -06:00
Martin von Zweigbergk
8907e692d4 help: add more keyword topics (for jj help -k)
We have the keyword-help feature now so let's use it a bit more. I'm
not sure how we should advertise it better, but that's a different
topic anyway.
2024-12-15 23:10:31 -08:00
Matt Kulukundis
c82483b088 cli: make split more explicit that it uses filesets 2024-12-15 18:44:19 -05:00
Benjamin Tan
dc16830151 templater: add Email template type, deprecate Signature.username()
The `Signature.email()` method is also updated to return the new Email
type. The `Signature.username()` method is deprecated for
`Signature.email().local()`.
2024-12-15 16:03:34 +08:00
Yuya Nishihara
e50673d5ac cli: make "jj config edit" always open file, not directory
I don't think the new behavior is strictly better, but it's more consistent
with the other "jj config" commands so we can remove the special case for
"jj config edit".
2024-12-15 16:36:29 +09:00
Yuya Nishihara
ac52e43435 cli: let "config set"/"unset" continue if file to edit can be disambiguated
If the user config path was an empty directory, these commands would fail with
EISDIR instead of "can't set config in path (dirs not supported)". I think this
can be changed later to create new "$dir/config.toml" file. Maybe we can also
change the default path to ~/.config/jj directory, and load all *.toml files
from there?
2024-12-15 16:36:29 +09:00