Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve I/O error message for fingerprint of build script #10191

Merged
merged 1 commit into from
Dec 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions src/cargo/core/compiler/fingerprint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,7 @@ use std::collections::hash_map::{Entry, HashMap};
use std::convert::TryInto;
use std::env;
use std::hash::{self, Hash, Hasher};
use std::io;
use std::path::{Path, PathBuf};
use std::str;
use std::sync::{Arc, Mutex};
Expand Down Expand Up @@ -1366,11 +1367,19 @@ fn calculate_run_custom_build(cx: &mut Context<'_, '_>, unit: &Unit) -> CargoRes
let local = (gen_local)(
deps,
Some(&|| {
pkg_fingerprint(cx.bcx, &unit.pkg).with_context(|| {
format!(
"failed to determine package fingerprint for build script for {}",
unit.pkg
)
const IO_ERR_MESSAGE: &str = "\
An I/O error happened. Please make sure you can access the file.

By default, if your project contains a build script, cargo scans all files in
it to determine whether a rebuild is needed. If you don't expect to access the
file, specify `rerun-if-changed` in your build script.
See https://doc.rust-lang.org/cargo/reference/build-scripts.html#rerun-if-changed for more information.";
pkg_fingerprint(cx.bcx, &unit.pkg).map_err(|err| {
let mut message = format!("failed to determine package fingerprint for build script for {}", unit.pkg);
if err.root_cause().is::<io::Error>() {
message = format!("{}\n{}", message, IO_ERR_MESSAGE)
}
err.context(message)
})
}),
)?
Expand Down
6 changes: 6 additions & 0 deletions tests/testsuite/build_script.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4639,6 +4639,12 @@ fn build_script_scan_eacces() {
.with_stderr(
"\
[ERROR] failed to determine package fingerprint for build script for foo v0.0.1 ([..]/foo)
An I/O error happened[..]

By default[..]
it to[..]
file[..]
See[..]

Caused by:
failed to determine the most recently modified file in [..]/foo
Expand Down