mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00

This change ensures cargo will output file paths in the expected format (C:\foo\... on Windows, /foo/... elsewhere). Previously it would output file:// URLs instead. To support this change, additional changes were made to the test suite string processing such that [ROOT] is now replaced with the appropriate file path root for the platform. The CWD template was also updated to use [CWD] like other replacement templates and to do the replacement on the expected value rather than the actual value to avoid replacing things we don't expect with CWD.
117 lines
3.0 KiB
Rust
117 lines
3.0 KiB
Rust
use std::fs::File;
|
|
use std::io::prelude::*;
|
|
use std::path::PathBuf;
|
|
|
|
use flate2::read::GzDecoder;
|
|
use support::{cross_compile, project, publish};
|
|
use tar::Archive;
|
|
|
|
#[test]
|
|
fn simple_cross_package() {
|
|
if cross_compile::disabled() {
|
|
return;
|
|
}
|
|
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.0.0"
|
|
authors = []
|
|
license = "MIT"
|
|
description = "foo"
|
|
repository = "bar"
|
|
"#,
|
|
).file(
|
|
"src/main.rs",
|
|
&format!(
|
|
r#"
|
|
use std::env;
|
|
fn main() {{
|
|
assert_eq!(env::consts::ARCH, "{}");
|
|
}}
|
|
"#,
|
|
cross_compile::alternate_arch()
|
|
),
|
|
).build();
|
|
|
|
let target = cross_compile::alternate();
|
|
|
|
p.cargo("package --target")
|
|
.arg(&target)
|
|
.with_stderr(
|
|
" Packaging foo v0.0.0 ([CWD])
|
|
Verifying foo v0.0.0 ([CWD])
|
|
Compiling foo v0.0.0 ([CWD]/target/package/foo-0.0.0)
|
|
Finished dev [unoptimized + debuginfo] target(s) in [..]
|
|
",
|
|
).run();
|
|
|
|
// Check that the tarball contains the files
|
|
let f = File::open(&p.root().join("target/package/foo-0.0.0.crate")).unwrap();
|
|
let mut rdr = GzDecoder::new(f);
|
|
let mut contents = Vec::new();
|
|
rdr.read_to_end(&mut contents).unwrap();
|
|
let mut ar = Archive::new(&contents[..]);
|
|
let entries = ar.entries().unwrap();
|
|
let entry_paths = entries
|
|
.map(|entry| entry.unwrap().path().unwrap().into_owned())
|
|
.collect::<Vec<PathBuf>>();
|
|
assert!(entry_paths.contains(&PathBuf::from("foo-0.0.0/Cargo.toml")));
|
|
assert!(entry_paths.contains(&PathBuf::from("foo-0.0.0/Cargo.toml.orig")));
|
|
assert!(entry_paths.contains(&PathBuf::from("foo-0.0.0/src/main.rs")));
|
|
}
|
|
|
|
#[test]
|
|
fn publish_with_target() {
|
|
if cross_compile::disabled() {
|
|
return;
|
|
}
|
|
|
|
publish::setup();
|
|
|
|
let p = project()
|
|
.file(
|
|
"Cargo.toml",
|
|
r#"
|
|
[package]
|
|
name = "foo"
|
|
version = "0.0.0"
|
|
authors = []
|
|
license = "MIT"
|
|
description = "foo"
|
|
repository = "bar"
|
|
"#,
|
|
).file(
|
|
"src/main.rs",
|
|
&format!(
|
|
r#"
|
|
use std::env;
|
|
fn main() {{
|
|
assert_eq!(env::consts::ARCH, "{}");
|
|
}}
|
|
"#,
|
|
cross_compile::alternate_arch()
|
|
),
|
|
).build();
|
|
|
|
let target = cross_compile::alternate();
|
|
|
|
p.cargo("publish --index")
|
|
.arg(publish::registry().to_string())
|
|
.arg("--target")
|
|
.arg(&target)
|
|
.with_stderr(&format!(
|
|
" Updating registry `{registry}`
|
|
Packaging foo v0.0.0 ([CWD])
|
|
Verifying foo v0.0.0 ([CWD])
|
|
Compiling foo v0.0.0 ([CWD]/target/package/foo-0.0.0)
|
|
Finished dev [unoptimized + debuginfo] target(s) in [..]
|
|
Uploading foo v0.0.0 ([CWD])
|
|
",
|
|
registry = publish::registry()
|
|
)).run();
|
|
}
|