summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2019-02-24 13:49:09 +0100
committerJürg Billeter <j@bitron.ch>2019-02-26 12:12:46 +0100
commit23de7a917957075da7dd02f3f1d4a6c38d17a2c7 (patch)
tree0daac6324b25ee42d17830b780c86d58c1199de9
parent1bb0f8506da0055713caa373c45383c027756069 (diff)
downloadbuildstream-23de7a917957075da7dd02f3f1d4a6c38d17a2c7.tar.gz
_casbaseddirectory.py: Add type field to IndexEntry class
-rw-r--r--buildstream/storage/_casbaseddirectory.py21
1 files changed, 12 insertions, 9 deletions
diff --git a/buildstream/storage/_casbaseddirectory.py b/buildstream/storage/_casbaseddirectory.py
index 122e4d8b9..5e435811e 100644
--- a/buildstream/storage/_casbaseddirectory.py
+++ b/buildstream/storage/_casbaseddirectory.py
@@ -32,7 +32,7 @@ import stat
from .._protos.build.bazel.remote.execution.v2 import remote_execution_pb2
from .._exceptions import BstError
-from .directory import Directory, VirtualDirectoryError
+from .directory import Directory, VirtualDirectoryError, _FileType
from ._filebaseddirectory import FileBasedDirectory
from ..utils import FileListResult, safe_copy, list_relative_paths, _magic_timestamp
@@ -42,8 +42,9 @@ class IndexEntry():
for directory entries. Because we need both the remote_execution_pb2 object
and our own Directory object for directory entries, we store both. For files
and symlinks, only pb_object is used. """
- def __init__(self, pb_object, buildstream_object=None, modified=False):
+ def __init__(self, pb_object, entrytype, buildstream_object=None, modified=False):
self.pb_object = pb_object # Short for 'protocol buffer object')
+ self.type = entrytype
self.buildstream_object = buildstream_object
self.modified = modified
@@ -120,11 +121,12 @@ class CasBasedDirectory(Directory):
for entry in self.pb2_directory.directories:
buildStreamDirectory = CasBasedDirectory(self.cas_cache, ref=entry.digest,
parent=self, filename=entry.name)
- self.index[entry.name] = IndexEntry(entry, buildstream_object=buildStreamDirectory)
+ self.index[entry.name] = IndexEntry(entry, _FileType.DIRECTORY,
+ buildstream_object=buildStreamDirectory)
for entry in self.pb2_directory.files:
- self.index[entry.name] = IndexEntry(entry)
+ self.index[entry.name] = IndexEntry(entry, _FileType.REGULAR_FILE)
for entry in self.pb2_directory.symlinks:
- self.index[entry.name] = IndexEntry(entry)
+ self.index[entry.name] = IndexEntry(entry, _FileType.SYMLINK)
self._directory_read = True
def _recalculate_recursing_up(self, caller=None):
@@ -182,7 +184,7 @@ class CasBasedDirectory(Directory):
# Calculate the hash for an empty directory
new_directory = remote_execution_pb2.Directory()
self.cas_cache.add_object(digest=dirnode.digest, buffer=new_directory.SerializeToString())
- self.index[name] = IndexEntry(dirnode, buildstream_object=newdir)
+ self.index[name] = IndexEntry(dirnode, _FileType.DIRECTORY, buildstream_object=newdir)
return newdir
def _add_file(self, basename, filename, modified=False):
@@ -191,7 +193,8 @@ class CasBasedDirectory(Directory):
self.cas_cache.add_object(digest=filenode.digest, path=os.path.join(basename, filename))
is_executable = os.access(os.path.join(basename, filename), os.X_OK)
filenode.is_executable = is_executable
- self.index[filename] = IndexEntry(filenode, modified=modified or filename in self.index)
+ self.index[filename] = IndexEntry(filenode, _FileType.REGULAR_FILE,
+ modified=modified or filename in self.index)
def _copy_link_from_filesystem(self, basename, filename):
self._add_new_link_direct(filename, os.readlink(os.path.join(basename, filename)))
@@ -206,7 +209,7 @@ class CasBasedDirectory(Directory):
symlinknode.name = name
# A symlink node has no digest.
symlinknode.target = target
- self.index[name] = IndexEntry(symlinknode, modified=(existing_link is not None))
+ self.index[name] = IndexEntry(symlinknode, _FileType.SYMLINK, modified=(existing_link is not None))
def delete_entry(self, name):
for collection in [self.pb2_directory.files, self.pb2_directory.symlinks, self.pb2_directory.directories]:
@@ -396,7 +399,7 @@ class CasBasedDirectory(Directory):
if isinstance(item, remote_execution_pb2.FileNode):
filenode = self.pb2_directory.files.add(digest=item.digest, name=f,
is_executable=item.is_executable)
- self.index[f] = IndexEntry(filenode, modified=True)
+ self.index[f] = IndexEntry(filenode, _FileType.REGULAR_FILE, modified=True)
else:
assert isinstance(item, remote_execution_pb2.SymlinkNode)
self._add_new_link_direct(name=f, target=item.target)