1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- /*
- * This file is part of Zippy.
- *
- * (c) Alchemy <info@alchemy.fr>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- */
- namespace Alchemy\Zippy\Adapter\VersionProbe;
- use Alchemy\Zippy\ProcessBuilder\ProcessBuilderFactoryInterface;
- use Symfony\Component\Process\Process;
- abstract class AbstractTarVersionProbe implements VersionProbeInterface
- {
- private $isSupported;
- private $inflator;
- private $deflator;
- public function __construct(ProcessBuilderFactoryInterface $inflator, ProcessBuilderFactoryInterface $deflator)
- {
- $this->inflator = $inflator;
- $this->deflator = $deflator;
- }
- /**
- * {@inheritdoc}
- */
- public function getStatus()
- {
- if (null !== $this->isSupported) {
- return $this->isSupported;
- }
- if (null === $this->inflator || null === $this->deflator) {
- return $this->isSupported = VersionProbeInterface::PROBE_NOTSUPPORTED;
- }
- $good = true;
- foreach (array($this->inflator, $this->deflator) as $builder) {
- /** @var Process $process */
- $process = $builder
- ->create()
- ->add('--version')
- ->getProcess();
- $process->run();
- if (!$process->isSuccessful()) {
- return $this->isSupported = VersionProbeInterface::PROBE_NOTSUPPORTED;
- }
- $lines = explode("\n", $process->getOutput(), 2);
- $good = false !== stripos($lines[0], $this->getVersionSignature());
- if (!$good) {
- break;
- }
- }
- $this->isSupported = $good ? VersionProbeInterface::PROBE_OK : VersionProbeInterface::PROBE_NOTSUPPORTED;
- return $this->isSupported;
- }
- /**
- * Returns the signature of inflator/deflator
- *
- * @return string
- */
- abstract protected function getVersionSignature();
- }
|