summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim MacArthur <jim.macarthur@codethink.co.uk>2018-05-25 16:56:06 +0100
committerJim MacArthur <jim.macarthur@codethink.co.uk>2018-05-25 16:56:06 +0100
commita57aac5a56d8f14612d1a03f923943f898c6ab70 (patch)
treec3d6c1d3dd4080a02b8ea67e69b718139f1a1f63
parent9f0a371da42aa941fcd45030813d3c37baf0ce38 (diff)
downloadbuildstream-jmac/virtual_directories_2.tar.gz
Basic FileListResult supportjmac/virtual_directories_2
-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.