31
0
mirror of https://github.com/joomla-extensions/patchtester.git synced 2024-06-03 14:10:47 +00:00

Added Git-Request to retrieve sha in applyWithCiServer method.

This commit is contained in:
datsepp 2019-09-10 15:39:57 +02:00
parent 8f06c8db1c
commit 16c415872c

View File

@ -12,11 +12,13 @@ use Joomla\Archive\Zip;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Http\Response;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Version;
use Joomla\Filesystem\File;
use Joomla\Filesystem\Folder;
use PatchTester\GitHub\Exception\UnexpectedResponse;
use PatchTester\GitHub\GitHub;
use PatchTester\Helper;
/**
@ -181,6 +183,13 @@ class PullModel extends AbstractModel
// Get the CIServer Registry
$ciSettings = Helper::initializeCISettings();
// Get the Github object
$github = Helper::initializeGithub();
// retrieve pullData for sha later on.
$pull = $this->retrieveGitHubData($github, $id);
$sha = $pull->head->sha;
// Create tmp folder if it does not exist
if (!file_exists($ciSettings->get('folder.temp')))
{
@ -267,7 +276,7 @@ class PullModel extends AbstractModel
// Clear temp folder and store applied patch in database
Folder::delete($tempPath);
$this->saveAppliedPatch($id, $files);
$this->saveAppliedPatch($id, $files, $sha);
// Change the media version
$version = new Version;
@ -292,33 +301,7 @@ class PullModel extends AbstractModel
// Get the Github object
$github = Helper::initializeGithub();
try
{
$rateResponse = $github->getRateLimit();
$rate = json_decode($rateResponse->body);
}
catch (UnexpectedResponse $e)
{
throw new \RuntimeException(Text::sprintf('COM_PATCHTESTER_COULD_NOT_CONNECT_TO_GITHUB', $e->getMessage()), $e->getCode(), $e);
}
// If over the API limit, we can't build this list
if ($rate->resources->core->remaining == 0)
{
throw new \RuntimeException(
Text::sprintf('COM_PATCHTESTER_API_LIMIT_LIST', Factory::getDate($rate->resources->core->reset))
);
}
try
{
$pullResponse = $github->getPullRequest($this->getState()->get('github_user'), $this->getState()->get('github_repo'), $id);
$pull = json_decode($pullResponse->body);
}
catch (UnexpectedResponse $e)
{
throw new \RuntimeException(Text::sprintf('COM_PATCHTESTER_COULD_NOT_CONNECT_TO_GITHUB', $e->getMessage()), $e->getCode(), $e);
}
$pull = $this->retrieveGitHubData($github, $id);
if (is_null($pull->head->repo))
{
@ -460,6 +443,51 @@ class PullModel extends AbstractModel
return true;
}
/**
* Patches the code with the supplied pull request
*
* @param GitHub $github github object
* @param integer $id Id of the pull request
*
* @return Response
*
* @since 2.0
*
* @throws \RuntimeException
*/
private function retrieveGitHubData($github, $id)
{
try
{
$rateResponse = $github->getRateLimit();
$rate = json_decode($rateResponse->body);
}
catch (UnexpectedResponse $e)
{
throw new \RuntimeException(Text::sprintf('COM_PATCHTESTER_COULD_NOT_CONNECT_TO_GITHUB', $e->getMessage()), $e->getCode(), $e);
}
// If over the API limit, we can't build this list
if ($rate->resources->core->remaining == 0)
{
throw new \RuntimeException(
Text::sprintf('COM_PATCHTESTER_API_LIMIT_LIST', Factory::getDate($rate->resources->core->reset))
);
}
try
{
$pullResponse = $github->getPullRequest($this->getState()->get('github_user'), $this->getState()->get('github_repo'), $id);
$pull = json_decode($pullResponse->body);
}
catch (UnexpectedResponse $e)
{
throw new \RuntimeException(Text::sprintf('COM_PATCHTESTER_COULD_NOT_CONNECT_TO_GITHUB', $e->getMessage()), $e->getCode(), $e);
}
return $pull;
}
/**
* Saves the applied patch into database
*