1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-30 10:42:41 +01:00

Projects for DifferentialRevision

Summary: T2628, Adding project tags to revisions

Test Plan: Edit revision, verify projects can be tagged. Add project hashtag to comments or commit templates, verify revision is tagged with project

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: epriestley, Korvin

Differential Revision: https://secure.phabricator.com/D9686
This commit is contained in:
lkassianik 2014-06-23 09:49:52 -07:00 committed by epriestley
parent c1fab59fed
commit 248b4dfa9d
4 changed files with 117 additions and 1 deletions

View file

@ -415,6 +415,7 @@ phutil_register_library_map(array(
'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php', 'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php',
'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php', 'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php',
'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php', 'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php',
'DifferentialProjectsField' => 'applications/differential/customfield/DifferentialProjectsField.php',
'DifferentialRawDiffRenderer' => 'applications/differential/render/DifferentialRawDiffRenderer.php', 'DifferentialRawDiffRenderer' => 'applications/differential/render/DifferentialRawDiffRenderer.php',
'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php', 'DifferentialReleephRequestFieldSpecification' => 'applications/releeph/differential/DifferentialReleephRequestFieldSpecification.php',
'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php', 'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php',
@ -3108,6 +3109,7 @@ phutil_register_library_map(array(
'DifferentialPathField' => 'DifferentialCustomField', 'DifferentialPathField' => 'DifferentialCustomField',
'DifferentialPrimaryPaneView' => 'AphrontView', 'DifferentialPrimaryPaneView' => 'AphrontView',
'DifferentialProjectReviewersField' => 'DifferentialCustomField', 'DifferentialProjectReviewersField' => 'DifferentialCustomField',
'DifferentialProjectsField' => 'DifferentialCoreCustomField',
'DifferentialRemarkupRule' => 'PhabricatorRemarkupRuleObject', 'DifferentialRemarkupRule' => 'PhabricatorRemarkupRuleObject',
'DifferentialReplyHandler' => 'PhabricatorMailReplyHandler', 'DifferentialReplyHandler' => 'PhabricatorMailReplyHandler',
'DifferentialRepositoryField' => 'DifferentialCoreCustomField', 'DifferentialRepositoryField' => 'DifferentialCoreCustomField',
@ -3129,6 +3131,7 @@ phutil_register_library_map(array(
7 => 'PhabricatorCustomFieldInterface', 7 => 'PhabricatorCustomFieldInterface',
8 => 'PhabricatorApplicationTransactionInterface', 8 => 'PhabricatorApplicationTransactionInterface',
9 => 'PhabricatorDestructableInterface', 9 => 'PhabricatorDestructableInterface',
10 => 'PhabricatorProjectInterface',
), ),
'DifferentialRevisionDetailView' => 'AphrontView', 'DifferentialRevisionDetailView' => 'AphrontView',
'DifferentialRevisionEditController' => 'DifferentialController', 'DifferentialRevisionEditController' => 'DifferentialController',

View file

@ -25,6 +25,7 @@ final class PhabricatorDifferentialConfigOptions
new DifferentialSubscribersField(), new DifferentialSubscribersField(),
new DifferentialRepositoryField(), new DifferentialRepositoryField(),
new DifferentialLintField(), new DifferentialLintField(),
new DifferentialProjectsField(),
new DifferentialUnitField(), new DifferentialUnitField(),
new DifferentialViewPolicyField(), new DifferentialViewPolicyField(),
new DifferentialEditPolicyField(), new DifferentialEditPolicyField(),

View file

@ -0,0 +1,111 @@
<?php
final class DifferentialProjectsField
extends DifferentialCoreCustomField {
public function getFieldKey() {
return 'phabricator:projects';
}
public function getFieldName() {
return pht('Projects');
}
public function getFieldDescription() {
return pht('Tag projects.');
}
public function shouldAppearInPropertyView() {
return false;
}
public function shouldAppearInEditView() {
return true;
}
public function shouldAppearInApplicationTransactions() {
return true;
}
protected function readValueFromRevision(
DifferentialRevision $revision) {
if (!$revision->getPHID()) {
return array();
}
$projects = PhabricatorEdgeQuery::loadDestinationPHIDs(
$revision->getPHID(),
PhabricatorEdgeConfig::TYPE_OBJECT_HAS_PROJECT);
$projects = array_reverse($projects);
return $projects;
}
public function getNewValueForApplicationTransactions() {
return array('=' => array_fuse($this->getValue()));
}
public function readValueFromRequest(AphrontRequest $request) {
$this->setValue($request->getArr($this->getFieldKey()));
}
public function getRequiredHandlePHIDsForEdit() {
return $this->getValue();
}
public function renderEditControl(array $handles) {
return id(new AphrontFormTokenizerControl())
->setName($this->getFieldKey())
->setDatasource('/typeahead/common/projects/')
->setValue($handles)
->setLabel($this->getFieldName());
}
public function getApplicationTransactionType() {
return PhabricatorTransactions::TYPE_EDGE;
}
public function shouldAppearInCommitMessage() {
return true;
}
public function shouldAllowEditInCommitMessage() {
return true;
}
public function shouldOverwriteWhenCommitMessageIsEdited() {
return true;
}
public function getCommitMessageLabels() {
return array(
'Project',
'Projects',
);
}
public function getRequiredHandlePHIDsForCommitMessage() {
return $this->getValue();
}
public function renderCommitMessageValue(array $handles) {
return $this->renderObjectList($handles);
}
public function shouldAppearInConduitDictionary() {
return true;
}
public function getApplicationTransactionMetadata() {
return array('edge:type' => PhabricatorEdgeConfig::TYPE_OBJECT_HAS_PROJECT);
}
public function parseValueFromCommitMessage($value) {
return $this->parseObjectList(
$value,
array(
PhabricatorProjectPHIDTypeProject::TYPECONST,
));
}
}

View file

@ -10,7 +10,8 @@ final class DifferentialRevision extends DifferentialDAO
PhabricatorSubscribableInterface, PhabricatorSubscribableInterface,
PhabricatorCustomFieldInterface, PhabricatorCustomFieldInterface,
PhabricatorApplicationTransactionInterface, PhabricatorApplicationTransactionInterface,
PhabricatorDestructableInterface { PhabricatorDestructableInterface,
PhabricatorProjectInterface {
protected $title = ''; protected $title = '';
protected $originalTitle; protected $originalTitle;