ok/jj
1
0
Fork 0
forked from mirrors/jj
Commit graph

1345 commits

Author SHA1 Message Date
Austin Seipp
70f3e4aa53 git: add git.colocate to colocate repos by default
Closes #2507.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
2024-07-09 09:17:20 -05:00
Martin von Zweigbergk
fefe07b3c3 diff: consider uncommon words to match only if they have the same count
Patience diff starts by lining up unique elements (e.g. lines) to find
matching segments of the inputs. After that, it refines the
non-matching segments by repeating the process. Histogram expands on
that by not just considering unique elements but by continuing with
elements of count 2, then 3, etc.

Before this commit, when diffing "a b a b b" against "a b a b a b", we
would match the two "a"s in the first input against the first two "a"s
in the second input. After this patch, we ignore the "a"s because
their counts differ, so we try to align the "b"s instead.

I have had this commit lying around since I wrote the histogram diff
implementation in 1e657c5331. I vaguely remember thinking that the
way I had implemented it (without this commit) was a bit weird, but I
wasn't sure if this commit would be an improvement or not. The bug
report from @chooglen today of a case where we behave differently from
Git is enough to make me think that we make this change after all.

#761
2024-07-09 20:35:36 +09:00
Scott Taylor
a983abb594 cli_util: short-prefixes for commit summary in transaction
I've run into change ID prefixes being 4-5 characters instead of the
usual 1-2 characters in commands like `jj duplicate` and `jj split`
fairly often, and it seems like this should resolve that.
2024-07-08 08:23:39 -05:00
Scott Taylor
ddfce6d2c9 cli_util: extract new_id_prefix_context method 2024-07-08 08:23:39 -05:00
Vladimir Petrzhikovskii
802d2f5327 cli: recursively create clone destination path 2024-07-07 23:02:41 +02:00
Benjamin Tan
cd41bc3584 backout: accept multiple revisions to back out
Closes #3339.
2024-07-07 17:58:10 +08:00
Yuya Nishihara
5c649e734d cli: show commit summary at end of "branch set"
For the same reason as the previous commit.

Created and moved stats are printed separately because it's unusual to do both
within one "branch set" invocation.
2024-07-06 10:12:43 +09:00
Yuya Nishihara
a5095c1da6 cli: show commit summary at end of "branch create"
For the same reason as cdc0cc3601. This will help notice problems like wrong
target revision.

The warning for multiple branches is reorganized as a hint for "-r" option,
which I think is the main purpose of this warning. Unlike "squash", we don't
check if an argument can be parsed as a revset because branch name is usually
a valid symbol expression.
2024-07-06 10:12:43 +09:00
Yuya Nishihara
e02c576282 cli: print branch update stats within transaction
It's weird that export failure was emitted before the branch changes. Spotted
while adding "Created N branches" stats.
2024-07-06 10:12:43 +09:00
Benjamin Tan
d2eb4d9b56 backout: include backed out commit's subject in new commit 2024-07-05 17:11:37 +08:00
Benjamin Tan
82bab36c0e backout: inline rewrite::back_out_commit 2024-07-05 17:11:37 +08:00
Benjamin Tan
456356aacb backout: add initial tests 2024-07-05 17:11:37 +08:00
Yuya Nishihara
44a39017f0 diff: highlight word-level changes in git diffs
The output looks somewhat similar to color-words diffs. Unified diffs are
verbose, but are easier to follow if adjacent lines are added/removed + modified
for example.

Word-level diffing is forcibly enabled. We can also add a config knob (or
!color condition) to turn it off to save CPU time.

I originally considered disabling highlights in block insertion/deletion, but
that wasn't always great. This can be addressed separately as it also applies
to color-words diffs. #3958
2024-07-05 16:07:12 +09:00
Yuya Nishihara
9e8a739e4d diff: deduplicate write() calls in show_unified_diff_hunks()
I'm going to add word-level highlighting there.
2024-07-05 16:07:12 +09:00
Scott Taylor
54877e1f79 workspace: abandon discardable working copy on forget
Forgetting a workspace removes its working-copy commit, so it makes
sense for it to be abandoned if it is discardable just like editing a
new commit will cause the old commit to be abandoned if it is
discardable.
2024-07-04 19:37:56 -05:00
Scott Taylor
fa398ab405 cli: fix typo in jj workspace help 2024-07-04 19:37:56 -05:00
Yuya Nishihara
1cae93ce27 cli: rephrase hint for updating just one branch by "branch move"
Suggested by Ilya.
2024-07-05 07:58:18 +09:00
Yuya Nishihara
cdc0cc3601 cli: show commit summary at end of "branch move"
It's nice to see the result of "branch move", "create", etc., and this is more
important in "branch move" because the source branches can be specified in an
abstracted way. I originally considered printing a list of affected branches,
but it looked rather verbose. Since the destination revision is unique, we can
use commit_summary template instead.

This patch also removes a warning about multiple branches because the branch
names are included in the commit summary. I think the hint message is good
enough to signal possible mistake.
2024-07-05 07:58:18 +09:00
Benjamin Tan
0c0e001262 git init: add revset alias for trunk() when intializing with existing git repository 2024-07-04 23:04:19 +08:00
Benjamin Tan
d8899e1ae7 git clone: add revset alias for trunk() 2024-07-04 23:04:19 +08:00
Matt Stark
31ac0d7e1f feat(rebase): Rename --skip-empty to --skip-emptied.
This is based on @martinvonz's comment in #3830 about the inconsistency between squash --keep-emptied and rebase --skip-empty.
2024-07-04 12:13:02 +10:00
Yuya Nishihara
034859b52f cli: branch: print stats even if just one branch is updated
We usually print stats at the end of mutable operation, and I think these
messages are useful even if N = 1. I understand that "Deleted N" (N > 1) is
unusual and the original intent of these messages was to signal possible
mistakes. However, I don't think printing N=1 stats would nullify the original
purpose.

No emptiness check is needed for delete/forget, but names can be empty in
track/untrack because of noop changes.
2024-07-04 10:58:50 +09:00
mlcui
c256ad8a0a windows: avoid UNC paths in run_ui_editor
See #3986 for more details. This is a no-op for non-Windows.
2024-07-04 11:30:20 +10:00
Matt Kulukundis
2917dea0a1 copy-tracking: add a command line driver with a simple test 2024-07-03 20:26:30 -04:00
Matt Kulukundis
dab8a29683 copy-tracking: stub get_copy_records
- add the method and types for all backends
2024-07-03 20:26:30 -04:00
Matt Kulukundis
067d37aa3c copy-tracking: cargo add gix-format and gix diff-blob feature 2024-07-03 20:26:30 -04:00
Matt Kulukundis
aaa99e6dc7 diff: add a file-by-file variant for external diff tools 2024-07-03 20:09:17 -04:00
Yuya Nishihara
455daa4d67 cli: remove deprecated --allow-large-revsets flag at all
It's been deprecated since v0.9.0 (2023-09-06). This patch doesn't add
changelog entry because the use of --allow-large-revsets was hard error.
2024-07-03 23:06:26 +09:00
Matt Stark
ca4eb60426 feat(squash): Add --keep-emptied flag
Fixes #3815
2024-07-03 12:03:26 +10:00
Matt Stark
7682a038a1 chore: Make squash tests log empty commits. 2024-07-03 12:03:26 +10:00
Scott Taylor
e54ecefbd4 commit: add --reset-author option 2024-07-02 18:21:21 -05:00
Yuya Nishihara
f9a15ba542 diff: do not add excessive number of context lines to last unified-diff hunk
The last hunk could be truncated instead, but the .peekable() version is easier
to follow. If we truncated lines, we would have to adjust line ranges
accordingly.
2024-07-02 18:49:52 +09:00
Yuya Nishihara
ec709e7f8b diff: rely on emptiness of unified hunk lines whether to append "after" context
show_context_after was set once when DiffHunk::Different received, and was
never turned off. This means DiffHunk::Matching is not supposed to repeat.
Under this condition, we can assume that removed/added lines exist if lines
isn't empty.
2024-07-02 18:49:52 +09:00
Yuya Nishihara
318f594291 diff: simplify context line extraction by using DoubleEndedIterator 2024-07-02 18:49:52 +09:00
Yuya Nishihara
3d458c3e58 diff: extract helpers that push unified-diff hunk lines 2024-07-02 18:49:52 +09:00
Yuya Nishihara
a4f5462d07 tests: add test for leading/trailing diff context lines 2024-07-02 18:49:52 +09:00
mlcui
3bca159b1a fake-editor: replace expectpath with dump-path
This allows us to assert the expected path in the test itself, rather
than in the fake editor.
2024-07-02 11:15:44 +10:00
Jonathan Tan
1eef1a4f55 workspace add: add filename context to FS error
At work, a user encountered a panic upon attempting to create a dir at
the line in the diff below, but it turned out to be difficult to debug
because I didn't know what the path was. There already is a mechanism to
add path context in the lib crate; make it available in the cli crate as
well, and use the mechanism to add path context to "workspace add".
2024-07-01 16:05:29 -07:00
Yuya Nishihara
3792f4a019 templater: use .map_or() to silence clippy without sacrificing readability 2024-06-30 10:25:18 +09:00
Yuya Nishihara
0ca8502c5a diff: inline hunk processing in get_diff_stat()
This is simpler and more efficient. If we add word-diff to unified_diff_hunks(),
it will do more expensive work that isn't needed here.
2024-06-30 10:17:41 +09:00
Ilya Grigoriev
6d3d7c61f2 nightly clippy fixes
Includes a false-positive, https://github.com/rust-lang/rust-clippy/issues/13018.
2024-06-29 11:22:01 -07:00
Ilya Grigoriev
c563ea8b29 clippy: remove warning when not using watchman feature
I keep seeing the one in lib/ when running tests in VS Code, but I also
fixed the warnings in watchman.rs for good measure.
2024-06-29 11:22:01 -07:00
Scott Taylor
1eebbe57c0 commit_builder: reset author timestamp on discardable commits
It's common to create empty working-copy commits while using jj, and
currently the author timestamp for a commit is only set when it is first
created. If you create an empty commit, then don't work on a repo for a
few days, and then start working on a new feature without abandoning the
working-copy commit, the author timestamp will remain as the time the
commit was created rather than being updated to the time that work began
or finished.

This commit changes the behavior so that discardable commits (empty
commits with no description) by the current user have their author
timestamps reset when they are rewritten, meaning that the author
timestamp will become finalized whenever a commit is given a description
or becomes non-empty.
2024-06-29 08:35:53 -05: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
Martin von Zweigbergk
eba9ac0b1b cli: add a debug command for generic working copy info
We have two other kinds of working copies at Google and it's sometimes
useful to get the basic information about operation id and tree id for
them, for exampel for debugging stale workspaces. This patch adds a
command for that.

We could instead have made the old `jj debug working-copy` command
work for all kinds of working copies (like the new command) and only
have extra information for the standard local-disk implementation. I
don't feel strongly either way and could do it other other way instead
if people prefer that.
2024-06-28 21:31:44 +09:00
Martin von Zweigbergk
8f9f46f18f cli: rename jj debug working-copy to jj debug local-working-copy
I'd like to add a more generic `jj debug working-copy` command that
prints the information that's shared across implementations.
2024-06-28 21:31:44 +09:00
Yuya Nishihara
af986a58ed cli: branch: assume deleted tracking branch name is still allocated
While explaining branch tracking behavior, I find it's bad UX that a deleted
branch can be re-"create"d with tracking state preserved. It's rather a "set"
operation. Since deleted tracking branch is still listed, I think it's better
to assume that the local branch name is reserved.

https://github.com/martinvonz/jj/discussions/3871

Renaming to deleted tracking branch is still allowed (with warning) because the
"rename" command can't handle tracked remotes very well. If it were banned, bad
rename couldn't be reverted by using "jj branch rename". It would be confusing
if "rename a b" succeeded with warning, but the following "rename b a" failed.
2024-06-28 19:36:09 +09:00
Yuya Nishihara
06813d9462 cli: branch: slightly update warning message about rename with tracked remotes
We use "tracked remote branches" in the doc, and hints are usually capitalized.
2024-06-28 19:36:09 +09:00
Yuya Nishihara
ce2e016e57 cli: branch: extract helper that checks if tracked remote branch exists 2024-06-28 19:36:09 +09:00
Yuya Nishihara
76ff35eba4 cli: branch: inline view.remove_branch() in cmd_branch_forget()
This API no longer makes sense, and we'll probably add some flags to forget
only tracked remotes for example.
2024-06-28 10:29:06 +09:00