mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-19 05:12:41 +01:00
Show open Differential revisions in Diffusion browse views
Summary: Still some rough edges, but this adds a table of open revisions to Diffusion. See T262. I'll make this a little better (e.g., "see all.." instead of arbitrary 10 cap, or maybe move to top-level nav?) but I think I have to refactor some other stuff first. This should let us root out any major issues, at least. NOTE: You must associate Arcanist Projects with Repositories (in Repositories -> Arcanist Projects -> Edit) for this to work! Also made paths include all parent paths so that browse views of directories will work. Test Plan: Uploaded a diff which affected "/blah", it appeared when browsing "/" and "/blah". Reviewers: jungejason, nh, tuomaspelkonen, aran Reviewed By: jungejason CC: aran, jungejason Differential Revision: 979
This commit is contained in:
parent
91bf3e96c9
commit
8ce5dd31f6
5 changed files with 59 additions and 2 deletions
|
@ -773,13 +773,23 @@ class DifferentialRevisionEditor {
|
||||||
$paths[] = $path_prefix.'/'.$changeset->getFileName();
|
$paths[] = $path_prefix.'/'.$changeset->getFileName();
|
||||||
}
|
}
|
||||||
|
|
||||||
$path_map = id(new DiffusionPathIDQuery($paths))->loadPathIDs($paths);
|
// Mark this as also touching all parent paths, so you can see all pending
|
||||||
|
// changes to any file within a directory.
|
||||||
|
$all_paths = array();
|
||||||
|
foreach ($paths as $local) {
|
||||||
|
foreach (DiffusionPathIDQuery::expandPathToRoot($local) as $path) {
|
||||||
|
$all_paths[$path] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$all_paths = array_keys($all_paths);
|
||||||
|
|
||||||
|
$path_map = id(new DiffusionPathIDQuery($all_paths))->loadPathIDs();
|
||||||
|
|
||||||
$table = new DifferentialAffectedPath();
|
$table = new DifferentialAffectedPath();
|
||||||
$conn_w = $table->establishConnection('w');
|
$conn_w = $table->establishConnection('w');
|
||||||
|
|
||||||
$sql = array();
|
$sql = array();
|
||||||
foreach ($paths as $path) {
|
foreach ($all_paths as $path) {
|
||||||
$path_id = idx($path_map, $path);
|
$path_id = idx($path_map, $path);
|
||||||
if (!$path_id) {
|
if (!$path_id) {
|
||||||
// Don't bother creating these, it probably means we're either adding
|
// Don't bother creating these, it probably means we're either adding
|
||||||
|
|
|
@ -108,6 +108,44 @@ abstract class DiffusionController extends PhabricatorController {
|
||||||
return $crumbs;
|
return $crumbs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function buildOpenRevisions() {
|
||||||
|
$drequest = $this->getDiffusionRequest();
|
||||||
|
$repository = $drequest->getRepository();
|
||||||
|
$path = $drequest->getPath();
|
||||||
|
|
||||||
|
$path_map = id(new DiffusionPathIDQuery(array($path)))->loadPathIDs();
|
||||||
|
$path_id = idx($path_map, $path);
|
||||||
|
if (!$path_id) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$revisions = id(new DifferentialRevisionQuery())
|
||||||
|
->withPath($repository->getID(), $path_id)
|
||||||
|
->withStatus(DifferentialRevisionQuery::STATUS_OPEN)
|
||||||
|
->setOrder(DifferentialRevisionQuery::ORDER_PATH_MODIFIED)
|
||||||
|
->setLimit(10)
|
||||||
|
->needRelationships(true)
|
||||||
|
->execute();
|
||||||
|
|
||||||
|
if (!$revisions) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$view = id(new DifferentialRevisionListView())
|
||||||
|
->setRevisions($revisions)
|
||||||
|
->setUser($this->getRequest()->getUser());
|
||||||
|
|
||||||
|
$phids = $view->getRequiredHandlePHIDs();
|
||||||
|
$handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
|
||||||
|
$view->setHandles($handles);
|
||||||
|
|
||||||
|
$panel = new AphrontPanelView();
|
||||||
|
$panel->setHeader('Pending Differential Revisions');
|
||||||
|
$panel->appendChild($view);
|
||||||
|
|
||||||
|
return $panel;
|
||||||
|
}
|
||||||
|
|
||||||
private function buildCrumbList(array $spec = array()) {
|
private function buildCrumbList(array $spec = array()) {
|
||||||
$drequest = $this->getDiffusionRequest();
|
$drequest = $this->getDiffusionRequest();
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,15 @@
|
||||||
|
|
||||||
phutil_require_module('phabricator', 'aphront/response/webpage');
|
phutil_require_module('phabricator', 'aphront/response/webpage');
|
||||||
phutil_require_module('phabricator', 'applications/base/controller/base');
|
phutil_require_module('phabricator', 'applications/base/controller/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/differential/query/revision');
|
||||||
|
phutil_require_module('phabricator', 'applications/differential/view/revisionlist');
|
||||||
|
phutil_require_module('phabricator', 'applications/diffusion/query/pathid/base');
|
||||||
phutil_require_module('phabricator', 'applications/diffusion/request/base');
|
phutil_require_module('phabricator', 'applications/diffusion/request/base');
|
||||||
phutil_require_module('phabricator', 'applications/diffusion/view/base');
|
phutil_require_module('phabricator', 'applications/diffusion/view/base');
|
||||||
|
phutil_require_module('phabricator', 'applications/phid/handle/data');
|
||||||
phutil_require_module('phabricator', 'infrastructure/env');
|
phutil_require_module('phabricator', 'infrastructure/env');
|
||||||
phutil_require_module('phabricator', 'view/layout/crumbs');
|
phutil_require_module('phabricator', 'view/layout/crumbs');
|
||||||
|
phutil_require_module('phabricator', 'view/layout/panel');
|
||||||
phutil_require_module('phabricator', 'view/layout/sidenav');
|
phutil_require_module('phabricator', 'view/layout/sidenav');
|
||||||
|
|
||||||
phutil_require_module('phutil', 'markup');
|
phutil_require_module('phutil', 'markup');
|
||||||
|
|
|
@ -122,6 +122,8 @@ class DiffusionBrowseController extends DiffusionController {
|
||||||
$content[] = $browse_panel;
|
$content[] = $browse_panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$content[] = $this->buildOpenRevisions();
|
||||||
|
|
||||||
$nav = $this->buildSideNav('browse', false);
|
$nav = $this->buildSideNav('browse', false);
|
||||||
$nav->appendChild($content);
|
$nav->appendChild($content);
|
||||||
|
|
||||||
|
|
|
@ -117,10 +117,12 @@ class DiffusionBrowseFileController extends DiffusionController {
|
||||||
));
|
));
|
||||||
$content[] = $view_select_panel;
|
$content[] = $view_select_panel;
|
||||||
$content[] = $corpus;
|
$content[] = $corpus;
|
||||||
|
$content[] = $this->buildOpenRevisions();
|
||||||
|
|
||||||
$nav = $this->buildSideNav('browse', true);
|
$nav = $this->buildSideNav('browse', true);
|
||||||
$nav->appendChild($content);
|
$nav->appendChild($content);
|
||||||
|
|
||||||
|
|
||||||
$basename = basename($this->getDiffusionRequest()->getPath());
|
$basename = basename($this->getDiffusionRequest()->getPath());
|
||||||
|
|
||||||
return $this->buildStandardPageResponse(
|
return $this->buildStandardPageResponse(
|
||||||
|
|
Loading…
Reference in a new issue