mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-19 19:08:08 +00:00
cli: make new workspace inherit sparse pattern from old workspace
This commit is contained in:
parent
6d7affc4da
commit
866e862ab0
4 changed files with 27 additions and 4 deletions
|
@ -48,6 +48,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
[#2971](https://github.com/martinvonz/jj/issues/2971)). This may become the
|
[#2971](https://github.com/martinvonz/jj/issues/2971)). This may become the
|
||||||
default depending on feedback.
|
default depending on feedback.
|
||||||
|
|
||||||
|
* When creating a new workspace, the sparse patterns are now copied over from
|
||||||
|
the current workspace.
|
||||||
|
|
||||||
### Fixed bugs
|
### Fixed bugs
|
||||||
|
|
||||||
* On Windows, symlinks in the repo are now materialized as regular files in the
|
* On Windows, symlinks in the repo are now materialized as regular files in the
|
||||||
|
|
|
@ -44,6 +44,8 @@ use crate::ui::Ui;
|
||||||
/// Each workspace has its own working-copy commit. When you have more than one
|
/// Each workspace has its own working-copy commit. When you have more than one
|
||||||
/// workspace attached to a repo, they are indicated by `@<workspace name>` in
|
/// workspace attached to a repo, they are indicated by `@<workspace name>` in
|
||||||
/// `jj log`.
|
/// `jj log`.
|
||||||
|
///
|
||||||
|
/// Each workspace also has own sparse patterns.
|
||||||
#[derive(Subcommand, Clone, Debug)]
|
#[derive(Subcommand, Clone, Debug)]
|
||||||
pub(crate) enum WorkspaceCommand {
|
pub(crate) enum WorkspaceCommand {
|
||||||
Add(WorkspaceAddArgs),
|
Add(WorkspaceAddArgs),
|
||||||
|
@ -54,6 +56,8 @@ pub(crate) enum WorkspaceCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add a workspace
|
/// Add a workspace
|
||||||
|
///
|
||||||
|
/// Sparse patterns will be copied over from the current workspace.
|
||||||
#[derive(clap::Args, Clone, Debug)]
|
#[derive(clap::Args, Clone, Debug)]
|
||||||
pub(crate) struct WorkspaceAddArgs {
|
pub(crate) struct WorkspaceAddArgs {
|
||||||
/// Where to create the new workspace
|
/// Where to create the new workspace
|
||||||
|
@ -167,7 +171,20 @@ fn cmd_workspace_add(
|
||||||
.display()
|
.display()
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
|
// Copy sparse patterns from workspace where the command was run
|
||||||
let mut new_workspace_command = WorkspaceCommandHelper::new(ui, command, new_workspace, repo)?;
|
let mut new_workspace_command = WorkspaceCommandHelper::new(ui, command, new_workspace, repo)?;
|
||||||
|
let (mut locked_ws, _wc_commit) = new_workspace_command.start_working_copy_mutation()?;
|
||||||
|
let sparse_patterns = old_workspace_command
|
||||||
|
.working_copy()
|
||||||
|
.sparse_patterns()?
|
||||||
|
.to_vec();
|
||||||
|
locked_ws
|
||||||
|
.locked_wc()
|
||||||
|
.set_sparse_patterns(sparse_patterns)
|
||||||
|
.map_err(|err| internal_error_with_message("Failed to set sparse patterns", err))?;
|
||||||
|
let operation_id = locked_ws.locked_wc().old_operation_id().clone();
|
||||||
|
locked_ws.finish(operation_id)?;
|
||||||
|
|
||||||
let mut tx = new_workspace_command.start_transaction();
|
let mut tx = new_workspace_command.start_transaction();
|
||||||
|
|
||||||
// If no parent revisions are specified, create a working-copy commit based
|
// If no parent revisions are specified, create a working-copy commit based
|
||||||
|
|
|
@ -1888,6 +1888,8 @@ Workspaces let you add additional working copies attached to the same repo. A co
|
||||||
|
|
||||||
Each workspace has its own working-copy commit. When you have more than one workspace attached to a repo, they are indicated by `@<workspace name>` in `jj log`.
|
Each workspace has its own working-copy commit. When you have more than one workspace attached to a repo, they are indicated by `@<workspace name>` in `jj log`.
|
||||||
|
|
||||||
|
Each workspace also has own sparse patterns.
|
||||||
|
|
||||||
**Usage:** `jj workspace <COMMAND>`
|
**Usage:** `jj workspace <COMMAND>`
|
||||||
|
|
||||||
###### **Subcommands:**
|
###### **Subcommands:**
|
||||||
|
@ -1904,6 +1906,8 @@ Each workspace has its own working-copy commit. When you have more than one work
|
||||||
|
|
||||||
Add a workspace
|
Add a workspace
|
||||||
|
|
||||||
|
Sparse patterns will be copied over from the current workspace.
|
||||||
|
|
||||||
**Usage:** `jj workspace add [OPTIONS] <DESTINATION>`
|
**Usage:** `jj workspace add [OPTIONS] <DESTINATION>`
|
||||||
|
|
||||||
###### **Arguments:**
|
###### **Arguments:**
|
||||||
|
|
|
@ -81,16 +81,15 @@ fn test_workspaces_sparse_patterns() {
|
||||||
test_env.jj_cmd_ok(&ws1_path, &["sparse", "set", "--clear", "--add=foo"]);
|
test_env.jj_cmd_ok(&ws1_path, &["sparse", "set", "--clear", "--add=foo"]);
|
||||||
test_env.jj_cmd_ok(&ws1_path, &["workspace", "add", "../ws2"]);
|
test_env.jj_cmd_ok(&ws1_path, &["workspace", "add", "../ws2"]);
|
||||||
let stdout = test_env.jj_cmd_success(&ws2_path, &["sparse", "list"]);
|
let stdout = test_env.jj_cmd_success(&ws2_path, &["sparse", "list"]);
|
||||||
// TODO: Should inherit the sparse patterns from ws1
|
|
||||||
insta::assert_snapshot!(stdout, @r###"
|
insta::assert_snapshot!(stdout, @r###"
|
||||||
.
|
foo
|
||||||
"###);
|
"###);
|
||||||
test_env.jj_cmd_ok(&ws2_path, &["sparse", "set", "--add=bar"]);
|
test_env.jj_cmd_ok(&ws2_path, &["sparse", "set", "--add=bar"]);
|
||||||
test_env.jj_cmd_ok(&ws2_path, &["workspace", "add", "../ws3"]);
|
test_env.jj_cmd_ok(&ws2_path, &["workspace", "add", "../ws3"]);
|
||||||
let stdout = test_env.jj_cmd_success(&ws3_path, &["sparse", "list"]);
|
let stdout = test_env.jj_cmd_success(&ws3_path, &["sparse", "list"]);
|
||||||
// TODO: Should inherit the sparse patterns from ws2
|
|
||||||
insta::assert_snapshot!(stdout, @r###"
|
insta::assert_snapshot!(stdout, @r###"
|
||||||
.
|
bar
|
||||||
|
foo
|
||||||
"###);
|
"###);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue