* @author Thibault Duplessis */ class Repo extends AbstractApi { /** * Search repositories by keyword: * @link http://developer.github.com/v3/search/#search-repositories * * @param string $keyword the search query * @param array $params * * @return array list of found repositories */ public function find($keyword, array $params = array()) { return $this->get('legacy/repos/search/'.rawurlencode($keyword), array_merge(array('start_page' => 1), $params)); } /** * Get the last year of commit activity for a repository grouped by week * @link http://developer.github.com/v3/repos/statistics/#commit-activity * * @param string $username the user who owns the repository * @param string $repository the name of the repository * * @return array commit activity grouped by week */ public function activity($username, $repository) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/stats/commit_activity'); } /** * Get contributor commit statistics for a repository * @link http://developer.github.com/v3/repos/statistics/#contributors * * @param string $username the user who owns the repository * @param string $repository the name of the repository * * @return array list of contributors and their commit statistics */ public function statistics($username, $repository) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/stats/contributors'); } /** * List all repositories for an organization * @link http://developer.github.com/v3/repos/#list-organization-repositories * * @param string $organization the name of the organization * @param array $params * * @return array list of organization repositories */ public function org($organization, array $params = array()) { return $this->get('orgs/'.$organization.'/repos', array_merge(array('start_page' => 1), $params)); } /** * Get extended information about a repository by its username and repository name * @link http://developer.github.com/v3/repos/ * * @param string $username the user who owns the repository * @param string $repository the name of the repository * * @return array informations about the repository */ public function show($username, $repository) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository)); } /** * Create repository * @link http://developer.github.com/v3/repos/ * * @param string $name name of the repository * @param string $description repository description * @param string $homepage homepage url * @param boolean $public `true` for public, `false` for private * @param null|string $organization username of organization if applicable * @param boolean $hasIssues `true` to enable issues for this repository, `false` to disable them * @param boolean $hasWiki `true` to enable the wiki for this repository, `false` to disable it * @param boolean $hadDownloads `true` to enable downloads for this repository, `false` to disable them * @param integer $teamId The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. * @param boolean $autoInit `true` to create an initial commit with empty README, `false` for no initial commit * * @return array returns repository data */ public function create( $name, $description = '', $homepage = '', $public = true, $organization = null, $hasIssues = false, $hasWiki = false, $hasDownloads = false, $teamId = null, $autoInit = false ) { $path = null !== $organization ? 'orgs/'.$organization.'/repos' : 'user/repos'; $parameters = array( 'name' => $name, 'description' => $description, 'homepage' => $homepage, 'private' => !$public, 'has_issues' => $hasIssues, 'has_wiki' => $hasWiki, 'has_downloads' => $hasDownloads, 'auto_init' => $autoInit ); if ($organization && $teamId) { $parameters['team_id'] = $teamId; } return $this->post($path, $parameters); } /** * Set information of a repository * @link http://developer.github.com/v3/repos/ * * @param string $username the user who owns the repository * @param string $repository the name of the repository * @param array $values the key => value pairs to post * * @return array informations about the repository */ public function update($username, $repository, array $values) { return $this->patch('repos/'.rawurlencode($username).'/'.rawurlencode($repository), $values); } /** * Delete a repository * @link http://developer.github.com/v3/repos/ * * @param string $username the user who owns the repository * @param string $repository the name of the repository * * @return mixed null on success, array on error with 'message' */ public function remove($username, $repository) { return $this->delete('repos/'.rawurlencode($username).'/'.rawurlencode($repository)); } /** * Get the readme content for a repository by its username and repository name * @link http://developer.github.com/v3/repos/contents/#get-the-readme * * @param string $username the user who owns the repository * @param string $repository the name of the repository * * @return array the readme content */ public function readme($username, $repository) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/readme'); } /** * Manage the collaborators of a repository * @link http://developer.github.com/v3/repos/collaborators/ * * @return Collaborators */ public function collaborators() { return new Collaborators($this->client); } /** * Manage the comments of a repository * @link http://developer.github.com/v3/repos/comments/ * * @return Comments */ public function comments() { return new Comments($this->client); } /** * Manage the commits of a repository * @link http://developer.github.com/v3/repos/commits/ * * @return Commits */ public function commits() { return new Commits($this->client); } /** * Manage the content of a repository * @link http://developer.github.com/v3/repos/contents/ * * @return Contents */ public function contents() { return new Contents($this->client); } /** * Manage the content of a repository * @link http://developer.github.com/v3/repos/downloads/ * * @return Downloads */ public function downloads() { return new Downloads($this->client); } /** * Manage the releases of a repository (Currently Undocumented) * @link http://developer.github.com/v3/repos/ * * @return Releases */ public function releases() { return new Releases($this->client); } /** * Manage the deploy keys of a repository * @link http://developer.github.com/v3/repos/keys/ * * @return DeployKeys */ public function keys() { return new DeployKeys($this->client); } /** * Manage the forks of a repository * @link http://developer.github.com/v3/repos/forks/ * * @return Forks */ public function forks() { return new Forks($this->client); } /** * Manage the hooks of a repository * @link http://developer.github.com/v3/issues/jooks/ * * @return Hooks */ public function hooks() { return new Hooks($this->client); } /** * Manage the labels of a repository * @link http://developer.github.com/v3/issues/labels/ * * @return Labels */ public function labels() { return new Labels($this->client); } /** * Manage the statuses of a repository * @link http://developer.github.com/v3/repos/statuses/ * * @return Statuses */ public function statuses() { return new Statuses($this->client); } /** * Get the branch(es) of a repository * @link http://developer.github.com/v3/repos/ * * @param string $username the username * @param string $repository the name of the repository * @param string $branch the name of the branch * * @return array list of the repository branches */ public function branches($username, $repository, $branch = null) { $url = 'repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/branches'; if (null !== $branch) { $url .= '/'.rawurlencode($branch); } return $this->get($url); } /** * Get the contributors of a repository * @link http://developer.github.com/v3/repos/ * * @param string $username the user who owns the repository * @param string $repository the name of the repository * @param boolean $includingAnonymous by default, the list only shows GitHub users. * You can include non-users too by setting this to true * @return array list of the repo contributors */ public function contributors($username, $repository, $includingAnonymous = false) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/contributors', array( 'anon' => $includingAnonymous ?: null )); } /** * Get the language breakdown of a repository * @link http://developer.github.com/v3/repos/ * * @param string $username the user who owns the repository * @param string $repository the name of the repository * * @return array list of the languages */ public function languages($username, $repository) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/languages'); } /** * Get the tags of a repository * @link http://developer.github.com/v3/repos/ * * @param string $username the user who owns the repository * @param string $repository the name of the repository * * @return array list of the repository tags */ public function tags($username, $repository) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/tags'); } /** * Get the teams of a repository * @link http://developer.github.com/v3/repos/ * * @param string $username the user who owns the repo * @param string $repository the name of the repo * * @return array list of the languages */ public function teams($username, $repository) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/teams'); } /** * @deprecated see subscribers method * @param string $username * @param string $repository * @param integer $page * * @return array */ public function watchers($username, $repository, $page = 1) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/watchers', array( 'page' => $page )); } /** * @param string $username * @param string $repository * @param integer $page * * @return array */ public function subscribers($username, $repository, $page = 1) { return $this->get('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/subscribers', array( 'page' => $page )); } /** * Perform a merge * @link http://developer.github.com/v3/repos/merging/ * * @param string $username * @param string $repository * @param string $base The name of the base branch that the head will be merged into. * @param string $head The head to merge. This can be a branch name or a commit SHA1. * @param string $message Commit message to use for the merge commit. If omitted, a default message will be used. * * @return array|null */ public function merge($username, $repository, $base, $head, $message = null) { return $this->post('repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/merges', array( 'base' => $base, 'head' => $head, 'commit_message' => $message )); } }