diff --git a/buildstream/storage/_filebaseddirectory.py b/buildstream/storage/_filebaseddirectory.py
index 19d35a7b1c0bdb8b40a8fe45f0c1979d9633f520..a0319fdcc9f4b20f4b09fe38b03b2d4937ffbc9c 100644
--- a/buildstream/storage/_filebaseddirectory.py
+++ b/buildstream/storage/_filebaseddirectory.py
@@ -121,8 +121,12 @@ class FileBasedDirectory(Directory):
 
             for f in import_result.files_written:
                 os.utime(os.path.join(self.external_directory, f), times=(cur_time, cur_time))
+        self.mark_changed()
         return import_result
 
+    def mark_changed(self):
+        self._directory_read = False
+
     def set_deterministic_mtime(self):
         _set_deterministic_mtime(self.external_directory)
 
diff --git a/buildstream/storage/directory.py b/buildstream/storage/directory.py
index 7ff7e790a6b1ef42e58883b65c03eca9a1c70d44..52b0fbb2f5c17374df3cbd19cbd02ea4a1b8a7a9 100644
--- a/buildstream/storage/directory.py
+++ b/buildstream/storage/directory.py
@@ -124,6 +124,14 @@ class Directory():
         """
         raise NotImplementedError()
 
+    def mark_changed(self):
+        """ Mark this directory as having been changed outside this API. This
+        normally can only happen by calling the Sandbox's `run`
+        method.
+
+        """
+        raise NotImplementedError()
+
     # Convenience functions
     def is_empty(self):
         """ Return true if this directory has no files, subdirectories or links in it.