summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim MacArthur <jim.macarthur@codethink.co.uk>2018-05-25 15:15:25 +0100
committerJim MacArthur <jim@mode7.co.uk>2018-05-28 11:31:59 +0100
commit58b049e47891f74d5994b32fea314a7430c58f1c (patch)
tree39323aed9783dfbd94dc54b4178e62d6e2feac17
parent01b1196fe6189e3e134e0d31047248d54b7b8bf8 (diff)
downloadbuildstream-58b049e47891f74d5994b32fea314a7430c58f1c.tar.gz
Replace 'name' with savename/filename
-rw-r--r--buildstream/storage/_casbaseddirectory.py50
1 files changed, 30 insertions, 20 deletions
diff --git a/buildstream/storage/_casbaseddirectory.py b/buildstream/storage/_casbaseddirectory.py
index 2d6c9deea..023d186d7 100644
--- a/buildstream/storage/_casbaseddirectory.py
+++ b/buildstream/storage/_casbaseddirectory.py
@@ -66,30 +66,31 @@ class IndexEntry():
self.modified = modified
class CasBasedDirectory(Directory):
- def __init__(self, context, ref=None, parent=None, name="undefined"):
+ def __init__(self, context, ref=None, parent=None, savename="undefined", filename=None):
# I need a context...
self.context = context
self.cas_directory = os.path.join(context.artifactdir, 'googlecas')
- self.name = name # For debugging
+ self.filename = filename
+ self.savename = savename
self.directory = remote_execution_pb2.Directory()
- if name != "undefined" and ref is None:
+ if savename != "undefined" and ref is None:
# Load from existing head
- path = os.path.join(self.cas_directory, 'refs', 'heads', name)
+ path = os.path.join(self.cas_directory, 'refs', 'heads', savename)
if os.path.exists(path):
ref = remote_execution_pb2.Digest()
with open(path, 'rb') as f:
ref.hash = f.read()
- print("Will use {} for existing object {}".format(ref.hash, name))
+ print("Will use {} for existing object {}".format(ref.hash, savename))
if ref:
- with open(self._objpath(ref), 'rb') as f:
- self.directory.ParseFromString(f.read())
- if name == "undefined":
+ if savename == "undefined":
print("Loading a previous CasBasedDirectory with ref {}".format(ref.hash))
else:
- print("Loading a previous CasBasedDirectory with the name '{}' and ref {}".format(name, ref.hash))
+ print("Loading a previous CasBasedDirectory with the name '{}' and ref {}".format(savename, ref.hash))
+ with open(self._objpath(ref), 'rb') as f:
+ self.directory.ParseFromString(f.read())
else:
- print("Creating a new CasBasedDirectory with the name {}".format(name))
+ print("Creating a new CasBasedDirectory with the name {}".format(filename))
self.ref = ref
self.index = OrderedDict()
self.parent = parent
@@ -149,7 +150,7 @@ class CasBasedDirectory(Directory):
# Replace with tree read
for entry in self.directory.directories:
- self.index[entry.name] = IndexEntry(CasBasedDirectory(self.context, ref=entry.digest,parent=self))
+ self.index[entry.name] = IndexEntry(CasBasedDirectory(self.context, ref=entry.digest,parent=self, filename=entry.name))
for entry in self.directory.files:
self.index[entry.name] = IndexEntry(_FileObject(self, entry))
for entry in self.directory.symlinks:
@@ -157,14 +158,17 @@ class CasBasedDirectory(Directory):
self._directory_read = True
- def recalculate_hash(self) -> None:
+ def recalculate_hash(self, caller=None) -> None:
self.ref = self._hash_object(buffer=self.directory.SerializeToString())
+ if caller:
+ old_dir = self.find_directory(caller.filename)
+ self._hash_object(digest=old_dir.digest, buffer=caller.directory.SerializeToString())
if self.parent:
- self.parent.recalculate_hash()
+ self.parent.recalculate_hash(self)
def _add_new_blank_directory(self, name):
print("Creating new CasBasedDirectory '{}', blank".format(name))
- newdir = CasBasedDirectory(self.context, parent=self)
+ newdir = CasBasedDirectory(self.context, parent=self, filename=name)
dirnode = self.directory.directories.add()
dirnode.name = name
# Calculate the hash for an empty directory
@@ -191,7 +195,7 @@ class CasBasedDirectory(Directory):
raise VirtualDirectoryError("New directory {} in {} would overwrite existing non-directory of type {}".format(name, str(self), type(newdir)))
dirnode = self.find_directory(name)
else:
- newdir = CasBasedDirectory(self.context, parent=self)
+ newdir = CasBasedDirectory(self.context, parent=self, filename=name)
dirnode = self.directory.directories.add()
dirnode.name = name
@@ -284,18 +288,21 @@ class CasBasedDirectory(Directory):
self.recalculate_hash()
refdir = os.path.join(self.cas_directory, 'refs', 'heads')
refname = os.path.join(refdir,name)
+
if not os.path.exists(refdir):
os.makedirs(refdir)
with open(refname, "wt") as f:
f.write(self.ref.hash)
def recursive_save(self):
- if self.name != "undefined": #TODO: Not good enough!
- print("Automatic save of ref {} to {}".format(self.ref.hash, self.name))
- self.save(self.name)
+ # Always push this directory
+
+ if self.savename != "undefined": #TODO: Not good enough!
+ print("Automatic save of ref {} to {}".format(self.ref.hash, self.savename))
+ self.save(self.savename)
elif self.parent:
self.parent.recursive_save()
-
+
def import_files(self, external_pathspec: any, files: List[str] = None,
report_written: bool = True, update_utimes: bool = False,
can_link: bool = False) -> FileListResult:
@@ -437,6 +444,9 @@ class CasBasedDirectory(Directory):
path = ""
if self.parent:
path = str(self.parent)
- path += "/" + self.name
+ if(self.filename):
+ path += "/" + self.filename
+ else:
+ path += "/" + self.savename
return path