168 Commits

Author SHA1 Message Date
Antoine Cezar
8f09fcc434 commands: move show code to show.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
6ae2e4c54f commands: move run code to run.rs 2023-11-03 04:45:55 +01:00
Antoine Cezar
e2336728da commands: move restore code to restore.rs 2023-11-03 04:45:55 +01:00
Martin von Zweigbergk
3a378dc234 cli: add a function for restoring part of a tree from another tree
We had similar code in two places for restoring paths from one tree to
another. Let's reuse it instead.

I put the new function in the `rewrite` module. I'm not sure if that's
right place. Maybe it belongs in `tree`?
2023-11-02 06:07:45 -07:00
Antoine Cezar
1d6b883406 commands: move obslog code to obslog.rs 2023-10-30 18:35:08 +01:00
Antoine Cezar
b24a85f879 commands: move prev code to prev.rs 2023-10-30 18:35:08 +01:00
Antoine Cezar
d1135917b0 commands: move next code to next.rs 2023-10-30 18:35:08 +01:00
Martin von Zweigbergk
23a0baba14 cli: make jj workspace add preserve all parents of current workspace 2023-10-29 21:53:29 -07:00
Ilya Grigoriev
1d918dff08 commands: move rebase code to rebase.rs 2023-10-29 18:19:06 -07:00
Ilya Grigoriev
887e5665d5 commands: move resolve code to resolve.rs
The print_conflicted_paths function could belong either
to `resolve.rs` or `status.rs`; I put it into the former for now.

Cc #2465, #2457
2023-10-29 18:19:06 -07:00
Antoine Cezar
19a658e757 commands: move merge code to merge.rs 2023-10-29 23:28:51 +01:00
Antoine Cezar
92739ebf11 commands: move move code to move.rs 2023-10-29 23:28:51 +01:00
Antoine Cezar
6af13ea89b commands: move new code to new.rs 2023-10-29 23:28:51 +01:00
Antoine Cezar
e43b544a06 commands: move log code to log.rs 2023-10-29 23:28:51 +01:00
Antoine Cezar
e9d7a22fc0 commands: move interdiff code to interdiff.rs 2023-10-29 23:28:51 +01:00
Antoine Cezar
60433583b6 commands: move init code to init.rs 2023-10-29 23:28:51 +01:00
Antoine Cezar
42795898de commands: move files code to files.rs 2023-10-28 19:02:54 +02:00
Antoine Cezar
4257341dbe commands: move edit code to edit.rs 2023-10-28 18:44:35 +02:00
Antoine Cezar
061dc81c22 commands: move duplicate code to duplicate.rs 2023-10-28 17:45:19 +02:00
Antoine Cezar
e4a1af1dda commands: move diffedit code to diffedit.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
b5e4e67090 commands: move diff code to diff.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
bc3443291e commands: move describe code to describe.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
8624d39a6b commands: move config code to config.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
4d63e0bfa7 commands: move commit code to commit.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
6badf159fa commands: move chmod code to chmod.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
3a43b22f96 commands: move checkout code to checkout.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
e19ac4e385 commands: move cat code to cat.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
b1ce8d41c1 commands: move backout code to backout.rs 2023-10-28 15:59:08 +02:00
Antoine Cezar
af2d6c67f1 commands: move abandon code to abandon.rs 2023-10-28 15:59:08 +02:00
Ilya Grigoriev
6a128f56ed cli: rebase descendants earlier for jj diffedit and jj restore
Makes sure that, at the point the commit summary for the new commit is written,
the original commit that is being rewritten is already abandoned. Otherwise,
once we show divergent change ids (in a subsequent commit) in the short commit
template, the commits would be shown as divergent.

This also has an effect on whether branches are displayed next to the commit;
the changes in test_resotre_command happen because, now, the branch is properly
propagated to the restored commit before its summary is displayed.
2023-10-26 17:58:13 -07:00
Martin von Zweigbergk
a1ef9dc845 merged_tree: propagate backend errors in diff iterator
I want to fix error propagation before I start using async in this
code. This makes the diff iterator propagate errors from reading tree
objects.

Errors include the path and don't stop the iteration. The idea is that
we should be able to show the user an error inline in diff output if
we failed to read a tree. That's going to be especially useful for
backends that can return `BackendError::AccessDenied`. That error
variant doesn't yet exist, but I plan to add it, and use it in
Google's internal backend.
2023-10-26 06:20:56 -07:00
Martin von Zweigbergk
309f1200d6 merge: introduce a type alias for Merge<Option<TreeValue>>
Reasons to introduce this alias:

* Reduces complexity of a type, to silence Clippy warnings in the
  future if we use this type as a type parameter

* The type is used quite frequently, so it makes sense to have a name
  for it

* It's easier to visually scan for the end of the type when you don't
  have to match opening and closing angle brackets
2023-10-26 06:20:56 -07:00
Martin von Zweigbergk
8764ad9826 conflicts: make materialization async
We need to let async-ness propagate up from the backend because
`block_on()` doesn't like to be called recursively. The conflict
materialization code is a good place to make async because it doesn't
depends on anything that isn't already async-ready.
2023-10-20 07:38:34 -07:00
Martin von Zweigbergk
872265a220 git: add .jj/.gitignore when creating colocated repo
This replaces our existing mechanism of adding `/.jj/` to
`.git/info/exclude` by adding `*` to `.jj/.gitignore`, as suggested by
@ppwwyyxx. That simplifies the code quite a bit, and it avoids the
problem with `.git/info/exclude` not existing (it apparently doesn't
exist when the user uses
https://git-scm.com/docs/git-init#_template_directory).

Closes #2385.
2023-10-18 13:19:22 -07:00
Martin von Zweigbergk
c3b45b6fd1 workspace: make working-copy type customizable
This add support for custom `jj` binaries to use custom working-copy
backends. It works in the same way as with the other backends, i.e. we
write a `.jj/working_copy/type` file when the working copy is
initialized, and then we let that file control which implementation to
use (see previous commit).

I included an example of a (useless) working-copy implementation. I
hope we can figure out a way to test the examples some day.
2023-10-16 22:33:44 -07:00
Martin von Zweigbergk
e1f00d9426 working copy: pass commit instead of tree into check_out()
Our internal working copy implementations at Google will need the
commit so they can walk history backwards until they get to a "public"
commit. They'll then use that to tell build tools and virtual file
systems to present that as a base.

I'm not sure if we'll need to update `reset()` too. It's currently
only used by `jj untrack`, which doesn't change the commit's parent,
so it wouldn't affect any history walks.
2023-10-16 22:33:44 -07:00
Yuya Nishihara
9cafff87e1 cli: add API and branch subcommand to track/untrack remote branches
This patch adds MutableRepo::track_remote_branch() as we'll probably need to
track the default branch on "jj git clone". untrack_remote_branch() is also
added for consistency.
2023-10-16 23:21:05 +09:00
Martin von Zweigbergk
0582893144 working copy: return Box<dyn LockedWorkingCopy> from start_mutation() 2023-10-15 16:13:19 -07:00
Martin von Zweigbergk
580586d008 working copy: return Box<dyn WorkingCopy> from finish() 2023-10-15 16:13:19 -07:00
Martin von Zweigbergk
63654d064b working copy: add sparse pattern functions to backend trait 2023-10-15 15:59:49 -07:00
Martin von Zweigbergk
781859cb51 working copy: add snapshot() function to the backend trait
This includes documenting the new function and the other types moved
to the `working_copy` module.
2023-10-15 15:59:49 -07:00
Martin von Zweigbergk
3aa57b1a04 working copy: start defining a trait for a locked working copy
As with the `WorkingCopy` trait, this just contains some trivial
methods for now.
2023-10-15 15:59:49 -07:00
Martin von Zweigbergk
c8184845d7 workspace: replace working_copy_mut() by wrapper type
I'm about to make `LockedLocalWorkingCopy` not borrow from
`LocalWorkingCopy`. That will make it easier to forget to update any
`LocalWorkingCopy` variables when the modifications have been
committed. This patch introduces a wrapper around
`LockedLocalWorkingCopy` to help prevent that.

Thanks to Yuya for the suggestion.
2023-10-15 15:59:49 -07:00
Yuya Nishihara
ab1a6e2f71 view: make remote branches iterator yield RemoteRef instead of RefTarget
git::import_refs() will need to read RemoteRef's tracking state.
2023-10-16 05:12:19 +09:00
Yuya Nishihara
8bdef924c8 view: rename remote_branches() to all_remote_branches()
I'm going to add a method that iterates branches of certain remote, and I
can't find a better name for it than remote_branches(remote_name).
2023-10-16 05:12:19 +09:00
Yuya Nishihara
9186d0fd38 workspace: convert external git repo path to store-relative by constructor
We could fix do_git_clone() instead, but it seemed a bit weird that the
git_repo_path is relative to the store path which is unknown to callers.

Fixes #2374
2023-10-14 22:20:09 +09:00
Austin Seipp
220292ad84 workspace: workspace forget multiple names at once
Summary: This allows `workspace forget` to forget multiple workspaces in a
single action; it now behaves more consistently with other verbs like `abandon`
which can take multiple revisions at one time.

There's some hoop-jumping involved to ensure the oplog transaction description
looks nice, but as they say: small conveniences cost a lot.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
Change-Id: Id91da269f87b145010c870b7dc043748
2023-10-14 07:38:00 -05:00
Austin Seipp
37f11c7d4e workspace: add '--revision' argument to 'workspace add'
Summary: Workspaces are most useful to test different versions (commits) of
the tree within the same repository, but in many cases you want to check out a
specific commit within a workspace.

Make that trivial with a `--revision` option which will be used as the basis
for the new workspace. If no `-r` option is given, then the previous behavior
applies: the workspace is created with a working copy commit created on top of
the current working copy commit's parent.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
Change-Id: I23549efe29bc23fb9f75437b6023c237
2023-10-11 22:02:24 -05:00
Yuya Nishihara
7a3e72415c cli: send status messages to stderr, specify stdout/stderr explicitly
Many of &mut UI can be changed to immutable borrows, but I'm not gonna
update them in this patch.
2023-10-11 19:24:01 +09:00
Martin von Zweigbergk
4d2402831a cli: describe what workspaces are in jj workspace help 2023-10-10 16:08:20 -05:00