about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <17426603+bjorn3@users.noreply.github.com>2024-09-12 19:29:27 +0000
committerbjorn3 <17426603+bjorn3@users.noreply.github.com>2024-09-12 19:29:43 +0000
commit1aa0cf930a113f975fe26e11a309d9a0df04338e (patch)
treea7a8ad7ba6b4f9e2fe33d2ee714806e7e02facfd
parent45be990167df491f9e6d4c8914c8949fddf5752a (diff)
downloadrust-1aa0cf930a113f975fe26e11a309d9a0df04338e.tar.gz
rust-1aa0cf930a113f975fe26e11a309d9a0df04338e.zip
Unconditionally use git to download test repos
It no longer saves much download time while still complicating the code
and requiring curl and tar to be installed.
-rw-r--r--build_system/prepare.rs60
-rw-r--r--build_system/usage.txt4
-rw-r--r--build_system/utils.rs16
3 files changed, 7 insertions, 73 deletions
diff --git a/build_system/prepare.rs b/build_system/prepare.rs
index 387feb41251..09fbdc3104d 100644
--- a/build_system/prepare.rs
+++ b/build_system/prepare.rs
@@ -5,9 +5,7 @@ use std::path::{Path, PathBuf};
 use std::process::Command;
 
 use crate::path::{Dirs, RelPath};
-use crate::utils::{
-    copy_dir_recursively, remove_dir_if_exists, retry_spawn_and_wait, spawn_and_wait,
-};
+use crate::utils::{copy_dir_recursively, remove_dir_if_exists, spawn_and_wait};
 
 pub(crate) fn prepare(dirs: &Dirs) {
     RelPath::DOWNLOAD.ensure_exists(dirs);
@@ -110,7 +108,11 @@ impl GitRepo {
 
         match self.url {
             GitRepoUrl::Github { user, repo } => {
-                clone_repo_shallow_github(dirs, &download_dir, user, repo, self.rev);
+                clone_repo(
+                    &download_dir,
+                    &format!("https://github.com/{}/{}.git", user, repo),
+                    self.rev,
+                );
             }
         }
 
@@ -145,7 +147,6 @@ impl GitRepo {
     }
 }
 
-#[allow(dead_code)]
 fn clone_repo(download_dir: &Path, repo: &str, rev: &str) {
     eprintln!("[CLONE] {}", repo);
     // Ignore exit code as the repo may already have been checked out
@@ -162,55 +163,6 @@ fn clone_repo(download_dir: &Path, repo: &str, rev: &str) {
     std::fs::remove_dir_all(download_dir.join(".git")).unwrap();
 }
 
-fn clone_repo_shallow_github(dirs: &Dirs, download_dir: &Path, user: &str, repo: &str, rev: &str) {
-    if cfg!(windows) {
-        // Older windows doesn't have tar or curl by default. Fall back to using git.
-        clone_repo(download_dir, &format!("https://github.com/{}/{}.git", user, repo), rev);
-        return;
-    }
-
-    let archive_url = format!("https://github.com/{}/{}/archive/{}.tar.gz", user, repo, rev);
-    let archive_file = RelPath::DOWNLOAD.to_path(dirs).join(format!("{}.tar.gz", rev));
-    let archive_dir = RelPath::DOWNLOAD.to_path(dirs).join(format!("{}-{}", repo, rev));
-
-    eprintln!("[DOWNLOAD] {}/{} from {}", user, repo, archive_url);
-
-    // Remove previous results if they exists
-    let _ = std::fs::remove_file(&archive_file);
-    let _ = std::fs::remove_dir_all(&archive_dir);
-    let _ = std::fs::remove_dir_all(&download_dir);
-
-    // Download zip archive
-    let mut download_cmd = Command::new("curl");
-    download_cmd
-        .arg("--max-time")
-        .arg("600")
-        .arg("-y")
-        .arg("30")
-        .arg("-Y")
-        .arg("10")
-        .arg("--connect-timeout")
-        .arg("30")
-        .arg("--continue-at")
-        .arg("-")
-        .arg("--location")
-        .arg("--output")
-        .arg(&archive_file)
-        .arg(archive_url);
-    retry_spawn_and_wait(5, download_cmd);
-
-    // Unpack tar archive
-    let mut unpack_cmd = Command::new("tar");
-    unpack_cmd.arg("xf").arg(&archive_file).current_dir(RelPath::DOWNLOAD.to_path(dirs));
-    spawn_and_wait(unpack_cmd);
-
-    // Rename unpacked dir to the expected name
-    std::fs::rename(archive_dir, &download_dir).unwrap();
-
-    // Cleanup
-    std::fs::remove_file(archive_file).unwrap();
-}
-
 fn init_git_repo(repo_dir: &Path) {
     let mut git_init_cmd = git_command(repo_dir, "init");
     git_init_cmd.arg("-q");
diff --git a/build_system/usage.txt b/build_system/usage.txt
index 58ced0b09f2..5c333fe2db5 100644
--- a/build_system/usage.txt
+++ b/build_system/usage.txt
@@ -39,7 +39,5 @@ REQUIREMENTS:
     * Rustup: By default rustup is used to install the right nightly version. If you don't want to
       use rustup, you can manually install the nightly version indicated by rust-toolchain.toml and
       point the CARGO, RUSTC and RUSTDOC env vars to the right executables.
-    * Git: Git is used for applying patches and on Windows for downloading test repos.
-    * Curl and tar (non-Windows only): Used by `./y.sh prepare` to download a single commit for
-      repos. Git will be used to clone the whole repo when using Windows.
+    * Git: Git is used for downloading test repos and applying patches.
     * [Hyperfine](https://github.com/sharkdp/hyperfine/): Used for benchmarking with `./y.sh bench`.
diff --git a/build_system/utils.rs b/build_system/utils.rs
index 554291346cc..4bb6e21be9f 100644
--- a/build_system/utils.rs
+++ b/build_system/utils.rs
@@ -159,22 +159,6 @@ pub(crate) fn spawn_and_wait(mut cmd: Command) {
     }
 }
 
-// Based on the retry function in rust's src/ci/shared.sh
-#[track_caller]
-pub(crate) fn retry_spawn_and_wait(tries: u64, mut cmd: Command) {
-    for i in 1..tries + 1 {
-        if i != 1 {
-            eprintln!("Command failed. Attempt {i}/{tries}:");
-        }
-        if cmd.spawn().unwrap().wait().unwrap().success() {
-            return;
-        }
-        std::thread::sleep(std::time::Duration::from_secs(i * 5));
-    }
-    eprintln!("The command has failed after {tries} attempts.");
-    process::exit(1);
-}
-
 pub(crate) fn remove_dir_if_exists(path: &Path) {
     match fs::remove_dir_all(&path) {
         Ok(()) => {}