diff --git a/lib/Gitlab/Api/MergeRequests.php b/lib/Gitlab/Api/MergeRequests.php index a457d25b6..99a67a9da 100644 --- a/lib/Gitlab/Api/MergeRequests.php +++ b/lib/Gitlab/Api/MergeRequests.php @@ -1,57 +1,83 @@ -get('projects/'.urlencode($project_id).'/merge_requests', array( - 'page' => $page, - 'per_page' => $per_page - )); - } - - public function show($project_id, $mr_id) - { - return $this->get('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id)); - } - - public function create($project_id, $source, $target, $title, $assignee = null, $target_project_id = null, $description = null) - { - if ($target_project_id && ! is_numeric($target_project_id)) { - throw new \InvalidArgumentException('target_project_id should be numeric, the project name is not allowed'); - } - - return $this->post('projects/'.urlencode($project_id).'/merge_requests', array( - 'source_branch' => $source, - 'target_branch' => $target, - 'title' => $title, - 'assignee_id' => $assignee, - 'target_project_id' => $target_project_id, - 'description' => $description - )); - } - - public function update($project_id, $mr_id, array $params) - { - return $this->put('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id), $params); - } - - public function merge($project_id, $mr_id, array $params) - { - return $this->put('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id).'/merge', $params); - } - - public function showComments($project_id, $mr_id) - { - return $this->get('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id).'/comments'); - } - - public function addComment($project_id, $mr_id, $note) - { - return $this->post('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id).'/comments', array( - 'note' => $note - )); - } -} +getMrList($project_id, $page, $per_page, self::STATE_ALL); + } + + public function merged($project_id, $page = 1, $per_page = self::PER_PAGE) + { + return $this->getMrList($project_id, $page, $per_page, self::STATE_MERGED); + } + + public function opened($project_id, $page = 1, $per_page = self::PER_PAGE) + { + return $this->getMrList($project_id, $page, $per_page, self::STATE_OPENED); + } + + public function closed($project_id, $page = 1, $per_page = self::PER_PAGE) + { + return $this->getMrList($project_id, $page, $per_page, self::STATE_CLOSED); + } + + public function show($project_id, $mr_id) + { + return $this->get('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id)); + } + + public function create($project_id, $source, $target, $title, $assignee = null, $target_project_id = null, $description = null) + { + if ($target_project_id && ! is_numeric($target_project_id)) { + throw new \InvalidArgumentException('target_project_id should be numeric, the project name is not allowed'); + } + + return $this->post('projects/'.urlencode($project_id).'/merge_requests', array( + 'source_branch' => $source, + 'target_branch' => $target, + 'title' => $title, + 'assignee_id' => $assignee, + 'target_project_id' => $target_project_id, + 'description' => $description + )); + } + + public function update($project_id, $mr_id, array $params) + { + return $this->put('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id), $params); + } + + public function merge($project_id, $mr_id, array $params) + { + return $this->put('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id).'/merge', $params); + } + + public function showComments($project_id, $mr_id) + { + return $this->get('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id).'/comments'); + } + + public function addComment($project_id, $mr_id, $note) + { + return $this->post('projects/'.urlencode($project_id).'/merge_request/'.urlencode($mr_id).'/comments', array( + 'note' => $note + )); + } + + protected function getMrList($project_id, $page, $per_page, $state = self::STATE_ALL) + { + return $this->get('projects/'.urlencode($project_id).'/merge_requests', array( + 'page' => $page, + 'per_page' => $per_page, + 'state' => $state + )); + } +} diff --git a/lib/Gitlab/Model/MergeRequest.php b/lib/Gitlab/Model/MergeRequest.php index 8a4560c42..3e777d81e 100644 --- a/lib/Gitlab/Model/MergeRequest.php +++ b/lib/Gitlab/Model/MergeRequest.php @@ -22,7 +22,8 @@ class MergeRequest extends AbstractModel 'source_project_id', 'target_project_id', 'upvotes', - 'downvotes' + 'downvotes', + 'labels' ); public static function fromArray(Client $client, Project $project, array $data) diff --git a/lib/Gitlab/Model/Project.php b/lib/Gitlab/Model/Project.php index 5e933d371..26ce99339 100644 --- a/lib/Gitlab/Model/Project.php +++ b/lib/Gitlab/Model/Project.php @@ -2,6 +2,7 @@ namespace Gitlab\Model; +use Gitlab\Api\MergeRequests; use Gitlab\Client; use Gitlab\Api\AbstractApi as Api; @@ -311,9 +312,9 @@ public function events() return $events; } - public function mergeRequests($page = 1, $per_page = Api::PER_PAGE) + public function mergeRequests($page = 1, $per_page = Api::PER_PAGE, $state = MergeRequests::STATE_ALL) { - $data = $this->api('mr')->all($this->id, $page, $per_page); + $data = $this->api('mr')->$state($this->id, $page, $per_page); $mrs = array(); foreach ($data as $mr) {