From 7c413fc580f4e6e7e1cbdb4721b43bce0b3834d9 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 7 Mar 2011 15:13:36 -0800 Subject: [PATCH] Rough version of DiffusionHomeController Summary: My strategy here is to synthesize Diffusion + Confusion (jwilson's git support for Diffusion) + Repository/Commit stuff into Phabricator and kill all birds with one stone. This probably involves the least total work since we have to do this port step anyway and a lot of the Phabricator primitives are in better shape than the trunk primitives. Test Plan: Looked at it in my sandbox, which has some parsed commits. Reviewers: jwilson, aran, jungejason CC: Differential Revision: 57 --- src/__phutil_library_map__.php | 4 + ...AphrontDefaultApplicationConfiguration.php | 4 + .../controller/base/DiffusionController.php | 35 +++++++ .../diffusion/controller/base/__init__.php | 15 +++ .../home/DiffusionHomeController.php | 91 +++++++++++++++++++ .../diffusion/controller/home/__init__.php | 21 +++++ 6 files changed, 170 insertions(+) create mode 100644 src/applications/diffusion/controller/base/DiffusionController.php create mode 100644 src/applications/diffusion/controller/base/__init__.php create mode 100644 src/applications/diffusion/controller/home/DiffusionHomeController.php create mode 100644 src/applications/diffusion/controller/home/__init__.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 73762557b8..6b33581438 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -142,6 +142,8 @@ phutil_register_library_map(array( 'DifferentialRevisionViewController' => 'applications/differential/controller/revisionview', 'DifferentialSubscribeController' => 'applications/differential/controller/subscribe', 'DifferentialUnitStatus' => 'applications/differential/constants/unitstatus', + 'DiffusionController' => 'applications/diffusion/controller/base', + 'DiffusionHomeController' => 'applications/diffusion/controller/home', 'Javelin' => 'infrastructure/javelin/api', 'LiskDAO' => 'storage/lisk/dao', 'ManiphestController' => 'applications/maniphest/controller/base', @@ -420,6 +422,8 @@ phutil_register_library_map(array( 'DifferentialRevisionUpdateHistoryView' => 'AphrontView', 'DifferentialRevisionViewController' => 'DifferentialController', 'DifferentialSubscribeController' => 'DifferentialController', + 'DiffusionController' => 'PhabricatorController', + 'DiffusionHomeController' => 'DiffusionController', 'ManiphestController' => 'PhabricatorController', 'ManiphestDAO' => 'PhabricatorLiskDAO', 'ManiphestTask' => 'ManiphestDAO', diff --git a/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php index 06e1799733..822fec4af6 100644 --- a/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php +++ b/src/aphront/default/configuration/AphrontDefaultApplicationConfiguration.php @@ -183,6 +183,10 @@ class AphrontDefaultApplicationConfiguration => 'PhabricatorProjectAffiliationEditController', ), + '/diffusion/' => array( + '$' => 'DiffusionHomeController', + ), + ); } diff --git a/src/applications/diffusion/controller/base/DiffusionController.php b/src/applications/diffusion/controller/base/DiffusionController.php new file mode 100644 index 0000000000..3e07b1230b --- /dev/null +++ b/src/applications/diffusion/controller/base/DiffusionController.php @@ -0,0 +1,35 @@ +buildStandardPageView(); + + $page->setApplicationName('Diffusion'); + $page->setBaseURI('/diffusion/'); + $page->setTitle(idx($data, 'title')); + $page->setGlyph("\xE2\x89\x88"); + $page->appendChild($view); + + $response = new AphrontWebpageResponse(); + return $response->setContent($page->render()); + } + +} diff --git a/src/applications/diffusion/controller/base/__init__.php b/src/applications/diffusion/controller/base/__init__.php new file mode 100644 index 0000000000..cf7b058332 --- /dev/null +++ b/src/applications/diffusion/controller/base/__init__.php @@ -0,0 +1,15 @@ +loadAll(); + + $commit = new PhabricatorRepositoryCommit(); + $conn_r = $commit->establishConnection('r'); + + // TODO: Both these queries are basically bogus and have total trash for + // query plans, and don't return the right results. Build a cache instead. + // These are just pulling data with approximately the right look to it. + $commits = $commit->loadAllWhere( + '1 = 1 GROUP BY repositoryPHID'); + $commits = mpull($commits, null, 'getRepositoryPHID'); + + $commit_counts = queryfx_all( + $conn_r, + 'SELECT repositoryPHID, count(*) N FROM %T + GROUP BY repositoryPHID', + $commit->getTableName()); + $commit_counts = ipull($commit_counts, 'N', 'repositoryPHID'); + + $rows = array(); + foreach ($repositories as $repository) { + $phid = $repository->getPHID(); + $commit = idx($commits, $phid); + $rows[] = array( + phutil_render_tag( + 'a', + array( + 'href' => '#', // TODO: Link + ), + phutil_escape_html($repository->getName())), + $repository->getVersionControlSystem(), + idx($commit_counts, $phid, 0), + $commit + ? $commit->getCommitIdentifier() + : null, // TODO: Link/format + $commit + ? phabricator_format_timestamp($commit->getEpoch()) + : null, + ); + } + + $table = new AphrontTableView($rows); + $table->setHeaders( + array( + 'Repository', + 'VCS', + 'Size', + 'Last', + 'Committed', + )); + $table->setColumnClasses( + array( + 'wide', + )); + + $panel = new AphrontPanelView(); + $panel->setHeader('Browse Repositories'); + $panel->appendChild($table); + + return $this->buildStandardPageResponse( + $panel, + array( + 'title' => 'Diffusion', + )); + } + +} diff --git a/src/applications/diffusion/controller/home/__init__.php b/src/applications/diffusion/controller/home/__init__.php new file mode 100644 index 0000000000..89f1fe41b5 --- /dev/null +++ b/src/applications/diffusion/controller/home/__init__.php @@ -0,0 +1,21 @@ +