Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15407547
D8636.id20478.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
18 KB
Referenced Files
None
Subscribers
None
D8636.id20478.diff
View Options
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
@@ -2516,6 +2516,8 @@
'ReleephPHIDTypeRequest' => 'applications/releeph/phid/ReleephPHIDTypeRequest.php',
'ReleephProductActionController' => 'applications/releeph/controller/project/ReleephProductActionController.php',
'ReleephProductController' => 'applications/releeph/controller/project/ReleephProductController.php',
+ 'ReleephProductCreateController' => 'applications/releeph/controller/project/ReleephProductCreateController.php',
+ 'ReleephProductEditController' => 'applications/releeph/controller/project/ReleephProductEditController.php',
'ReleephProductEditor' => 'applications/releeph/editor/ReleephProductEditor.php',
'ReleephProductHistoryController' => 'applications/releeph/controller/project/ReleephProductHistoryController.php',
'ReleephProductListController' => 'applications/releeph/controller/project/ReleephProductListController.php',
@@ -2525,8 +2527,6 @@
'ReleephProductViewController' => 'applications/releeph/controller/project/ReleephProductViewController.php',
'ReleephProject' => 'applications/releeph/storage/ReleephProject.php',
'ReleephProjectController' => 'applications/releeph/controller/ReleephProjectController.php',
- 'ReleephProjectCreateController' => 'applications/releeph/controller/project/ReleephProjectCreateController.php',
- 'ReleephProjectEditController' => 'applications/releeph/controller/project/ReleephProjectEditController.php',
'ReleephProjectQuery' => 'applications/releeph/query/ReleephProjectQuery.php',
'ReleephReasonFieldSpecification' => 'applications/releeph/field/specification/ReleephReasonFieldSpecification.php',
'ReleephRequest' => 'applications/releeph/storage/ReleephRequest.php',
@@ -5491,6 +5491,8 @@
'ReleephPHIDTypeRequest' => 'PhabricatorPHIDType',
'ReleephProductActionController' => 'ReleephProductController',
'ReleephProductController' => 'ReleephController',
+ 'ReleephProductCreateController' => 'ReleephProjectController',
+ 'ReleephProductEditController' => 'ReleephProductController',
'ReleephProductEditor' => 'PhabricatorApplicationTransactionEditor',
'ReleephProductHistoryController' => 'ReleephProductController',
'ReleephProductListController' =>
@@ -5512,8 +5514,6 @@
1 => 'PhabricatorPolicyInterface',
),
'ReleephProjectController' => 'ReleephController',
- 'ReleephProjectCreateController' => 'ReleephProjectController',
- 'ReleephProjectEditController' => 'ReleephProjectController',
'ReleephProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'ReleephReasonFieldSpecification' => 'ReleephFieldSpecification',
'ReleephRequest' =>
diff --git a/src/applications/releeph/application/PhabricatorApplicationReleeph.php b/src/applications/releeph/application/PhabricatorApplicationReleeph.php
--- a/src/applications/releeph/application/PhabricatorApplicationReleeph.php
+++ b/src/applications/releeph/application/PhabricatorApplicationReleeph.php
@@ -36,10 +36,10 @@
'' => 'ReleephProductListController',
'project/' => array(
'(?:query/(?P<queryKey>[^/]+)/)?' => 'ReleephProductListController',
- 'create/' => 'ReleephProjectCreateController',
+ 'create/' => 'ReleephProductCreateController',
'(?P<projectID>[1-9]\d*)/' => array(
'(?:query/(?P<queryKey>[^/]+)/)?' => 'ReleephProductViewController',
- 'edit/' => 'ReleephProjectEditController',
+ 'edit/' => 'ReleephProductEditController',
'cutbranch/' => 'ReleephBranchCreateController',
'action/(?P<action>.+)/' => 'ReleephProductActionController',
'history/' => 'ReleephProductHistoryController',
diff --git a/src/applications/releeph/controller/project/ReleephProjectCreateController.php b/src/applications/releeph/controller/project/ReleephProductCreateController.php
rename from src/applications/releeph/controller/project/ReleephProjectCreateController.php
rename to src/applications/releeph/controller/project/ReleephProductCreateController.php
--- a/src/applications/releeph/controller/project/ReleephProjectCreateController.php
+++ b/src/applications/releeph/controller/project/ReleephProductCreateController.php
@@ -1,6 +1,6 @@
<?php
-final class ReleephProjectCreateController extends ReleephProjectController {
+final class ReleephProductCreateController extends ReleephProjectController {
public function processRequest() {
$request = $this->getRequest();
@@ -18,7 +18,7 @@
if (!$name) {
$e_name = pht('Required');
$errors[] = pht(
- 'Your Releeph project should have a simple descriptive name.');
+ 'Your product should have a simple, descriptive name.');
}
if (!$trunk_branch) {
@@ -31,7 +31,7 @@
$pr_repository = $arc_project->loadRepository();
if (!$errors) {
- $releeph_project = id(new ReleephProject())
+ $releeph_product = id(new ReleephProject())
->setName($name)
->setTrunkBranch($trunk_branch)
->setRepositoryPHID($pr_repository->getPHID())
@@ -40,21 +40,20 @@
->setIsActive(1);
try {
- $releeph_project->save();
+ $releeph_product->save();
return id(new AphrontRedirectResponse())
- ->setURI($releeph_project->getURI());
+ ->setURI($releeph_product->getURI());
} catch (AphrontQueryDuplicateKeyException $ex) {
$e_name = pht('Not Unique');
- $errors[] = pht(
- 'Another project already uses this name.');
+ $errors[] = pht('Another product already uses this name.');
}
}
}
$arc_project_options = $this->getArcProjectSelectOptions($arc_projects);
- $project_name_input = id(new AphrontFormTextControl())
+ $product_name_input = id(new AphrontFormTextControl())
->setLabel(pht('Name'))
->setDisableAutocomplete(true)
->setName('name')
@@ -79,14 +78,14 @@
$branch_name_preview = id(new ReleephBranchPreviewView())
->setLabel(pht('Example Branch'))
- ->addControl('projectName', $project_name_input)
+ ->addControl('projectName', $product_name_input)
->addControl('arcProjectID', $arc_project_input)
->addStatic('template', '')
->addStatic('isSymbolic', false);
$form = id(new AphrontFormView())
->setUser($request->getUser())
- ->appendChild($project_name_input)
+ ->appendChild($product_name_input)
->appendChild($arc_project_input)
->appendChild(
id(new AphrontFormTextControl())
@@ -100,15 +99,15 @@
->appendChild(
id(new AphrontFormSubmitControl())
->addCancelButton('/releeph/project/')
- ->setValue(pht('Create')));
+ ->setValue(pht('Create Release Product')));
$form_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Create New Project'))
+ ->setHeaderText(pht('Create New Product'))
->setFormErrors($errors)
->setForm($form);
$crumbs = $this->buildApplicationCrumbs();
- $crumbs->addTextCrumb(pht('New Project'));
+ $crumbs->addTextCrumb(pht('New Product'));
return $this->buildApplicationPage(
array(
@@ -116,7 +115,7 @@
$form_box,
),
array(
- 'title' => pht('Create New Project'),
+ 'title' => pht('Create New Product'),
'device' => true,
));
}
diff --git a/src/applications/releeph/controller/project/ReleephProjectEditController.php b/src/applications/releeph/controller/project/ReleephProductEditController.php
rename from src/applications/releeph/controller/project/ReleephProjectEditController.php
rename to src/applications/releeph/controller/project/ReleephProductEditController.php
--- a/src/applications/releeph/controller/project/ReleephProjectEditController.php
+++ b/src/applications/releeph/controller/project/ReleephProductEditController.php
@@ -1,43 +1,61 @@
<?php
-final class ReleephProjectEditController extends ReleephProjectController {
+final class ReleephProductEditController extends ReleephProductController {
+
+ private $productID;
+
+ public function willProcessRequest(array $data) {
+ $this->productID = $data['projectID'];
+ }
public function processRequest() {
$request = $this->getRequest();
+ $viewer = $request->getUser();
+
+ $product = id(new ReleephProjectQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($this->productID))
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->executeOne();
+ if (!$product) {
+ return new Aphront404Response();
+ }
+ $this->setProduct($product);
$e_name = true;
$e_trunk_branch = true;
$e_branch_template = false;
$errors = array();
- $project_name = $request->getStr('name',
- $this->getReleephProject()->getName());
+ $product_name = $request->getStr('name', $product->getName());
- $trunk_branch = $request->getStr('trunkBranch',
- $this->getReleephProject()->getTrunkBranch());
+ $trunk_branch = $request->getStr('trunkBranch', $product->getTrunkBranch());
$branch_template = $request->getStr('branchTemplate');
if ($branch_template === null) {
- $branch_template =
- $this->getReleephProject()->getDetail('branchTemplate');
+ $branch_template = $product->getDetail('branchTemplate');
}
$pick_failure_instructions = $request->getStr('pickFailureInstructions',
- $this->getReleephProject()->getDetail('pick_failure_instructions'));
+ $product->getDetail('pick_failure_instructions'));
$test_paths = $request->getStr('testPaths');
if ($test_paths !== null) {
$test_paths = array_filter(explode("\n", $test_paths));
} else {
- $test_paths = $this->getReleephProject()->getDetail('testPaths', array());
+ $test_paths = $product->getDetail('testPaths', array());
}
- $arc_project_id = $this->getReleephProject()->getArcanistProjectID();
+ $arc_project_id = $product->getArcanistProjectID();
if ($request->isFormPost()) {
$pusher_phids = $request->getArr('pushers');
- if (!$project_name) {
+ if (!$product_name) {
$e_name = pht('Required');
$errors[] =
- pht('Your releeph project should have a simple descriptive name');
+ pht('Your releeph product should have a simple descriptive name.');
}
if (!$trunk_branch) {
@@ -46,14 +64,14 @@
pht('You must specify which branch you will be picking from.');
}
- $other_releeph_projects = id(new ReleephProject())
- ->loadAllWhere('id <> %d', $this->getReleephProject()->getID());
- $other_releeph_project_names = mpull($other_releeph_projects,
+ $other_releeph_products = id(new ReleephProject())
+ ->loadAllWhere('id != %d', $product->getID());
+ $other_releeph_product_names = mpull($other_releeph_products,
'getName', 'getID');
- if (in_array($project_name, $other_releeph_project_names)) {
- $errors[] = pht("Releeph project name %s is already taken",
- $project_name);
+ if (in_array($product_name, $other_releeph_product_names)) {
+ $errors[] = pht("Releeph product name %s is already taken",
+ $product_name);
}
foreach ($test_paths as $test_path) {
@@ -65,7 +83,7 @@
}
}
- $project = $this->getReleephProject()
+ $product
->setTrunkBranch($trunk_branch)
->setDetail('pushers', $pusher_phids)
->setDetail('pick_failure_instructions', $pick_failure_instructions)
@@ -78,7 +96,7 @@
if ($branch_template) {
list($branch_name, $template_errors) = id(new ReleephBranchTemplate())
->setCommitHandle($fake_commit_handle)
- ->setReleephProjectName($project_name)
+ ->setReleephProjectName($product_name)
->interpolate($branch_template);
if ($template_errors) {
@@ -90,29 +108,15 @@
}
if (!$errors) {
- $project->save();
+ $product->save();
- return id(new AphrontRedirectResponse())
- ->setURI('/releeph/project/');
+ return id(new AphrontRedirectResponse())->setURI($product->getURI());
}
}
- $error_view = null;
- if ($errors) {
- $error_view = new AphrontErrorView();
- $error_view->setErrors($errors);
- }
-
- $projects = mpull(
- id(new PhabricatorProject())->loadAll(),
- 'getName',
- 'getID');
-
- $projects[0] = '-'; // no project associated, that's ok
-
$pusher_phids = $request->getArr(
'pushers',
- $this->getReleephProject()->getDetail('pushers', array()));
+ $product->getDetail('pushers', array()));
$handles = id(new PhabricatorHandleQuery())
->setViewer($request->getUser())
@@ -121,33 +125,32 @@
$pusher_handles = array_select_keys($handles, $pusher_phids);
- $basic_inset = id(new AphrontFormInsetView())
- ->setTitle(pht('Basics'))
+ $form = id(new AphrontFormView())
+ ->setUser($request->getUser())
->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('Name'))
->setName('name')
- ->setValue($project_name)
+ ->setValue($product_name)
->setError($e_name)
->setCaption(pht('A name like "Thrift" but not "Thrift releases".')))
->appendChild(
id(new AphrontFormStaticControl())
->setLabel(pht('Repository'))
->setValue(
- $this
- ->getReleephProject()
- ->loadPhabricatorRepository()
- ->getName()))
+ $product
+ ->loadPhabricatorRepository()
+ ->getName()))
->appendChild(
id(new AphrontFormStaticControl())
->setLabel(pht('Arc Project'))
->setValue(
- $this->getReleephProject()->loadArcanistProject()->getName()))
+ $product->loadArcanistProject()->getName()))
->appendChild(
id(new AphrontFormStaticControl())
->setLabel(pht('Releeph Project PHID'))
->setValue(
- $this->getReleephProject()->getPHID()))
+ $product->getPHID()))
->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('Trunk'))
@@ -172,29 +175,10 @@
'in this project. One string per line. '.
'Examples: \'__tests__\', \'/javatests/\'...')));
- $pushers_inset = id(new AphrontFormInsetView())
- ->setTitle(pht('Pushers'))
- ->appendChild(
- pht('Pushers are allowed to approve Releeph requests to be committed. '.
- 'to this project\'s branches. If you leave this blank then anyone '.
- 'is allowed to approve requests.'))
- ->appendChild(
- id(new AphrontFormTokenizerControl())
- ->setLabel(pht('Pushers'))
- ->setName('pushers')
- ->setDatasource('/typeahead/common/users/')
- ->setValue($pusher_handles));
-
- // Build the Template inset
- $help_markup = PhabricatorMarkupEngine::renderOneObject(
- id(new PhabricatorMarkupOneOff())->setContent($this->getBranchHelpText()),
- 'default',
- $request->getUser());
-
$branch_template_input = id(new AphrontFormTextControl())
->setName('branchTemplate')
->setValue($branch_template)
- ->setLabel('Template')
+ ->setLabel('Branch Template')
->setError($e_branch_template)
->setCaption(
pht("Leave this blank to use your installation's default."));
@@ -204,22 +188,18 @@
->addControl('template', $branch_template_input)
->addStatic('arcProjectID', $arc_project_id)
->addStatic('isSymbolic', false)
- ->addStatic('projectName', $this->getReleephProject()->getName());
+ ->addStatic('projectName', $product->getName());
- $template_inset = id(new AphrontFormInsetView())
- ->setTitle(pht('Branch Cutting'))
+ $form
->appendChild(
- pht('Provide a pattern for creating new branches.'))
+ id(new AphrontFormTokenizerControl())
+ ->setLabel(pht('Pushers'))
+ ->setName('pushers')
+ ->setDatasource('/typeahead/common/users/')
+ ->setValue($pusher_handles))
->appendChild($branch_template_input)
->appendChild($branch_template_preview)
- ->appendChild($help_markup);
-
- // Build the form
- $form = id(new AphrontFormView())
- ->setUser($request->getUser())
- ->appendChild($basic_inset)
- ->appendChild($pushers_inset)
- ->appendChild($template_inset);
+ ->appendRemarkupInstructions($this->getBranchHelpText());
$form
->appendChild(
@@ -227,14 +207,23 @@
->addCancelButton('/releeph/project/')
->setValue(pht('Save')));
- $panel = id(new AphrontPanelView())
- ->setHeader(pht('Edit Releeph Project'))
- ->appendChild($form)
- ->setWidth(AphrontPanelView::WIDTH_FORM);
+ $box = id(new PHUIObjectBoxView())
+ ->setHeaderText(pht('Edit Releeph Product'))
+ ->setFormErrors($errors)
+ ->appendChild($form);
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $crumbs->addTextCrumb(pht('Edit Product'));
return $this->buildStandardPageResponse(
- array($error_view, $panel),
- array('title' => pht('Edit Releeph Project')));
+ array(
+ $crumbs,
+ $box,
+ ),
+ array(
+ 'title' => pht('Edit Releeph Product'),
+ 'device' => true,
+ ));
}
private function getBranchHelpText() {
@@ -244,7 +233,7 @@
| Code | Meaning
| ----- | -------
-| `%P` | The name of your project, with spaces changed to "-".
+| `%P` | The name of your product, with spaces changed to "-".
| `%p` | Like %P, but all lowercase.
| `%Y` | The four digit year associated with the branch date.
| `%m` | The two digit month.
@@ -263,7 +252,7 @@
releases/%Y-%M-%d-%v
=> releases/2012-30-16-rHERGE32cd512a52b7
-Include a second hierarchy if you share your repository with other projects:
+Include a second hierarchy if you share your repository with other products:
lang=none
releases/%P/%p-release-%Y%m%d-%V
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 19, 6:15 PM (2 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7475350
Default Alt Text
D8636.id20478.diff (18 KB)
Attached To
Mode
D8636: Rename project -> product on edit/create UIs
Attached
Detach File
Event Timeline
Log In to Comment