mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 12:28:52 +00:00
[ticket/14968] Add method for retrieving updates on current branch
PHPBB3-14968
This commit is contained in:
parent
3567f45e3d
commit
0572d6e33a
2 changed files with 239 additions and 0 deletions
|
@ -200,6 +200,45 @@ class version_helper
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the latest version for the current branch the user is on
|
||||||
|
*
|
||||||
|
* @param bool $force_update Ignores cached data. Defaults to false.
|
||||||
|
* @param bool $force_cache Force the use of the cache. Override $force_update.
|
||||||
|
* @return string
|
||||||
|
* @throws \RuntimeException
|
||||||
|
*/
|
||||||
|
public function get_update_on_branch($force_update = false, $force_cache = false)
|
||||||
|
{
|
||||||
|
$versions = $this->get_versions_matching_stability($force_update, $force_cache);
|
||||||
|
|
||||||
|
$self = $this;
|
||||||
|
$current_version = $this->current_version;
|
||||||
|
|
||||||
|
// Filter out any versions less than to the current version
|
||||||
|
$versions = array_filter($versions, function($data) use ($self, $current_version) {
|
||||||
|
return $self->compare($data['current'], $current_version, '>=');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Get the lowest version from the previous list.
|
||||||
|
return array_reduce($versions, function($value, $data) use ($self, $current_version) {
|
||||||
|
if ($value === null && $self->compare($data['current'], $current_version, '>='))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!$data['eol'] && (!$data['security'] || $self->compare($data['security'], $data['current'], '<=')))
|
||||||
|
{
|
||||||
|
return ($self->compare($data['current'], $current_version, '>')) ? $data : array();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtains the latest version information
|
* Obtains the latest version information
|
||||||
*
|
*
|
||||||
|
|
|
@ -332,4 +332,204 @@ class phpbb_version_helper_test extends phpbb_test_case
|
||||||
|
|
||||||
$this->assertSame($expected, $version_helper->get_latest_on_current_branch());
|
$this->assertSame($expected, $version_helper->get_latest_on_current_branch());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function get_update_on_branch_data()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
array(
|
||||||
|
'1.0.0',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'1.0.1',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'1.0.1-a1',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1-a2',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.0',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.0.1-a2',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'1.1.0',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'1.1.1',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'1.1.0-a1',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.0-a2',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.1.0-a2',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'1.1.0',
|
||||||
|
array(),
|
||||||
|
null,
|
||||||
|
),
|
||||||
|
// Latest safe release is 1.0.1
|
||||||
|
array(
|
||||||
|
'1.0.0',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
'security' => '1.0.1',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
'security' => '1.0.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Latest safe release is 1.0.0
|
||||||
|
array(
|
||||||
|
'1.0.0',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
'security' => '1.0.1',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
'security' => '1.0.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Latest safe release is 1.1.0
|
||||||
|
array(
|
||||||
|
'1.0.0',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
'security' => '1.1.0',
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Latest 1.0 release is EOL
|
||||||
|
array(
|
||||||
|
'1.0.0',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
'eol' => true,
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// All are EOL -- somewhat undefined behavior
|
||||||
|
array(
|
||||||
|
'1.0.0',
|
||||||
|
array(
|
||||||
|
'1.0' => array(
|
||||||
|
'current' => '1.0.1',
|
||||||
|
'eol' => true,
|
||||||
|
),
|
||||||
|
'1.1' => array(
|
||||||
|
'current' => '1.1.1',
|
||||||
|
'eol' => true,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
null,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider get_update_on_branch_data
|
||||||
|
*/
|
||||||
|
public function test_get_update_on_branch($current_version, $versions, $expected)
|
||||||
|
{
|
||||||
|
$version_helper = $this
|
||||||
|
->getMockBuilder('\phpbb\version_helper')
|
||||||
|
->setMethods(array(
|
||||||
|
'get_versions_matching_stability',
|
||||||
|
))
|
||||||
|
->setConstructorArgs(array(
|
||||||
|
$this->cache,
|
||||||
|
new \phpbb\config\config(array(
|
||||||
|
'version' => $current_version,
|
||||||
|
)),
|
||||||
|
new \phpbb\file_downloader(),
|
||||||
|
new \phpbb\user('\phpbb\datetime'),
|
||||||
|
))
|
||||||
|
->getMock()
|
||||||
|
;
|
||||||
|
|
||||||
|
$version_helper->expects($this->any())
|
||||||
|
->method('get_versions_matching_stability')
|
||||||
|
->will($this->returnValue($versions));
|
||||||
|
|
||||||
|
$this->assertSame($expected, $version_helper->get_update_on_branch());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue