mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-10 04:36:40 +00:00
fix(test): give Composer an archive extractor
Without a zip extension or an unzip/7z binary Composer silently drops to --prefer-source and mirror-clones every dependency, which exceeds its 300 s process timeout on phpunit.git. That took the Arch workspace job from a 2m16s test-unit to a 16m08s failure. Debian never saw it because apt pulls php-zip and unzip in as Composer dependencies; pacman does not. Arch ships no zip extension and no php-zip package, so the extractor has to be the unzip binary rather than the extension. Its mapping already covers all five package managers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
95020d4fb4
commit
ae71d8ea2c
2 files changed
+13
-3
No files matched your search
@@ -18,7 +18,8 @@ class TestEnsurePhpToolchain(unittest.TestCase):
|
||||
):
|
||||
php_mod.ensure_php_toolchain()
|
||||
self.assertEqual(
|
||||
[c.args[0] for c in ensure.call_args_list], ["php", "composer"]
|
||||
[c.args[0] for c in ensure.call_args_list],
|
||||
["php", "composer", "unzip"],
|
||||
)
|
||||
self.assertEqual(
|
||||
[c.args[0] for c in extension.call_args_list],
|
||||
@@ -43,7 +44,8 @@ class TestEnsurePhpPresent(unittest.TestCase):
|
||||
phpunit.is_file.return_value = True
|
||||
php_mod.ensure_php_present()
|
||||
self.assertEqual(
|
||||
[c.args[0] for c in ensure.call_args_list], ["php", "composer"]
|
||||
[c.args[0] for c in ensure.call_args_list],
|
||||
["php", "composer", "unzip"],
|
||||
)
|
||||
run.assert_not_called()
|
||||
|
||||
|
||||
@@ -25,11 +25,19 @@ def ensure_php_toolchain() -> None:
|
||||
A distro ships them as packages separate from the interpreter, which is why
|
||||
a present ``php`` binary does not imply they are there.
|
||||
|
||||
Composer needs an archive extractor for its dist downloads. Without one it
|
||||
silently falls back to ``--prefer-source`` and mirror-clones every
|
||||
dependency, which blows its 300 s process timeout on ``phpunit.git``. Arch
|
||||
ships no zip extension and no ``php-zip`` package, so the extractor has to
|
||||
be the ``unzip`` binary rather than the extension.
|
||||
|
||||
Raises:
|
||||
RuntimeError: php, composer or one of the extensions is still absent.
|
||||
RuntimeError: php, composer, unzip or one of the extensions is still
|
||||
absent.
|
||||
"""
|
||||
ensure_command_present("php")
|
||||
ensure_command_present("composer")
|
||||
ensure_command_present("unzip")
|
||||
for extension in _PHPUNIT_EXTENSIONS:
|
||||
ensure_php_extension_present(extension)
|
||||
|
||||
|
||||
Reference in new issue
Block a user