use std for file mtime and atime modifications

Since 1.75 std provides an interface to set access and modified times on files.
This change replaces the external dependency previously used for these operations
with the corresponding std functions.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
This commit is contained in:
onur-ozkan 2024-07-14 00:41:05 +03:00
parent e1f45a1442
commit e2c15fe03b
5 changed files with 17 additions and 11 deletions

View File

@ -48,7 +48,6 @@ dependencies = [
"clap_complete",
"cmake",
"fd-lock",
"filetime",
"home",
"ignore",
"junction",

View File

@ -44,7 +44,6 @@ build_helper = { path = "../tools/build_helper" }
clap = { version = "4.4", default-features = false, features = ["std", "usage", "help", "derive", "error-context"] }
clap_complete = "4.4"
fd-lock = "4.0"
filetime = "0.2"
home = "0.5"
ignore = "0.4"
libc = "0.2"

View File

@ -33,7 +33,6 @@ use crate::utils::helpers::{
};
use crate::LLVM_TOOLS;
use crate::{CLang, Compiler, DependencyType, GitRepo, Mode};
use filetime::FileTime;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct Std {
@ -2160,9 +2159,11 @@ pub fn strip_debug(builder: &Builder<'_>, target: TargetSelection, path: &Path)
return;
}
let previous_mtime = FileTime::from_last_modification_time(&path.metadata().unwrap());
let previous_mtime = t!(t!(path.metadata()).modified());
command("strip").capture().arg("--strip-debug").arg(path).run(builder);
let file = t!(fs::File::open(path));
// After running `strip`, we have to set the file modification time to what it was before,
// otherwise we risk Cargo invalidating its fingerprint and rebuilding the world next time
// bootstrap is invoked.
@ -2175,5 +2176,5 @@ pub fn strip_debug(builder: &Builder<'_>, target: TargetSelection, path: &Path)
// In the second invocation of bootstrap, Cargo will see that the mtime of librustc_driver.so
// is greater than the mtime of rustc-main, and will rebuild rustc-main. That will then cause
// everything else (standard library, future stages...) to be rebuilt.
t!(filetime::set_file_mtime(path, previous_mtime));
t!(file.set_modified(previous_mtime));
}

View File

@ -702,9 +702,13 @@ download-rustc = false
// time `rustc_llvm` build script ran. However, the timestamps of the
// files in the tarball are in the past, so it doesn't trigger a
// rebuild.
let now = filetime::FileTime::from_system_time(std::time::SystemTime::now());
let now = std::time::SystemTime::now();
let file_times = fs::FileTimes::new().set_accessed(now).set_modified(now);
let llvm_config = llvm_root.join("bin").join(exe("llvm-config", self.build));
t!(filetime::set_file_times(llvm_config, now, now));
let llvm_config_file = t!(File::open(llvm_config));
t!(llvm_config_file.set_times(file_times));
if self.should_fix_bins_and_dylibs() {
let llvm_lib = llvm_root.join("lib");

View File

@ -30,7 +30,6 @@ use std::time::SystemTime;
use build_helper::ci::{gha, CiEnv};
use build_helper::exit;
use filetime::FileTime;
use sha2::digest::Digest;
use termcolor::{ColorChoice, StandardStream, WriteColor};
use utils::channel::GitInfo;
@ -1693,9 +1692,13 @@ impl Build {
panic!("failed to copy `{}` to `{}`: {}", src.display(), dst.display(), e)
}
t!(fs::set_permissions(dst, metadata.permissions()));
let atime = FileTime::from_last_access_time(&metadata);
let mtime = FileTime::from_last_modification_time(&metadata);
t!(filetime::set_file_times(dst, atime, mtime));
let file_times = fs::FileTimes::new()
.set_accessed(t!(metadata.accessed()))
.set_modified(t!(metadata.modified()));
let dst_file = t!(fs::File::open(dst));
t!(dst_file.set_times(file_times));
}
}