Fixed issue #1742 where the creation of GPM object tried to connect to Remote repositories even if only Local package was needed (#1746)

All good, thanks!
This commit is contained in:
Agustin Villalba
2017-11-28 05:15:09 +01:00
committed by Andy Miller
parent 4c160533c2
commit 2cc34151df
2 changed files with 75 additions and 6 deletions

View File

@@ -17,6 +17,9 @@ use Symfony\Component\Yaml\Yaml;
class GPM extends Iterator
{
/** @var callable */
private $callback;
/**
* Local installed Packages
* @var Local\Packages
@@ -29,6 +32,9 @@ class GPM extends Iterator
*/
private $repository;
/** @var bool */
private $shouldRefresh;
/**
* @var Remote\GravCore
*/
@@ -47,18 +53,33 @@ class GPM extends Iterator
];
/**
* Creates a new GPM instance with Local and Remote packages available
* Loads Remote Packages available
*/
private function retrieveRemoteRepository()
{
if (!$this->repository) {
$this->repository = new Remote\Packages($this->shouldRefresh, $this->callback);
}
}
/**
* Creates a new GPM instance with Local packages available
* @param boolean $refresh Applies to Remote Packages only and forces a refetch of data
* @param callable $callback Either a function or callback in array notation
*/
public function __construct($refresh = false, $callback = null)
{
$this->installed = new Local\Packages();
try {
$this->repository = new Remote\Packages($refresh, $callback);
$this->grav = new Remote\GravCore($refresh, $callback);
} catch (\Exception $e) {
}
$this->shouldRefresh = $refresh;
$this->callback = $callback;
}
/**
* Loads Remote Grav package available
*/
public function loadRemoteGrav()
{
$this->grav = new Remote\GravCore($this->refresh, $this->callback);
}
/**
@@ -268,6 +289,7 @@ class GPM extends Iterator
*/
public function getLatestVersionOfPackage($package_name)
{
$this->retrieveRemoteRepository();
$repository = $this->repository['plugins'];
if (isset($repository[$package_name])) {
return $repository[$package_name]->available ?: $repository[$package_name]->version;
@@ -310,6 +332,7 @@ class GPM extends Iterator
public function getUpdatableThemes()
{
$items = [];
$this->retrieveRemoteRepository();
$repository = $this->repository['themes'];
// local cache to speed things up
@@ -357,6 +380,7 @@ class GPM extends Iterator
*/
public function getReleaseType($package_name)
{
$this->retrieveRemoteRepository();
$repository = $this->repository['plugins'];
if (isset($repository[$package_name])) {
return $repository[$package_name]->release_type;
@@ -405,6 +429,7 @@ class GPM extends Iterator
*/
public function getRepositoryPlugin($slug)
{
$this->retrieveRemoteRepository();
return @$this->repository['plugins'][$slug];
}
@@ -443,6 +468,7 @@ class GPM extends Iterator
*/
public function getRepository()
{
$this->retrieveRemoteRepository();
return $this->repository;
}

View File

@@ -320,4 +320,47 @@ class GpmTest extends \Codeception\TestCase\Test
$this->assertSame(null, $this->gpm->calculateVersionNumberFromDependencyVersion('*'));
$this->assertSame('2.0.2', $this->gpm->calculateVersionNumberFromDependencyVersion('2.0.2'));
}
public function testRemoteRepositoryIsEmptyAfterConstruct()
{
$gpm = new GPM();
$reflection = new \ReflectionClass(get_class($gpm));
$repository = $reflection->getProperty('repository');
$repository->setAccessible(true);
$this->assertSame(null, $repository->getValue($gpm));
}
public function testLocalRepositoryIsNotEmptyAfterConstruct()
{
$gpm = new GPM();
$reflection = new \ReflectionClass(get_class($gpm));
$repository = $reflection->getProperty('installed');
$repository->setAccessible(true);
$this->assertInstanceOf( '\Grav\Common\GPM\Local\Packages', $repository->getValue($gpm));
}
public function testGetRepository()
{
$this->assertInstanceOf('\Grav\Common\GPM\Remote\Packages', $this->gpm->getRepository());
}
public function testLatestVersionOfPackage()
{
$gpm = new GPM();
$this->assertNotNull($gpm->getLatestVersionOfPackage('admin'));
}
public function testReleaseType()
{
$gpm = new GPM();
$this->assertNotNull($gpm->getReleaseType('admin'));
}
public function testGetRepositoryPlugin()
{
$gpm = new GPM();
$this->assertNotNull($gpm->getRepositoryPlugin('admin'));
}
}