protected function executeQuery() { $drequest = $this->getRequest(); $repository = $drequest->getRepository(); list($err, $stdout) = $repository->execLocalCommand('tag -l --contains %s', $drequest->getCommit()); if ($err) { // Git exits with an error code if the commit is bogus. return array(); } $stdout = trim($stdout); if (!strlen($stdout)) { return array(); } $tag_names = explode("\n", $stdout); $tag_names = array_fill_keys($tag_names, true); $tag_query = DiffusionTagListQuery::newFromDiffusionRequest($drequest); $tags = $tag_query->loadTags(); $result = array(); foreach ($tags as $tag) { if (isset($tag_names[$tag->getName()])) { $result[] = $tag; } } if ($this->getOffset()) { $result = array_slice($result, $this->getOffset()); } if ($this->getLimit()) { $result = array_slice($result, 0, $this->getLimit()); } return $result; }
public function processRequest() { $drequest = $this->getDiffusionRequest(); $request = $this->getRequest(); $user = $request->getUser(); $repository = $drequest->getRepository(); $pager = new AphrontPagerView(); $pager->setURI($request->getRequestURI(), 'offset'); $pager->setOffset($request->getInt('offset')); if ($drequest->getRawCommit()) { $is_commit = true; $query = DiffusionCommitTagsQuery::newFromDiffusionRequest($drequest); $query->setOffset($pager->getOffset()); $query->setLimit($pager->getPageSize() + 1); $tags = $query->loadTags(); } else { $is_commit = false; $query = DiffusionTagListQuery::newFromDiffusionRequest($drequest); $query->setOffset($pager->getOffset()); $query->setLimit($pager->getPageSize() + 1); $tags = $query->loadTags(); } $tags = $pager->sliceResults($tags); $content = null; if (!$tags) { $content = new AphrontErrorView(); $content->setTitle('No Tags'); if ($is_commit) { $content->appendChild('This commit has no tags.'); } else { $content->appendChild('This repository has no tags.'); } $content->setSeverity(AphrontErrorView::SEVERITY_NODATA); } else { $commits = id(new PhabricatorAuditCommitQuery())->withIdentifiers($drequest->getRepository()->getID(), mpull($tags, 'getCommitIdentifier'))->needCommitData(true)->execute(); $view = id(new DiffusionTagListView())->setTags($tags)->setUser($user)->setCommits($commits)->setDiffusionRequest($drequest); $phids = $view->getRequiredHandlePHIDs(); $handles = $this->loadViewerHandles($phids); $view->setHandles($handles); $panel = id(new AphrontPanelView())->setHeader('Tags')->appendChild($view)->appendChild($pager); $content = $panel; } return $this->buildStandardPageResponse(array($this->buildCrumbs(array('tags' => true, 'commit' => $drequest->getRawCommit())), $content), array('title' => array('Tags', $repository->getCallsign() . ' Repository'))); }
private function buildTagListTable(DiffusionRequest $drequest) { $tag_limit = 15; $query = DiffusionTagListQuery::newFromDiffusionRequest($drequest); $query->setLimit($tag_limit + 1); $tags = $query->loadTags(); if (!$tags) { return null; } $more_tags = count($tags) > $tag_limit; $tags = array_slice($tags, 0, $tag_limit); $commits = id(new PhabricatorAuditCommitQuery())->withIdentifiers($drequest->getRepository()->getID(), mpull($tags, 'getCommitIdentifier'))->needCommitData(true)->execute(); $view = new DiffusionTagListView(); $view->setDiffusionRequest($drequest); $view->setTags($tags); $view->setUser($this->getRequest()->getUser()); $view->setCommits($commits); $phids = $view->getRequiredHandlePHIDs(); $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles(); $view->setHandles($handles); $panel = new AphrontPanelView(); $panel->setHeader('Tags'); if ($more_tags) { $panel->setCaption('Showing the ' . $tag_limit . ' most recent tags.'); } $panel->addButton(phutil_render_tag('a', array('href' => $drequest->generateURI(array('action' => 'tags')), 'class' => 'grey button'), "Show All Tags »")); $panel->appendChild($view); return $panel; }