Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ requires = [
build-backend = "setuptools.build_meta"

[tool.black]
target-version = ["py310", "py311", "py312", "py313", "py314"]
line-length = 119
exclude = '''
(
Expand Down
4 changes: 2 additions & 2 deletions src/buildstream/_cas/casdprocessmanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ def __init__(
*,
reserved=None,
low_watermark=None,
local_jobs=None
local_jobs=None,
):
os.makedirs(path, exist_ok=True)

Expand Down Expand Up @@ -160,7 +160,7 @@ def __init__(
stdout=logfile_fp,
stderr=subprocess.STDOUT,
env=self.__buildbox_casd_env(),
**process_group_kwargs
**process_group_kwargs,
)

self._casd_channel = None
Expand Down
6 changes: 3 additions & 3 deletions src/buildstream/_elementproxy.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ def stage_artifact(
action: OverlapAction = OverlapAction.WARNING,
include: Optional[List[str]] = None,
exclude: Optional[List[str]] = None,
orphans: bool = True
orphans: bool = True,
) -> FileListResult:

owner = cast("Element", self._owner)
Expand All @@ -123,7 +123,7 @@ def stage_dependency_artifacts(
action: OverlapAction = OverlapAction.WARNING,
include: Optional[List[str]] = None,
exclude: Optional[List[str]] = None,
orphans: bool = True
orphans: bool = True,
) -> None:
#
# Same approach used here as in Element.dependencies()
Expand Down Expand Up @@ -172,7 +172,7 @@ def _stage_artifact(
include: Optional[List[str]] = None,
exclude: Optional[List[str]] = None,
orphans: bool = True,
owner: Optional["Element"] = None
owner: Optional["Element"] = None,
) -> FileListResult:
owner = cast("Element", self._owner)
element = cast("Element", self._plugin)
Expand Down
2 changes: 1 addition & 1 deletion src/buildstream/_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def __init__(
elapsed: Optional[datetime.timedelta] = None,
logfile: Optional[str] = None,
sandbox: bool = False,
scheduler: bool = False
scheduler: bool = False,
):
self.message_type: str = message_type # Message type
self.message: str = message # The message string
Expand Down
2 changes: 1 addition & 1 deletion src/buildstream/_messenger.py
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ def simple_task(
task_name: Optional[str] = None,
detail: Optional[str] = None,
silent_nested: bool = False,
**kwargs
**kwargs,
) -> Iterator[Optional[Task]]:
# Bypass use of State when none exists (e.g. tests)
if not self._state:
Expand Down
2 changes: 1 addition & 1 deletion src/buildstream/_pipeline.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ def get_selection(
mode: _PipelineSelection,
*,
silent: bool = True,
depth_sort: bool = False
depth_sort: bool = False,
) -> List[Element]:
def redirect_and_log() -> List[Element]:
# Redirect and log if permitted
Expand Down
2 changes: 1 addition & 1 deletion src/buildstream/_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ def __init__(
parent_loader: Optional[Loader] = None,
provenance_node: Optional[ProvenanceInformation] = None,
search_for_project: bool = True,
fetch_subprojects=None
fetch_subprojects=None,
):
#
# Public members
Expand Down
2 changes: 1 addition & 1 deletion src/buildstream/_scheduler/jobs/job.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ def message(self, message_type, message, **kwargs):
message,
element_name=self._message_element_name,
element_key=self._message_element_key,
**kwargs
**kwargs,
)
self._messenger.message(message)

Expand Down
7 changes: 4 additions & 3 deletions src/buildstream/buildelement.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,9 +203,10 @@ def configure_sandbox(self, sandbox):
sorted_envs = sorted(self.__digest_environment)
for digest_variable in sorted_envs:
element_list = [element for element, _ in self.__digest_environment[digest_variable]]
with self.timed_activity(
f"Staging dependencies for '{digest_variable}' in subsandbox", silent_nested=True
), self.subsandbox(sandbox) as subsandbox:
with (
self.timed_activity(f"Staging dependencies for '{digest_variable}' in subsandbox", silent_nested=True),
self.subsandbox(sandbox) as subsandbox,
):
self.stage_dependency_artifacts(subsandbox, element_list)
digest = subsandbox.get_virtual_directory()._get_digest()
env[digest_variable] = "{}/{}".format(digest.hash, digest.size_bytes)
Expand Down
2 changes: 1 addition & 1 deletion src/buildstream/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,7 @@ def blocking_activity(
activity_name: str,
*,
detail: Optional[str] = None,
silent_nested: bool = False
silent_nested: bool = False,
) -> T1:
"""Execute a blocking activity in the background.

Expand Down
2 changes: 1 addition & 1 deletion src/buildstream/sandbox/_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def __init__(
build_uid: Optional[int] = None,
build_gid: Optional[int] = None,
remote_apis_socket_path: Optional[str] = None,
remote_apis_socket_action_cache_enable_update: bool = False
remote_apis_socket_action_cache_enable_update: bool = False,
):
self.build_os = build_os
self.build_arch = build_arch
Expand Down
9 changes: 6 additions & 3 deletions src/buildstream/sandbox/_sandboxremote.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,12 @@ def __run_remote_command(stub, execute_request=None, running_operation=None):

# Set up signal handler to trigger cancel_operation on SIGTERM
operation = None
with self._get_context().messenger.timed_activity(
"Waiting for the remote build to complete", element_name=self._get_element_name()
), _signals.terminator(self.cancel_operation):
with (
self._get_context().messenger.timed_activity(
"Waiting for the remote build to complete", element_name=self._get_element_name()
),
_signals.terminator(self.cancel_operation),
):
operation = __run_remote_command(stub, execute_request=request)
if operation is None:
return None
Expand Down
4 changes: 2 additions & 2 deletions src/buildstream/sandbox/sandbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ def run(
root_read_only: bool = False,
cwd: Optional[str] = None,
env: Optional[Dict[str, str]] = None,
label: Optional[str] = None
label: Optional[str] = None,
) -> Optional[int]:
"""Run a command in the sandbox.

Expand Down Expand Up @@ -343,7 +343,7 @@ def _run_with_flags(
flags: int,
cwd: Optional[str] = None,
env: Optional[Dict[str, str]] = None,
label: Optional[str] = None
label: Optional[str] = None,
) -> Optional[int]:
if not self.__allow_run:
raise _SandboxBug("Element specified BST_RUN_COMMANDS as False but called Sandbox.run()")
Expand Down
8 changes: 4 additions & 4 deletions src/buildstream/storage/_casbaseddirectory.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def __init__(
target: Optional[str] = None,
is_executable: bool = False,
directory: Optional["CasBasedDirectory"] = None,
mtime: Optional[timestamp_pb2.Timestamp] = None # pylint: disable=no-member
mtime: Optional[timestamp_pb2.Timestamp] = None, # pylint: disable=no-member
) -> None:
# The CAS cache
self.cas_cache: CASCache = cas_cache
Expand Down Expand Up @@ -132,7 +132,7 @@ def __init__(
*,
digest=None,
parent: Optional["CasBasedDirectory"] = None,
filename: Optional[str] = None
filename: Optional[str] = None,
) -> None:
# The CAS cache
self.__cas_cache: CASCache = cas_cache
Expand Down Expand Up @@ -358,7 +358,7 @@ def _import_files(
filter_callback: Optional[Callable[[str], bool]] = None,
update_mtime: Optional[float] = None,
properties: Optional[List[str]] = None,
collect_result: bool = True
collect_result: bool = True,
) -> Optional[FileListResult]:
result = FileListResult() if collect_result else None

Expand Down Expand Up @@ -762,7 +762,7 @@ def __partial_import_cas_into_cas(
*,
path_prefix: str = "",
origin: Optional["CasBasedDirectory"] = None,
result: Optional[FileListResult]
result: Optional[FileListResult],
) -> None:
if origin is None:
origin = self
Expand Down
4 changes: 2 additions & 2 deletions src/buildstream/storage/_filebaseddirectory.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ def _import_files(
filter_callback: Optional[Callable[[str], bool]] = None,
update_mtime: Optional[float] = None,
properties: Optional[List[str]] = None,
collect_result: bool = True
collect_result: bool = True,
) -> FileListResult:

# See if we can get a source directory to copy from
Expand Down Expand Up @@ -405,7 +405,7 @@ def __import_files_from_directory(
*,
path_prefix: str = "",
update_mtime: Optional[float] = None,
result: FileListResult
result: FileListResult,
) -> None:

# Iterate over entries in the source directory
Expand Down
6 changes: 3 additions & 3 deletions src/buildstream/storage/directory.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ def import_files(
external_pathspec: Union["Directory", str],
*,
filter_callback: Optional[Callable[[str], bool]] = None,
collect_result: bool = True
collect_result: bool = True,
) -> Optional[FileListResult]:
"""Imports some or all files from external_path into this directory.

Expand Down Expand Up @@ -405,7 +405,7 @@ def _import_files_internal(
filter_callback: Optional[Callable[[str], bool]] = None,
update_mtime: Optional[float] = None,
properties: Optional[List[str]] = None,
collect_result: bool = True
collect_result: bool = True,
) -> Optional[FileListResult]:
return self._import_files(
external_pathspec,
Expand Down Expand Up @@ -444,7 +444,7 @@ def _import_files(
filter_callback: Optional[Callable[[str], bool]] = None,
update_mtime: Optional[float] = None,
properties: Optional[List[str]] = None,
collect_result: bool = True
collect_result: bool = True,
) -> Optional[FileListResult]:
raise NotImplementedError()

Expand Down
21 changes: 12 additions & 9 deletions src/buildstream/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,7 @@ def copy_files(
*,
filter_callback: Optional[Callable[[str], bool]] = None,
ignore_missing: bool = False,
report_written: bool = False
report_written: bool = False,
) -> FileListResult:
"""Copy files from source to destination.

Expand Down Expand Up @@ -490,7 +490,7 @@ def link_files(
*,
filter_callback: Optional[Callable[[str], bool]] = None,
ignore_missing: bool = False,
report_written: bool = False
report_written: bool = False,
) -> FileListResult:
"""Hardlink files from source to destination.

Expand Down Expand Up @@ -630,7 +630,7 @@ def save_file_atomic(
newline: Optional[str] = None,
closefd: bool = True,
opener: Optional[Callable[[str, int], int]] = None,
tempdir: Optional[str] = None
tempdir: Optional[str] = None,
) -> Iterator[IO]:
"""Save a file with a temporary name and rename it into place when ready.

Expand Down Expand Up @@ -1275,9 +1275,10 @@ def close_tempfile():
if temp is not None:
temp.close()

with _signals.terminator(close_tempfile), tempfile.NamedTemporaryFile(
mode=mode, encoding=encoding, suffix=suffix, prefix=prefix, dir=dir
) as temp:
with (
_signals.terminator(close_tempfile),
tempfile.NamedTemporaryFile(mode=mode, encoding=encoding, suffix=suffix, prefix=prefix, dir=dir) as temp,
):
yield temp


Expand Down Expand Up @@ -1375,9 +1376,11 @@ def resume_proc():
group_id = os.getpgid(process.pid)
os.killpg(group_id, signal.SIGCONT)

with _signals.suspendable(suspend_proc, resume_proc), _signals.terminator(kill_proc), subprocess.Popen(
*popenargs, universal_newlines=True, **kwargs
) as process:
with (
_signals.suspendable(suspend_proc, resume_proc),
_signals.terminator(kill_proc),
subprocess.Popen(*popenargs, universal_newlines=True, **kwargs) as process,
):
# Here, we don't use `process.communicate()` directly without a timeout
# This is because, if we were to do that, and the process would never
# output anything, the control would never be given back to the python
Expand Down
7 changes: 4 additions & 3 deletions tests/artifactcache/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,10 @@ def test_artifact_cache_precedence(tmpdir, override_caches, project_caches, user
project_config_file = str(project_dir.join("project.conf"))
_yaml.roundtrip_dump(project_config, file=project_config_file)

with runcli.configured(str(tmpdir), user_config) as user_config_file, dummy_context(
config=user_config_file
) as context:
with (
runcli.configured(str(tmpdir), user_config) as user_config_file,
dummy_context(config=user_config_file) as context,
):
project = Project(str(project_dir), context)
project.ensure_fully_loaded()

Expand Down
7 changes: 4 additions & 3 deletions tests/artifactcache/junctions.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ def test_push_pull(cli, tmpdir, datafiles):
project = os.path.join(str(datafiles), "parent")
base_project = os.path.join(str(project), "base")

with create_artifact_share(os.path.join(str(tmpdir), "artifactshare-parent")) as share, create_artifact_share(
os.path.join(str(tmpdir), "artifactshare-base")
) as base_share:
with (
create_artifact_share(os.path.join(str(tmpdir), "artifactshare-parent")) as share,
create_artifact_share(os.path.join(str(tmpdir), "artifactshare-base")) as base_share,
):

# First build it without the artifact cache configured
result = cli.run(project=project, args=["build", "target.bst"])
Expand Down
21 changes: 12 additions & 9 deletions tests/frontend/pull.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,10 @@ def test_push_pull_deps(cli, tmpdir, datafiles, deps, expected_states):
def test_pull_secondary_cache(cli, tmpdir, datafiles):
project = str(datafiles)

with create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as share1, create_artifact_share(
os.path.join(str(tmpdir), "artifactshare2")
) as share2:
with (
create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as share1,
create_artifact_share(os.path.join(str(tmpdir), "artifactshare2")) as share2,
):

# Build the target and push it to share2 only.
cli.configure(
Expand Down Expand Up @@ -149,9 +150,10 @@ def test_pull_secondary_cache(cli, tmpdir, datafiles):
def test_push_pull_specific_remote(cli, tmpdir, datafiles):
project = str(datafiles)

with create_artifact_share(os.path.join(str(tmpdir), "goodartifactshare")) as good_share, create_artifact_share(
os.path.join(str(tmpdir), "badartifactshare")
) as bad_share:
with (
create_artifact_share(os.path.join(str(tmpdir), "goodartifactshare")) as good_share,
create_artifact_share(os.path.join(str(tmpdir), "badartifactshare")) as bad_share,
):

# Build the target so we have it cached locally only.
result = cli.run(project=project, args=["build", "target.bst"])
Expand Down Expand Up @@ -430,9 +432,10 @@ def test_build_remote_option(caplog, cli, tmpdir, datafiles):
project = str(datafiles)
caplog.set_level(1)

with create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as shareuser, create_artifact_share(
os.path.join(str(tmpdir), "artifactshare2")
) as sharecli:
with (
create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as shareuser,
create_artifact_share(os.path.join(str(tmpdir), "artifactshare2")) as sharecli,
):

# Configure shareuser remote in user conf
cli.configure({"artifacts": {"servers": [{"url": shareuser.repo, "push": True}]}})
Expand Down
15 changes: 9 additions & 6 deletions tests/frontend/push.py
Original file line number Diff line number Diff line change
Expand Up @@ -399,9 +399,10 @@ def test_push_after_pull(cli, tmpdir, datafiles):
project = str(datafiles)

# Set up two artifact shares.
with create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as share1, create_artifact_share(
os.path.join(str(tmpdir), "artifactshare2")
) as share2:
with (
create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as share1,
create_artifact_share(os.path.join(str(tmpdir), "artifactshare2")) as share2,
):

# Set the scene: share1 has the artifact, share2 does not.
#
Expand Down Expand Up @@ -690,9 +691,11 @@ def test_build_remote_option(caplog, cli, tmpdir, datafiles, use_remote, ignore_
project = str(datafiles)
caplog.set_level(1)

with create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as shareuser, create_artifact_share(
os.path.join(str(tmpdir), "artifactshare2")
) as shareproject, create_artifact_share(os.path.join(str(tmpdir), "artifactshare3")) as sharecli:
with (
create_artifact_share(os.path.join(str(tmpdir), "artifactshare1")) as shareuser,
create_artifact_share(os.path.join(str(tmpdir), "artifactshare2")) as shareproject,
create_artifact_share(os.path.join(str(tmpdir), "artifactshare3")) as sharecli,
):

# Add shareproject repo url to project.conf
with open(os.path.join(project, "project.conf"), "a", encoding="utf-8") as projconf:
Expand Down
Loading
Loading