summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildstream/storage/_casbaseddirectory.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/buildstream/storage/_casbaseddirectory.py b/buildstream/storage/_casbaseddirectory.py
index fd138caac..4db590f22 100644
--- a/buildstream/storage/_casbaseddirectory.py
+++ b/buildstream/storage/_casbaseddirectory.py
@@ -178,6 +178,7 @@ class CasBasedDirectory(Directory):
self._hash_object(digest=dirnode.digest, buffer=directory.SerializeToString())
self.index[name] = IndexEntry(newdir)
self.recalculate_hash()
+ self.recursive_save()
return newdir
def find_directory(self, name):
@@ -262,25 +263,30 @@ class CasBasedDirectory(Directory):
newdir = self._add_new_blank_directory(subdirectory_spec[0])
return newdir
else:
- error = "No entry called '{}' found in the directory"
- raise VirtualDirectoryError(error.format(subdirectory_spec[0]))
+ error = "No entry called '{}' found in {}. There are directories called {}."
+ raise VirtualDirectoryError(error.format(subdirectory_spec[0], str(self), ",".join([entry.name for entry in self.directory.directories])))
return None
- def _import_files_from_directory(self, source_directory):
+ def _import_files_from_directory(self, source_directory, path_prefix=""):
+ result = FileListResult()
for name in sorted(os.listdir(source_directory)):
pathname = os.path.join(source_directory, name)
if os.path.islink(pathname):
self._add_new_link(pathname, name)
+ result.files_written.append(os.path.join(path_prefix,name))
elif os.path.isdir(pathname):
#print("Attempting to import DIRECTORY {} from {}".format(name, source_directory))
newdir = self._add_directory(name)
- newdir._import_files_from_directory(pathname)
+ dir_result = newdir._import_files_from_directory(pathname, os.path.join(path_prefix, name))
+ result.combine(dir_result)
# TODO: Explain why we need two loops or merge them
for name in sorted(os.listdir(source_directory)):
pathname = os.path.join(source_directory, name)
if os.path.isfile(pathname) and not os.path.islink(pathname):
#print("Attempting to import FILE {} from {}".format(name, source_directory))
self._add_new_file(source_directory, name)
+ result.files_written.append(os.path.join(path_prefix,name))
+ return result
def save(self, name):
"""Saves this directory into the content cache."""
@@ -344,9 +350,10 @@ class CasBasedDirectory(Directory):
source_directory = external_pathspec
# TODO: No notice is taken of the `files` argument, report_written, update_utimes or can_link.
- self._import_files_from_directory(source_directory)
+ result = self._import_files_from_directory(source_directory)
self.recursive_save()
-
+ return result
+
def set_deterministic_mtime(self) -> None:
""" Sets a static modification time for all regular files in this directory.
Since we don't store any modification time, we don't need to do anything.