From 9653dddfcd0ba70452600d4f26660221c5b51644 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 19 Aug 2016 15:58:55 -0700 Subject: [PATCH] Some test changes for component install --- src/rustup-cli/rustup_mode.rs | 3 ++- src/rustup-mock/src/clitools.rs | 18 ++++++++++++++++++ src/rustup-mock/src/dist.rs | 18 +++++++++++++++--- tests/cli-rustup.rs | 12 ++++++++++++ 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/rustup-cli/rustup_mode.rs b/src/rustup-cli/rustup_mode.rs index 4402b588f4..1b0a253b60 100644 --- a/src/rustup-cli/rustup_mode.rs +++ b/src/rustup-cli/rustup_mode.rs @@ -607,12 +607,13 @@ fn component_list(cfg: &Cfg, m: &ArgMatches) -> Result<()> { fn component_add(cfg: &Cfg, m: &ArgMatches) -> Result<()> { let toolchain = try!(explicit_or_dir_toolchain(cfg, m)); + let component = m.value_of("component").expect(""); let target = m.value_of("target").map(TargetTriple::from_str).or_else(|| { toolchain.desc().as_ref().ok().map(|desc| desc.target.clone()) }); let new_component = Component { - pkg: "rust-std".to_string(), + pkg: component.to_string(), target: target, }; diff --git a/src/rustup-mock/src/clitools.rs b/src/rustup-mock/src/clitools.rs index 70d8ab08f3..c1790cd0b9 100644 --- a/src/rustup-mock/src/clitools.rs +++ b/src/rustup-mock/src/clitools.rs @@ -351,6 +351,7 @@ fn build_mock_channel(s: Scenario, channel: &str, date: &str, let rust = build_combined_installer(&[&std, &rustc, &cargo, &rust_docs]); let cross_std1 = build_mock_cross_std_installer(CROSS_ARCH1, date); let cross_std2 = build_mock_cross_std_installer(CROSS_ARCH2, date); + let rust_src = build_mock_rust_src_installer(); // Convert the mock installers to mock package definitions for the // mock dist server @@ -360,6 +361,7 @@ fn build_mock_channel(s: Scenario, channel: &str, date: &str, ("rustc", vec![(rustc, host_triple.clone())]), ("cargo", vec![(cargo, host_triple.clone())]), ("rust-docs", vec![(rust_docs, host_triple.clone())]), + ("rust-src", vec![(rust_src, "*".to_string())]), ("rust", vec![(rust, host_triple.clone())])]; if s == Scenario::MultiHost { @@ -370,6 +372,7 @@ fn build_mock_channel(s: Scenario, channel: &str, date: &str, let rust = build_combined_installer(&[&std, &rustc, &cargo, &rust_docs]); let cross_std1 = build_mock_cross_std_installer(CROSS_ARCH1, date); let cross_std2 = build_mock_cross_std_installer(CROSS_ARCH2, date); + let rust_src = build_mock_rust_src_installer(); let triple = MULTI_ARCH1.to_string(); let more = vec![("rust-std", vec![(std, triple.clone()), @@ -378,6 +381,7 @@ fn build_mock_channel(s: Scenario, channel: &str, date: &str, ("rustc", vec![(rustc, triple.clone())]), ("cargo", vec![(cargo, triple.clone())]), ("rust-docs", vec![(rust_docs, triple.clone())]), + ("rust-src", vec![(rust_src, "*".to_string())]), ("rust", vec![(rust, triple.clone())])]; all.extend(more); @@ -431,6 +435,10 @@ fn build_mock_channel(s: Scenario, channel: &str, date: &str, name: "rust-std".to_string(), target: CROSS_ARCH2.to_string(), }); + target_pkg.extensions.push(MockComponent { + name: "rust-src".to_string(), + target: "*".to_string(), + }); } } @@ -528,6 +536,16 @@ fn build_mock_rust_doc_installer() -> MockInstallerBuilder { } } +fn build_mock_rust_src_installer() -> MockInstallerBuilder { + MockInstallerBuilder { + components: vec![ + ("rust-src".to_string(), + vec![MockCommand::File("lib/rustlib/src/rust-src/foo.rs".to_string())], + vec![("lib/rustlib/src/rust-src/foo.rs".to_string(), "".into())]) + ] + } +} + fn build_combined_installer(components: &[&MockInstallerBuilder]) -> MockInstallerBuilder { MockInstallerBuilder { components: components.iter().flat_map(|m| m.components.clone()).collect() diff --git a/src/rustup-mock/src/dist.rs b/src/rustup-mock/src/dist.rs index 1c8319f095..1c07f73c20 100644 --- a/src/rustup-mock/src/dist.rs +++ b/src/rustup-mock/src/dist.rs @@ -152,7 +152,11 @@ impl MockDistServer { let tmpdir = TempDir::new("multirust").unwrap(); let workdir = tmpdir.path().join("work"); - let ref installer_name = format!("{}-{}-{}", package.name, channel.name, target_package.target); + let ref installer_name = if target_package.target != "*" { + format!("{}-{}-{}", package.name, channel.name, target_package.target) + } else { + format!("{}-{}", package.name, channel.name) + }; let ref installer_dir = workdir.join(installer_name); let ref installer_tarball = archive_dir.join(format!("{}.tar.gz", installer_name)); let ref installer_hash = archive_dir.join(format!("{}.tar.gz.sha256", installer_name)); @@ -182,7 +186,11 @@ impl MockDistServer { let mut buf = String::new(); let package = channel.packages.iter().find(|p| p.name == "rust").unwrap(); for target in &package.targets { - let package_file_name = format!("{}-{}-{}.tar.gz", package.name, channel.name, target.target); + let package_file_name = if target.target != "*" { + format!("{}-{}-{}.tar.gz", package.name, channel.name, target.target) + } else { + format!("{}-{}.tar.gz", package.name, channel.name) + }; buf = buf + &package_file_name + "\n"; } @@ -220,7 +228,11 @@ impl MockDistServer { let mut toml_target = toml::Table::new(); toml_target.insert(String::from("available"), toml::Value::Boolean(target.available)); - let package_file_name = format!("{}-{}-{}.tar.gz", package.name, channel.name, target.target); + let package_file_name = if target.target != "*" { + format!("{}-{}-{}.tar.gz", package.name, channel.name, target.target) + } else { + format!("{}-{}.tar.gz", package.name, channel.name) + }; let path = self.path.join("dist").join(&channel.date).join(package_file_name); let url = format!("file://{}", path.to_string_lossy()); toml_target.insert(String::from("url"), toml::Value::String(url)); diff --git a/tests/cli-rustup.rs b/tests/cli-rustup.rs index 5b1df34d63..d15bfa8f0b 100644 --- a/tests/cli-rustup.rs +++ b/tests/cli-rustup.rs @@ -518,3 +518,15 @@ fn proxy_toolchain_shorthand() { expect_stdout_ok(config, &["rustc", "+nightly", "--version"], "hash-n-2"); }); } + +#[test] +fn src_component_smoke_test() { + setup(&|config| { + expect_ok(config, &["rustup", "default", "stable"]); + expect_ok(config, &["rustup", "component", "add", "rust-src"]); + let path = format!("toolchains/{}/lib/rustlib/src/rust-src/foo.rs", + this_host_triple()); + let path = config.rustupdir.join(path); + assert!(path.exists()); + }); +}