PHP 5.5+ and replaced doctrine/cache with symfony/cache

This commit is contained in:
Pascal Baljet 2021-12-20 10:46:53 +01:00
commit 7eace8852a
12 changed files with 142 additions and 127 deletions

View file

@ -4,7 +4,7 @@ on:
pull_request: ~
push:
branches:
- 'master'
- "master"
schedule:
- cron: "0 0 * * *"
@ -19,25 +19,12 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04]
php-version: [8.1, 8.0, 7.4, 7.3, 7.2, 7.1, 7.0, 5.6, 5.5]
dependency-versions: [prefer-lowest, prefer-stable]
include:
- php-version: '5.3'
- php-version: 5.5
phpunit-version: 4
dependency-versions: 'lowest'
- php-version: '5.4'
phpunit-version: 4
- php-version: '5.5'
phpunit-version: 4
- php-version: '5.6'
- php-version: '7.0'
- php-version: '7.1'
- php-version: '7.2'
- php-version: '7.3'
- php-version: '7.4'
- php-version: '8.0'
- php-version: '8.1'
- php-version: '8.1'
dependency-versions: 'highest'
composer-stability: 'dev'
steps:
- name: Checkout project
@ -71,7 +58,6 @@ jobs:
uses: FedericoCarboni/setup-ffmpeg@v1
- name: Run tests
if: ${{ matrix.phpunit-version }}
run: |
if [ "$PHPUNIT_VERSION" ]; then
./phpunit --verbose

View file

@ -32,11 +32,11 @@
}
],
"require": {
"php": ">=5.3.9",
"php": ">=5.5.9",
"alchemy/binary-driver": "^1.5 || ~2.0.0 || ^5.0",
"doctrine/cache": "^1.0|^2.0",
"evenement/evenement": "^3.0 || ^2.0 || ^1.0",
"neutron/temporary-filesystem": "^2.1.1 || ^3.0"
"neutron/temporary-filesystem": "^2.1.1 || ^3.0",
"symfony/cache": "^3.1 || ^4.0 || ^5.0 || ^6.0"
},
"suggest": {
"php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg"

View file

@ -12,6 +12,7 @@
>
<php>
<env name="SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT" value="true"/>
<env name="SYMFONY_DEPRECATIONS_HELPER" value="disabled" />
</php>
<testsuites>

View file

@ -11,9 +11,9 @@
namespace FFMpeg;
use Doctrine\Common\Cache\ArrayCache;
use Silex\Application;
use Silex\ServiceProviderInterface;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
class FFMpegServiceProvider implements ServiceProviderInterface
{
@ -44,7 +44,7 @@ class FFMpegServiceProvider implements ServiceProviderInterface
});
$app['ffprobe.cache'] = $app->share(function () {
return new ArrayCache();
return new ArrayAdapter;
});
$app['ffmpeg.ffprobe'] = $app->share(function (Application $app) {

View file

@ -13,27 +13,27 @@ namespace FFMpeg;
use Alchemy\BinaryDriver\ConfigurationInterface;
use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Cache\Cache;
use FFMpeg\Driver\FFProbeDriver;
use FFMpeg\Exception\InvalidArgumentException;
use FFMpeg\Exception\RuntimeException;
use FFMpeg\FFProbe\DataMapping\Format;
use FFMpeg\FFProbe\DataMapping\StreamCollection;
use FFMpeg\FFProbe\Mapper;
use FFMpeg\FFProbe\MapperInterface;
use FFMpeg\FFProbe\OptionsTester;
use FFMpeg\FFProbe\OptionsTesterInterface;
use FFMpeg\FFProbe\OutputParser;
use FFMpeg\FFProbe\OutputParserInterface;
use FFMpeg\Exception\InvalidArgumentException;
use FFMpeg\Exception\RuntimeException;
use FFMpeg\FFProbe\DataMapping\StreamCollection;
use Psr\Cache\CacheItemPoolInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Cache\Adapter\ArrayAdapter;
class FFProbe
{
const TYPE_STREAMS = 'streams';
const TYPE_FORMAT = 'format';
/** @var Cache */
/** @var CacheItemPoolInterface */
private $cache;
/** @var OptionsTesterInterface */
private $optionsTester;
@ -44,7 +44,7 @@ class FFProbe
/** @var MapperInterface */
private $mapper;
public function __construct(FFProbeDriver $ffprobe, Cache $cache)
public function __construct(FFProbeDriver $ffprobe, CacheItemPoolInterface $cache)
{
$this->ffprobe = $ffprobe;
$this->optionsTester = new OptionsTester($ffprobe, $cache);
@ -114,11 +114,11 @@ class FFProbe
}
/**
* @param Cache $cache
* @param CacheItemPoolInterface $cache
*
* @return FFProbe
*/
public function setCache(Cache $cache)
public function setCache(CacheItemPoolInterface $cache)
{
$this->cache = $cache;
@ -213,14 +213,14 @@ class FFProbe
*
* @param array|ConfigurationInterface $configuration
* @param LoggerInterface $logger
* @param Cache $cache
* @param CacheItemPoolInterface $cache
*
* @return FFProbe
*/
public static function create($configuration = array(), LoggerInterface $logger = null, Cache $cache = null)
public static function create($configuration = array(), LoggerInterface $logger = null, CacheItemPoolInterface $cache = null)
{
if (null === $cache) {
$cache = new ArrayCache();
$cache = new ArrayAdapter();
}
return new static(FFProbeDriver::create($configuration, $logger), $cache);
@ -228,10 +228,10 @@ class FFProbe
private function probe($pathfile, $command, $type, $allowJson = true)
{
$id = sprintf('%s-%s', $command, $pathfile);
$id = md5(sprintf('%s-%s', $command, $pathfile));
if ($this->cache->contains($id)) {
return $this->cache->fetch($id);
if ($this->cache->hasItem($id)) {
return $this->cache->getItem($id)->get();
}
if (!$this->optionsTester->has($command)) {
@ -276,7 +276,9 @@ class FFProbe
$ret = $this->mapper->map($type, $data);
$this->cache->save($id, $ret);
$cacheItem = $this->cache->getItem($id);
$cacheItem->set($ret);
$this->cache->save($cacheItem);
return $ret;
}

View file

@ -86,6 +86,7 @@ abstract class AbstractData implements \Countable
/**
* {@inheritdoc}
*/
#[\ReturnTypeWillChange]
public function count()
{
return count($this->properties);

View file

@ -74,6 +74,7 @@ class StreamCollection implements \Countable, \IteratorAggregate
/**
* {@inheritdoc}
*/
#[\ReturnTypeWillChange]
public function count()
{
return count($this->streams);
@ -92,6 +93,7 @@ class StreamCollection implements \Countable, \IteratorAggregate
/**
* {@inheritdoc}
*/
#[\ReturnTypeWillChange]
public function getIterator()
{
return new \ArrayIterator($this->streams);

View file

@ -12,18 +12,18 @@
namespace FFMpeg\FFProbe;
use Alchemy\BinaryDriver\Exception\ExecutionFailureException;
use Doctrine\Common\Cache\Cache;
use FFMpeg\Driver\FFProbeDriver;
use FFMpeg\Exception\RuntimeException;
use Psr\Cache\CacheItemPoolInterface;
class OptionsTester implements OptionsTesterInterface
{
/** @var FFProbeDriver */
private $ffprobe;
/** @var Cache */
/** @var CacheItemPoolInterface */
private $cache;
public function __construct(FFProbeDriver $ffprobe, Cache $cache)
public function __construct(FFProbeDriver $ffprobe, CacheItemPoolInterface $cache)
{
$this->ffprobe = $ffprobe;
$this->cache = $cache;
@ -34,17 +34,19 @@ class OptionsTester implements OptionsTesterInterface
*/
public function has($name)
{
$id = sprintf('option-%s', $name);
$id = md5(sprintf('option-%s', $name));
if ($this->cache->contains($id)) {
return $this->cache->fetch($id);
if ($this->cache->hasItem($id)) {
return $this->cache->getItem($id)->get();
}
$output = $this->retrieveHelpOutput();
$ret = (bool) preg_match('/^'.$name.'/m', $output);
$this->cache->save($id, $ret);
$cacheItem = $this->cache->getItem($id);
$cacheItem->set($ret);
$this->cache->save($cacheItem);
return $ret;
}
@ -53,8 +55,8 @@ class OptionsTester implements OptionsTesterInterface
{
$id = 'help';
if ($this->cache->contains($id)) {
return $this->cache->fetch($id);
if ($this->cache->hasItem($id)) {
return $this->cache->getItem($id)->get();
}
try {
@ -63,7 +65,9 @@ class OptionsTester implements OptionsTesterInterface
throw new RuntimeException('Your FFProbe version is too old and does not support `-help` option, please upgrade.', $e->getCode(), $e);
}
$this->cache->save($id, $output);
$cacheItem = $this->cache->getItem($id);
$cacheItem->set($output);
$this->cache->save($cacheItem);
return $output;
}

View file

@ -32,6 +32,7 @@ class FiltersCollection implements \Countable, \IteratorAggregate
/**
* {@inheritdoc}
*/
#[\ReturnTypeWillChange]
public function count()
{
if (0 === count($this->filters)) {
@ -44,6 +45,7 @@ class FiltersCollection implements \Countable, \IteratorAggregate
/**
* {@inheritdoc}
*/
#[\ReturnTypeWillChange]
public function getIterator()
{
if (null === $this->sorted) {

View file

@ -2,8 +2,9 @@
namespace Tests\FFMpeg\Unit\FFProbe;
use Tests\FFMpeg\Unit\TestCase;
use FFMpeg\FFProbe\OptionsTester;
use Symfony\Component\Cache\CacheItem;
use Tests\FFMpeg\Unit\TestCase;
class OptionsTesterTest extends TestCase
{
@ -36,11 +37,12 @@ class OptionsTesterTest extends TestCase
{
$cache = $this->getCacheMock();
$cache->expects($this->never())
->method('fetch');
$cache->expects($this->exactly(2))
->method('getItem')
->will($this->returnValue(new CacheItem));
$cache->expects($this->exactly(2))
->method('contains')
->method('hasItem')
->will($this->returnValue(false));
$cache->expects($this->exactly(2))
@ -73,16 +75,22 @@ class OptionsTesterTest extends TestCase
{
$cache = $this->getCacheMock();
$cache->expects($this->once())
->method('fetch')
->will($this->returnValue($data));
$cacheItem = new CacheItem;
$cacheItem->set($data);
$cache->expects($this->exactly(2))
->method('contains')
->method('getItem')
->willReturnOnConsecutiveCalls(
$this->returnValue($cacheItem),
$this->returnValue(new CacheItem)
);
$cache->expects($this->exactly(2))
->method('hasItem')
->willReturnOnConsecutiveCalls(
$this->returnValue(false),
$this->returnValue(true));
$this->returnValue(true)
);
$cache->expects($this->once())
->method('save');
@ -101,14 +109,17 @@ class OptionsTesterTest extends TestCase
{
$cache = $this->getCacheMock();
$cache->expects($this->once())
->method('fetch')
->with('option-' . $optionName)
->will($this->returnValue($isPresent));
$cacheItem = new CacheItem();
$cacheItem->set($isPresent);
$cache->expects($this->once())
->method('contains')
->with('option-' . $optionName)
->method('getItem')
->with(md5('option-' . $optionName))
->will($this->returnValue($cacheItem));
$cache->expects($this->once())
->method('hasItem')
->with(md5('option-' . $optionName))
->will($this->returnValue(true));
$ffprobe = $this->getFFProbeDriverMock();

View file

@ -2,10 +2,11 @@
namespace Tests\FFMpeg\Unit;
use FFMpeg\FFProbe;
use Symfony\Component\Process\ExecutableFinder;
use Alchemy\BinaryDriver\ConfigurationInterface;
use Alchemy\BinaryDriver\Configuration;
use Alchemy\BinaryDriver\ConfigurationInterface;
use FFMpeg\FFProbe;
use Symfony\Component\Cache\CacheItem;
use Symfony\Component\Process\ExecutableFinder;
class FFProbeTest extends TestCase
{
@ -100,13 +101,14 @@ class FFProbeTest extends TestCase
$cache = $this->getCacheMock();
$cache->expects($this->once())
->method('contains')
->method('hasItem')
->will($this->returnValue(false));
$cache->expects($this->never())
->method('fetch');
$cache->expects($this->once())
->method('getItem')
->will($this->returnValue(new CacheItem));
$cache->expects($this->once())
->method('save')
->with($this->anything(), $output);
->with($this->anything());
$driver = $this->getFFProbeDriverMock();
$driver->expects($this->once())
@ -160,10 +162,11 @@ class FFProbeTest extends TestCase
$cache = $this->getCacheMock();
$cache->expects($this->exactly(2))
->method('contains')
->method('hasItem')
->will($this->returnValue(false));
$cache->expects($this->never())
->method('fetch');
$cache->expects($this->once())
->method('getItem')
->will($this->returnValue(new CacheItem));
$driver = $this->getFFProbeDriverMock();
$driver->expects($this->exactly(2))
@ -205,13 +208,16 @@ class FFProbeTest extends TestCase
$tester = $this->getFFProbeOptionsTesterMock();
$cacheItem = new CacheItem;
$cacheItem->set($output);
$cache = $this->getCacheMock();
$cache->expects($this->once())
->method('contains')
->method('hasItem')
->will($this->returnValue(true));
$cache->expects($this->once())
->method('fetch')
->will($this->returnValue($output));
->method('getItem')
->will($this->returnValue($cacheItem));
$cache->expects($this->never())
->method('save');

View file

@ -13,7 +13,7 @@ class TestCase extends BaseTestCase
public function getCacheMock()
{
return $this->getMockBuilder('Doctrine\Common\Cache\Cache')->getMock();
return $this->getMockBuilder('Psr\Cache\CacheItemPoolInterface')->getMock();
}
public function getTimeCodeMock()