summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildstream/plugins/sources/workspace.py2
-rw-r--r--src/buildstream/source.py24
2 files changed, 15 insertions, 11 deletions
diff --git a/src/buildstream/plugins/sources/workspace.py b/src/buildstream/plugins/sources/workspace.py
index d62a8a661..5d808e275 100644
--- a/src/buildstream/plugins/sources/workspace.py
+++ b/src/buildstream/plugins/sources/workspace.py
@@ -97,7 +97,7 @@ class WorkspaceSource(Source):
pass # pragma: nocover
def stage(self, directory: Directory) -> None:
- self.stage_into_directory(self.path, directory)
+ self.stage_into_directory(self.__cas_dir, directory)
def _get_local_path(self) -> str:
return self.path
diff --git a/src/buildstream/source.py b/src/buildstream/source.py
index e9170987d..534f984be 100644
--- a/src/buildstream/source.py
+++ b/src/buildstream/source.py
@@ -163,7 +163,7 @@ Class Reference
import os
from contextlib import contextmanager
-from typing import Iterable, Iterator, Optional, Tuple, TYPE_CHECKING
+from typing import Iterable, Iterator, Optional, Tuple, TYPE_CHECKING, Union
from . import _yaml, utils
from .node import MappingNode
@@ -671,22 +671,26 @@ class Source(Plugin):
return project.directory
def stage_into_cas(self, path: str) -> Tuple[Directory, str]:
- cas_dir = self._get_cas_dir()
- self.stage_into_directory(path, cas_dir)
- return cas_dir, self._get_dir_hash(cas_dir)
+ with self.timed_activity("Staging local files into CAS"):
+ cas_dir = self._get_cas_dir()
+ self.stage_into_directory(path, cas_dir)
+ return cas_dir, self._get_dir_hash(cas_dir)
- def stage_into_directory(self, path: str, directory: Directory) -> None:
+ def stage_into_directory(self, path: Union[str, Directory], directory: Directory) -> None:
assert isinstance(directory, Directory)
- with self.timed_activity("Staging local files into CAS"):
+ assert path
+ if isinstance(path, str):
if os.path.isdir(path) and not os.path.islink(path):
result = directory.import_files(path)
else:
result = directory.import_single_file(path)
+ else:
+ result = directory.import_files(path)
- if result.overwritten or result.ignored:
- raise SourceError(
- "Failed to stage source: files clash with existing directory",
- reason='ensure-stage-dir-fail')
+ if result.overwritten or result.ignored:
+ raise SourceError(
+ "Failed to stage source: files clash with existing directory",
+ reason='ensure-stage-dir-fail')
@contextmanager
def tempdir(self) -> Iterator[str]: