fix(solc): only write cache file if build was successful (#1177)

This commit is contained in:
Matthias Seitz 2022-04-27 14:29:09 +02:00 committed by GitHub
parent a866cd5726
commit 86908bc533
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 4 deletions

View File

@ -854,9 +854,10 @@ impl<'a, T: ArtifactOutput> ArtifactsCache<'a, T> {
/// compiled and written to disk `written_artifacts`. /// compiled and written to disk `written_artifacts`.
/// ///
/// Returns all the _cached_ artifacts. /// Returns all the _cached_ artifacts.
pub fn write_cache( pub fn consume(
self, self,
written_artifacts: &Artifacts<T::Artifact>, written_artifacts: &Artifacts<T::Artifact>,
write_to_disk: bool,
) -> Result<Artifacts<T::Artifact>> { ) -> Result<Artifacts<T::Artifact>> {
match self { match self {
ArtifactsCache::Ephemeral(_, _) => Ok(Default::default()), ArtifactsCache::Ephemeral(_, _) => Ok(Default::default()),
@ -913,8 +914,11 @@ impl<'a, T: ArtifactOutput> ArtifactsCache<'a, T> {
.extend(dirty_source_files.into_iter().map(|(file, (entry, _))| (file, entry))); .extend(dirty_source_files.into_iter().map(|(file, (entry, _))| (file, entry)));
cache.strip_artifact_files_prefixes(project.artifacts_path()); cache.strip_artifact_files_prefixes(project.artifacts_path());
// write to disk // write to disk
if write_to_disk {
cache.write(project.cache_path())?; cache.write(project.cache_path())?;
}
Ok(cached_artifacts) Ok(cached_artifacts)
} }

View File

@ -304,7 +304,8 @@ impl<'a, T: ArtifactOutput> ArtifactsState<'a, T> {
fn write_cache(self) -> Result<ProjectCompileOutput<T>> { fn write_cache(self) -> Result<ProjectCompileOutput<T>> {
let ArtifactsState { output, cache, compiled_artifacts } = self; let ArtifactsState { output, cache, compiled_artifacts } = self;
let ignored_error_codes = cache.project().ignored_error_codes.clone(); let ignored_error_codes = cache.project().ignored_error_codes.clone();
let cached_artifacts = cache.write_cache(&compiled_artifacts)?; let skip_write_to_disk = cache.project().no_artifacts || output.has_error();
let cached_artifacts = cache.consume(&compiled_artifacts, !skip_write_to_disk)?;
Ok(ProjectCompileOutput { Ok(ProjectCompileOutput {
compiler_output: output, compiler_output: output,
compiled_artifacts, compiled_artifacts,

View File

@ -34,8 +34,10 @@ pub struct TempProject<T: ArtifactOutput = ConfigurableArtifacts> {
impl<T: ArtifactOutput> TempProject<T> { impl<T: ArtifactOutput> TempProject<T> {
/// Makes sure all resources are created /// Makes sure all resources are created
pub fn create_new(root: TempDir, inner: Project<T>) -> std::result::Result<Self, SolcIoError> { pub fn create_new(root: TempDir, inner: Project<T>) -> std::result::Result<Self, SolcIoError> {
let project = Self { _root: root, inner }; let mut project = Self { _root: root, inner };
project.paths().create_all()?; project.paths().create_all()?;
// ignore license warnings
project.inner.ignored_error_codes.push(1878);
Ok(project) Ok(project)
} }