Skip to content

Commit 77cfcee

Browse files
committed
Add tests for symlinks to git submodules or directories.
1 parent 1f74bdf commit 77cfcee

File tree

2 files changed

+62
-2
lines changed

2 files changed

+62
-2
lines changed

tests/testsuite/package.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,37 @@ fn package_git_submodule() {
504504
.run();
505505
}
506506

507+
#[cargo_test]
508+
fn package_symlink_to_submodule() {
509+
let project = git::new("foo", |project| {
510+
project
511+
.file("src/lib.rs", "pub fn foo() {}")
512+
.symlink("submodule", "submodule-link")
513+
}).unwrap();
514+
515+
let library = git::new("submodule", |library| {
516+
library.no_manifest().file("Makefile", "all:")
517+
}).unwrap();
518+
519+
let repository = git2::Repository::open(&project.root()).unwrap();
520+
let url = path2url(library.root()).to_string();
521+
git::add_submodule(&repository, &url, Path::new("submodule"));
522+
git::commit(&repository);
523+
524+
let repository = git2::Repository::open(&project.root().join("submodule")).unwrap();
525+
repository
526+
.reset(
527+
&repository.revparse_single("HEAD").unwrap(),
528+
git2::ResetType::Hard,
529+
None
530+
).unwrap();
531+
532+
project
533+
.cargo("package --no-verify -v")
534+
.with_stderr_contains("[ARCHIVING] submodule/Makefile")
535+
.run();
536+
}
537+
507538
#[cargo_test]
508539
fn no_duplicates_from_modified_tracked_files() {
509540
let root = paths::root().join("all");
@@ -699,6 +730,18 @@ Caused by:
699730
.run();
700731
}
701732

733+
#[cargo_test]
734+
fn package_symlink_to_dir() {
735+
project()
736+
.file("src/main.rs", r#"fn main() { println!("hello"); }"#)
737+
.file("bla/Makefile", "all:")
738+
.symlink_dir("bla", "foo")
739+
.build()
740+
.cargo("package -v")
741+
.with_stderr_contains("[ARCHIVING] foo/Makefile")
742+
.run();
743+
}
744+
702745
#[cargo_test]
703746
fn do_not_package_if_repository_is_dirty() {
704747
let p = project().build();

tests/testsuite/support/mod.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,16 @@ impl FileBuilder {
178178
struct SymlinkBuilder {
179179
dst: PathBuf,
180180
src: PathBuf,
181+
src_is_dir: bool,
181182
}
182183

183184
impl SymlinkBuilder {
184185
pub fn new(dst: PathBuf, src: PathBuf) -> SymlinkBuilder {
185-
SymlinkBuilder { dst, src }
186+
SymlinkBuilder { dst, src, src_is_dir: false }
187+
}
188+
189+
pub fn new_dir(dst: PathBuf, src: PathBuf) -> SymlinkBuilder {
190+
SymlinkBuilder { dst, src, src_is_dir: true }
186191
}
187192

188193
#[cfg(unix)]
@@ -194,7 +199,11 @@ impl SymlinkBuilder {
194199
#[cfg(windows)]
195200
fn mk(&self) {
196201
self.dirname().mkdir_p();
197-
t!(os::windows::fs::symlink_file(&self.dst, &self.src));
202+
if self.src_is_dir {
203+
t!(os::window::fs::symlink_dir(&self.dst, &self.src));
204+
} else {
205+
t!(os::windows::fs::symlink_file(&self.dst, &self.src));
206+
}
198207
}
199208

200209
fn dirname(&self) -> &Path {
@@ -261,6 +270,14 @@ impl ProjectBuilder {
261270
self
262271
}
263272

273+
pub fn symlink_dir<T: AsRef<Path>>(mut self, dst: T, src: T) -> Self {
274+
self.symlinks.push(SymlinkBuilder::new_dir(
275+
self.root.root().join(dst),
276+
self.root.root().join(src),
277+
));
278+
self
279+
}
280+
264281
pub fn no_manifest(mut self) -> Self {
265282
self.no_manifest = true;
266283
self

0 commit comments

Comments
 (0)