@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Move editing "Local Path" to modern UI/controller/etc

Summary: Fixes T1286. Ref T2231. See previous diffs; same as the others but does "Local Path".

Test Plan: See screenshots.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T1286, T2231

Differential Revision: https://secure.phabricator.com/D7409

+181 -3
+2
src/__phutil_library_map__.php
··· 510 510 'DiffusionRepositoryEditBranchesController' => 'applications/diffusion/controller/DiffusionRepositoryEditBranchesController.php', 511 511 'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php', 512 512 'DiffusionRepositoryEditEncodingController' => 'applications/diffusion/controller/DiffusionRepositoryEditEncodingController.php', 513 + 'DiffusionRepositoryEditLocalController' => 'applications/diffusion/controller/DiffusionRepositoryEditLocalController.php', 513 514 'DiffusionRepositoryEditMainController' => 'applications/diffusion/controller/DiffusionRepositoryEditMainController.php', 514 515 'DiffusionRepositoryEditPolicyController' => 'applications/diffusion/controller/DiffusionRepositoryEditPolicyController.php', 515 516 'DiffusionRepositoryEditSubversionController' => 'applications/diffusion/controller/DiffusionRepositoryEditSubversionController.php', ··· 2686 2687 'DiffusionRepositoryEditBranchesController' => 'DiffusionRepositoryEditController', 2687 2688 'DiffusionRepositoryEditController' => 'DiffusionController', 2688 2689 'DiffusionRepositoryEditEncodingController' => 'DiffusionRepositoryEditController', 2690 + 'DiffusionRepositoryEditLocalController' => 'DiffusionRepositoryEditController', 2689 2691 'DiffusionRepositoryEditMainController' => 'DiffusionRepositoryEditController', 2690 2692 'DiffusionRepositoryEditPolicyController' => 'DiffusionRepositoryEditController', 2691 2693 'DiffusionRepositoryEditSubversionController' => 'DiffusionRepositoryEditController',
+1
src/applications/diffusion/application/PhabricatorApplicationDiffusion.php
··· 73 73 'subversion/' => 'DiffusionRepositoryEditSubversionController', 74 74 'actions/' => 'DiffusionRepositoryEditActionsController', 75 75 '(?P<edit>remote)/' => 'DiffusionRepositoryCreateController', 76 + 'local/' => 'DiffusionRepositoryEditLocalController', 76 77 ), 77 78 ), 78 79 'inline/' => array(
+111
src/applications/diffusion/controller/DiffusionRepositoryEditLocalController.php
··· 1 + <?php 2 + 3 + final class DiffusionRepositoryEditLocalController 4 + extends DiffusionRepositoryEditController { 5 + 6 + public function processRequest() { 7 + $request = $this->getRequest(); 8 + $user = $request->getUser(); 9 + $drequest = $this->diffusionRequest; 10 + $repository = $drequest->getRepository(); 11 + 12 + $repository = id(new PhabricatorRepositoryQuery()) 13 + ->setViewer($user) 14 + ->requireCapabilities( 15 + array( 16 + PhabricatorPolicyCapability::CAN_VIEW, 17 + PhabricatorPolicyCapability::CAN_EDIT, 18 + )) 19 + ->withIDs(array($repository->getID())) 20 + ->executeOne(); 21 + 22 + if (!$repository) { 23 + return new Aphront404Response(); 24 + } 25 + 26 + $edit_uri = $this->getRepositoryControllerURI($repository, 'edit/'); 27 + 28 + $v_local = $repository->getHumanReadableDetail('local-path'); 29 + $e_local = true; 30 + $errors = array(); 31 + 32 + if ($request->isFormPost()) { 33 + $v_local = $request->getStr('local'); 34 + 35 + if (!strlen($v_local)) { 36 + $e_local = pht('Required'); 37 + $errors[] = pht('You must specify a local path.'); 38 + } 39 + 40 + if (!$errors) { 41 + $xactions = array(); 42 + $template = id(new PhabricatorRepositoryTransaction()); 43 + 44 + $type_local = PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH; 45 + 46 + $xactions[] = id(clone $template) 47 + ->setTransactionType($type_local) 48 + ->setNewValue($v_local); 49 + 50 + try { 51 + id(new PhabricatorRepositoryEditor()) 52 + ->setContinueOnNoEffect(true) 53 + ->setContentSourceFromRequest($request) 54 + ->setActor($user) 55 + ->applyTransactions($repository, $xactions); 56 + 57 + return id(new AphrontRedirectResponse())->setURI($edit_uri); 58 + } catch (Exception $ex) { 59 + $errors[] = $ex->getMessage(); 60 + } 61 + } 62 + } 63 + 64 + $crumbs = $this->buildApplicationCrumbs(); 65 + $crumbs->addCrumb( 66 + id(new PhabricatorCrumbView()) 67 + ->setName(pht('Edit Local'))); 68 + 69 + $title = pht('Edit %s', $repository->getName()); 70 + 71 + $error_view = null; 72 + if ($errors) { 73 + $error_view = id(new AphrontErrorView()) 74 + ->setTitle(pht('Form Errors')) 75 + ->setErrors($errors); 76 + } 77 + 78 + $form = id(new AphrontFormView()) 79 + ->setUser($user) 80 + ->appendRemarkupInstructions( 81 + pht( 82 + 'You can adjust the local path for this repository here. This is '. 83 + 'an advanced setting and you usually should not change it.')) 84 + ->appendChild( 85 + id(new AphrontFormTextControl()) 86 + ->setName('local') 87 + ->setLabel(pht('Local Path')) 88 + ->setValue($v_local) 89 + ->setError($e_local)) 90 + ->appendChild( 91 + id(new AphrontFormSubmitControl()) 92 + ->setValue(pht('Save Local')) 93 + ->addCancelButton($edit_uri)); 94 + 95 + $object_box = id(new PHUIObjectBoxView()) 96 + ->setHeaderText($title) 97 + ->setForm($form) 98 + ->setFormError($error_view); 99 + 100 + return $this->buildApplicationPage( 101 + array( 102 + $crumbs, 103 + $object_box, 104 + ), 105 + array( 106 + 'title' => $title, 107 + 'device' => true, 108 + )); 109 + } 110 + 111 + }
+53 -3
src/applications/diffusion/controller/DiffusionRepositoryEditMainController.php
··· 19 19 $is_hg = false; 20 20 switch ($repository->getVersionControlSystem()) { 21 21 case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: 22 + $has_local = true; 22 23 $is_git = true; 23 24 break; 24 25 case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: 26 + // TOOD: This will be true for hosted SVN repositories. 27 + $has_local = false; 25 28 $is_svn = true; 26 29 break; 27 30 case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: 31 + $has_local = true; 28 32 $is_hg = true; 29 33 break; 30 34 } ··· 75 79 $this->buildSubversionActions($repository)); 76 80 } 77 81 82 + $local_properties = null; 83 + if ($has_local) { 84 + $local_properties = $this->buildLocalProperties( 85 + $repository, 86 + $this->buildLocalActions($repository)); 87 + } 88 + 78 89 $actions_properties = $this->buildActionsProperties( 79 90 $repository, 80 91 $this->buildActionsActions($repository)); ··· 105 116 ->setHeader($header) 106 117 ->addPropertyList($basic_properties) 107 118 ->addPropertyList($policy_properties) 108 - ->addPropertyList($remote_properties) 109 - ->addPropertyList($encoding_properties); 119 + ->addPropertyList($remote_properties); 120 + 121 + if ($local_properties) { 122 + $obj_box->addPropertyList($local_properties); 123 + } 124 + 125 + $obj_box->addPropertyList($encoding_properties); 110 126 111 127 if ($branches_properties) { 112 128 $obj_box->addPropertyList($branches_properties); ··· 440 456 441 457 $view->addProperty( 442 458 pht('Remote URI'), 443 - $repository->getDetail('remote-uri')); 459 + $repository->getHumanReadableDetail('remote-uri')); 444 460 445 461 return $view; 446 462 } 447 463 464 + private function buildLocalActions(PhabricatorRepository $repository) { 465 + $viewer = $this->getRequest()->getUser(); 466 + 467 + $view = id(new PhabricatorActionListView()) 468 + ->setObjectURI($this->getRequest()->getRequestURI()) 469 + ->setUser($viewer); 470 + 471 + $edit = id(new PhabricatorActionView()) 472 + ->setIcon('edit') 473 + ->setName(pht('Edit Local')) 474 + ->setHref( 475 + $this->getRepositoryControllerURI($repository, 'edit/local/')); 476 + $view->addAction($edit); 477 + 478 + return $view; 479 + } 480 + 481 + private function buildLocalProperties( 482 + PhabricatorRepository $repository, 483 + PhabricatorActionListView $actions) { 484 + 485 + $viewer = $this->getRequest()->getUser(); 486 + 487 + $view = id(new PHUIPropertyListView()) 488 + ->setUser($viewer) 489 + ->setActionList($actions) 490 + ->addSectionHeader(pht('Local')); 491 + 492 + $view->addProperty( 493 + pht('Local Path'), 494 + $repository->getHumanReadableDetail('local-path')); 495 + 496 + return $view; 497 + } 448 498 }
+7
src/applications/repository/editor/PhabricatorRepositoryEditor.php
··· 23 23 $types[] = PhabricatorRepositoryTransaction::TYPE_SSH_KEYFILE; 24 24 $types[] = PhabricatorRepositoryTransaction::TYPE_HTTP_LOGIN; 25 25 $types[] = PhabricatorRepositoryTransaction::TYPE_HTTP_PASS; 26 + $types[] = PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH; 26 27 27 28 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; 28 29 $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; ··· 69 70 return $object->getDetail('http-login'); 70 71 case PhabricatorRepositoryTransaction::TYPE_HTTP_PASS: 71 72 return $object->getDetail('http-pass'); 73 + case PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH: 74 + return $object->getDetail('local-path'); 72 75 } 73 76 } 74 77 ··· 92 95 case PhabricatorRepositoryTransaction::TYPE_SSH_KEYFILE: 93 96 case PhabricatorRepositoryTransaction::TYPE_HTTP_LOGIN: 94 97 case PhabricatorRepositoryTransaction::TYPE_HTTP_PASS: 98 + case PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH: 95 99 return $xaction->getNewValue(); 96 100 case PhabricatorRepositoryTransaction::TYPE_NOTIFY: 97 101 case PhabricatorRepositoryTransaction::TYPE_AUTOCLOSE: ··· 155 159 break; 156 160 case PhabricatorRepositoryTransaction::TYPE_HTTP_PASS: 157 161 $object->setDetail('http-pass', $xaction->getNewValue()); 162 + break; 163 + case PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH: 164 + $object->setDetail('local-path', $xaction->getNewValue()); 158 165 break; 159 166 case PhabricatorRepositoryTransaction::TYPE_ENCODING: 160 167 // Make sure the encoding is valid by converting to UTF-8. This tests
+7
src/applications/repository/storage/PhabricatorRepositoryTransaction.php
··· 20 20 const TYPE_SSH_KEYFILE = 'repo:ssh-keyfile'; 21 21 const TYPE_HTTP_LOGIN = 'repo:http-login'; 22 22 const TYPE_HTTP_PASS = 'repo:http-pass'; 23 + const TYPE_LOCAL_PATH = 'repo:local-path'; 23 24 24 25 public function getApplicationName() { 25 26 return 'repository'; ··· 231 232 return pht( 232 233 '%s updated the HTTP password for this repository.', 233 234 $this->renderHandleLink($author_phid)); 235 + case self::TYPE_LOCAL_PATH: 236 + return pht( 237 + '%s changed the local path from "%s" to "%s".', 238 + $this->renderHandleLink($author_phid), 239 + $old, 240 + $new); 234 241 } 235 242 236 243 return parent::getTitle();