Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
weihanglo committed Jul 9, 2024
1 parent c1892f8 commit 78be14c
Show file tree
Hide file tree
Showing 10 changed files with 44 additions and 60 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ pulldown-cmark = { version = "0.11.0", default-features = false, features = ["ht
rand = "0.8.5"
regex = "1.10.4"
rusqlite = { version = "0.31.0", features = ["bundled"] }
rustc-stable-hash = { git = "https://github.com/rust-lang/rustc-stable-hash.git", rev = "cb8e141b08fb839606a5f79f9b56087cd54b764d" }
rustc-stable-hash = { git = "https://github.com/rust-lang/rustc-stable-hash.git", rev = "3805516b78c7b2946ae2071d71ffc8235399652d" }
rustfix = { version = "0.8.2", path = "crates/rustfix" }
same-file = "1.0.6"
security-framework = "2.10.0"
Expand Down
4 changes: 2 additions & 2 deletions src/cargo/core/compiler/build_runner/compilation_files.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
use std::collections::HashMap;
use std::fmt;
use std::hash::Hash;
use std::hash::{Hash, Hasher};
use std::path::{Path, PathBuf};
use std::sync::Arc;

Expand Down Expand Up @@ -650,7 +650,7 @@ fn compute_metadata(
unit.is_std.hash(&mut hasher);

MetaInfo {
meta_hash: Metadata(hasher.finish()),
meta_hash: Metadata(Hasher::finish(&hasher)),
use_extra_filename: should_use_metadata(bcx, unit),
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/cargo/core/compiler/compile_kind.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use anyhow::Context as _;
use serde::Serialize;
use std::collections::BTreeSet;
use std::fs;
use std::hash::Hash;
use std::hash::{Hash, Hasher};
use std::path::Path;

/// Indicator for how a unit is being compiled.
Expand Down Expand Up @@ -195,6 +195,6 @@ impl CompileTarget {
self.name.hash(&mut hasher);
}
}
hasher.finish()
Hasher::finish(&hasher)
}
}
2 changes: 1 addition & 1 deletion src/cargo/core/compiler/fingerprint/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1482,7 +1482,7 @@ fn calculate_normal(
local: Mutex::new(local),
memoized_hash: Mutex::new(None),
metadata,
config: config.finish(),
config: Hasher::finish(&config),
compile_kind,
rustflags: extra_flags,
fs_status: FsStatus::Stale,
Expand Down
54 changes: 29 additions & 25 deletions src/cargo/core/source_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -793,9 +793,11 @@ mod tests {
// cross-platform stable hash for absolute paths.
#[test]
fn test_stable_hash() {
use crate::util::StableHasher;
use std::hash::Hasher;
use std::path::Path;

use crate::util::StableHasher;

#[cfg(not(windows))]
let ws_root = Path::new("/tmp/ws");
#[cfg(windows)]
Expand All @@ -804,69 +806,71 @@ mod tests {
let gen_hash = |source_id: SourceId| {
let mut hasher = StableHasher::new();
source_id.stable_hash(ws_root, &mut hasher);
hasher.finish()
Hasher::finish(&hasher)
};

let source_id = SourceId::crates_io(&GlobalContext::default().unwrap()).unwrap();
assert_eq!(gen_hash(source_id), 14747226178473219715);
assert_eq!(crate::util::hex::short_hash(&source_id), "83d63c3e13aca8cc");
assert_eq!(gen_hash(source_id), 7062945687441624357);
assert_eq!(crate::util::hex::short_hash(&source_id), "25cdd57fae9f0462");

let url = "https://my-crates.io".into_url().unwrap();
let source_id = SourceId::for_registry(&url).unwrap();
assert_eq!(gen_hash(source_id), 2056262832525457700);
assert_eq!(crate::util::hex::short_hash(&source_id), "24b984d12650891c");
assert_eq!(gen_hash(source_id), 8310250053664888498);
assert_eq!(crate::util::hex::short_hash(&source_id), "b2d65deb64f05373");

let url = "https://your-crates.io".into_url().unwrap();
let source_id = SourceId::for_alt_registry(&url, "alt").unwrap();
assert_eq!(gen_hash(source_id), 7851411715584162426);
assert_eq!(crate::util::hex::short_hash(&source_id), "7afabb545bd1f56c");
assert_eq!(gen_hash(source_id), 14149534903000258933);
assert_eq!(crate::util::hex::short_hash(&source_id), "755952de063f5dc4");

let url = "sparse+https://my-crates.io".into_url().unwrap();
let source_id = SourceId::for_registry(&url).unwrap();
assert_eq!(gen_hash(source_id), 15233380663065439616);
assert_eq!(crate::util::hex::short_hash(&source_id), "80ed51ce00d767d3");
assert_eq!(gen_hash(source_id), 16249512552851930162);
assert_eq!(crate::util::hex::short_hash(&source_id), "327cfdbd92dd81e1");

let url = "sparse+https://your-crates.io".into_url().unwrap();
let source_id = SourceId::for_alt_registry(&url, "alt").unwrap();
assert_eq!(gen_hash(source_id), 12749290624384351691);
assert_eq!(crate::util::hex::short_hash(&source_id), "cbbda5344694eeb0");
assert_eq!(gen_hash(source_id), 6156697384053352292);
assert_eq!(crate::util::hex::short_hash(&source_id), "64a713b6a6fb7055");

let url = "file:///tmp/ws/crate".into_url().unwrap();
let source_id = SourceId::for_git(&url, GitReference::DefaultBranch).unwrap();
assert_eq!(gen_hash(source_id), 3109465066469481245);
assert_eq!(crate::util::hex::short_hash(&source_id), "1d5b66d8000a272b");
assert_eq!(gen_hash(source_id), 473480029881867801);
assert_eq!(crate::util::hex::short_hash(&source_id), "199e591d94239206");

let path = &ws_root.join("crate");
let source_id = SourceId::for_local_registry(path).unwrap();
#[cfg(not(windows))]
{
assert_eq!(gen_hash(source_id), 17171351456028149232);
assert_eq!(crate::util::hex::short_hash(&source_id), "f0c5f1e92be54cee");
assert_eq!(gen_hash(source_id), 11515846423845066584);
assert_eq!(crate::util::hex::short_hash(&source_id), "58d73c154f81d09f");
}
#[cfg(windows)]
{
assert_eq!(gen_hash(source_id), 10712195329887934127);
assert_eq!(crate::util::hex::short_hash(&source_id), "af96919ae55ca994");
eprintln!("{} :: {}", gen_hash(source_id), 10712195329887934127i128);
eprintln!("{} :: {}", crate::util::hex::short_hash(&source_id), "af96919ae55ca994");
}

let source_id = SourceId::for_path(path).unwrap();
assert_eq!(gen_hash(source_id), 13241112980875747369);
assert_eq!(gen_hash(source_id), 215644081443634269);
#[cfg(not(windows))]
assert_eq!(crate::util::hex::short_hash(&source_id), "e5ba2edec163e65a");
assert_eq!(crate::util::hex::short_hash(&source_id), "64bace89c92b101f");
#[cfg(windows)]
assert_eq!(crate::util::hex::short_hash(&source_id), "429dd6f2283a9b5c");
eprintln!("{} :: {}", crate::util::hex::short_hash(&source_id), "429dd6f2283a9b5c");

let source_id = SourceId::for_directory(path).unwrap();
#[cfg(not(windows))]
{
assert_eq!(gen_hash(source_id), 12461124588148212881);
assert_eq!(crate::util::hex::short_hash(&source_id), "91c47582caceeeac");
assert_eq!(gen_hash(source_id), 6127590343904940368);
assert_eq!(crate::util::hex::short_hash(&source_id), "505191d1f3920955");
}
#[cfg(windows)]
{
assert_eq!(gen_hash(source_id), 17000469607053345884);
assert_eq!(crate::util::hex::short_hash(&source_id), "5c443d0709cdedeb");
eprintln!("{} :: {}", gen_hash(source_id), 17000469607053345884i128);
eprintln!("{} :: {}", crate::util::hex::short_hash(&source_id), "5c443d0709cdedeb");
}
#[cfg(windows)]
assert!(false);
}

#[test]
Expand Down
4 changes: 2 additions & 2 deletions src/cargo/ops/cargo_compile/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
//! ["Cargo Target"]: https://doc.rust-lang.org/nightly/cargo/reference/cargo-targets.html
use std::collections::{HashMap, HashSet};
use std::hash::Hash;
use std::hash::{Hash, Hasher};
use std::sync::Arc;

use crate::core::compiler::unit_dependencies::build_unit_dependencies;
Expand Down Expand Up @@ -648,7 +648,7 @@ fn traverse_and_share(
.collect();
// Here, we have recursively traversed this unit's dependencies, and hashed them: we can
// finalize the dep hash.
let new_dep_hash = dep_hash.finish();
let new_dep_hash = Hasher::finish(&dep_hash);

// This is the key part of the sharing process: if the unit is a runtime dependency, whose
// target is the same as the host, we canonicalize the compile kind to `CompileKind::Host`.
Expand Down
22 changes: 1 addition & 21 deletions src/cargo/util/hasher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,4 @@
//!
//! This is a wrapper around [`rustc_stable_hash::StableHasher`].
pub struct StableHasher(rustc_stable_hash::StableHasher);

impl StableHasher {
pub fn new() -> StableHasher {
StableHasher(rustc_stable_hash::StableHasher::new())
}

pub fn finish(self) -> u64 {
self.0.finalize().0
}
}

impl std::hash::Hasher for StableHasher {
fn finish(&self) -> u64 {
panic!("call StableHasher::finish instead");
}

fn write(&mut self, bytes: &[u8]) {
self.0.write(bytes)
}
}
pub use rustc_stable_hash::StableSipHasher128 as StableHasher;
4 changes: 2 additions & 2 deletions src/cargo/util/hex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ pub fn to_hex(num: u64) -> String {
pub fn hash_u64<H: Hash>(hashable: H) -> u64 {
let mut hasher = StableHasher::new();
hashable.hash(&mut hasher);
hasher.finish()
Hasher::finish(&hasher)
}

pub fn hash_u64_file(mut file: &File) -> std::io::Result<u64> {
Expand All @@ -23,7 +23,7 @@ pub fn hash_u64_file(mut file: &File) -> std::io::Result<u64> {
}
hasher.write(&buf[..n]);
}
Ok(hasher.finish())
Ok(Hasher::finish(&hasher))
}

pub fn short_hash<H: Hash>(hashable: &H) -> String {
Expand Down
6 changes: 3 additions & 3 deletions src/cargo/util/rustc.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::hash_map::HashMap;
use std::env;
use std::hash::Hash;
use std::hash::{Hash, Hasher};
use std::path::{Path, PathBuf};
use std::sync::Mutex;

Expand Down Expand Up @@ -374,7 +374,7 @@ fn rustc_fingerprint(
_ => (),
}

Ok(hasher.finish())
Ok(Hasher::finish(&hasher))
}

fn process_fingerprint(cmd: &ProcessBuilder, extra_fingerprint: u64) -> u64 {
Expand All @@ -384,5 +384,5 @@ fn process_fingerprint(cmd: &ProcessBuilder, extra_fingerprint: u64) -> u64 {
let mut env = cmd.get_envs().iter().collect::<Vec<_>>();
env.sort_unstable();
env.hash(&mut hasher);
hasher.finish()
Hasher::finish(&hasher)
}

0 comments on commit 78be14c

Please sign in to comment.