/** * @param Project $project * @param PayloadInterface $payload * * @todo implement PayloadInterface#getPullRequestUrl and PayloadInterface#getPullRequestTitle * * @return PullRequest */ public function createPullRequestFromPayload(Project $project, $payload) { $json = json_decode($payload, true); $pr = new PullRequest(); $pr->setNumber($json['pull_request']['number']); $pr->setTitle($json['pull_request']['title']); $pr->setRef(sprintf('pull/%d/head', $json['pull_request']['number'])); $pr->setOpen($json['pull_request']['state'] === 'open'); $pr->setUrl(sprintf('https://github.com/%s/pull/%d', $project->getFullName(), $json['pull_request']['number'])); $pr->setProject($project); return $pr; }
/** * @param Project $project */ protected function doPullRequests(Project $project) { // right now, there's no clean way to checkout bitbucket's pull request, so we're just going to not support them return; // @bitbucketapi sometimes its {owner}, sometimes {accountname} // also, URL is wrong in documentation (is 1.0, should be 2.0) // see https://confluence.atlassian.com/display/BITBUCKET/pullrequests+Resource#pullrequestsResource-GETalistofopenpullrequests $url = sprintf('2.0/repositories/%s/pullrequests?state=OPEN', $project->getFullName()); foreach ($this->fetchPullRequests($url) as $data) { $pr = new PullRequest(); $pr->setNumber($data['id']); $pr->setOpen(true); $pr->setTitle($data['title']); // $pr->setRef(sprintf('pull/%d/head', $data['number'])); $pr->setProject($project); $project->addPullRequest($pr); } }
/** * @param Project $project * * @return boolean */ protected function doPullRequests(Project $project) { $url = sprintf('/repos/%s/pulls', $project->getFullName()); $request = $this->client->get($url); $response = $request->send(); foreach ($response->json() as $data) { $pr = new PullRequest(); $pr->setNumber($data['number']); $pr->setOpen($data['state'] === 'open'); $pr->setTitle($data['title']); $pr->setRef(sprintf('pull/%d/head', $data['number'])); $pr->setProject($project); $project->addPullRequest($pr); } }