Skip to content

Commit d43d717

Browse files
pietroalbiniMark-Simulacrum
authored andcommitted
build-manifest: move generating a target to the manifest mod
1 parent a7c8e79 commit d43d717

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};
@@ -389,9 +388,12 @@ impl Builder {
389388

390389
fn target_host_combination(&mut self, host: &str, manifest: &Manifest) -> Option<Target> {
391390
let filename = self.versions.tarball_name(&PkgType::Rust, host).unwrap();
392-
let digest = self.digests.remove(&filename)?;
393-
let xz_filename = filename.replace(".tar.gz", ".tar.xz");
394-
let xz_digest = self.digests.remove(&xz_filename);
391+
392+
let mut target = Target::from_compressed_tar(self, &filename);
393+
if !target.available {
394+
return None;
395+
}
396+
395397
let mut components = Vec::new();
396398
let mut extensions = Vec::new();
397399

@@ -447,15 +449,9 @@ impl Builder {
447449
extensions.retain(&has_component);
448450
components.retain(&has_component);
449451

450-
Some(Target {
451-
available: true,
452-
url: Some(self.url(&filename)),
453-
hash: Some(digest),
454-
xz_url: xz_digest.as_ref().map(|_| self.url(&xz_filename)),
455-
xz_hash: xz_digest,
456-
components: Some(components),
457-
extensions: Some(extensions),
458-
})
452+
target.components = Some(components);
453+
target.extensions = Some(extensions);
454+
Some(target)
459455
}
460456

461457
fn profile(
@@ -493,37 +489,19 @@ impl Builder {
493489
let targets = targets
494490
.iter()
495491
.map(|name| {
496-
if is_present {
497-
// The component generally exists, but it might still be missing for this target.
492+
let target = if is_present {
498493
let filename = self
499494
.versions
500495
.tarball_name(&PkgType::from_component(pkgname), name)
501496
.unwrap();
502-
let digest = match self.digests.remove(&filename) {
503-
Some(digest) => digest,
504-
// This component does not exist for this target -- skip it.
505-
None => return (name.to_string(), Target::unavailable()),
506-
};
507-
let xz_filename = filename.replace(".tar.gz", ".tar.xz");
508-
let xz_digest = self.digests.remove(&xz_filename);
509-
510-
(
511-
name.to_string(),
512-
Target {
513-
available: true,
514-
url: Some(self.url(&filename)),
515-
hash: Some(digest),
516-
xz_url: xz_digest.as_ref().map(|_| self.url(&xz_filename)),
517-
xz_hash: xz_digest,
518-
components: None,
519-
extensions: None,
520-
},
521-
)
497+
498+
Target::from_compressed_tar(self, &filename)
522499
} else {
523500
// If the component is not present for this build add it anyway but mark it as
524501
// unavailable -- this way rustup won't allow upgrades without --force
525-
(name.to_string(), Target::unavailable())
526-
}
502+
Target::unavailable()
503+
};
504+
(name.to_string(), target)
527505
})
528506
.collect();
529507

@@ -537,8 +515,9 @@ impl Builder {
537515
);
538516
}
539517

540-
fn url(&self, filename: &str) -> String {
541-
format!("{}/{}/{}", self.s3_address, self.date, filename)
518+
fn url(&self, path: &Path) -> String {
519+
let file_name = path.file_name().unwrap().to_str().unwrap();
520+
format!("{}/{}/{}", self.s3_address, self.date, file_name)
542521
}
543522

544523
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)