Page MenuHomePhabricator

D20425.diff
No OneTemporary

D20425.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -951,6 +951,7 @@
'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php',
'DiffusionRepositoryEditEngine' => 'applications/diffusion/editor/DiffusionRepositoryEditEngine.php',
'DiffusionRepositoryEditEnormousController' => 'applications/diffusion/controller/DiffusionRepositoryEditEnormousController.php',
+ 'DiffusionRepositoryEditPublishingController' => 'applications/diffusion/controller/DiffusionRepositoryEditPublishingController.php',
'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php',
'DiffusionRepositoryFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryFunctionDatasource.php',
'DiffusionRepositoryHistoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php',
@@ -969,7 +970,6 @@
'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php',
'DiffusionRepositoryPoliciesManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php',
'DiffusionRepositoryProfilePictureController' => 'applications/diffusion/controller/DiffusionRepositoryProfilePictureController.php',
- 'DiffusionRepositoryPublishingManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryPublishingManagementPanel.php',
'DiffusionRepositoryRef' => 'applications/diffusion/data/DiffusionRepositoryRef.php',
'DiffusionRepositoryRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php',
'DiffusionRepositorySearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRepositorySearchConduitAPIMethod.php',
@@ -6602,6 +6602,7 @@
'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryManageController',
'DiffusionRepositoryEditEngine' => 'PhabricatorEditEngine',
'DiffusionRepositoryEditEnormousController' => 'DiffusionRepositoryManageController',
+ 'DiffusionRepositoryEditPublishingController' => 'DiffusionRepositoryManageController',
'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryManageController',
'DiffusionRepositoryFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'DiffusionRepositoryHistoryManagementPanel' => 'DiffusionRepositoryManagementPanel',
@@ -6620,7 +6621,6 @@
'DiffusionRepositoryPath' => 'Phobject',
'DiffusionRepositoryPoliciesManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryProfilePictureController' => 'DiffusionController',
- 'DiffusionRepositoryPublishingManagementPanel' => 'DiffusionRepositoryManagementPanel',
'DiffusionRepositoryRef' => 'Phobject',
'DiffusionRepositoryRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'DiffusionRepositorySearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod',
diff --git a/src/applications/diffusion/application/PhabricatorDiffusionApplication.php b/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
--- a/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
+++ b/src/applications/diffusion/application/PhabricatorDiffusionApplication.php
@@ -86,6 +86,7 @@
'enormous/' => 'DiffusionRepositoryEditEnormousController',
'delete/' => 'DiffusionRepositoryEditDeleteController',
'update/' => 'DiffusionRepositoryEditUpdateController',
+ 'publish/' => 'DiffusionRepositoryEditPublishingController',
'testautomation/' => 'DiffusionRepositoryTestAutomationController',
),
'pathtree/(?P<dblob>.*)' => 'DiffusionPathTreeController',
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryController.php b/src/applications/diffusion/controller/DiffusionRepositoryController.php
--- a/src/applications/diffusion/controller/DiffusionRepositoryController.php
+++ b/src/applications/diffusion/controller/DiffusionRepositoryController.php
@@ -334,6 +334,8 @@
'fa-clock-o',
'indigo',
pht('Importing (%s)...', $percentage));
+ } else if ($repository->isPublishingDisabled()) {
+ $header->setStatus('fa-minus', 'bluegrey', pht('Publishing Disabled'));
} else {
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
}
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditPublishingController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditPublishingController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/controller/DiffusionRepositoryEditPublishingController.php
@@ -0,0 +1,83 @@
+<?php
+
+final class DiffusionRepositoryEditPublishingController
+ extends DiffusionRepositoryManageController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $response = $this->loadDiffusionContextForEdit();
+ if ($response) {
+ return $response;
+ }
+
+ $viewer = $this->getViewer();
+ $drequest = $this->getDiffusionRequest();
+ $repository = $drequest->getRepository();
+
+ $panel_uri = id(new DiffusionRepositoryBasicsManagementPanel())
+ ->setRepository($repository)
+ ->getPanelURI();
+
+ if ($request->isFormPost()) {
+ if ($repository->isPublishingDisabled()) {
+ $new_status = true;
+ } else {
+ $new_status = false;
+ }
+
+ $xaction = id(new PhabricatorRepositoryTransaction())
+ ->setTransactionType(
+ PhabricatorRepositoryNotifyTransaction::TRANSACTIONTYPE)
+ ->setNewValue($new_status);
+
+ $editor = id(new PhabricatorRepositoryEditor())
+ ->setContinueOnNoEffect(true)
+ ->setContinueOnMissingFields(true)
+ ->setContentSourceFromRequest($request)
+ ->setActor($viewer)
+ ->applyTransactions($repository, array($xaction));
+
+ return id(new AphrontReloadResponse())->setURI($panel_uri);
+ }
+
+ $body = array();
+ if (!$repository->isPublishingDisabled()) {
+ $title = pht('Disable Publishing');
+ $body[] = pht(
+ 'If you disable publishing for this repository, new commits '.
+ 'will not: send email, publish feed stories, trigger audits, or '.
+ 'trigger Herald.');
+
+ $body[] = pht(
+ 'This option is most commonly used to temporarily allow a major '.
+ 'repository maintenance operation (like a history rewrite) to '.
+ 'occur with minimal disruption to users.');
+
+ $submit = pht('Disable Publishing');
+ } else {
+ $title = pht('Reactivate Publishing');
+ $body[] = pht(
+ 'If you reactivate publishing for this repository, new commits '.
+ 'that become reachable from permanent refs will: send email, '.
+ 'publish feed stories, trigger audits, and trigger Herald.');
+
+ $body[] = pht(
+ 'Commits which became reachable from a permanent ref while '.
+ 'publishing was disabled will not trigger these actions '.
+ 'retroactively.');
+
+ $submit = pht('Reactivate Publishing');
+ }
+
+ $dialog = $this->newDialog()
+ ->setTitle($title)
+ ->addSubmitButton($submit)
+ ->addCancelButton($panel_uri);
+
+ foreach ($body as $graph) {
+ $dialog->appendParagraph($graph);
+ }
+
+ return $dialog;
+ }
+
+}
diff --git a/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php
--- a/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php
+++ b/src/applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php
@@ -46,6 +46,7 @@
$dangerous_uri = $repository->getPathURI('edit/dangerous/');
$enormous_uri = $repository->getPathURI('edit/enormous/');
$update_uri = $repository->getPathURI('edit/update/');
+ $publish_uri = $repository->getPathURI('edit/publish/');
if ($repository->isTracked()) {
$activate_icon = 'fa-ban';
@@ -55,6 +56,14 @@
$activate_label = pht('Activate Repository');
}
+ if (!$repository->isPublishingDisabled()) {
+ $publish_icon = 'fa-ban';
+ $publish_label = pht('Disable Publishing');
+ } else {
+ $publish_icon = 'fa-check';
+ $publish_label = pht('Enable Publishing');
+ }
+
$should_dangerous = $repository->shouldAllowDangerousChanges();
if ($should_dangerous) {
$dangerous_icon = 'fa-shield';
@@ -109,6 +118,10 @@
->setDisabled(!$can_enormous)
->setWorkflow(true));
+ $action_list->addAction(
+ id(new PhabricatorActionView())
+ ->setType(PhabricatorActionView::TYPE_DIVIDER));
+
$action_list->addAction(
id(new PhabricatorActionView())
->setName($activate_label)
@@ -117,6 +130,14 @@
->setDisabled(!$can_edit)
->setWorkflow(true));
+ $action_list->addAction(
+ id(new PhabricatorActionView())
+ ->setName($publish_label)
+ ->setHref($publish_uri)
+ ->setIcon($publish_icon)
+ ->setDisabled(!$can_edit)
+ ->setWorkflow(true));
+
$action_list->addAction(
id(new PhabricatorActionView())
->setName(pht('Update Now'))
@@ -147,6 +168,9 @@
$basics = $this->newBox(pht('Properties'), $basics);
$repository = $this->getRepository();
+
+ $state = $this->buildStateView($repository);
+
$is_new = $repository->isNewlyInitialized();
$info_view = null;
if ($is_new) {
@@ -180,7 +204,7 @@
}
$status = $this->buildStatus();
- return array($info_view, $basics, $description, $status);
+ return array($info_view, $state, $basics, $description, $status);
}
private function buildBasics() {
@@ -287,7 +311,7 @@
$view->addTextContent($raw_error);
}
- return $this->newBox(pht('Status'), $view);
+ return $this->newBox(pht('Working Copy Status'), $view);
}
private function buildRepositoryUpdateInterval(
@@ -720,4 +744,81 @@
'environment.append-paths');
}
+ private function buildStateView(PhabricatorRepository $repository) {
+ $viewer = $this->getViewer();
+ $is_new = $repository->isNewlyInitialized();
+
+ $view = id(new PHUIPropertyListView())
+ ->setViewer($viewer);
+
+ if (!$repository->isTracked()) {
+ if ($is_new) {
+ $active_icon = 'fa-ban';
+ $active_color = 'yellow';
+ $active_label = pht('Not Activated Yet');
+ $active_note = pht('Complete Setup and Activate Repository');
+ } else {
+ $active_icon = 'fa-times';
+ $active_color = 'red';
+ $active_label = pht('Not Active');
+ $active_note = pht('Repository Disabled');
+ }
+ } else if ($repository->isImporting()) {
+ $active_icon = 'fa-hourglass';
+ $active_color = 'yellow';
+ $active_label = pht('Importing...');
+ $active_note = null;
+ } else {
+ $active_icon = 'fa-check';
+ $active_color = 'green';
+ $active_label = pht('Repository Active');
+ $active_note = null;
+ }
+
+ $active_view = id(new PHUIStatusListView())
+ ->addItem(
+ id(new PHUIStatusItemView())
+ ->setIcon($active_icon, $active_color)
+ ->setTarget($active_label)
+ ->setNote($active_note));
+
+ if ($repository->isPublishingDisabled()) {
+ $publishing_icon = 'fa-times';
+ $publishing_color = 'red';
+ $publishing_label = pht('Not Publishing');
+ $publishing_note = pht('Publishing Disabled');
+ } else if (!$repository->isTracked()) {
+ $publishing_icon = 'fa-ban';
+ $publishing_color = 'yellow';
+ $publishing_label = pht('Not Publishing');
+ if ($is_new) {
+ $publishing_note = pht('Repository Not Active Yet');
+ } else {
+ $publishing_note = pht('Repository Inactive');
+ }
+ } else if ($repository->isImporting()) {
+ $publishing_icon = 'fa-ban';
+ $publishing_color = 'yellow';
+ $publishing_label = pht('Not Publishing');
+ $publishing_note = pht('Repository Importing');
+ } else {
+ $publishing_icon = 'fa-check';
+ $publishing_color = 'green';
+ $publishing_label = pht('Publishing Active');
+ $publishing_note = null;
+ }
+
+ $publishing_view = id(new PHUIStatusListView())
+ ->addItem(
+ id(new PHUIStatusItemView())
+ ->setIcon($publishing_icon, $publishing_color)
+ ->setTarget($publishing_label)
+ ->setNote($publishing_note));
+
+ $view->addProperty(pht('Active'), $active_view);
+ $view->addProperty(pht('Publishing'), $publishing_view);
+
+ return $this->newBox(pht('State'), $view);
+ }
+
}
diff --git a/src/applications/diffusion/management/DiffusionRepositoryPublishingManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryPublishingManagementPanel.php
deleted file mode 100644
--- a/src/applications/diffusion/management/DiffusionRepositoryPublishingManagementPanel.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-
-final class DiffusionRepositoryPublishingManagementPanel
- extends DiffusionRepositoryManagementPanel {
-
- const PANELKEY = 'publishing';
-
- public function getManagementPanelLabel() {
- return pht('Publishing');
- }
-
- public function getManagementPanelOrder() {
- return 1100;
- }
-
- public function getManagementPanelIcon() {
- $repository = $this->getRepository();
-
- $has_any = $repository->isPublishingDisabled();
-
- if ($has_any) {
- return 'fa-flash';
- } else {
- return 'fa-flash grey';
- }
- }
-
- protected function getEditEngineFieldKeys() {
- return array(
- 'publish',
- );
- }
-
- public function buildManagementPanelCurtain() {
- $repository = $this->getRepository();
- $viewer = $this->getViewer();
- $action_list = $this->newActionList();
-
- $can_edit = PhabricatorPolicyFilter::hasCapability(
- $viewer,
- $repository,
- PhabricatorPolicyCapability::CAN_EDIT);
-
- $publishing_uri = $this->getEditPageURI();
-
- $action_list->addAction(
- id(new PhabricatorActionView())
- ->setIcon('fa-pencil')
- ->setName(pht('Edit Publishing'))
- ->setHref($publishing_uri)
- ->setDisabled(!$can_edit)
- ->setWorkflow(!$can_edit));
-
- return $this->newCurtainView()
- ->setActionList($action_list);
- }
-
- public function buildManagementPanelContent() {
- $repository = $this->getRepository();
- $viewer = $this->getViewer();
-
- $view = id(new PHUIPropertyListView())
- ->setViewer($viewer);
-
- $notify = $repository->isPublishingDisabled()
- ? pht('Off')
- : pht('On');
- $notify = phutil_tag('em', array(), $notify);
- $view->addProperty(pht('Publishing'), $notify);
-
- return $this->newBox(pht('Publishing'), $view);
- }
-
-}

File Metadata

Mime Type
text/plain
Expires
Sun, May 12, 2:39 AM (1 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6287295
Default Alt Text
D20425.diff (14 KB)

Event Timeline