fix(solc): skip artifacts check for files without artifacts (#1018)

This commit is contained in:
Matthias Seitz 2022-03-13 23:36:26 +01:00 committed by GitHub
parent beffe32f15
commit 6b0a1f7911
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 16 deletions

View File

@ -638,6 +638,10 @@ impl<'a, T: ArtifactOutput> ArtifactsCacheInner<'a, T> {
return true return true
} }
// only check artifact's existence if the file generated artifacts.
// e.g. a solidity file consisting only of import statements (like interfaces that
// re-export) do not create artifacts
if !entry.artifacts.is_empty() {
if !entry.contains_version(version) { if !entry.contains_version(version) {
tracing::trace!( tracing::trace!(
"missing linked artifacts for source file `{}` for version \"{}\"", "missing linked artifacts for source file `{}` for version \"{}\"",
@ -656,6 +660,7 @@ impl<'a, T: ArtifactOutput> ArtifactsCacheInner<'a, T> {
}) { }) {
return true return true
} }
}
// all things match, can be reused // all things match, can be reused
return false return false
} }

View File

@ -683,3 +683,51 @@ fn can_recompile_with_changes() {
assert!(compiled.find("A").is_some()); assert!(compiled.find("A").is_some());
assert!(compiled.find("B").is_some()); assert!(compiled.find("B").is_some());
} }
#[test]
fn can_recompile_unchanged_with_empty_files() {
let tmp = TempProject::dapptools().unwrap();
tmp.add_source(
"A",
r#"
pragma solidity ^0.8.10;
import "./B.sol";
contract A {}
"#,
)
.unwrap();
tmp.add_source(
"B",
r#"
pragma solidity ^0.8.10;
import "./C.sol";
"#,
)
.unwrap();
let c = r#"
pragma solidity ^0.8.10;
contract C {}
"#;
tmp.add_source("C", c).unwrap();
let compiled = tmp.compile().unwrap();
assert!(!compiled.has_compiler_errors());
assert!(compiled.find("A").is_some());
assert!(compiled.find("C").is_some());
let compiled = tmp.compile().unwrap();
assert!(compiled.find("A").is_some());
assert!(compiled.find("C").is_some());
assert!(compiled.is_unchanged());
// modify C.sol
tmp.add_source("C", format!("{}\n", c)).unwrap();
let compiled = tmp.compile().unwrap();
assert!(!compiled.has_compiler_errors());
assert!(!compiled.is_unchanged());
assert!(compiled.find("A").is_some());
assert!(compiled.find("C").is_some());
}