diff options
| author | Jim MacArthur <jim.macarthur@codethink.co.uk> | 2018-05-25 15:15:25 +0100 |
|---|---|---|
| committer | Jim MacArthur <jim@mode7.co.uk> | 2018-05-28 11:31:59 +0100 |
| commit | 58b049e47891f74d5994b32fea314a7430c58f1c (patch) | |
| tree | 39323aed9783dfbd94dc54b4178e62d6e2feac17 | |
| parent | 01b1196fe6189e3e134e0d31047248d54b7b8bf8 (diff) | |
| download | buildstream-58b049e47891f74d5994b32fea314a7430c58f1c.tar.gz | |
Replace 'name' with savename/filename
| -rw-r--r-- | buildstream/storage/_casbaseddirectory.py | 50 |
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 |
