diff --git a/src/applications/diffusion/controller/DiffusionHomeController.php b/src/applications/diffusion/controller/DiffusionHomeController.php index 0d9c5d786e..50685ffa3e 100644 --- a/src/applications/diffusion/controller/DiffusionHomeController.php +++ b/src/applications/diffusion/controller/DiffusionHomeController.php @@ -1,222 +1,219 @@ getRequest(); $user = $request->getUser(); $shortcuts = id(new PhabricatorRepositoryShortcut())->loadAll(); if ($shortcuts) { $shortcuts = msort($shortcuts, 'getSequence'); $rows = array(); foreach ($shortcuts as $shortcut) { $rows[] = array( phutil_tag( 'a', array( 'href' => $shortcut->getHref(), ), $shortcut->getName()), $shortcut->getDescription(), ); } $shortcut_table = new AphrontTableView($rows); $shortcut_table->setHeaders( array( 'Link', '', )); $shortcut_table->setColumnClasses( array( 'pri', 'wide', )); $shortcut_panel = new AphrontPanelView(); $shortcut_panel->setHeader('Shortcuts'); $shortcut_panel->appendChild($shortcut_table); } else { $shortcut_panel = null; } $repositories = id(new PhabricatorRepositoryQuery()) ->setViewer($user) ->execute(); foreach ($repositories as $key => $repo) { if (!$repo->isTracked()) { unset($repositories[$key]); } } $repositories = msort($repositories, 'getName'); $repository_ids = mpull($repositories, 'getID'); $summaries = array(); $commits = array(); if ($repository_ids) { $summaries = queryfx_all( id(new PhabricatorRepository())->establishConnection('r'), 'SELECT * FROM %T WHERE repositoryID IN (%Ld)', PhabricatorRepository::TABLE_SUMMARY, $repository_ids); $summaries = ipull($summaries, null, 'repositoryID'); $commit_ids = array_filter(ipull($summaries, 'lastCommitID')); if ($commit_ids) { $commit = new PhabricatorRepositoryCommit(); $commits = $commit->loadAllWhere('id IN (%Ld)', $commit_ids); $commits = mpull($commits, null, 'getRepositoryID'); } } $branch = new PhabricatorRepositoryBranch(); $lint_messages = queryfx_all( $branch->establishConnection('r'), 'SELECT b.repositoryID, b.name, COUNT(lm.id) AS n FROM %T b LEFT JOIN %T lm ON b.id = lm.branchID GROUP BY b.id', $branch->getTableName(), PhabricatorRepository::TABLE_LINTMESSAGE); $lint_messages = igroup($lint_messages, 'repositoryID'); $rows = array(); $show_lint = false; foreach ($repositories as $repository) { $id = $repository->getID(); $commit = idx($commits, $id); $size = idx(idx($summaries, $id, array()), 'size', '-'); if ($size != '-') { $size = hsprintf( '%s', DiffusionRequest::generateDiffusionURI(array( 'callsign' => $repository->getCallsign(), 'action' => 'history', )), number_format($size)); } $lint_count = ''; $lint_branches = ipull(idx($lint_messages, $id, array()), 'n', 'name'); $branch = $repository->getDefaultArcanistBranch(); if (isset($lint_branches[$branch])) { $show_lint = true; $lint_count = phutil_tag( 'a', array( 'href' => DiffusionRequest::generateDiffusionURI(array( 'callsign' => $repository->getCallsign(), 'action' => 'lint', )), ), number_format($lint_branches[$branch])); } $date = '-'; $time = '-'; if ($commit) { $date = phabricator_date($commit->getEpoch(), $user); $time = phabricator_time($commit->getEpoch(), $user); } $rows[] = array( phutil_tag( 'a', array( 'href' => '/diffusion/'.$repository->getCallsign().'/', ), $repository->getName()), - $repository->getDetail('description'), PhabricatorRepositoryType::getNameForRepositoryType( $repository->getVersionControlSystem()), $size, $lint_count, $commit ? DiffusionView::linkCommit( $repository, - $commit->getCommitIdentifier()) + $commit->getCommitIdentifier(), + $commit->getSummary()) : '-', $date, $time, ); } $repository_tool_uri = PhabricatorEnv::getProductionURI('/repository/'); $repository_tool = phutil_tag('a', array( 'href' => $repository_tool_uri, ), 'repository tool'); $no_repositories_txt = 'This instance of Phabricator does not have any '. 'configured repositories. '; if ($user->getIsAdmin()) { $no_repositories_txt .= 'To setup one or more repositories, visit the '. $repository_tool.'.'; } else { $no_repositories_txt .= 'Ask an administrator to setup one or more '. 'repositories via the '.$repository_tool.'.'; } $table = new AphrontTableView($rows); $table->setNoDataString($no_repositories_txt); $table->setHeaders( array( 'Repository', - 'Description', 'VCS', 'Commits', 'Lint', 'Last', 'Date', 'Time', )); $table->setColumnClasses( array( 'pri', - 'wide', '', 'n', 'n', - 'n', + 'wide', '', 'right', )); $table->setColumnVisibility( array( true, true, true, - true, $show_lint, true, true, true, )); $panel = new AphrontPanelView(); $panel->setHeader('Browse Repositories'); $panel->appendChild($table); $panel->setNoBackground(); $crumbs = $this->buildCrumbs(); $crumbs->addCrumb( id(new PhabricatorCrumbView()) ->setName(pht('All Repositories')) ->setHref($this->getApplicationURI())); return $this->buildStandardPageResponse( array( $crumbs, $shortcut_panel, $panel, ), array( 'title' => 'Diffusion', )); } } diff --git a/src/applications/diffusion/view/DiffusionView.php b/src/applications/diffusion/view/DiffusionView.php index 83a373d403..bd11c7fd82 100644 --- a/src/applications/diffusion/view/DiffusionView.php +++ b/src/applications/diffusion/view/DiffusionView.php @@ -1,162 +1,167 @@ diffusionRequest = $request; return $this; } final public function getDiffusionRequest() { return $this->diffusionRequest; } final public function linkChange($change_type, $file_type, $path = null, $commit_identifier = null) { $text = DifferentialChangeType::getFullNameForChangeType($change_type); if ($change_type == DifferentialChangeType::TYPE_CHILD) { // TODO: Don't link COPY_AWAY without a direct change. return $text; } if ($file_type == DifferentialChangeType::FILE_DIRECTORY) { return $text; } $href = $this->getDiffusionRequest()->generateURI( array( 'action' => 'change', 'path' => $path, 'commit' => $commit_identifier, )); return phutil_tag( 'a', array( 'href' => $href, ), $text); } final public function linkHistory($path) { $href = $this->getDiffusionRequest()->generateURI( array( 'action' => 'history', 'path' => $path, )); return phutil_tag( 'a', array( 'href' => $href, ), 'History'); } final public function linkBrowse($path, array $details = array()) { $href = $this->getDiffusionRequest()->generateURI( $details + array( 'action' => 'browse', 'path' => $path, )); if (isset($details['text'])) { $text = $details['text']; } else { $text = 'Browse'; } return phutil_tag( 'a', array( 'href' => $href, ), $text); } final public function linkExternal($hash, $uri, $text) { $href = id(new PhutilURI('/diffusion/external/')) ->setQueryParams( array( 'uri' => $uri, 'id' => $hash, )); return phutil_tag( 'a', array( 'href' => $href, ), $text); } final public static function nameCommit( PhabricatorRepository $repository, $commit) { switch ($repository->getVersionControlSystem()) { case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: $commit_name = substr($commit, 0, 12); break; default: $commit_name = $commit; break; } $callsign = $repository->getCallsign(); return "r{$callsign}{$commit_name}"; } final public static function linkCommit( PhabricatorRepository $repository, - $commit) { + $commit, + $summary = '') { $commit_name = self::nameCommit($repository, $commit); $callsign = $repository->getCallsign(); + if (strlen($summary)) { + $commit_name .= ': ' . $summary; + } + return phutil_tag( 'a', array( 'href' => "/r{$callsign}{$commit}", ), $commit_name); } final public static function linkRevision($id) { if (!$id) { return null; } return phutil_tag( 'a', array( 'href' => "/D{$id}", ), "D{$id}"); } final protected static function renderName($name) { $email = new PhutilEmailAddress($name); if ($email->getDisplayName() && $email->getDomainName()) { Javelin::initBehavior('phabricator-tooltips', array()); require_celerity_resource('aphront-tooltip-css'); return javelin_tag( 'span', array( 'sigil' => 'has-tooltip', 'meta' => array( 'tip' => $email->getAddress(), 'align' => 'E', 'size' => 'auto', ), ), $email->getDisplayName()); } return hsprintf('%s', $name); } }