Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15466106
D13019.id31442.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
15 KB
Referenced Files
None
Subscribers
None
D13019.id31442.diff
View Options
diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -7,7 +7,7 @@
*/
return array(
'names' => array(
- 'core.pkg.css' => '4e7df908',
+ 'core.pkg.css' => '439658b5',
'core.pkg.js' => '328799d0',
'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => 'bb338e4b',
@@ -134,7 +134,7 @@
'rsrc/css/phui/phui-document.css' => '94d5dcd8',
'rsrc/css/phui/phui-feed-story.css' => 'c9f3a0b5',
'rsrc/css/phui/phui-fontkit.css' => 'dd8ddf27',
- 'rsrc/css/phui/phui-form-view.css' => '808329f2',
+ 'rsrc/css/phui/phui-form-view.css' => '79793450',
'rsrc/css/phui/phui-form.css' => 'f535f938',
'rsrc/css/phui/phui-header-view.css' => '75aaf372',
'rsrc/css/phui/phui-icon.css' => 'bc766998',
@@ -443,7 +443,7 @@
'rsrc/js/core/behavior-device.js' => 'a205cf28',
'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '6d49590e',
'rsrc/js/core/behavior-error-log.js' => '6882e80a',
- 'rsrc/js/core/behavior-fancy-datepicker.js' => '510b5809',
+ 'rsrc/js/core/behavior-fancy-datepicker.js' => '2d4029a8',
'rsrc/js/core/behavior-file-tree.js' => '88236f00',
'rsrc/js/core/behavior-form.js' => '5c54cbf3',
'rsrc/js/core/behavior-gesture.js' => '3ab51e2c',
@@ -576,7 +576,7 @@
'javelin-behavior-durable-column' => '16c695bf',
'javelin-behavior-error-log' => '6882e80a',
'javelin-behavior-event-all-day' => '38dcf3c8',
- 'javelin-behavior-fancy-datepicker' => '510b5809',
+ 'javelin-behavior-fancy-datepicker' => '2d4029a8',
'javelin-behavior-global-drag-and-drop' => 'c8e57404',
'javelin-behavior-herald-rule-editor' => '7ebaeed3',
'javelin-behavior-high-security-warning' => 'a464fe03',
@@ -776,7 +776,7 @@
'phui-font-icon-base-css' => '3dad2ae3',
'phui-fontkit-css' => 'dd8ddf27',
'phui-form-css' => 'f535f938',
- 'phui-form-view-css' => '808329f2',
+ 'phui-form-view-css' => '79793450',
'phui-header-view-css' => '75aaf372',
'phui-icon-view-css' => 'bc766998',
'phui-image-mask-css' => '5a8b09c8',
@@ -1042,6 +1042,13 @@
'javelin-install',
'javelin-event',
),
+ '2d4029a8' => array(
+ 'javelin-behavior',
+ 'javelin-util',
+ 'javelin-dom',
+ 'javelin-stratcom',
+ 'javelin-vector',
+ ),
'331b1611' => array(
'javelin-install',
),
@@ -1167,13 +1174,6 @@
'javelin-typeahead-source',
'javelin-util',
),
- '510b5809' => array(
- 'javelin-behavior',
- 'javelin-util',
- 'javelin-dom',
- 'javelin-stratcom',
- 'javelin-vector',
- ),
'519705ea' => array(
'javelin-install',
'javelin-dom',
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
@@ -595,6 +595,7 @@
'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php',
'DiffusionRepositoryEditHostingController' => 'applications/diffusion/controller/DiffusionRepositoryEditHostingController.php',
'DiffusionRepositoryEditMainController' => 'applications/diffusion/controller/DiffusionRepositoryEditMainController.php',
+ 'DiffusionRepositoryEditStagingController' => 'applications/diffusion/controller/DiffusionRepositoryEditStagingController.php',
'DiffusionRepositoryEditStorageController' => 'applications/diffusion/controller/DiffusionRepositoryEditStorageController.php',
'DiffusionRepositoryEditSubversionController' => 'applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php',
'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php',
@@ -3831,6 +3832,7 @@
'DiffusionRepositoryEditEncodingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditHostingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController',
+ 'DiffusionRepositoryEditStagingController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditStorageController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController',
'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryEditController',
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
@@ -101,6 +101,7 @@
'(?P<serve>serve)/' => 'DiffusionRepositoryEditHostingController',
'update/' => 'DiffusionRepositoryEditUpdateController',
'symbol/' => 'DiffusionRepositorySymbolsController',
+ 'staging/' => 'DiffusionRepositoryEditStagingController',
),
'pathtree/(?P<dblob>.*)' => 'DiffusionPathTreeController',
'mirror/' => array(
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
--- a/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
+++ b/src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
@@ -30,6 +30,7 @@
$has_branches = ($is_git || $is_hg);
$has_local = $repository->usesLocalWorkingCopy();
+ $supports_staging = $repository->supportsStaging();
$crumbs = $this->buildApplicationCrumbs($is_main = true);
@@ -92,6 +93,13 @@
$this->buildStorageActions($repository));
}
+ $staging_properties = null;
+ if ($supports_staging) {
+ $staging_properties = $this->buildStagingProperties(
+ $repository,
+ $this->buildStagingActions($repository));
+ }
+
$actions_properties = $this->buildActionsProperties(
$repository,
$this->buildActionsActions($repository));
@@ -157,6 +165,12 @@
->addPropertyList($storage_properties);
}
+ if ($staging_properties) {
+ $boxes[] = id(new PHUIObjectBoxView())
+ ->setHeaderText(pht('Staging'))
+ ->addPropertyList($staging_properties);
+ }
+
$boxes[] = id(new PHUIObjectBoxView())
->setHeaderText(pht('Text Encoding'))
->addPropertyList($encoding_properties);
@@ -609,6 +623,45 @@
return $view;
}
+
+ private function buildStagingActions(PhabricatorRepository $repository) {
+ $viewer = $this->getViewer();
+
+ $view = id(new PhabricatorActionListView())
+ ->setObjectURI($this->getRequest()->getRequestURI())
+ ->setUser($viewer);
+
+ $edit = id(new PhabricatorActionView())
+ ->setIcon('fa-pencil')
+ ->setName(pht('Edit Staging'))
+ ->setHref(
+ $this->getRepositoryControllerURI($repository, 'edit/staging/'));
+ $view->addAction($edit);
+
+ return $view;
+ }
+
+ private function buildStagingProperties(
+ PhabricatorRepository $repository,
+ PhabricatorActionListView $actions) {
+ $viewer = $this->getViewer();
+
+ $view = id(new PHUIPropertyListView())
+ ->setUser($viewer)
+ ->setActionList($actions);
+
+ $staging_uri = $repository->getStagingURI();
+ if (!$staging_uri) {
+ $staging_uri = phutil_tag('em', array(), pht('No Staging Area'));
+ }
+
+ $view->addProperty(
+ pht('Staging Area'),
+ $staging_uri);
+
+ return $view;
+ }
+
private function buildHostingActions(PhabricatorRepository $repository) {
$user = $this->getRequest()->getUser();
diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditStagingController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditStagingController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/controller/DiffusionRepositoryEditStagingController.php
@@ -0,0 +1,92 @@
+<?php
+
+final class DiffusionRepositoryEditStagingController
+ extends DiffusionRepositoryEditController {
+
+ protected function processDiffusionRequest(AphrontRequest $request) {
+ $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 (!$repository->supportsStaging()) {
+ return new Aphront404Response();
+ }
+
+ $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/');
+
+ $v_area = $repository->getHumanReadableDetail('staging-uri');
+ if ($request->isFormPost()) {
+ $v_area = $request->getStr('area');
+
+ $xactions = array();
+ $template = id(new PhabricatorRepositoryTransaction());
+
+ $type_encoding = PhabricatorRepositoryTransaction::TYPE_STAGING_URI;
+
+ $xactions[] = id(clone $template)
+ ->setTransactionType($type_encoding)
+ ->setNewValue($v_area);
+
+ id(new PhabricatorRepositoryEditor())
+ ->setContinueOnNoEffect(true)
+ ->setContentSourceFromRequest($request)
+ ->setActor($user)
+ ->applyTransactions($repository, $xactions);
+
+ return id(new AphrontRedirectResponse())->setURI($edit_uri);
+ }
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $crumbs->addTextCrumb(pht('Edit Staging'));
+
+ $title = pht('Edit %s', $repository->getName());
+
+ $form = id(new AphrontFormView())
+ ->setUser($user)
+ ->appendRemarkupInstructions(
+ pht(
+ "To make it easier to run integration tests and builds on code ".
+ "under review, you can configure a **Staging Area**. When `arc` ".
+ "creates a diff, it will push a copy of the changes to the ".
+ "configured staging area with a corresponding tag.".
+ "\n\n".
+ "IMPORTANT: This feature is new, experimental, and not supported. ".
+ "Use it at your own risk."))
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setLabel(pht('Staging Area URI'))
+ ->setName('area')
+ ->setValue($v_area))
+ ->appendChild(
+ id(new AphrontFormSubmitControl())
+ ->setValue(pht('Save'))
+ ->addCancelButton($edit_uri));
+
+ $object_box = id(new PHUIObjectBoxView())
+ ->setHeaderText($title)
+ ->setForm($form);
+
+ return $this->buildApplicationPage(
+ array(
+ $crumbs,
+ $object_box,
+ ),
+ array(
+ 'title' => $title,
+ ));
+ }
+
+}
diff --git a/src/applications/repository/editor/PhabricatorRepositoryEditor.php b/src/applications/repository/editor/PhabricatorRepositoryEditor.php
--- a/src/applications/repository/editor/PhabricatorRepositoryEditor.php
+++ b/src/applications/repository/editor/PhabricatorRepositoryEditor.php
@@ -43,6 +43,7 @@
$types[] = PhabricatorRepositoryTransaction::TYPE_SERVICE;
$types[] = PhabricatorRepositoryTransaction::TYPE_SYMBOLS_LANGUAGE;
$types[] = PhabricatorRepositoryTransaction::TYPE_SYMBOLS_SOURCES;
+ $types[] = PhabricatorRepositoryTransaction::TYPE_STAGING_URI;
$types[] = PhabricatorTransactions::TYPE_EDGE;
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
@@ -104,6 +105,8 @@
return $object->getSymbolLanguages();
case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_SOURCES:
return $object->getSymbolSources();
+ case PhabricatorRepositoryTransaction::TYPE_STAGING_URI:
+ return $object->getDetail('staging-uri');
}
}
@@ -139,6 +142,7 @@
case PhabricatorRepositoryTransaction::TYPE_SERVICE:
case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_LANGUAGE:
case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_SOURCES:
+ case PhabricatorRepositoryTransaction::TYPE_STAGING_URI:
return $xaction->getNewValue();
case PhabricatorRepositoryTransaction::TYPE_NOTIFY:
case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE:
@@ -219,6 +223,9 @@
case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_SOURCES:
$object->setDetail('symbol-sources', $xaction->getNewValue());
return;
+ case PhabricatorRepositoryTransaction::TYPE_STAGING_URI:
+ $object->setDetail('staging-uri', $xaction->getNewValue());
+ return;
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
@@ -330,6 +337,7 @@
case PhabricatorRepositoryTransaction::TYPE_SERVICE:
case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_SOURCES:
case PhabricatorRepositoryTransaction::TYPE_SYMBOLS_LANGUAGE:
+ case PhabricatorRepositoryTransaction::TYPE_STAGING_URI:
PhabricatorPolicyFilter::requireCapability(
$this->requireActor(),
$object,
diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php
--- a/src/applications/repository/storage/PhabricatorRepository.php
+++ b/src/applications/repository/storage/PhabricatorRepository.php
@@ -136,6 +136,11 @@
'isHosted' => $this->isHosted(),
'isImporting' => $this->isImporting(),
'encoding' => $this->getDetail('encoding'),
+ 'staging' => array(
+ 'supported' => $this->supportsStaging(),
+ 'prefix' => 'phabricator',
+ 'uri' => $this->getStagingURI(),
+ ),
);
}
@@ -1797,6 +1802,22 @@
}
+/* -( Staging )-------------------------------------------------------------*/
+
+
+ public function supportsStaging() {
+ return $this->isGit();
+ }
+
+
+ public function getStagingURI() {
+ if (!$this->supportsStaging()) {
+ return null;
+ }
+ return $this->getDetail('staging-uri', null);
+ }
+
+
/* -( PhabricatorApplicationTransactionInterface )------------------------- */
diff --git a/src/applications/repository/storage/PhabricatorRepositoryTransaction.php b/src/applications/repository/storage/PhabricatorRepositoryTransaction.php
--- a/src/applications/repository/storage/PhabricatorRepositoryTransaction.php
+++ b/src/applications/repository/storage/PhabricatorRepositoryTransaction.php
@@ -27,6 +27,7 @@
const TYPE_SERVICE = 'repo:service';
const TYPE_SYMBOLS_SOURCES = 'repo:symbol-source';
const TYPE_SYMBOLS_LANGUAGE = 'repo:symbol-language';
+ const TYPE_STAGING_URI = 'repo:staging-uri';
// TODO: Clean up these legacy transaction types.
const TYPE_SSH_LOGIN = 'repo:ssh-login';
@@ -412,9 +413,29 @@
case self::TYPE_SYMBOLS_LANGUAGE:
return pht('%s changed indexed languages from %s to %s.',
+ $this->renderHandleLink($author_phid),
+ $old ? implode(', ', $old) : pht('Any'),
+ $new ? implode(', ', $new) : pht('Any'));
+
+ case self::TYPE_STAGING_URI:
+ if (!$old) {
+ return pht(
+ '%s set "%s" as the staging area for this repository.',
$this->renderHandleLink($author_phid),
- $old ? implode(', ', $old) : pht('Any'),
- $new ? implode(', ', $new) : pht('Any'));
+ $new);
+ } else if (!$new) {
+ return pht(
+ '%s removed "%s" as the staging area for this repository.',
+ $this->renderHandleLink($author_phid),
+ $old);
+ } else {
+ return pht(
+ '%s changed the staging area for this repository from '.
+ '"%s" to "%s".',
+ $this->renderHandleLink($author_phid),
+ $old,
+ $new);
+ }
}
return parent::getTitle();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Apr 4, 1:37 AM (2 w, 5 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7722924
Default Alt Text
D13019.id31442.diff (15 KB)
Attached To
Mode
D13019: Allow configuration of a "staging area" for each repository
Attached
Detach File
Event Timeline
Log In to Comment