diff options
author | Jim MacArthur <jim.macarthur@codethink.co.uk> | 2018-09-28 16:33:15 +0100 |
---|---|---|
committer | Jim MacArthur <jim.macarthur@codethink.co.uk> | 2018-09-28 16:33:15 +0100 |
commit | ab0a38cb200c5732666966aa1445f47d2eb60367 (patch) | |
tree | 43f825c192ab9375700ba51906cd4ec336749d39 | |
parent | ce50bc72cbf35a792e81b549bfced8ae14629fad (diff) | |
download | buildstream-ab0a38cb200c5732666966aa1445f47d2eb60367.tar.gz |
CasBasedDirectory: New way of doing list_relative_paths - not working yet
-rw-r--r-- | buildstream/storage/_casbaseddirectory.py | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/buildstream/storage/_casbaseddirectory.py b/buildstream/storage/_casbaseddirectory.py index d580635c1..3a000d867 100644 --- a/buildstream/storage/_casbaseddirectory.py +++ b/buildstream/storage/_casbaseddirectory.py @@ -527,7 +527,13 @@ class CasBasedDirectory(Directory): filelist.append(k) return filelist - def list_relative_paths(self): + def _contains_only_directories(self): + for (k, v) in self.index.items(): + if not isinstance(v.buildstream_object, CasBasedDirectory): + return False + return True + + def list_relative_paths(self, relpath=""): """Provide a list of all relative paths. NOTE: This list is not in the same order as utils.list_relative_paths. @@ -535,13 +541,25 @@ class CasBasedDirectory(Directory): Return value: List(str) - list of all paths """ - filelist = [] - for (k, v) in self.index.items(): - if isinstance(v.buildstream_object, CasBasedDirectory): - filelist.extend([k + os.path.sep + x for x in v.buildstream_object.list_relative_paths()]) - elif isinstance(v.pb_object, remote_execution_pb2.FileNode): - filelist.append(k) - return filelist + print("Running list_relative_paths on relpath {}".format(relpath)) + symlink_list = filter(lambda i: isinstance(i[1].pb_object, remote_execution_pb2.SymlinkNode), self.index.items()) + file_list = filter(lambda i: isinstance(i[1].pb_object, remote_execution_pb2.FileNode), self.index.items()) + print("Running list_relative_paths on relpath {}. files={}, symlinks={}".format(relpath, [f[0] for f in file_list], [s[0] for s in symlink_list])) + + for (k, v) in sorted(symlink_list): + print("Yielding symlink {}".format(k)) + yield os.path.join(relpath, k) + for (k, v) in sorted(file_list): + print("Yielding file {}".format(k)) + yield os.path.join(relpath, k) + else: + print("Yielding empty directory name {}".format(relpath)) + yield relpath + + directory_list = filter(lambda i: isinstance(i[1].buildstream_object, CasBasedDirectory), self.index.items()) + for (k, v) in sorted(directory_list): + print("Yielding from subdirectory name {}".format(k)) + yield from v.buildstream_object.list_relative_paths(relpath=os.path.join(relpath, k)) def recalculate_hash(self): """ Recalcuates the hash for this directory and store the results in |