Skip to content

Commit 0375ee8

Browse files
committed
build-manifest: move generating a target to the manifest mod
1 parent 6e15975 commit 0375ee8

File tree

2 files changed

+55
-40
lines changed

2 files changed

+55
-40
lines changed

src/tools/build-manifest/src/main.rs

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ mod versions;
99

1010
use crate::manifest::{Component, Manifest, Package, Rename, Target};
1111
use crate::versions::{PkgType, Versions};
12-
use std::collections::BTreeMap;
13-
use std::collections::HashMap;
12+
use std::collections::{BTreeMap, HashMap};
1413
use std::env;
1514
use std::fs::{self, File};
1615
use std::io::{self, Read, Write};
@@ -385,9 +384,12 @@ impl Builder {
385384

386385
fn target_host_combination(&mut self, host: &str, manifest: &Manifest) -> Option<Target> {
387386
let filename = self.versions.tarball_name(&PkgType::Rust, host).unwrap();
388-
let digest = self.digests.remove(&filename)?;
389-
let xz_filename = filename.replace(".tar.gz", ".tar.xz");
390-
let xz_digest = self.digests.remove(&xz_filename);
387+
388+
let mut target = Target::from_compressed_tar(self, &filename);
389+
if !target.available {
390+
return None;
391+
}
392+
391393
let mut components = Vec::new();
392394
let mut extensions = Vec::new();
393395

@@ -443,15 +445,9 @@ impl Builder {
443445
extensions.retain(&has_component);
444446
components.retain(&has_component);
445447

446-
Some(Target {
447-
available: true,
448-
url: Some(self.url(&filename)),
449-
hash: Some(digest),
450-
xz_url: xz_digest.as_ref().map(|_| self.url(&xz_filename)),
451-
xz_hash: xz_digest,
452-
components: Some(components),
453-
extensions: Some(extensions),
454-
})
448+
target.components = Some(components);
449+
target.extensions = Some(extensions);
450+
Some(target)
455451
}
456452

457453
fn profile(
@@ -489,37 +485,19 @@ impl Builder {
489485
let targets = targets
490486
.iter()
491487
.map(|name| {
492-
if is_present {
493-
// The component generally exists, but it might still be missing for this target.
488+
let target = if is_present {
494489
let filename = self
495490
.versions
496491
.tarball_name(&PkgType::from_component(pkgname), name)
497492
.unwrap();
498-
let digest = match self.digests.remove(&filename) {
499-
Some(digest) => digest,
500-
// This component does not exist for this target -- skip it.
501-
None => return (name.to_string(), Target::unavailable()),
502-
};
503-
let xz_filename = filename.replace(".tar.gz", ".tar.xz");
504-
let xz_digest = self.digests.remove(&xz_filename);
505-
506-
(
507-
name.to_string(),
508-
Target {
509-
available: true,
510-
url: Some(self.url(&filename)),
511-
hash: Some(digest),
512-
xz_url: xz_digest.as_ref().map(|_| self.url(&xz_filename)),
513-
xz_hash: xz_digest,
514-
components: None,
515-
extensions: None,
516-
},
517-
)
493+
494+
Target::from_compressed_tar(self, &filename)
518495
} else {
519496
// If the component is not present for this build add it anyway but mark it as
520497
// unavailable -- this way rustup won't allow upgrades without --force
521-
(name.to_string(), Target::unavailable())
522-
}
498+
Target::unavailable()
499+
};
500+
(name.to_string(), target)
523501
})
524502
.collect();
525503

@@ -533,8 +511,9 @@ impl Builder {
533511
);
534512
}
535513

536-
fn url(&self, filename: &str) -> String {
537-
format!("{}/{}/{}", self.s3_address, self.date, filename)
514+
fn url(&self, path: &Path) -> String {
515+
let file_name = path.file_name().unwrap().to_str().unwrap();
516+
format!("{}/{}/{}", self.s3_address, self.date, file_name)
538517
}
539518

540519
fn hash(&self, path: &Path) -> String {

src/tools/build-manifest/src/manifest.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
use crate::Builder;
12
use serde::Serialize;
23
use std::collections::BTreeMap;
4+
use std::path::{Path, PathBuf};
35

46
#[derive(Serialize)]
57
#[serde(rename_all = "kebab-case")]
@@ -35,6 +37,40 @@ pub(crate) struct Target {
3537
}
3638

3739
impl Target {
40+
pub(crate) fn from_compressed_tar(builder: &Builder, base_path: &str) -> Self {
41+
let base_path = builder.input.join(base_path);
42+
let gz = Self::tarball_variant(&base_path, "gz");
43+
let xz = Self::tarball_variant(&base_path, "xz");
44+
45+
if gz.is_none() {
46+
return Self::unavailable();
47+
}
48+
49+
Self {
50+
available: true,
51+
components: None,
52+
extensions: None,
53+
// .gz
54+
url: gz.as_ref().map(|path| builder.url(path)),
55+
hash: gz.map(|path| Self::digest_of(builder, &path)),
56+
// .xz
57+
xz_url: xz.as_ref().map(|path| builder.url(path)),
58+
xz_hash: xz.map(|path| Self::digest_of(builder, &path)),
59+
}
60+
}
61+
62+
fn tarball_variant(base: &Path, ext: &str) -> Option<PathBuf> {
63+
let mut path = base.to_path_buf();
64+
path.set_extension(ext);
65+
if path.is_file() { Some(path) } else { None }
66+
}
67+
68+
fn digest_of(builder: &Builder, path: &Path) -> String {
69+
// TEMPORARY CODE -- DON'T REVIEW :)
70+
let file_name = path.file_name().unwrap().to_str().unwrap();
71+
builder.digests.get(file_name).unwrap().clone()
72+
}
73+
3874
pub(crate) fn unavailable() -> Self {
3975
Self::default()
4076
}

0 commit comments

Comments
 (0)