Skip to content

Commit

Permalink
Auto merge of #13567 - LuuuXXX:issue-7876, r=weihanglo
Browse files Browse the repository at this point in the history
test: Add tests for using worktrees and sparse checkouts

### What does this PR try to resolve?

Based on `@eminence's` [comment](#7876 (comment)), Add tests for using worktrees or spase checkouts.

### How should we test and review this PR?

Checkout and run tests:
```
cargo test --package cargo --test testsuite -- git::git_worktree_with_original_repo_renamed
```
```
cargo test --package cargo --test testsuite -- git::git_worktree_with_bare_original_repo
```
  • Loading branch information
bors committed Mar 11, 2024
2 parents d79fdf3 + 062d8ce commit fe5de07
Showing 1 changed file with 132 additions and 0 deletions.
132 changes: 132 additions & 0 deletions tests/testsuite/git.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3760,3 +3760,135 @@ fn different_user_relative_submodules() {

assert!(project.bin("foo").is_file());
}

#[cargo_test]
fn git_worktree_with_original_repo_renamed() {
let project = project().build();
let git_project = git::new("foo", |project| {
project
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.5.0"
edition = "2015"
authors = []
license = "MIR OR Apache-2.0"
description = "A test!"
homepage = "https://example.org"
documentation = ""
repository = "https://example.org"
readme = "./README.md"
"#,
)
.file("src/lib.rs", "")
.file("README.md", "")
});

let repo = git2::Repository::open(&git_project.root()).unwrap();
let repo_root = repo.workdir().unwrap().parent().unwrap();
let opts = git2::WorktreeAddOptions::new();
let _ = repo
.worktree("bar", &repo_root.join("bar"), Some(&opts))
.unwrap();

// Rename the original repository
let new = repo_root.join("foo2");
fs::rename(&git_project.root(), &new).unwrap();

project
.cargo("package --list")
.cwd(&new)
.with_stdout(
"\
.cargo_vcs_info.json
Cargo.toml
Cargo.toml.orig
README.md
src/lib.rs
",
)
.run();

project
.cargo("check")
.cwd(&new)
.with_stderr(
"\
[CHECKING] foo v0.5.0 ([CWD])
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}

#[cargo_test]
fn git_worktree_with_bare_original_repo() {
let project = project().build();
let git_project = git::new("foo", |project| {
project
.file(
"Cargo.toml",
r#"
[package]
name = "foo"
version = "0.5.0"
edition = "2015"
authors = []
license = "MIR OR Apache-2.0"
description = "A test!"
homepage = "https://example.org"
documentation = ""
repository = "https://example.org"
readme = "./README.md"
"#,
)
.file("src/lib.rs", "")
.file("README.md", "")
});

// Create a "bare" Git repository.
// Keep the `.git` folder and delete the others.
let repo = {
let mut repo_builder = git2::build::RepoBuilder::new();
repo_builder
.bare(true)
.clone_local(git2::build::CloneLocal::Local)
.clone(
path2url(git_project.root()).as_str(),
&paths::root().join("foo-bare"),
)
.unwrap()
};
assert!(repo.is_bare());
let opts = git2::WorktreeAddOptions::new();
let wt = repo
.worktree("bar", &paths::root().join("bar"), Some(&opts))
.unwrap();

project
.cargo("package --list")
.cwd(wt.path())
.with_stdout(
"\
.cargo_vcs_info.json
Cargo.toml
Cargo.toml.orig
README.md
src/lib.rs
",
)
.run();

project
.cargo("check")
.cwd(wt.path())
.with_stderr(
"\
[CHECKING] foo v0.5.0 ([CWD])
[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [..]
",
)
.run();
}

0 comments on commit fe5de07

Please sign in to comment.