Jim MacArthur pushed to branch jmac/cache_artifacts_with_vdir at BuildStream / buildstream
Commits:
3 changed files:
- buildstream/storage/_casbaseddirectory.py
- buildstream/storage/_filebaseddirectory.py
- buildstream/storage/directory.py
Changes:
... | ... | @@ -849,16 +849,14 @@ class CasBasedDirectory(Directory): |
849 | 849 |
return total
|
850 | 850 |
|
851 | 851 |
def fast_directory_import(self, dirname, other_directory):
|
852 |
- # Fast import system. This creates a subdirectory in this directory which is equivalent to other_directory.
|
|
853 |
- # 'dirname' must not exist in this directory.
|
|
854 | 852 |
assert dirname not in self.index
|
855 | 853 |
if isinstance(other_directory, CasBasedDirectory):
|
856 | 854 |
filenode = self.pb2_directory.directories.add(digest=other_directory.pb_object.digest, name=dirname)
|
857 | 855 |
self.index[dirname] = IndexEntry(other_directory.pb_object, buildstream_object=other_directory.buildstream_object)
|
858 | 856 |
else:
|
859 | 857 |
# Revert to the old method.
|
860 |
- subdir = assemblevdir.descend("files", create=True)
|
|
861 |
- subdir.import_files(collectvdir, can_link=True)
|
|
858 |
+ subdir = self.descend(dirname, create=True)
|
|
859 |
+ subdir.import_files(other_directory, can_link=True)
|
|
862 | 860 |
|
863 | 861 |
def _get_identifier(self):
|
864 | 862 |
path = ""
|
... | ... | @@ -125,6 +125,13 @@ class FileBasedDirectory(Directory): |
125 | 125 |
self._mark_changed()
|
126 | 126 |
return import_result
|
127 | 127 |
|
128 |
+ def fast_directory_import(self, dirname, other_directory):
|
|
129 |
+ # We can't do a fast import into a FileBasedDirectory, so this
|
|
130 |
+ # falls back to import_files.
|
|
131 |
+ assert dirname not in self.index
|
|
132 |
+ subdir = self.descend(dirname, create=True)
|
|
133 |
+ subdir.import_files(other_directory, can_link=True)
|
|
134 |
+ |
|
128 | 135 |
def _mark_changed(self):
|
129 | 136 |
self._directory_read = False
|
130 | 137 |
|
... | ... | @@ -99,6 +99,30 @@ class Directory(): |
99 | 99 |
|
100 | 100 |
raise NotImplementedError()
|
101 | 101 |
|
102 |
+ def fast_directory_import(self, dirname, other_directory):
|
|
103 |
+ """Import other_directory as a new directory in this one.
|
|
104 |
+ |
|
105 |
+ This is a potentially faster method than import_directory with
|
|
106 |
+ fewer options. dirname must not already exist, and all files
|
|
107 |
+ are imported unconditionally. It is assumed that it is
|
|
108 |
+ acceptable to use filesystem hard links to files in
|
|
109 |
+ other_directory. You cannot update utimes or get a
|
|
110 |
+ FileListResult.
|
|
111 |
+ |
|
112 |
+ This only provides a benefit if both this and other_directory
|
|
113 |
+ are CAS-based directories. In other cases, it will fall back
|
|
114 |
+ to import_directory.
|
|
115 |
+ |
|
116 |
+ Args:
|
|
117 |
+ dirname: The name to call the subdirectory in this
|
|
118 |
+ directory. This must not already exist in this directory.
|
|
119 |
+ |
|
120 |
+ other_directory: The directory to import.
|
|
121 |
+ |
|
122 |
+ """
|
|
123 |
+ |
|
124 |
+ raise NotImplementedError()
|
|
125 |
+ |
|
102 | 126 |
def export_files(self, to_directory, *, can_link=False, can_destroy=False):
|
103 | 127 |
"""Copies everything from this into to_directory.
|
104 | 128 |
|