sonarrradarrplexorganizrnginxdashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboard
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							203 lines
						
					
					
						
							6.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							203 lines
						
					
					
						
							6.6 KiB
						
					
					
				| <?php | |
| 
 | |
| namespace Github\Api; | |
| 
 | |
| use Github\Api\PullRequest\Comments; | |
| use Github\Api\PullRequest\Review; | |
| use Github\Api\PullRequest\ReviewRequest; | |
| use Github\Exception\InvalidArgumentException; | |
| use Github\Exception\MissingArgumentException; | |
| 
 | |
| /** | |
|  * API for accessing Pull Requests from your Git/Github repositories. | |
|  * | |
|  * @see   http://developer.github.com/v3/pulls/ | |
|  * | |
|  * @author Joseph Bielawski <stloyd@gmail.com> | |
|  */ | |
| class PullRequest extends AbstractApi | |
| { | |
|     use AcceptHeaderTrait; | |
| 
 | |
|     /** | |
|      * Configure the body type. | |
|      * | |
|      * @link https://developer.github.com/v3/pulls/#custom-media-types | |
|      * | |
|      * @param string|null $bodyType | |
|      * @param string|null $apiVersion | |
|      * | |
|      * @return self | |
|      */ | |
|     public function configure($bodyType = null, $apiVersion = null) | |
|     { | |
|         if (null === $apiVersion) { | |
|             $apiVersion = $this->client->getApiVersion(); | |
|         } | |
| 
 | |
|         if (!in_array($bodyType, ['text', 'html', 'full', 'diff', 'patch'])) { | |
|             $bodyType = 'raw'; | |
|         } | |
| 
 | |
|         if (!in_array($bodyType, ['diff', 'patch'])) { | |
|             $bodyType .= '+json'; | |
|         } | |
| 
 | |
|         $this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s', $apiVersion, $bodyType); | |
| 
 | |
|         return $this; | |
|     } | |
| 
 | |
|     /** | |
|      * Get a listing of a project's pull requests by the username, repository and (optionally) state. | |
|      * | |
|      * @link http://developer.github.com/v3/pulls/ | |
|      * | |
|      * @param string $username   the username | |
|      * @param string $repository the repository | |
|      * @param array  $params     a list of extra parameters. | |
|      * | |
|      * @return array array of pull requests for the project | |
|      */ | |
|     public function all($username, $repository, array $params = []) | |
|     { | |
|         $parameters = array_merge([ | |
|             'page' => 1, | |
|             'per_page' => 30, | |
|         ], $params); | |
| 
 | |
|         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls', $parameters); | |
|     } | |
| 
 | |
|     /** | |
|      * Show all details of a pull request, including the discussions. | |
|      * | |
|      * @link http://developer.github.com/v3/pulls/ | |
|      * | |
|      * @param string $username   the username | |
|      * @param string $repository the repository | |
|      * @param int    $id         the ID of the pull request for which details are retrieved | |
|      * | |
|      * @return array|string pull request details | |
|      */ | |
|     public function show($username, $repository, $id) | |
|     { | |
|         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id)); | |
|     } | |
| 
 | |
|     public function commits($username, $repository, $id) | |
|     { | |
|         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/commits'); | |
|     } | |
| 
 | |
|     public function files($username, $repository, $id) | |
|     { | |
|         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/files'); | |
|     } | |
| 
 | |
|     /** | |
|      * All statuses which are the statuses of its head branch. | |
|      * | |
|      * @see http://developer.github.com/v3/pulls/ | |
|      * | |
|      * @param string $username   the username | |
|      * @param string $repository the repository | |
|      * @param int    $id         the ID of the pull request for which statuses are retrieved | |
|      * | |
|      * @return array array of statuses for the project | |
|      */ | |
|     public function status($username, $repository, $id) | |
|     { | |
|         $link = $this->show($username, $repository, $id)['_links']['statuses']['href']; | |
| 
 | |
|         return $this->get($link); | |
|     } | |
| 
 | |
|     public function comments() | |
|     { | |
|         return new Comments($this->client); | |
|     } | |
| 
 | |
|     public function reviews() | |
|     { | |
|         return new Review($this->client); | |
|     } | |
| 
 | |
|     public function reviewRequests() | |
|     { | |
|         return new ReviewRequest($this->client); | |
|     } | |
| 
 | |
|     /** | |
|      * Create a pull request. | |
|      * | |
|      * @link   http://developer.github.com/v3/pulls/ | |
|      * | |
|      * @param string $username   the username | |
|      * @param string $repository the repository | |
|      * @param array  $params     A String of the branch or commit SHA that you want your changes to be pulled to. | |
|      *                           A String of the branch or commit SHA of your changes. Typically this will be a branch. | |
|      *                           If the branch is in a fork of the original repository, specify the username first: | |
|      *                           "my-user:some-branch". The String title of the Pull Request. The String body of | |
|      *                           the Pull Request. The issue number. Used when title and body is not set. | |
|      * | |
|      * @throws MissingArgumentException | |
|      * | |
|      * @return array | |
|      */ | |
|     public function create($username, $repository, array $params) | |
|     { | |
|         // Two ways to create PR, using issue or title | |
|         if (!isset($params['issue']) && !isset($params['title'])) { | |
|             throw new MissingArgumentException(['issue', 'title']); | |
|         } | |
| 
 | |
|         if (!isset($params['base'], $params['head'])) { | |
|             throw new MissingArgumentException(['base', 'head']); | |
|         } | |
| 
 | |
|         // If `issue` is not sent, then `body` must be sent | |
|         if (!isset($params['issue']) && !isset($params['body'])) { | |
|             throw new MissingArgumentException(['issue', 'body']); | |
|         } | |
| 
 | |
|         return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls', $params); | |
|     } | |
| 
 | |
|     public function update($username, $repository, $id, array $params) | |
|     { | |
|         if (isset($params['state']) && !in_array($params['state'], ['open', 'closed'])) { | |
|             $params['state'] = 'open'; | |
|         } | |
| 
 | |
|         return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id), $params); | |
|     } | |
| 
 | |
|     public function merged($username, $repository, $id) | |
|     { | |
|         return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/merge'); | |
|     } | |
| 
 | |
|     public function merge($username, $repository, $id, $message, $sha, $mergeMethod = 'merge', $title = null) | |
|     { | |
|         if (is_bool($mergeMethod)) { | |
|             $mergeMethod = $mergeMethod ? 'squash' : 'merge'; | |
|         } | |
| 
 | |
|         if (!in_array($mergeMethod, ['merge', 'squash', 'rebase'], true)) { | |
|             throw new InvalidArgumentException(sprintf('"$mergeMethod" must be one of ["merge", "squash", "rebase"] ("%s" given).', $mergeMethod)); | |
|         } | |
| 
 | |
|         $params = [ | |
|             'commit_message' => $message, | |
|             'sha' => $sha, | |
|             'merge_method' => $mergeMethod, | |
|         ]; | |
| 
 | |
|         if (is_string($title)) { | |
|             $params['commit_title'] = $title; | |
|         } | |
| 
 | |
|         return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/pulls/'.rawurlencode($id).'/merge', $params); | |
|     } | |
| }
 | |
| 
 |