1
Fork 0

Use build/tmp instead of adding a dependency on tempfile.

This commit is contained in:
Joshua Nelson 2022-04-10 14:24:11 -05:00
parent 12b132dd83
commit 7885ade984
5 changed files with 19 additions and 33 deletions

View file

@ -226,7 +226,6 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"tar", "tar",
"tempfile",
"toml", "toml",
"winapi", "winapi",
"xz2", "xz2",

View file

@ -43,7 +43,6 @@ libc = "0.2"
serde = { version = "1.0.8", features = ["derive"] } serde = { version = "1.0.8", features = ["derive"] }
serde_json = "1.0.2" serde_json = "1.0.2"
tar = "0.4" tar = "0.4"
tempfile = "3"
toml = "0.5" toml = "0.5"
ignore = "0.4.10" ignore = "0.4.10"
opener = "0.5" opener = "0.5"

View file

@ -1391,21 +1391,14 @@ impl Build {
paths paths
} }
pub fn rename(&self, src: &Path, dst: &Path) { /// Create a temporary directory in `out` and return its path.
if self.config.dry_run { ///
return; /// NOTE: this temporary directory is shared between all steps;
} /// if you need an empty directory, create a new subdirectory inside it.
self.verbose_than(1, &format!("Move {:?} to {:?}", src, dst)); fn tempdir(&self) -> PathBuf {
if src == dst { let tmp = self.out.join("tmp");
return; t!(fs::create_dir_all(&tmp));
} tmp
if let Err(e) = fs::rename(src, dst) {
if e.raw_os_error() == Some(libc::EXDEV) {
self.copy(src, dst);
return;
}
panic!("failed to rename `{}` to `{}`: {}", src.display(), dst.display(), e);
}
} }
/// Copies a file from `src` to `dst` /// Copies a file from `src` to `dst`

View file

@ -297,16 +297,14 @@ fn fix_bin_or_dylib(builder: &Builder<'_>, fname: &Path) {
fn download_component(builder: &Builder<'_>, base: &str, url: &str, dest_path: &Path) { fn download_component(builder: &Builder<'_>, base: &str, url: &str, dest_path: &Path) {
// Use a temporary file in case we crash while downloading, to avoid a corrupt download in cache/. // Use a temporary file in case we crash while downloading, to avoid a corrupt download in cache/.
let tempfile = t!(tempfile::NamedTempFile::new()); let tempfile = builder.tempdir().join(dest_path.file_name().unwrap());
let temppath = tempfile.path().to_owned();
drop(tempfile);
let tempfile_str = temppath.to_str().expect("tempdir must be valid unicode");
// FIXME: support `do_verify` (only really needed for nightly rustfmt) // FIXME: support `do_verify` (only really needed for nightly rustfmt)
download_with_retries(builder, tempfile_str, &format!("{}/{}", base, url)); // FIXME: support non-utf8 paths?
builder.rename(&temppath, dest_path); download_with_retries(builder, tempfile.to_str().unwrap(), &format!("{}/{}", base, url));
t!(std::fs::rename(&tempfile, dest_path));
} }
fn download_with_retries(builder: &Builder<'_>, tempdir: &str, url: &str) { fn download_with_retries(builder: &Builder<'_>, tempfile: &str, url: &str) {
println!("downloading {}", url); println!("downloading {}", url);
// FIXME: check if curl is installed instead of skipping straight to powershell // FIXME: check if curl is installed instead of skipping straight to powershell
@ -318,7 +316,7 @@ fn download_with_retries(builder: &Builder<'_>, tempdir: &str, url: &str) {
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;", "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;",
&format!( &format!(
"(New-Object System.Net.WebClient).DownloadFile('{}', '{}')", "(New-Object System.Net.WebClient).DownloadFile('{}', '{}')",
url, tempdir url, tempfile
), ),
])) { ])) {
return; return;
@ -338,7 +336,7 @@ fn download_with_retries(builder: &Builder<'_>, tempdir: &str, url: &str) {
"3", "3",
"-Sf", "-Sf",
"-o", "-o",
tempdir, tempfile,
url, url,
])); ]));
} }

View file

@ -1577,9 +1577,7 @@ note: if you're sure you want to do this, please open an issue as to why. In the
cmd.env("RUSTC_PROFILER_SUPPORT", "1"); cmd.env("RUSTC_PROFILER_SUPPORT", "1");
} }
let tmp = builder.out.join("tmp"); cmd.env("RUST_TEST_TMPDIR", builder.tempdir());
std::fs::create_dir_all(&tmp).unwrap();
cmd.env("RUST_TEST_TMPDIR", tmp);
cmd.arg("--adb-path").arg("adb"); cmd.arg("--adb-path").arg("adb");
cmd.arg("--adb-test-dir").arg(ADB_TEST_DIR); cmd.arg("--adb-test-dir").arg(ADB_TEST_DIR);
@ -2259,14 +2257,13 @@ impl Step for RemoteCopyLibs {
builder.ensure(compile::Std { compiler, target }); builder.ensure(compile::Std { compiler, target });
builder.info(&format!("REMOTE copy libs to emulator ({})", target)); builder.info(&format!("REMOTE copy libs to emulator ({})", target));
t!(fs::create_dir_all(builder.out.join("tmp")));
let server = builder.ensure(tool::RemoteTestServer { compiler, target }); let server = builder.ensure(tool::RemoteTestServer { compiler, target });
// Spawn the emulator and wait for it to come online // Spawn the emulator and wait for it to come online
let tool = builder.tool_exe(Tool::RemoteTestClient); let tool = builder.tool_exe(Tool::RemoteTestClient);
let mut cmd = Command::new(&tool); let mut cmd = Command::new(&tool);
cmd.arg("spawn-emulator").arg(target.triple).arg(&server).arg(builder.out.join("tmp")); cmd.arg("spawn-emulator").arg(target.triple).arg(&server).arg(builder.tempdir());
if let Some(rootfs) = builder.qemu_rootfs(target) { if let Some(rootfs) = builder.qemu_rootfs(target) {
cmd.arg(rootfs); cmd.arg(rootfs);
} }
@ -2300,7 +2297,7 @@ impl Step for Distcheck {
/// Runs "distcheck", a 'make check' from a tarball /// Runs "distcheck", a 'make check' from a tarball
fn run(self, builder: &Builder<'_>) { fn run(self, builder: &Builder<'_>) {
builder.info("Distcheck"); builder.info("Distcheck");
let dir = builder.out.join("tmp").join("distcheck"); let dir = builder.tempdir().join("distcheck");
let _ = fs::remove_dir_all(&dir); let _ = fs::remove_dir_all(&dir);
t!(fs::create_dir_all(&dir)); t!(fs::create_dir_all(&dir));
@ -2326,7 +2323,7 @@ impl Step for Distcheck {
// Now make sure that rust-src has all of libstd's dependencies // Now make sure that rust-src has all of libstd's dependencies
builder.info("Distcheck rust-src"); builder.info("Distcheck rust-src");
let dir = builder.out.join("tmp").join("distcheck-src"); let dir = builder.tempdir().join("distcheck-src");
let _ = fs::remove_dir_all(&dir); let _ = fs::remove_dir_all(&dir);
t!(fs::create_dir_all(&dir)); t!(fs::create_dir_all(&dir));