mirror of
https://github.com/rust-lang/cargo.git
synced 2025-10-01 11:30:39 +00:00
reproduce failure when packaging a path-dependency inside a symlinked git repository (#13773)
This commit is contained in:
parent
39b8f1702e
commit
07d2bd7517
@ -38,7 +38,7 @@ use some of the helper functions in this file to interact with the repository.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use crate::{path2url, project, Project, ProjectBuilder};
|
use crate::{path2url, project, Project, ProjectBuilder, SymlinkBuilder};
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::Once;
|
use std::sync::Once;
|
||||||
@ -76,6 +76,13 @@ impl RepoBuilder {
|
|||||||
me
|
me
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a symlink to a directory
|
||||||
|
pub fn nocommit_symlink_dir<T: AsRef<Path>>(self, dst: T, src: T) -> Self {
|
||||||
|
let workdir = self.repo.workdir().unwrap();
|
||||||
|
SymlinkBuilder::new_dir(workdir.join(dst), workdir.join(src)).mk();
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Add a file that will be left in the working directory, but not added
|
/// Add a file that will be left in the working directory, but not added
|
||||||
/// to the repository.
|
/// to the repository.
|
||||||
pub fn nocommit_file(self, path: &str, contents: &str) -> RepoBuilder {
|
pub fn nocommit_file(self, path: &str, contents: &str) -> RepoBuilder {
|
||||||
|
@ -6,14 +6,14 @@ use cargo::{
|
|||||||
ops::CompileOptions,
|
ops::CompileOptions,
|
||||||
GlobalContext,
|
GlobalContext,
|
||||||
};
|
};
|
||||||
use cargo_test_support::compare;
|
|
||||||
use cargo_test_support::paths::{root, CargoPathExt};
|
use cargo_test_support::paths::{root, CargoPathExt};
|
||||||
use cargo_test_support::registry::Package;
|
use cargo_test_support::registry::Package;
|
||||||
use cargo_test_support::tools;
|
|
||||||
use cargo_test_support::{
|
use cargo_test_support::{
|
||||||
basic_bin_manifest, basic_lib_manifest, basic_manifest, cargo_exe, git, is_nightly, main_file,
|
basic_bin_manifest, basic_lib_manifest, basic_manifest, cargo_exe, git, is_nightly, main_file,
|
||||||
paths, process, project, rustc_host, sleep_ms, symlink_supported, t, Execs, ProjectBuilder,
|
paths, process, project, rustc_host, sleep_ms, symlink_supported, t, Execs, ProjectBuilder,
|
||||||
};
|
};
|
||||||
|
use cargo_test_support::{cargo_process, compare};
|
||||||
|
use cargo_test_support::{git_process, tools};
|
||||||
use cargo_util::paths::dylib_path_envvar;
|
use cargo_util::paths::dylib_path_envvar;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
@ -33,6 +33,58 @@ fn cargo_compile_simple() {
|
|||||||
p.process(&p.bin("foo")).with_stdout("i am foo\n").run();
|
p.process(&p.bin("foo")).with_stdout("i am foo\n").run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cargo_test]
|
||||||
|
fn build_with_symlink_to_path_dependency_with_build_script_in_git() {
|
||||||
|
if !symlink_supported() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let root = paths::root();
|
||||||
|
git::repo(&root)
|
||||||
|
.nocommit_file(
|
||||||
|
"Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[package]
|
||||||
|
name = "foo"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
# the path leads through a symlink, 'symlink-to-original' is a worktree root,
|
||||||
|
# and symlink-to-dir/ is a symlink to a sub-directory to be stepped through.
|
||||||
|
lib = { version = "0.1.0", path = "symlink-to-original/symlink-to-dir/lib" }
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.nocommit_file("src/main.rs", "fn main() { }")
|
||||||
|
.nocommit_file("original/dir/lib/build.rs", "fn main() {}")
|
||||||
|
.nocommit_file(
|
||||||
|
"original/dir/lib/Cargo.toml",
|
||||||
|
r#"
|
||||||
|
[package]
|
||||||
|
name = "lib"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.nocommit_file("original/dir/lib/src/lib.rs", "")
|
||||||
|
.nocommit_symlink_dir("original", "symlink-to-original")
|
||||||
|
.nocommit_symlink_dir("original/dir", "original/symlink-to-dir")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// It is necessary to have a sub-repository and to add files so there is an index.
|
||||||
|
git_process("init")
|
||||||
|
.cwd(root.join("original"))
|
||||||
|
.build_command()
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
git_process("add .")
|
||||||
|
.cwd(root.join("original"))
|
||||||
|
.build_command()
|
||||||
|
.status()
|
||||||
|
.unwrap();
|
||||||
|
cargo_process("build").run()
|
||||||
|
}
|
||||||
|
|
||||||
#[cargo_test]
|
#[cargo_test]
|
||||||
fn cargo_fail_with_no_stderr() {
|
fn cargo_fail_with_no_stderr() {
|
||||||
let p = project()
|
let p = project()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user