about summary refs log tree commit diff
path: root/src/bootstrap
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-12-17 14:26:54 +0000
committerbors <bors@rust-lang.org>2023-12-17 14:26:54 +0000
commit3a2aa5854cbeb6fea24d6d0175d16c734aa9302e (patch)
tree00e4d393643f11b18b8b4a4ba9e8af3e68388710 /src/bootstrap
parente95a69d306a24156344339ad4584efdf48d9a4fe (diff)
parent81b98a0a13013a192a02c918dbb0888dbe80b6aa (diff)
downloadrust-3a2aa5854cbeb6fea24d6d0175d16c734aa9302e.tar.gz
rust-3a2aa5854cbeb6fea24d6d0175d16c734aa9302e.zip
Auto merge of #119020 - onur-ozkan:remove-hex, r=albertlarsan68
remove `hex` dependency in bootstrap

First commit removes the `hex` dependency, as we can achieve the same output with the added function, which is very small and simple.

Second commit creates a test module for the helpers util and adds unit tests for multiple helper functions, including `hex_encode`.
Diffstat (limited to 'src/bootstrap')
-rw-r--r--src/bootstrap/Cargo.lock7
-rw-r--r--src/bootstrap/Cargo.toml1
-rw-r--r--src/bootstrap/src/core/build_steps/setup.rs3
-rw-r--r--src/bootstrap/src/core/download.rs4
-rw-r--r--src/bootstrap/src/lib.rs3
-rw-r--r--src/bootstrap/src/tests/builder.rs16
-rw-r--r--src/bootstrap/src/tests/helpers.rs59
-rw-r--r--src/bootstrap/src/tests/setup.rs3
-rw-r--r--src/bootstrap/src/utils/helpers.rs12
9 files changed, 79 insertions, 29 deletions
diff --git a/src/bootstrap/Cargo.lock b/src/bootstrap/Cargo.lock
index f452b944e75..f8e6d629ba3 100644
--- a/src/bootstrap/Cargo.lock
+++ b/src/bootstrap/Cargo.lock
@@ -55,7 +55,6 @@ dependencies = [
  "cmake",
  "fd-lock",
  "filetime",
- "hex",
  "home",
  "ignore",
  "junction",
@@ -314,12 +313,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
-name = "hex"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
-
-[[package]]
 name = "home"
 version = "0.5.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/src/bootstrap/Cargo.toml b/src/bootstrap/Cargo.toml
index 24951cf20fa..077d1954b7b 100644
--- a/src/bootstrap/Cargo.toml
+++ b/src/bootstrap/Cargo.toml
@@ -39,7 +39,6 @@ clap = { version = "4.4.7", default-features = false, features = ["std", "usage"
 clap_complete = "4.4.3"
 cmake = "0.1.38"
 filetime = "0.2"
-hex = "0.4"
 home = "0.5.4"
 ignore = "0.4.10"
 libc = "0.2.150"
diff --git a/src/bootstrap/src/core/build_steps/setup.rs b/src/bootstrap/src/core/build_steps/setup.rs
index fe84b95f90c..9c897ae1bb7 100644
--- a/src/bootstrap/src/core/build_steps/setup.rs
+++ b/src/bootstrap/src/core/build_steps/setup.rs
@@ -1,6 +1,7 @@
 use crate::core::builder::{Builder, RunConfig, ShouldRun, Step};
 use crate::t;
 use crate::utils::change_tracker::CONFIG_CHANGE_HISTORY;
+use crate::utils::helpers::hex_encode;
 use crate::Config;
 use sha2::Digest;
 use std::env::consts::EXE_SUFFIX;
@@ -566,7 +567,7 @@ fn create_vscode_settings_maybe(config: &Config) -> io::Result<bool> {
     if let Ok(current) = fs::read_to_string(&vscode_settings) {
         let mut hasher = sha2::Sha256::new();
         hasher.update(&current);
-        let hash = hex::encode(hasher.finalize().as_slice());
+        let hash = hex_encode(hasher.finalize().as_slice());
         if hash == *current_hash {
             return Ok(true);
         } else if historical_hashes.contains(&hash.as_str()) {
diff --git a/src/bootstrap/src/core/download.rs b/src/bootstrap/src/core/download.rs
index 1f2ee6a6b73..ec404ab8580 100644
--- a/src/bootstrap/src/core/download.rs
+++ b/src/bootstrap/src/core/download.rs
@@ -11,9 +11,9 @@ use std::{
 use build_helper::ci::CiEnv;
 use xz2::bufread::XzDecoder;
 
-use crate::core::build_steps::llvm::detect_llvm_sha;
 use crate::core::config::RustfmtMetadata;
 use crate::utils::helpers::{check_run, exe, program_out_of_date};
+use crate::{core::build_steps::llvm::detect_llvm_sha, utils::helpers::hex_encode};
 use crate::{t, Config};
 
 static SHOULD_FIX_BINS_AND_DYLIBS: OnceLock<bool> = OnceLock::new();
@@ -345,7 +345,7 @@ impl Config {
             reader.consume(l);
         }
 
-        let checksum = hex::encode(hasher.finalize().as_slice());
+        let checksum = hex_encode(hasher.finalize().as_slice());
         let verified = checksum == expected;
 
         if !verified {
diff --git a/src/bootstrap/src/lib.rs b/src/bootstrap/src/lib.rs
index 9efb4990cab..871318de595 100644
--- a/src/bootstrap/src/lib.rs
+++ b/src/bootstrap/src/lib.rs
@@ -34,6 +34,7 @@ use filetime::FileTime;
 use sha2::digest::Digest;
 use termcolor::{ColorChoice, StandardStream, WriteColor};
 use utils::channel::GitInfo;
+use utils::helpers::hex_encode;
 
 use crate::core::builder;
 use crate::core::builder::Kind;
@@ -1871,7 +1872,7 @@ pub fn generate_smart_stamp_hash(dir: &Path, additional_input: &str) -> String {
     hasher.update(status);
     hasher.update(additional_input);
 
-    hex::encode(hasher.finalize().as_slice())
+    hex_encode(hasher.finalize().as_slice())
 }
 
 /// Ensures that the behavior dump directory is properly initialized.
diff --git a/src/bootstrap/src/tests/builder.rs b/src/bootstrap/src/tests/builder.rs
index 744015e8e82..700ebcf5e37 100644
--- a/src/bootstrap/src/tests/builder.rs
+++ b/src/bootstrap/src/tests/builder.rs
@@ -156,22 +156,6 @@ fn alias_and_path_for_library() {
     assert_eq!(first(cache.all::<doc::Std>()), &[doc_std!(A => A, stage = 0)]);
 }
 
-#[test]
-fn test_beta_rev_parsing() {
-    use crate::utils::helpers::extract_beta_rev;
-
-    // single digit revision
-    assert_eq!(extract_beta_rev("1.99.9-beta.7 (xxxxxx)"), Some("7".to_string()));
-    // multiple digits
-    assert_eq!(extract_beta_rev("1.99.9-beta.777 (xxxxxx)"), Some("777".to_string()));
-    // nightly channel (no beta revision)
-    assert_eq!(extract_beta_rev("1.99.9-nightly (xxxxxx)"), None);
-    // stable channel (no beta revision)
-    assert_eq!(extract_beta_rev("1.99.9 (xxxxxxx)"), None);
-    // invalid string
-    assert_eq!(extract_beta_rev("invalid"), None);
-}
-
 mod defaults {
     use super::{configure, first, run_build};
     use crate::core::builder::*;
diff --git a/src/bootstrap/src/tests/helpers.rs b/src/bootstrap/src/tests/helpers.rs
new file mode 100644
index 00000000000..afe18aebafa
--- /dev/null
+++ b/src/bootstrap/src/tests/helpers.rs
@@ -0,0 +1,59 @@
+use crate::utils::helpers::{extract_beta_rev, hex_encode, make};
+use std::path::PathBuf;
+
+#[test]
+fn test_make() {
+    for (host, make_path) in vec![
+        ("dragonfly", PathBuf::from("gmake")),
+        ("netbsd", PathBuf::from("gmake")),
+        ("freebsd", PathBuf::from("gmake")),
+        ("openbsd", PathBuf::from("gmake")),
+        ("linux", PathBuf::from("make")),
+        // for checking the default
+        ("_", PathBuf::from("make")),
+    ] {
+        assert_eq!(make(host), make_path);
+    }
+}
+
+#[cfg(unix)]
+#[test]
+fn test_absolute_unix() {
+    use crate::utils::helpers::absolute_unix;
+
+    // Test an absolute path
+    let path = PathBuf::from("/home/user/file.txt");
+    assert_eq!(absolute_unix(&path).unwrap(), PathBuf::from("/home/user/file.txt"));
+
+    // Test an absolute path with double leading slashes
+    let path = PathBuf::from("//root//file.txt");
+    assert_eq!(absolute_unix(&path).unwrap(), PathBuf::from("//root/file.txt"));
+
+    // Test a relative path
+    let path = PathBuf::from("relative/path");
+    assert_eq!(
+        absolute_unix(&path).unwrap(),
+        std::env::current_dir().unwrap().join("relative/path")
+    );
+}
+
+#[test]
+fn test_beta_rev_parsing() {
+    // single digit revision
+    assert_eq!(extract_beta_rev("1.99.9-beta.7 (xxxxxx)"), Some("7".to_string()));
+    // multiple digits
+    assert_eq!(extract_beta_rev("1.99.9-beta.777 (xxxxxx)"), Some("777".to_string()));
+    // nightly channel (no beta revision)
+    assert_eq!(extract_beta_rev("1.99.9-nightly (xxxxxx)"), None);
+    // stable channel (no beta revision)
+    assert_eq!(extract_beta_rev("1.99.9 (xxxxxxx)"), None);
+    // invalid string
+    assert_eq!(extract_beta_rev("invalid"), None);
+}
+
+#[test]
+fn test_string_to_hex_encode() {
+    let input_string = "Hello, World!";
+    let hex_string = hex_encode(input_string);
+    assert_eq!(hex_string, "48656c6c6f2c20576f726c6421");
+}
diff --git a/src/bootstrap/src/tests/setup.rs b/src/bootstrap/src/tests/setup.rs
index 0fe6e4a4644..3e4d66c7454 100644
--- a/src/bootstrap/src/tests/setup.rs
+++ b/src/bootstrap/src/tests/setup.rs
@@ -1,11 +1,12 @@
 use super::{RUST_ANALYZER_SETTINGS, SETTINGS_HASHES};
+use crate::utils::helpers::hex_encode;
 use sha2::Digest;
 
 #[test]
 fn check_matching_settings_hash() {
     let mut hasher = sha2::Sha256::new();
     hasher.update(&RUST_ANALYZER_SETTINGS);
-    let hash = hex::encode(hasher.finalize().as_slice());
+    let hash = hex_encode(hasher.finalize().as_slice());
     assert_eq!(
         &hash,
         SETTINGS_HASHES.last().unwrap(),
diff --git a/src/bootstrap/src/utils/helpers.rs b/src/bootstrap/src/utils/helpers.rs
index 031d56beb67..0c4297db6cc 100644
--- a/src/bootstrap/src/utils/helpers.rs
+++ b/src/bootstrap/src/utils/helpers.rs
@@ -20,6 +20,10 @@ use crate::LldMode;
 
 pub use crate::utils::dylib::{dylib_path, dylib_path_var};
 
+#[cfg(test)]
+#[path = "../tests/helpers.rs"]
+mod tests;
+
 /// A helper macro to `unwrap` a result except also print out details like:
 ///
 /// * The file/line of the panic
@@ -540,3 +544,11 @@ pub fn add_rustdoc_cargo_linker_args(
         cmd.env("RUSTDOCFLAGS", flags);
     }
 }
+
+/// Converts `T` into a hexadecimal `String`.
+pub fn hex_encode<T>(input: T) -> String
+where
+    T: AsRef<[u8]>,
+{
+    input.as_ref().iter().map(|x| format!("{:02x}", x)).collect()
+}