Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15383232
D7416.id16707.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
24 KB
Referenced Files
None
Subscribers
None
D7416.id16707.diff
View Options
Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -516,6 +516,7 @@
'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php',
'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php',
'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php',
+ 'DiffusionRepositoryEditHostingController' => 'applications/diffusion/controller/DiffusionRepositoryEditHostingController.php',
'DiffusionRepositoryEditLocalController' => 'applications/diffusion/controller/DiffusionRepositoryEditLocalController.php',
'DiffusionRepositoryEditMainController' => 'applications/diffusion/controller/DiffusionRepositoryEditMainController.php',
'DiffusionRepositoryEditPolicyController' => 'applications/diffusion/controller/DiffusionRepositoryEditPolicyController.php',
@@ -2696,6 +2697,7 @@
'DiffusionRepositoryEditController' => 'DiffusionController',
'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditEncodingController' => 'DiffusionRepositoryEditController',
+ 'DiffusionRepositoryEditHostingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditLocalController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditPolicyController' => 'DiffusionRepositoryEditController',
Index: src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
===================================================================
--- src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
+++ src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
@@ -75,6 +75,8 @@
'(?P<edit>remote)/' => 'DiffusionRepositoryCreateController',
'local/' => 'DiffusionRepositoryEditLocalController',
'delete/' => 'DiffusionRepositoryEditDeleteController',
+ 'hosting/' => 'DiffusionRepositoryEditHostingController',
+ '(?P<serve>serve)/' => 'DiffusionRepositoryEditHostingController',
),
),
'inline/' => array(
@@ -110,6 +112,8 @@
DiffusionCapabilityDefaultEdit::CAPABILITY => array(
'default' => PhabricatorPolicies::POLICY_ADMIN,
),
+ DiffusionCapabilityDefaultPush::CAPABILITY => array(
+ ),
DiffusionCapabilityCreateRepositories::CAPABILITY => array(
'default' => PhabricatorPolicies::POLICY_ADMIN,
),
Index: src/applications/diffusion/controller/DiffusionRepositoryEditHostingController.php
===================================================================
--- /dev/null
+++ src/applications/diffusion/controller/DiffusionRepositoryEditHostingController.php
@@ -0,0 +1,229 @@
+<?php
+
+final class DiffusionRepositoryEditHostingController
+ extends DiffusionRepositoryEditController {
+
+ private $serve;
+
+ public function willProcessRequest(array $data) {
+ parent::willProcessRequest($data);
+ $this->serve = idx($data, 'serve');
+ }
+
+ public function processRequest() {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+ $drequest = $this->diffusionRequest;
+ $repository = $drequest->getRepository();
+
+ $repository = id(new PhabricatorRepositoryQuery())
+ ->setViewer($user)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->withIDs(array($repository->getID()))
+ ->executeOne();
+ if (!$repository) {
+ return new Aphront404Response();
+ }
+
+ if (!$this->serve) {
+ return $this->handleHosting($repository);
+ } else {
+ return $this->handleProtocols($repository);
+ }
+ }
+
+ public function handleHosting(PhabricatorRepository $repository) {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $v_hosting = $repository->isHosted();
+
+ $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
+ $next_uri = $this->getRepositoryControllerURI($repository, 'edit/serve/');
+
+ if ($request->isFormPost()) {
+ $v_hosting = $request->getBool('hosting');
+
+ $xactions = array();
+ $template = id(new PhabricatorRepositoryTransaction());
+
+ $type_hosting = PhabricatorRepositoryTransaction::TYPE_HOSTING;
+
+ $xactions[] = id(clone $template)
+ ->setTransactionType($type_hosting)
+ ->setNewValue($v_hosting);
+
+ id(new PhabricatorRepositoryEditor())
+ ->setContinueOnNoEffect(true)
+ ->setContentSourceFromRequest($request)
+ ->setActor($user)
+ ->applyTransactions($repository, $xactions);
+
+ return id(new AphrontRedirectResponse())->setURI($next_uri);
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $crumbs->addCrumb(
+ id(new PhabricatorCrumbView())
+ ->setName(pht('Edit Hosting')));
+
+ $title = pht('Edit Hosting (%s)', $repository->getName());
+
+ $hosted_control = id(new AphrontFormRadioButtonControl())
+ ->setName('hosting')
+ ->setLabel(pht('Hosting'))
+ ->addButton(
+ true,
+ pht('Host Repository on Phabricator'),
+ pht(
+ 'Phabricator will host this repository. Users will be able to '.
+ 'push commits to Phabricator. Phabricator will not pull '.
+ 'changes from elsewhere.'))
+ ->addButton(
+ false,
+ pht('Host Repository Elsewhere'),
+ pht(
+ 'Phabricator will pull updates to this repository from a master '.
+ 'repository elsewhere (for example, on GitHub or Bitbucket). '.
+ 'Users will not be able to push commits to this repository.'))
+ ->setValue($v_hosting);
+
+ $form = id(new AphrontFormView())
+ ->setUser($user)
+ ->appendRemarkupInstructions(
+ pht(
+ 'NOTE: Hosting is extremely new and barely works! Use it at '.
+ 'your own risk.'.
+ "\n\n".
+ 'Phabricator can host repositories, or it can track repositories '.
+ 'hosted elsewhere (like on GitHub or Bitbucket).'))
+ ->appendChild($hosted_control)
+ ->appendChild(
+ id(new AphrontFormSubmitControl())
+ ->setValue(pht('Save and Continue'))
+ ->addCancelButton($edit_uri));
+
+ $object_box = id(new PHUIObjectBoxView())
+ ->setHeaderText($title)
+ ->setForm($form);
+
+ return $this->buildApplicationPage(
+ array(
+ $crumbs,
+ $object_box,
+ ),
+ array(
+ 'title' => $title,
+ 'device' => true,
+ ));
+ }
+
+ public function handleProtocols(PhabricatorRepository $repository) {
+ $request = $this->getRequest();
+ $user = $request->getUser();
+
+ $v_http_mode = $repository->getServeOverHTTP();
+ $v_ssh_mode = $repository->getServeOverSSH();
+
+ $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
+ $prev_uri = $this->getRepositoryControllerURI($repository, 'edit/hosting/');
+
+ if ($request->isFormPost()) {
+ $v_http_mode = $request->getStr('http');
+ $v_ssh_mode = PhabricatorRepository::SERVE_OFF;
+
+ $xactions = array();
+ $template = id(new PhabricatorRepositoryTransaction());
+
+ $type_http = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP;
+ $type_ssh = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH;
+
+ $xactions[] = id(clone $template)
+ ->setTransactionType($type_http)
+ ->setNewValue($v_http_mode);
+
+ $xactions[] = id(clone $template)
+ ->setTransactionType($type_ssh)
+ ->setNewValue($v_ssh_mode);
+
+ id(new PhabricatorRepositoryEditor())
+ ->setContinueOnNoEffect(true)
+ ->setContentSourceFromRequest($request)
+ ->setActor($user)
+ ->applyTransactions($repository, $xactions);
+
+ return id(new AphrontRedirectResponse())->setURI($edit_uri);
+ }
+
+ $crumbs = $this->buildCrumbs();
+ $crumbs->addCrumb(
+ id(new PhabricatorCrumbView())
+ ->setName(pht('Edit Protocols')));
+
+ $title = pht('Edit Serving (%s)', $repository->getName());
+
+
+ if ($repository->isHosted()) {
+ $rw_message = pht(
+ 'Phabricator will serve a read-write copy of this repository');
+ } else {
+ $rw_message = pht(
+ 'This repository is hosted elsewhere, so Phabricator can not perform '.
+ 'writes.');
+ }
+
+ $http_control =
+ id(new AphrontFormRadioButtonControl())
+ ->setName('http')
+ ->setLabel(pht('HTTP'))
+ ->setValue($v_http_mode)
+ ->addButton(
+ PhabricatorRepository::SERVE_OFF,
+ PhabricatorRepository::getProtocolAvailabilityName(
+ PhabricatorRepository::SERVE_OFF),
+ pht('Phabricator will not serve this repository.'))
+ ->addButton(
+ PhabricatorRepository::SERVE_READONLY,
+ PhabricatorRepository::getProtocolAvailabilityName(
+ PhabricatorRepository::SERVE_READONLY),
+ pht('Phabricator will serve a read-only copy of this repository.'))
+ ->addButton(
+ PhabricatorRepository::SERVE_READWRITE,
+ PhabricatorRepository::getProtocolAvailabilityName(
+ PhabricatorRepository::SERVE_READWRITE),
+ $rw_message,
+ $repository->isHosted() ? null : 'disabled',
+ $repository->isHosted() ? null : true);
+
+ $form = id(new AphrontFormView())
+ ->setUser($user)
+ ->appendRemarkupInstructions(
+ pht(
+ 'Phabricator can serve repositories over various protocols. You can '.
+ 'configure server protocols here.'))
+ ->appendChild($http_control)
+ ->appendChild(
+ id(new AphrontFormSubmitControl())
+ ->setValue(pht('Save Changes'))
+ ->addCancelButton($prev_uri, pht('Back')));
+
+ $object_box = id(new PHUIObjectBoxView())
+ ->setHeaderText($title)
+ ->setForm($form);
+
+ return $this->buildApplicationPage(
+ array(
+ $crumbs,
+ $object_box,
+ ),
+ array(
+ 'title' => $title,
+ 'device' => true,
+ ));
+ }
+
+}
Index: src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
===================================================================
--- src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
+++ src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
@@ -23,8 +23,7 @@
$is_git = true;
break;
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
- // TOOD: This will be true for hosted SVN repositories.
- $has_local = false;
+ $has_local = $repository->isHosted();
$is_svn = true;
break;
case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
@@ -63,6 +62,10 @@
$encoding_properties =
$this->buildEncodingProperties($repository, $encoding_actions);
+ $hosting_properties = $this->buildHostingProperties(
+ $repository,
+ $this->buildHostingActions($repository));
+
$branches_properties = null;
if ($has_branches) {
$branches_properties = $this->buildBranchesProperties(
@@ -114,6 +117,7 @@
->setHeader($header)
->addPropertyList($basic_properties)
->addPropertyList($policy_properties)
+ ->addPropertyList($hosting_properties)
->addPropertyList($remote_properties);
if ($local_properties) {
@@ -298,6 +302,10 @@
pht('Editable By'),
$descriptions[PhabricatorPolicyCapability::CAN_EDIT]);
+ $pushable = $repository->isHosted()
+ ? $descriptions[DiffusionCapabilityPush::CAPABILITY]
+ : phutil_tag('em', array(), pht('Not a Hosted Repository'));
+ $view->addProperty(pht('Pushable By'), $pushable);
return $view;
}
@@ -501,4 +509,57 @@
return $view;
}
+
+ private function buildHostingActions(PhabricatorRepository $repository) {
+ $user = $this->getRequest()->getUser();
+
+ $view = id(new PhabricatorActionListView())
+ ->setObjectURI($this->getRequest()->getRequestURI())
+ ->setUser($user);
+
+ $edit = id(new PhabricatorActionView())
+ ->setIcon('edit')
+ ->setName(pht('Edit Hosting'))
+ ->setHref(
+ $this->getRepositoryControllerURI($repository, 'edit/hosting/'));
+ $view->addAction($edit);
+
+ return $view;
+ }
+
+ private function buildHostingProperties(
+ PhabricatorRepository $repository,
+ PhabricatorActionListView $actions) {
+
+ $user = $this->getRequest()->getUser();
+
+ $view = id(new PHUIPropertyListView())
+ ->setUser($user)
+ ->setActionList($actions)
+ ->addSectionHeader(pht('Hosting'));
+
+ $hosting = $repository->isHosted()
+ ? pht('Hosted on Phabricator')
+ : pht('Hosted Elsewhere');
+ $view->addProperty(pht('Hosting'), phutil_tag('em', array(), $hosting));
+
+ $view->addProperty(
+ pht('Serve over HTTP'),
+ phutil_tag(
+ 'em',
+ array(),
+ PhabricatorRepository::getProtocolAvailabilityName(
+ $repository->getServeOverHTTP())));
+
+ $view->addProperty(
+ pht('Serve over SSH'),
+ phutil_tag(
+ 'em',
+ array(),
+ PhabricatorRepository::getProtocolAvailabilityName(
+ $repository->getServeOverSSH())));
+
+ return $view;
+ }
+
}
Index: src/applications/diffusion/controller/DiffusionRepositoryEditPolicyController.php
===================================================================
--- src/applications/diffusion/controller/DiffusionRepositoryEditPolicyController.php
+++ src/applications/diffusion/controller/DiffusionRepositoryEditPolicyController.php
@@ -27,16 +27,19 @@
$v_view = $repository->getViewPolicy();
$v_edit = $repository->getEditPolicy();
+ $v_push = $repository->getPushPolicy();
if ($request->isFormPost()) {
$v_view = $request->getStr('viewPolicy');
$v_edit = $request->getStr('editPolicy');
+ $v_push = $request->getStr('pushPolicy');
$xactions = array();
$template = id(new PhabricatorRepositoryTransaction());
$type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
$type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY;
+ $type_push = PhabricatorRepositoryTransaction::TYPE_PUSH_POLICY;
$xactions[] = id(clone $template)
->setTransactionType($type_view)
@@ -46,6 +49,12 @@
->setTransactionType($type_edit)
->setNewValue($v_edit);
+ if ($repository->isHosted()) {
+ $xactions[] = id(clone $template)
+ ->setTransactionType($type_push)
+ ->setNewValue($v_push);
+ }
+
id(new PhabricatorRepositoryEditor())
->setContinueOnNoEffect(true)
->setContentSourceFromRequest($request)
@@ -62,7 +71,7 @@
id(new PhabricatorCrumbView())
->setName(pht('Edit Policies')));
- $title = pht('Edit %s', $repository->getName());
+ $title = pht('Edit Policies (%s)', $repository->getName());
$policies = id(new PhabricatorPolicyQuery())
->setViewer($viewer)
@@ -84,7 +93,25 @@
->setCapability(PhabricatorPolicyCapability::CAN_EDIT)
->setPolicyObject($repository)
->setPolicies($policies)
- ->setName('editPolicy'))
+ ->setName('editPolicy'));
+
+ if ($repository->isHosted()) {
+ $form->appendChild(
+ id(new AphrontFormPolicyControl())
+ ->setUser($viewer)
+ ->setCapability(DiffusionCapabilityPush::CAPABILITY)
+ ->setPolicyObject($repository)
+ ->setPolicies($policies)
+ ->setName('pushPolicy'));
+ } else {
+ $form->appendChild(
+ id(new AphrontFormMarkupControl())
+ ->setLabel(pht('Can Push'))
+ ->setValue(
+ phutil_tag('em', array(), pht('Not a Hosted Repository'))));
+ }
+
+ $form
->appendChild(
id(new AphrontFormSubmitControl())
->setValue(pht('Save Policies'))
Index: src/applications/repository/editor/PhabricatorRepositoryEditor.php
===================================================================
--- src/applications/repository/editor/PhabricatorRepositoryEditor.php
+++ src/applications/repository/editor/PhabricatorRepositoryEditor.php
@@ -25,6 +25,10 @@
$types[] = PhabricatorRepositoryTransaction::TYPE_HTTP_LOGIN;
$types[] = PhabricatorRepositoryTransaction::TYPE_HTTP_PASS;
$types[] = PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH;
+ $types[] = PhabricatorRepositoryTransaction::TYPE_HOSTING;
+ $types[] = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP;
+ $types[] = PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH;
+ $types[] = PhabricatorRepositoryTransaction::TYPE_PUSH_POLICY;
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
@@ -75,6 +79,14 @@
return $object->getDetail('http-pass');
case PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH:
return $object->getDetail('local-path');
+ case PhabricatorRepositoryTransaction::TYPE_HOSTING:
+ return $object->isHosted();
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP:
+ return $object->getServeOverHTTP();
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH:
+ return $object->getServeOverSSH();
+ case PhabricatorRepositoryTransaction::TYPE_PUSH_POLICY:
+ return $object->getPushPolicy();
}
}
@@ -100,6 +112,10 @@
case PhabricatorRepositoryTransaction::TYPE_HTTP_PASS:
case PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH:
case PhabricatorRepositoryTransaction::TYPE_VCS:
+ case PhabricatorRepositoryTransaction::TYPE_HOSTING:
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP:
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH:
+ case PhabricatorRepositoryTransaction::TYPE_PUSH_POLICY:
return $xaction->getNewValue();
case PhabricatorRepositoryTransaction::TYPE_NOTIFY:
case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE:
@@ -170,6 +186,14 @@
case PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH:
$object->setDetail('local-path', $xaction->getNewValue());
break;
+ case PhabricatorRepositoryTransaction::TYPE_HOSTING:
+ return $object->setHosted($xaction->getNewValue());
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP:
+ return $object->setServeOverHTTP($xaction->getNewValue());
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH:
+ return $object->setServeOverSSH($xaction->getNewValue());
+ case PhabricatorRepositoryTransaction::TYPE_PUSH_POLICY:
+ return $object->setPushPolicy($xaction->getNewValue());
case PhabricatorRepositoryTransaction::TYPE_ENCODING:
// Make sure the encoding is valid by converting to UTF-8. This tests
// that the user has mbstring installed, and also that they didn't type
@@ -250,6 +274,10 @@
case PhabricatorRepositoryTransaction::TYPE_VCS:
case PhabricatorRepositoryTransaction::TYPE_NOTIFY:
case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE:
+ case PhabricatorRepositoryTransaction::TYPE_HOSTING:
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_HTTP:
+ case PhabricatorRepositoryTransaction::TYPE_PROTOCOL_SSH:
+ case PhabricatorRepositoryTransaction::TYPE_PUSH_POLICY:
PhabricatorPolicyFilter::requireCapability(
$this->requireActor(),
$object,
Index: src/applications/repository/storage/PhabricatorRepository.php
===================================================================
--- src/applications/repository/storage/PhabricatorRepository.php
+++ src/applications/repository/storage/PhabricatorRepository.php
@@ -26,6 +26,10 @@
const TABLE_BADCOMMIT = 'repository_badcommit';
const TABLE_LINTMESSAGE = 'repository_lintmessage';
+ const SERVE_OFF = 'off';
+ const SERVE_READONLY = 'readonly';
+ const SERVE_READWRITE = 'readwrite';
+
protected $name;
protected $callsign;
protected $uuid;
@@ -708,6 +712,43 @@
return ($vcs == PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL);
}
+ public function isHosted() {
+ return (bool)$this->getDetail('hosting-enabled', false);
+ }
+
+ public function setHosted($enabled) {
+ return $this->setDetail('hosting-enabled', $enabled);
+ }
+
+ public function getServeOverHTTP() {
+ return $this->getDetail('serve-over-http', self::SERVE_OFF);
+ }
+
+ public function setServeOverHTTP($mode) {
+ return $this->setDetail('serve-over-http', $mode);
+ }
+
+ public function getServeOverSSH() {
+ return $this->getDetail('serve-over-ssh', self::SERVE_OFF);
+ }
+
+ public function setServeOverSSH($mode) {
+ return $this->setDetail('serve-over-ssh', $mode);
+ }
+
+ public static function getProtocolAvailabilityName($constant) {
+ switch ($constant) {
+ case self::SERVE_OFF:
+ return pht('Off');
+ case self::SERVE_READONLY:
+ return pht('Read Only');
+ case self::SERVE_READWRITE:
+ return pht('Read/Write');
+ default:
+ return pht('Unknown');
+ }
+ }
+
/* -( PhabricatorPolicyInterface )----------------------------------------- */
Index: src/applications/repository/storage/PhabricatorRepositoryTransaction.php
===================================================================
--- src/applications/repository/storage/PhabricatorRepositoryTransaction.php
+++ src/applications/repository/storage/PhabricatorRepositoryTransaction.php
@@ -22,6 +22,10 @@
const TYPE_HTTP_LOGIN = 'repo:http-login';
const TYPE_HTTP_PASS = 'repo:http-pass';
const TYPE_LOCAL_PATH = 'repo:local-path';
+ const TYPE_HOSTING = 'repo:hosting';
+ const TYPE_PROTOCOL_HTTP = 'repo:serve-http';
+ const TYPE_PROTOCOL_SSH = 'repo:serve-ssh';
+ const TYPE_PUSH_POLICY = 'repo:push-policy';
public function getApplicationName() {
return 'repository';
@@ -35,6 +39,22 @@
return null;
}
+ public function getRequiredHandlePHIDs() {
+ $phids = parent::getRequiredHandlePHIDs();
+
+ $old = $this->getOldValue();
+ $new = $this->getNewValue();
+
+ switch ($this->getTransactionType()) {
+ case self::TYPE_PUSH_POLICY:
+ $phids[] = $old;
+ $phids[] = $new;
+ break;
+ }
+
+ return $phids;
+ }
+
public function shouldHide() {
$old = $this->getOldValue();
$new = $this->getNewValue();
@@ -285,6 +305,36 @@
$this->renderHandleLink($author_phid),
$old,
$new);
+ case self::TYPE_HOSTING:
+ if ($new) {
+ return pht(
+ '%s changed this repository to be hosted on Phabricator.',
+ $this->renderHandleLink($author_phid));
+ } else {
+ return pht(
+ '%s changed this repository to track a remote elsewhere.',
+ $this->renderHandleLink($author_phid));
+ }
+ case self::TYPE_PROTOCOL_HTTP:
+ return pht(
+ '%s changed the availability of this repository over HTTP from '.
+ '"%s" to "%s".',
+ $this->renderHandleLink($author_phid),
+ PhabricatorRepository::getProtocolAvailabilityName($old),
+ PhabricatorRepository::getProtocolAvailabilityName($new));
+ case self::TYPE_PROTOCOL_SSH:
+ return pht(
+ '%s changed the availability of this repository over SSH from '.
+ '"%s" to "%s".',
+ $this->renderHandleLink($author_phid),
+ PhabricatorRepository::getProtocolAvailabilityName($old),
+ PhabricatorRepository::getProtocolAvailabilityName($new));
+ case self::TYPE_PUSH_POLICY:
+ return pht(
+ '%s changed the push policy of this repository from "%s" to "%s".',
+ $this->renderHandleLink($author_phid),
+ $this->renderPolicyName($old),
+ $this->renderPolicyName($new));
}
return parent::getTitle();
@@ -310,6 +360,5 @@
return $view->render();
}
-
}
Index: src/view/form/control/AphrontFormPolicyControl.php
===================================================================
--- src/view/form/control/AphrontFormPolicyControl.php
+++ src/view/form/control/AphrontFormPolicyControl.php
@@ -26,7 +26,18 @@
PhabricatorPolicyCapability::CAN_JOIN => pht('Joinable By'),
);
- $this->setLabel(idx($labels, $this->capability, pht('Unknown Policy')));
+ if (isset($labels[$capability])) {
+ $label = $labels[$capability];
+ } else {
+ $capobj = PhabricatorPolicyCapability::getCapabilityByKey($capability);
+ if ($capobj) {
+ $label = $capobj->getCapabilityName();
+ } else {
+ $label = pht('Capability "%s"', $capability);
+ }
+ }
+
+ $this->setLabel($label);
return $this;
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 15, 3:54 PM (1 w, 21 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7697261
Default Alt Text
D7416.id16707.diff (24 KB)
Attached To
Mode
D7416: Add hosting, serving, and push policy options to repository edit
Attached
Detach File
Event Timeline
Log In to Comment