Skip to content

Commit 683c43f

Browse files
Eh2406ranger-ross
authored andcommitted
make stable_hash not depend on hash
1 parent b60a744 commit 683c43f

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/cargo/core/source_id.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -532,7 +532,10 @@ impl SourceId {
532532
url == CRATES_IO_INDEX || url == CRATES_IO_HTTP_INDEX || is_overridden_crates_io_url(url)
533533
}
534534

535-
/// Hashes `self`.
535+
/// Hashes `self` to be used in the name of some Cargo folders, so shouldn't vary.
536+
///
537+
/// For git and url, `as_str` gives the serialisation of a url (which has a spec) and so
538+
/// insulates against possible changes in how the url crate does hashing.
536539
///
537540
/// For paths, remove the workspace prefix so the same source will give the
538541
/// same hash in different locations, helping reproducible builds.
@@ -550,7 +553,11 @@ impl SourceId {
550553
return;
551554
}
552555
}
553-
self.hash(into)
556+
self.inner.kind.hash(into);
557+
match self.inner.kind {
558+
SourceKind::Git(_) => (&self).inner.canonical_url.hash(into),
559+
_ => (&self).inner.url.as_str().hash(into),
560+
}
554561
}
555562

556563
pub fn full_eq(self, other: SourceId) -> bool {
@@ -665,9 +672,6 @@ impl fmt::Display for SourceId {
665672
}
666673
}
667674

668-
/// The hash of `SourceId` is used in the name of some Cargo folders, so shouldn't
669-
/// vary. `as_str` gives the serialisation of a url (which has a spec) and so
670-
/// insulates against possible changes in how the url crate does hashing.
671675
impl Hash for SourceId {
672676
fn hash<S: hash::Hasher>(&self, into: &mut S) {
673677
self.inner.kind.hash(into);

0 commit comments

Comments
 (0)