You've already forked joomla_test
							
							
		
			
				
	
	
		
			586 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			586 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * @package     Joomla.Platform
 | |
|  * @subpackage  GitHub
 | |
|  *
 | |
|  * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 | |
|  * @license     GNU General Public License version 2 or later; see LICENSE
 | |
|  */
 | |
| 
 | |
| defined('JPATH_PLATFORM') or die;
 | |
| 
 | |
| /**
 | |
|  * GitHub API Pull Requests class for the Joomla Platform.
 | |
|  *
 | |
|  * @package     Joomla.Platform
 | |
|  * @subpackage  GitHub
 | |
|  * @since       11.3
 | |
|  */
 | |
| class JGithubPulls extends JGithubObject
 | |
| {
 | |
| 	/**
 | |
| 	 * Method to create a pull request.
 | |
| 	 *
 | |
| 	 * @param   string  $user   The name of the owner of the GitHub repository.
 | |
| 	 * @param   string  $repo   The name of the GitHub repository.
 | |
| 	 * @param   string  $title  The title of the new pull request.
 | |
| 	 * @param   string  $base   The branch (or git ref) you want your changes pulled into. This
 | |
| 	 *                          should be an existing branch on the current repository. You cannot
 | |
| 	 *                          submit a pull request to one repo that requests a merge to a base
 | |
| 	 *                          of another repo.
 | |
| 	 * @param   string  $head   The branch (or git ref) where your changes are implemented.
 | |
| 	 * @param   string  $body   The body text for the new pull request.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function create($user, $repo, $title, $base, $head, $body = '')
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls';
 | |
| 
 | |
| 		// Build the request data.
 | |
| 		$data = json_encode(
 | |
| 			array(
 | |
| 				'title' => $title,
 | |
| 				'base' => $base,
 | |
| 				'head' => $head,
 | |
| 				'body' => $body
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->post($this->fetchUrl($path), $data);
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 201)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to create a comment on a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user      The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo      The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId    The pull request number.
 | |
| 	 * @param   string   $body      The comment body text.
 | |
| 	 * @param   string   $commitId  The SHA1 hash of the commit to comment on.
 | |
| 	 * @param   string   $filePath  The Relative path of the file to comment on.
 | |
| 	 * @param   string   $position  The line index in the diff to comment on.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function createComment($user, $repo, $pullId, $body, $commitId, $filePath, $position)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId . '/comments';
 | |
| 
 | |
| 		// Build the request data.
 | |
| 		$data = json_encode(
 | |
| 			array(
 | |
| 				'body' => $body,
 | |
| 				'commit_id' => $commitId,
 | |
| 				'path' => $filePath,
 | |
| 				'position' => $position
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->post($this->fetchUrl($path), $data);
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 201)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to create a comment in reply to another comment.
 | |
| 	 *
 | |
| 	 * @param   string   $user       The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo       The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId     The pull request number.
 | |
| 	 * @param   string   $body       The comment body text.
 | |
| 	 * @param   integer  $inReplyTo  The id of the comment to reply to.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function createCommentReply($user, $repo, $pullId, $body, $inReplyTo)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId . '/comments';
 | |
| 
 | |
| 		// Build the request data.
 | |
| 		$data = json_encode(
 | |
| 			array(
 | |
| 				'body' => $body,
 | |
| 				'in_reply_to' => (int) $inReplyTo
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->post($this->fetchUrl($path), $data);
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 201)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to create a pull request from an existing issue.
 | |
| 	 *
 | |
| 	 * @param   string   $user     The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo     The name of the GitHub repository.
 | |
| 	 * @param   integer  $issueId  The issue number for which to attach the new pull request.
 | |
| 	 * @param   string   $base     The branch (or git ref) you want your changes pulled into. This
 | |
| 	 *                             should be an existing branch on the current repository. You cannot
 | |
| 	 *                             submit a pull request to one repo that requests a merge to a base
 | |
| 	 *                             of another repo.
 | |
| 	 * @param   string   $head     The branch (or git ref) where your changes are implemented.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function createFromIssue($user, $repo, $issueId, $base, $head)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls';
 | |
| 
 | |
| 		// Build the request data.
 | |
| 		$data = json_encode(
 | |
| 			array(
 | |
| 				'issue' => (int) $issueId,
 | |
| 				'base' => $base,
 | |
| 				'head' => $head
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->post($this->fetchUrl($path), $data);
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 201)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to delete a comment on a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user       The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo       The name of the GitHub repository.
 | |
| 	 * @param   integer  $commentId  The id of the comment to delete.
 | |
| 	 *
 | |
| 	 * @return  void
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function deleteComment($user, $repo, $commentId)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/comments/' . (int) $commentId;
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->delete($this->fetchUrl($path));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 204)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to update a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user    The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo    The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId  The pull request number.
 | |
| 	 * @param   string   $title   The optional new title for the pull request.
 | |
| 	 * @param   string   $body    The optional new body text for the pull request.
 | |
| 	 * @param   string   $state   The optional new state for the pull request. [open, closed]
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function edit($user, $repo, $pullId, $title = null, $body = null, $state = null)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId;
 | |
| 
 | |
| 		// Craete the data object.
 | |
| 		$data = new stdClass;
 | |
| 
 | |
| 		// If a title is set add it to the data object.
 | |
| 		if (isset($title))
 | |
| 		{
 | |
| 			$data->title = $title;
 | |
| 		}
 | |
| 
 | |
| 		// If a body is set add it to the data object.
 | |
| 		if (isset($body))
 | |
| 		{
 | |
| 			$data->body = $body;
 | |
| 		}
 | |
| 
 | |
| 		// If a state is set add it to the data object.
 | |
| 		if (isset($state))
 | |
| 		{
 | |
| 			$data->state = $state;
 | |
| 		}
 | |
| 
 | |
| 		// Encode the request data.
 | |
| 		$data = json_encode($data);
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->patch($this->fetchUrl($path), $data);
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to update a comment on a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user       The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo       The name of the GitHub repository.
 | |
| 	 * @param   integer  $commentId  The id of the comment to update.
 | |
| 	 * @param   string   $body       The new body text for the comment.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function editComment($user, $repo, $commentId, $body)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/comments/' . (int) $commentId;
 | |
| 
 | |
| 		// Build the request data.
 | |
| 		$data = json_encode(
 | |
| 			array(
 | |
| 				'body' => $body
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->patch($this->fetchUrl($path), $data);
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to get a single pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user    The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo    The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId  The pull request number.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function get($user, $repo, $pullId)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId;
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->get($this->fetchUrl($path));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to get a specific comment on a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user       The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo       The name of the GitHub repository.
 | |
| 	 * @param   integer  $commentId  The comment id to get.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function getComment($user, $repo, $commentId)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/comments/' . (int) $commentId;
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->get($this->fetchUrl($path));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to get the list of comments on a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user    The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo    The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId  The pull request number.
 | |
| 	 * @param   integer  $page    The page number from which to get items.
 | |
| 	 * @param   integer  $limit   The number of items on a page.
 | |
| 	 *
 | |
| 	 * @return  array
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function getComments($user, $repo, $pullId, $page = 0, $limit = 0)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId . '/comments';
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->get($this->fetchUrl($path, $page, $limit));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to get a list of commits for a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user    The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo    The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId  The pull request number.
 | |
| 	 * @param   integer  $page    The page number from which to get items.
 | |
| 	 * @param   integer  $limit   The number of items on a page.
 | |
| 	 *
 | |
| 	 * @return  array
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function getCommits($user, $repo, $pullId, $page = 0, $limit = 0)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId . '/commits';
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->get($this->fetchUrl($path, $page, $limit));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to get a list of files for a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user    The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo    The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId  The pull request number.
 | |
| 	 * @param   integer  $page    The page number from which to get items.
 | |
| 	 * @param   integer  $limit   The number of items on a page.
 | |
| 	 *
 | |
| 	 * @return  array
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function getFiles($user, $repo, $pullId, $page = 0, $limit = 0)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId . '/files';
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->get($this->fetchUrl($path, $page, $limit));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to list pull requests.
 | |
| 	 *
 | |
| 	 * @param   string   $user   The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo   The name of the GitHub repository.
 | |
| 	 * @param   string   $state  The optional state to filter requests by. [open, closed]
 | |
| 	 * @param   integer  $page   The page number from which to get items.
 | |
| 	 * @param   integer  $limit  The number of items on a page.
 | |
| 	 *
 | |
| 	 * @return  array
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function getList($user, $repo, $state = 'open', $page = 0, $limit = 0)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls';
 | |
| 
 | |
| 		// If a state exists append it as an option.
 | |
| 		if ($state != 'open')
 | |
| 		{
 | |
| 			$path .= '?state=' . $state;
 | |
| 		}
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->get($this->fetchUrl($path, $page, $limit));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to check if a pull request has been merged.
 | |
| 	 *
 | |
| 	 * @param   string   $user    The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo    The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId  The pull request number.  The pull request number.
 | |
| 	 *
 | |
| 	 * @return  boolean  True if the pull request has been merged.
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function isMerged($user, $repo, $pullId)
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId . '/merge';
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->get($this->fetchUrl($path));
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code == 204)
 | |
| 		{
 | |
| 			return true;
 | |
| 		}
 | |
| 		elseif ($response->code == 404)
 | |
| 		{
 | |
| 			return false;
 | |
| 		}
 | |
| 		else
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Method to merge a pull request.
 | |
| 	 *
 | |
| 	 * @param   string   $user     The name of the owner of the GitHub repository.
 | |
| 	 * @param   string   $repo     The name of the GitHub repository.
 | |
| 	 * @param   integer  $pullId   The pull request number.
 | |
| 	 * @param   string   $message  The message that will be used for the merge commit.
 | |
| 	 *
 | |
| 	 * @return  object
 | |
| 	 *
 | |
| 	 * @since   11.3
 | |
| 	 */
 | |
| 	public function merge($user, $repo, $pullId, $message = '')
 | |
| 	{
 | |
| 		// Build the request path.
 | |
| 		$path = '/repos/' . $user . '/' . $repo . '/pulls/' . (int) $pullId . '/merge';
 | |
| 
 | |
| 		// Build the request data.
 | |
| 		$data = json_encode(
 | |
| 			array(
 | |
| 				'commit_message' => $message
 | |
| 			)
 | |
| 		);
 | |
| 
 | |
| 		// Send the request.
 | |
| 		$response = $this->client->put($this->fetchUrl($path), $data);
 | |
| 
 | |
| 		// Validate the response code.
 | |
| 		if ($response->code != 200)
 | |
| 		{
 | |
| 			// Decode the error response and throw an exception.
 | |
| 			$error = json_decode($response->body);
 | |
| 			throw new DomainException($error->message, $response->code);
 | |
| 		}
 | |
| 
 | |
| 		return json_decode($response->body);
 | |
| 	}
 | |
| }
 | 
