mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
build-manifest: move generating a target to the manifest mod
This commit is contained in:
parent
6e15975540
commit
0375ee8b55
@ -9,8 +9,7 @@ mod versions;
|
|||||||
|
|
||||||
use crate::manifest::{Component, Manifest, Package, Rename, Target};
|
use crate::manifest::{Component, Manifest, Package, Rename, Target};
|
||||||
use crate::versions::{PkgType, Versions};
|
use crate::versions::{PkgType, Versions};
|
||||||
use std::collections::BTreeMap;
|
use std::collections::{BTreeMap, HashMap};
|
||||||
use std::collections::HashMap;
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs::{self, File};
|
use std::fs::{self, File};
|
||||||
use std::io::{self, Read, Write};
|
use std::io::{self, Read, Write};
|
||||||
@ -385,9 +384,12 @@ impl Builder {
|
|||||||
|
|
||||||
fn target_host_combination(&mut self, host: &str, manifest: &Manifest) -> Option<Target> {
|
fn target_host_combination(&mut self, host: &str, manifest: &Manifest) -> Option<Target> {
|
||||||
let filename = self.versions.tarball_name(&PkgType::Rust, host).unwrap();
|
let filename = self.versions.tarball_name(&PkgType::Rust, host).unwrap();
|
||||||
let digest = self.digests.remove(&filename)?;
|
|
||||||
let xz_filename = filename.replace(".tar.gz", ".tar.xz");
|
let mut target = Target::from_compressed_tar(self, &filename);
|
||||||
let xz_digest = self.digests.remove(&xz_filename);
|
if !target.available {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
let mut components = Vec::new();
|
let mut components = Vec::new();
|
||||||
let mut extensions = Vec::new();
|
let mut extensions = Vec::new();
|
||||||
|
|
||||||
@ -443,15 +445,9 @@ impl Builder {
|
|||||||
extensions.retain(&has_component);
|
extensions.retain(&has_component);
|
||||||
components.retain(&has_component);
|
components.retain(&has_component);
|
||||||
|
|
||||||
Some(Target {
|
target.components = Some(components);
|
||||||
available: true,
|
target.extensions = Some(extensions);
|
||||||
url: Some(self.url(&filename)),
|
Some(target)
|
||||||
hash: Some(digest),
|
|
||||||
xz_url: xz_digest.as_ref().map(|_| self.url(&xz_filename)),
|
|
||||||
xz_hash: xz_digest,
|
|
||||||
components: Some(components),
|
|
||||||
extensions: Some(extensions),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn profile(
|
fn profile(
|
||||||
@ -489,37 +485,19 @@ impl Builder {
|
|||||||
let targets = targets
|
let targets = targets
|
||||||
.iter()
|
.iter()
|
||||||
.map(|name| {
|
.map(|name| {
|
||||||
if is_present {
|
let target = if is_present {
|
||||||
// The component generally exists, but it might still be missing for this target.
|
|
||||||
let filename = self
|
let filename = self
|
||||||
.versions
|
.versions
|
||||||
.tarball_name(&PkgType::from_component(pkgname), name)
|
.tarball_name(&PkgType::from_component(pkgname), name)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let digest = match self.digests.remove(&filename) {
|
|
||||||
Some(digest) => digest,
|
|
||||||
// This component does not exist for this target -- skip it.
|
|
||||||
None => return (name.to_string(), Target::unavailable()),
|
|
||||||
};
|
|
||||||
let xz_filename = filename.replace(".tar.gz", ".tar.xz");
|
|
||||||
let xz_digest = self.digests.remove(&xz_filename);
|
|
||||||
|
|
||||||
(
|
Target::from_compressed_tar(self, &filename)
|
||||||
name.to_string(),
|
|
||||||
Target {
|
|
||||||
available: true,
|
|
||||||
url: Some(self.url(&filename)),
|
|
||||||
hash: Some(digest),
|
|
||||||
xz_url: xz_digest.as_ref().map(|_| self.url(&xz_filename)),
|
|
||||||
xz_hash: xz_digest,
|
|
||||||
components: None,
|
|
||||||
extensions: None,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
// If the component is not present for this build add it anyway but mark it as
|
// If the component is not present for this build add it anyway but mark it as
|
||||||
// unavailable -- this way rustup won't allow upgrades without --force
|
// unavailable -- this way rustup won't allow upgrades without --force
|
||||||
(name.to_string(), Target::unavailable())
|
Target::unavailable()
|
||||||
}
|
};
|
||||||
|
(name.to_string(), target)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
@ -533,8 +511,9 @@ impl Builder {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn url(&self, filename: &str) -> String {
|
fn url(&self, path: &Path) -> String {
|
||||||
format!("{}/{}/{}", self.s3_address, self.date, filename)
|
let file_name = path.file_name().unwrap().to_str().unwrap();
|
||||||
|
format!("{}/{}/{}", self.s3_address, self.date, file_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hash(&self, path: &Path) -> String {
|
fn hash(&self, path: &Path) -> String {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
use crate::Builder;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
@ -35,6 +37,40 @@ pub(crate) struct Target {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Target {
|
impl Target {
|
||||||
|
pub(crate) fn from_compressed_tar(builder: &Builder, base_path: &str) -> Self {
|
||||||
|
let base_path = builder.input.join(base_path);
|
||||||
|
let gz = Self::tarball_variant(&base_path, "gz");
|
||||||
|
let xz = Self::tarball_variant(&base_path, "xz");
|
||||||
|
|
||||||
|
if gz.is_none() {
|
||||||
|
return Self::unavailable();
|
||||||
|
}
|
||||||
|
|
||||||
|
Self {
|
||||||
|
available: true,
|
||||||
|
components: None,
|
||||||
|
extensions: None,
|
||||||
|
// .gz
|
||||||
|
url: gz.as_ref().map(|path| builder.url(path)),
|
||||||
|
hash: gz.map(|path| Self::digest_of(builder, &path)),
|
||||||
|
// .xz
|
||||||
|
xz_url: xz.as_ref().map(|path| builder.url(path)),
|
||||||
|
xz_hash: xz.map(|path| Self::digest_of(builder, &path)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn tarball_variant(base: &Path, ext: &str) -> Option<PathBuf> {
|
||||||
|
let mut path = base.to_path_buf();
|
||||||
|
path.set_extension(ext);
|
||||||
|
if path.is_file() { Some(path) } else { None }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn digest_of(builder: &Builder, path: &Path) -> String {
|
||||||
|
// TEMPORARY CODE -- DON'T REVIEW :)
|
||||||
|
let file_name = path.file_name().unwrap().to_str().unwrap();
|
||||||
|
builder.digests.get(file_name).unwrap().clone()
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn unavailable() -> Self {
|
pub(crate) fn unavailable() -> Self {
|
||||||
Self::default()
|
Self::default()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user