diff options
-rw-r--r-- | src/buildstream/plugins/sources/workspace.py | 2 | ||||
-rw-r--r-- | src/buildstream/source.py | 24 |
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]: |