Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 numberDiff line numberDiff 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 DownExpand 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 DownExpand 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 numberDiff line numberDiff 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 DownExpand 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