summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Salmon <will.salmon@codethink.co.uk>2019-05-14 16:59:41 +0100
committerWilliam Salmon <will.salmon@codethink.co.uk>2019-07-25 10:08:18 +0100
commit3e5790d151faaddbeb376eb8cb24178fa9899c17 (patch)
treedf2d3b3c5b0b739abc68b0e15603b85272024510
parent64c1ceed084b71304180738f9104d637410433ed (diff)
downloadbuildstream-3e5790d151faaddbeb376eb8cb24178fa9899c17.tar.gz
Fix infinite recursion in _partial_import_cas_into_cas
-rw-r--r--src/buildstream/storage/_casbaseddirectory.py9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/buildstream/storage/_casbaseddirectory.py b/src/buildstream/storage/_casbaseddirectory.py
index 2c5d751e4..ea4862e50 100644
--- a/src/buildstream/storage/_casbaseddirectory.py
+++ b/src/buildstream/storage/_casbaseddirectory.py
@@ -270,8 +270,10 @@ class CasBasedDirectory(Directory):
self._copy_link_from_filesystem(source_directory, direntry.name)
result.files_written.append(relative_pathname)
- def _partial_import_cas_into_cas(self, source_directory, filter_callback, *, path_prefix="", result):
+ def _partial_import_cas_into_cas(self, source_directory, filter_callback, *, path_prefix="", origin=None, result):
""" Import files from a CAS-based directory. """
+ if origin is None:
+ origin = self
for name, entry in source_directory.index.items():
# The destination filename, relative to the root where the import started
@@ -307,6 +309,8 @@ class CasBasedDirectory(Directory):
subdir.__add_files_to_result(path_prefix=relative_pathname, result=result)
else:
src_subdir = source_directory.descend(name)
+ if src_subdir == origin:
+ continue
try:
dest_subdir = self.descend(name, create=create_subdir)
@@ -316,7 +320,8 @@ class CasBasedDirectory(Directory):
.format(filetype, relative_pathname))
dest_subdir._partial_import_cas_into_cas(src_subdir, filter_callback,
- path_prefix=relative_pathname, result=result)
+ path_prefix=relative_pathname,
+ origin=origin, result=result)
if filter_callback and not filter_callback(relative_pathname):
if is_dir and create_subdir and dest_subdir.is_empty():