Skip to content

Commit 48924ab

Browse files
committed
bootstrap: convert rust to use Tarball
1 parent 1906c42 commit 48924ab

File tree

2 files changed

+65
-63
lines changed

2 files changed

+65
-63
lines changed

src/bootstrap/dist.rs

Lines changed: 5 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,21 +1314,7 @@ impl Step for Extended {
13141314
let std_installer =
13151315
builder.ensure(Std { compiler: builder.compiler(stage, target), target });
13161316

1317-
let tmp = tmpdir(builder);
1318-
let overlay = tmp.join("extended-overlay");
13191317
let etc = builder.src.join("src/etc/installer");
1320-
let work = tmp.join("work");
1321-
1322-
let _ = fs::remove_dir_all(&overlay);
1323-
builder.install(&builder.src.join("COPYRIGHT"), &overlay, 0o644);
1324-
builder.install(&builder.src.join("LICENSE-APACHE"), &overlay, 0o644);
1325-
builder.install(&builder.src.join("LICENSE-MIT"), &overlay, 0o644);
1326-
let version = builder.rust_version();
1327-
builder.create(&overlay.join("version"), &version);
1328-
if let Some(sha) = builder.rust_sha() {
1329-
builder.create(&overlay.join("git-commit-hash"), &sha);
1330-
}
1331-
builder.install(&etc.join("README.md"), &overlay, 0o644);
13321318

13331319
// When rust-std package split from rustc, we needed to ensure that during
13341320
// upgrades rustc was upgraded before rust-std. To avoid rustc clobbering
@@ -1353,31 +1339,12 @@ impl Step for Extended {
13531339
if target.contains("pc-windows-gnu") {
13541340
tarballs.push(mingw_installer.unwrap());
13551341
}
1356-
let mut input_tarballs = tarballs[0].as_os_str().to_owned();
1357-
for tarball in &tarballs[1..] {
1358-
input_tarballs.push(",");
1359-
input_tarballs.push(tarball);
1360-
}
13611342

1362-
builder.info("building combined installer");
1363-
let mut cmd = rust_installer(builder);
1364-
cmd.arg("combine")
1365-
.arg("--product-name=Rust")
1366-
.arg("--rel-manifest-dir=rustlib")
1367-
.arg("--success-message=Rust-is-ready-to-roll.")
1368-
.arg("--work-dir")
1369-
.arg(&work)
1370-
.arg("--output-dir")
1371-
.arg(&distdir(builder))
1372-
.arg(format!("--package-name={}-{}", pkgname(builder, "rust"), target.triple))
1373-
.arg("--legacy-manifest-dirs=rustlib,cargo")
1374-
.arg("--input-tarballs")
1375-
.arg(input_tarballs)
1376-
.arg("--non-installed-overlay")
1377-
.arg(&overlay);
1378-
let time = timeit(&builder);
1379-
builder.run(&mut cmd);
1380-
drop(time);
1343+
let mut tarball = Tarball::new(builder, "rust", &target.triple);
1344+
let work = tarball.persist_work_dir();
1345+
tarball.combine(&tarballs);
1346+
1347+
let tmp = tmpdir(builder).join("combined-tarball");
13811348

13821349
let mut license = String::new();
13831350
license += &builder.read(&builder.src.join("COPYRIGHT"));

src/bootstrap/tarball.rs

Lines changed: 60 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use std::path::{Path, PathBuf};
1+
use std::{
2+
path::{Path, PathBuf},
3+
process::Command,
4+
};
25

36
use build_helper::t;
47

@@ -95,6 +98,7 @@ pub(crate) struct Tarball<'a> {
9598

9699
include_target_in_component_name: bool,
97100
is_preview: bool,
101+
delete_temp_dir: bool,
98102
}
99103

100104
impl<'a> Tarball<'a> {
@@ -132,6 +136,7 @@ impl<'a> Tarball<'a> {
132136

133137
include_target_in_component_name: false,
134138
is_preview: false,
139+
delete_temp_dir: true,
135140
}
136141
}
137142

@@ -193,7 +198,53 @@ impl<'a> Tarball<'a> {
193198
self.builder.cp_r(src.as_ref(), &dest);
194199
}
195200

201+
pub(crate) fn persist_work_dir(&mut self) -> PathBuf {
202+
self.delete_temp_dir = false;
203+
self.work_dir.clone()
204+
}
205+
196206
pub(crate) fn generate(self) -> PathBuf {
207+
let mut component_name = self.component.clone();
208+
if self.is_preview {
209+
component_name.push_str("-preview");
210+
}
211+
if self.include_target_in_component_name {
212+
component_name.push('-');
213+
component_name.push_str(
214+
&self
215+
.target
216+
.as_ref()
217+
.expect("include_target_in_component_name used in a targetless tarball"),
218+
);
219+
}
220+
221+
self.run(|this, cmd| {
222+
cmd.arg("generate")
223+
.arg("--image-dir")
224+
.arg(&this.image_dir)
225+
.arg("--non-installed-overlay")
226+
.arg(&this.overlay_dir)
227+
.arg(format!("--component-name={}", &component_name));
228+
})
229+
}
230+
231+
pub(crate) fn combine(self, tarballs: &[PathBuf]) {
232+
let mut input_tarballs = tarballs[0].as_os_str().to_os_string();
233+
for tarball in &tarballs[1..] {
234+
input_tarballs.push(",");
235+
input_tarballs.push(tarball);
236+
}
237+
238+
self.run(|this, cmd| {
239+
cmd.arg("combine")
240+
.arg("--input-tarballs")
241+
.arg(input_tarballs)
242+
.arg("--non-installed-overlay")
243+
.arg(&this.overlay_dir);
244+
});
245+
}
246+
247+
fn run(self, build_cli: impl FnOnce(&Tarball<'a>, &mut Command)) -> PathBuf {
197248
t!(std::fs::create_dir_all(&self.overlay_dir));
198249
self.builder.create(&self.overlay_dir.join("version"), &self.overlay.version(self.builder));
199250
if let Some(sha) = self.builder.rust_sha() {
@@ -215,37 +266,21 @@ impl<'a> Tarball<'a> {
215266

216267
let _time = crate::util::timeit(self.builder);
217268

218-
let mut component_name = self.component.clone();
219-
if self.is_preview {
220-
component_name.push_str("-preview");
221-
}
222-
if self.include_target_in_component_name {
223-
component_name.push('-');
224-
component_name.push_str(
225-
&self
226-
.target
227-
.expect("include_target_in_component_name used in a targetless tarball"),
228-
);
229-
}
230-
231269
let distdir = crate::dist::distdir(self.builder);
232-
cmd.arg("generate")
270+
build_cli(&self, &mut cmd);
271+
cmd.arg("--rel-manifest-dir=rustlib")
272+
.arg("--legacy-manifest-dirs=rustlib,cargo")
233273
.arg(format!("--product-name={}", self.product_name))
234-
.arg("--rel-manifest-dir=rustlib")
235274
.arg(format!("--success-message={} installed.", self.component))
236-
.arg("--image-dir")
237-
.arg(self.image_dir)
275+
.arg(format!("--package-name={}", package_name))
238276
.arg("--work-dir")
239277
.arg(self.work_dir)
240278
.arg("--output-dir")
241-
.arg(&distdir)
242-
.arg("--non-installed-overlay")
243-
.arg(self.overlay_dir)
244-
.arg(format!("--package-name={}", package_name))
245-
.arg("--legacy-manifest-dirs=rustlib,cargo")
246-
.arg(format!("--component-name={}", component_name));
279+
.arg(&distdir);
247280
self.builder.run(&mut cmd);
248-
t!(std::fs::remove_dir_all(&self.temp_dir));
281+
if self.delete_temp_dir {
282+
t!(std::fs::remove_dir_all(&self.temp_dir));
283+
}
249284

250285
distdir.join(format!("{}.tar.gz", package_name))
251286
}

0 commit comments

Comments
 (0)