about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-04-03 20:48:25 +0000
committerbors <bors@rust-lang.org>2021-04-03 20:48:25 +0000
commit0b417ab5cdfdedffd74fb22cf22d27033c851304 (patch)
treeb4d8130720a599c0c5b421c6369166d26955e32f /src
parent97717a561844eccbb6d6cc114adb94a8fa4e0172 (diff)
parent99a33b32b8a7c639d6d742ad5f31592d33098596 (diff)
downloadrust-0b417ab5cdfdedffd74fb22cf22d27033c851304.tar.gz
rust-0b417ab5cdfdedffd74fb22cf22d27033c851304.zip
Auto merge of #81507 - weiznich:add_diesel_to_cargo_test, r=Mark-Simulacrum
Adding diesel to the cargotest suite

As discussed in https://github.com/rust-lang/rust/issues/79560#issuecomment-767542364 this adds diesel to the compilers test suite. This is basically a reopened version of #79599, but now with the backing of the compiler team.

r? `@pnkfelix`
Diffstat (limited to 'src')
-rw-r--r--src/tools/cargotest/main.rs50
1 files changed, 48 insertions, 2 deletions
diff --git a/src/tools/cargotest/main.rs b/src/tools/cargotest/main.rs
index 0a6bac48ebb..fc608eaabcc 100644
--- a/src/tools/cargotest/main.rs
+++ b/src/tools/cargotest/main.rs
@@ -9,6 +9,8 @@ struct Test {
     sha: &'static str,
     lock: Option<&'static str>,
     packages: &'static [&'static str],
+    features: Option<&'static [&'static str]>,
+    manifest_path: Option<&'static str>,
 }
 
 const TEST_REPOS: &[Test] = &[
@@ -18,6 +20,8 @@ const TEST_REPOS: &[Test] = &[
         sha: "cf056ea5e8052c1feea6141e40ab0306715a2c33",
         lock: None,
         packages: &[],
+        features: None,
+        manifest_path: None,
     },
     Test {
         name: "ripgrep",
@@ -25,6 +29,8 @@ const TEST_REPOS: &[Test] = &[
         sha: "3de31f752729525d85a3d1575ac1978733b3f7e7",
         lock: None,
         packages: &[],
+        features: None,
+        manifest_path: None,
     },
     Test {
         name: "tokei",
@@ -32,6 +38,8 @@ const TEST_REPOS: &[Test] = &[
         sha: "fdf3f8cb279a7aeac0696c87e5d8b0cd946e4f9e",
         lock: None,
         packages: &[],
+        features: None,
+        manifest_path: None,
     },
     Test {
         name: "xsv",
@@ -39,6 +47,8 @@ const TEST_REPOS: &[Test] = &[
         sha: "3de6c04269a7d315f7e9864b9013451cd9580a08",
         lock: None,
         packages: &[],
+        features: None,
+        manifest_path: None,
     },
     Test {
         name: "servo",
@@ -48,6 +58,23 @@ const TEST_REPOS: &[Test] = &[
         // Only test Stylo a.k.a. Quantum CSS, the parts of Servo going into Firefox.
         // This takes much less time to build than all of Servo and supports stable Rust.
         packages: &["selectors"],
+        features: None,
+        manifest_path: None,
+    },
+    Test {
+        name: "diesel",
+        repo: "https://github.com/diesel-rs/diesel",
+        sha: "91493fe47175076f330ce5fc518f0196c0476f56",
+        lock: None,
+        packages: &[],
+        // Test the embeded sqlite variant of diesel
+        // This does not require any dependency to be present,
+        // sqlite will be compiled as part of the build process
+        features: Some(&["sqlite", "libsqlite3-sys/bundled"]),
+        // We are only interested in testing diesel itself
+        // not any other crate present in the diesel workspace
+        // (This is required to set the feature flags above)
+        manifest_path: Some("diesel/Cargo.toml"),
     },
 ];
 
@@ -68,7 +95,7 @@ fn test_repo(cargo: &Path, out_dir: &Path, test: &Test) {
     if let Some(lockfile) = test.lock {
         fs::write(&dir.join("Cargo.lock"), lockfile).unwrap();
     }
-    if !run_cargo_test(cargo, &dir, test.packages) {
+    if !run_cargo_test(cargo, &dir, test.packages, test.features, test.manifest_path) {
         panic!("tests failed for {}", test.repo);
     }
 }
@@ -120,12 +147,31 @@ fn clone_repo(test: &Test, out_dir: &Path) -> PathBuf {
     out_dir
 }
 
-fn run_cargo_test(cargo_path: &Path, crate_path: &Path, packages: &[&str]) -> bool {
+fn run_cargo_test(
+    cargo_path: &Path,
+    crate_path: &Path,
+    packages: &[&str],
+    features: Option<&[&str]>,
+    manifest_path: Option<&str>,
+) -> bool {
     let mut command = Command::new(cargo_path);
     command.arg("test");
+
+    if let Some(path) = manifest_path {
+        command.arg(format!("--manifest-path={}", path));
+    }
+
+    if let Some(features) = features {
+        command.arg("--no-default-features");
+        for feature in features {
+            command.arg(format!("--features={}", feature));
+        }
+    }
+
     for name in packages {
         command.arg("-p").arg(name);
     }
+
     let status = command
         // Disable rust-lang/cargo's cross-compile tests
         .env("CFG_DISABLE_CROSS_TESTS", "1")