def add_ancestor(self, artifact):
other_path = artifact._archiver.provenance_dir
if other_path is None:
# The artifact doesn't have provenance (e.g. version 0)
# it would be possible to invent a metadata.yaml, but we won't know
# the framework version for the VERSION file. Even if we did
# it won't accomplish a lot and there shouldn't be enough
# version 0 artifacts in the wild to be important in practice.
# NOTE: this implies that it is possible for an action.yaml file to
# contain an artifact UUID that is not in the artifacts/ directory.
return NoProvenance(artifact.uuid)
destination = self.ancestor_dir / str(artifact.uuid)
# If it exists, then the artifact is already in the provenance
# (and so are its ancestors)
if not destination.exists():
# Handle root node of ancestor
shutil.copytree(
str(other_path), str(destination),
ignore=shutil.ignore_patterns(self.ANCESTOR_DIR + '*'))
# Handle ancestral nodes of ancestor
grandcestor_path = other_path / self.ANCESTOR_DIR
if grandcestor_path.exists():
for grandcestor in grandcestor_path.iterdir():
destination = self.ancestor_dir / grandcestor.name
if not destination.exists():
shutil.copytree(str(grandcestor), str(destination))
return str(artifact.uuid)
评论列表
文章目录