joomla_test/libraries/joomla/github/commits.php
2020-01-02 22:20:31 +07:00

358 lines
10 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 Commits class for the Joomla Platform.
*
* @package Joomla.Platform
* @subpackage GitHub
* @since 12.1
*/
class JGithubCommits extends JGithubObject
{
/**
* Method to create a commit.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param string $message The commit message.
* @param string $tree SHA of the tree object this commit points to.
* @param array $parents Array of the SHAs of the commits that were the parents of this commit.
* If omitted or empty, the commit will be written as a root commit.
* For a single parent, an array of one SHA should be provided.
* For a merge commit, an array of more than one should be provided.
*
* @return object
*
* @since 12.1
*/
public function create($user, $repo, $message, $tree, array $parents = array())
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/git/commits';
$data = json_encode(
array('message' => $message, 'tree' => $tree, 'parents' => $parents)
);
// 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 commit.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param string $sha The SHA of the commit to comment on.
* @param string $comment The text of the comment.
* @param integer $line The line number of the commit to comment on.
* @param string $filepath A relative path to the file to comment on within the commit.
* @param integer $position Line index in the diff to comment on.
*
* @return object
*
* @since 12.1
*/
public function createCommitComment($user, $repo, $sha, $comment, $line, $filepath, $position)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/commits/' . $sha . '/comments';
$data = json_encode(
array(
'body' => $comment,
'commit_id' => $sha,
'line' => (int) $line,
'path' => $filepath,
'position' => (int) $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 delete a comment on a commit.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param string $id The ID of the comment to edit.
*
* @return object
*
* @since 12.1
*/
public function deleteCommitComment($user, $repo, $id)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/comments/' . $id;
// 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);
}
return json_decode($response->body);
}
/**
* Method to edit a comment on a commit.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param string $id The ID of the comment to edit.
* @param string $comment The text of the comment.
*
* @return object
*
* @since 12.1
*/
public function editCommitComment($user, $repo, $id, $comment)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/comments/' . $id;
$data = json_encode(
array(
'body' => $comment
)
);
// 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 commit for a repository.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param string $sha The SHA of the commit to retrieve.
* @param integer $page Page to request
* @param integer $limit Number of results to return per page
*
* @return array
*
* @since 12.1
*/
public function getCommit($user, $repo, $sha, $page = 0, $limit = 0)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/commits/' . $sha;
// 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 single comment on a commit.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param integer $id ID of the comment to retrieve
*
* @return array
*
* @since 12.1
*/
public function getCommitComment($user, $repo, $id)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/comments/' . $id;
// 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 list of comments for a single commit for a repository.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param string $sha The SHA of the commit to retrieve.
* @param integer $page Page to request
* @param integer $limit Number of results to return per page
*
* @return array
*
* @since 12.1
*/
public function getCommitComments($user, $repo, $sha, $page = 0, $limit = 0)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/commits/' . $sha . '/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 diff for two commits.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param string $base The base of the diff, either a commit SHA or branch.
* @param string $head The head of the diff, either a commit SHA or branch.
*
* @return array
*
* @since 12.1
*/
public function getDiff($user, $repo, $base, $head)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/compare/' . $base . '...' . $head;
// 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 list commits for a repository.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param integer $page Page to request
* @param integer $limit Number of results to return per page
*
* @return array
*
* @since 12.1
*/
public function getList($user, $repo, $page = 0, $limit = 0)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/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 commit comments for a repository.
*
* @param string $user The name of the owner of the GitHub repository.
* @param string $repo The name of the GitHub repository.
* @param integer $page Page to request
* @param integer $limit Number of results to return per page
*
* @return array
*
* @since 12.1
*/
public function getListComments($user, $repo, $page = 0, $limit = 0)
{
// Build the request path.
$path = '/repos/' . $user . '/' . $repo . '/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);
}
}