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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions tests/test_git_delivery.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,27 @@ def test_subprocess_runner_supplies_a_system_path_for_launch_agents(self):

self.assertEqual(run.call_args.kwargs["env"]["PATH"], os.defpath)

def test_subprocess_runner_hides_windows_console(self):
completed = mock.Mock(returncode=0, stdout="", stderr="")
windows = meter.platform_services(
"windows",
environment={"USERPROFILE": r"C:\Users\example"},
home=r"C:\Users\example",
)
with mock.patch(
"token_meter.services.git_delivery.platform_services",
return_value=windows,
), mock.patch(
"token_meter.services.git_delivery.subprocess.run",
return_value=completed,
) as run:
meter.GitDeliveryService._subprocess_runner(
["git", "--version"], timeout=1,
)

self.assertEqual(run.call_args.kwargs["creationflags"], 0x08000000)
self.assertTrue(run.call_args.kwargs["close_fds"])

def test_scan_limits_generator_candidates_without_losing_limit_coverage(self):
with tempfile.TemporaryDirectory() as tmp:
service = meter.GitDeliveryService(
Expand Down
18 changes: 18 additions & 0 deletions token_meter/services/git_delivery.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import subprocess
import threading

from token_meter.platforms import ProcessPurpose, platform_services


LEDGER_SCHEMA_VERSION = 1
GIT_TIMEOUT_SECONDS = 10
Expand Down Expand Up @@ -354,6 +356,21 @@ def __init__(self, ledger_path, runner=None, now=None, salt=""):
"last_checked": self.ledger.last_checked(),
}

@staticmethod
def _platform_subprocess_kwargs():
"""Match app._platform_subprocess_kwargs without importing app.py."""
options = platform_services().process_options(ProcessPurpose.DEFAULT)
if not options.supported:
return {}
kwargs = {}
if options.close_fds:
kwargs["close_fds"] = True
if options.start_new_session:
kwargs["start_new_session"] = True
if options.creation_flags:
kwargs["creationflags"] = options.creation_flags
return kwargs

@staticmethod
def _subprocess_runner(argv, timeout):
environment = {
Expand All @@ -373,6 +390,7 @@ def _subprocess_runner(argv, timeout):
encoding="utf-8",
errors="replace",
env=environment,
**GitDeliveryService._platform_subprocess_kwargs(),
)

@staticmethod
Expand Down