@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.

Add "--all" flags to "release-lease" and "release-resource" workflows in "bin/drydock"

Summary: Ref T13677. These flags increase the convenience of testing in a development environment.

Test Plan: Used new "--all" flags to release all resources and leases.

Subscribers: PHID-OPKG-gm6ozazyms6q6i22gyam

Maniphest Tasks: T13677

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

+136 -34
+65 -17
src/applications/drydock/management/DrydockManagementReleaseLeaseWorkflow.php
··· 15 15 'repeat' => true, 16 16 'help' => pht('Lease ID to release.'), 17 17 ), 18 + array( 19 + 'name' => 'all', 20 + 'help' => pht('Release all leases. Dangerous!'), 21 + ), 18 22 )); 19 23 } 20 24 21 25 public function execute(PhutilArgumentParser $args) { 26 + $is_all = $args->getArg('all'); 22 27 $ids = $args->getArg('id'); 23 - if (!$ids) { 28 + 29 + if (!$ids && !$is_all) { 24 30 throw new PhutilArgumentUsageException( 25 31 pht( 26 - 'Specify one or more lease IDs to release with "%s".', 27 - '--id')); 32 + 'Select which leases you want to release. See "--help" for '. 33 + 'guidance.')); 28 34 } 29 35 30 36 $viewer = $this->getViewer(); 31 - $drydock_phid = id(new PhabricatorDrydockApplication())->getPHID(); 37 + 38 + $statuses = $this->getReleaseableLeaseStatuses(); 32 39 33 - $leases = id(new DrydockLeaseQuery()) 40 + $query = id(new DrydockLeaseQuery()) 34 41 ->setViewer($viewer) 35 - ->withIDs($ids) 36 - ->execute(); 42 + ->withStatuses(mpull($statuses, 'getKey')); 43 + 44 + if ($ids) { 45 + $query->withIDs($ids); 46 + } 37 47 38 - PhabricatorWorker::setRunAllTasksInProcess(true); 39 - foreach ($ids as $id) { 40 - $lease = idx($leases, $id); 41 - if (!$lease) { 42 - echo tsprintf( 43 - "%s\n", 44 - pht('Lease "%s" does not exist.', $id)); 45 - continue; 48 + $leases = $query->execute(); 49 + 50 + if ($ids) { 51 + $id_map = mpull($leases, null, 'getID'); 52 + 53 + foreach ($ids as $id) { 54 + $lease = idx($id_map, $id); 55 + if (!$lease) { 56 + throw new PhutilArgumentUsageException( 57 + pht('Lease "%s" does not exist.', $id)); 58 + } 46 59 } 47 60 61 + $leases = array_select_keys($id_map, $ids); 62 + } 63 + 64 + if (!$leases) { 65 + echo tsprintf( 66 + "%s\n", 67 + pht('No leases selected for release.')); 68 + 69 + return 0; 70 + } 71 + 72 + $drydock_phid = id(new PhabricatorDrydockApplication())->getPHID(); 73 + 74 + PhabricatorWorker::setRunAllTasksInProcess(true); 75 + 76 + foreach ($leases as $lease) { 48 77 if (!$lease->canRelease()) { 49 78 echo tsprintf( 50 79 "%s\n", 51 - pht('Lease "%s" is not releasable.', $id)); 80 + pht( 81 + 'Lease "%s" is not releasable.', 82 + $lease->getDisplayName())); 52 83 continue; 53 84 } 54 85 ··· 62 93 63 94 echo tsprintf( 64 95 "%s\n", 65 - pht('Scheduled release of lease "%s".', $id)); 96 + pht( 97 + 'Scheduled release of lease "%s".', 98 + $lease->getDisplayName())); 66 99 } 67 100 101 + } 102 + 103 + private function getReleaseableLeaseStatuses() { 104 + $statuses = DrydockLeaseStatus::getAllStatuses(); 105 + foreach ($statuses as $key => $status) { 106 + $statuses[$key] = DrydockLeaseStatus::newStatusObject($status); 107 + } 108 + 109 + foreach ($statuses as $key => $status) { 110 + if (!$status->canRelease()) { 111 + unset($statuses[$key]); 112 + } 113 + } 114 + 115 + return $statuses; 68 116 } 69 117 70 118 }
+63 -17
src/applications/drydock/management/DrydockManagementReleaseResourceWorkflow.php
··· 15 15 'repeat' => true, 16 16 'help' => pht('Resource ID to release.'), 17 17 ), 18 + array( 19 + 'name' => 'all', 20 + 'help' => pht('Release all resources. Dangerous!'), 21 + ), 18 22 )); 19 23 } 20 24 21 25 public function execute(PhutilArgumentParser $args) { 26 + $is_all = $args->getArg('all'); 22 27 $ids = $args->getArg('id'); 23 - if (!$ids) { 28 + if (!$ids && !$is_all) { 24 29 throw new PhutilArgumentUsageException( 25 30 pht( 26 - 'Specify one or more resource IDs to release with "%s".', 27 - '--id')); 31 + 'Specify which resources you want to release. See "--help" for '. 32 + 'guidance.')); 28 33 } 29 34 30 35 $viewer = $this->getViewer(); 31 - $drydock_phid = id(new PhabricatorDrydockApplication())->getPHID(); 36 + $statuses = $this->getReleaseableResourceStatuses(); 32 37 33 - $resources = id(new DrydockResourceQuery()) 38 + $query = id(new DrydockResourceQuery()) 34 39 ->setViewer($viewer) 35 - ->withIDs($ids) 36 - ->execute(); 40 + ->withStatuses(mpull($statuses, 'getKey')); 37 41 38 - PhabricatorWorker::setRunAllTasksInProcess(true); 39 - foreach ($ids as $id) { 40 - $resource = idx($resources, $id); 42 + if ($ids) { 43 + $query->withIDs($ids); 44 + } 41 45 42 - if (!$resource) { 43 - echo tsprintf( 44 - "%s\n", 45 - pht('Resource "%s" does not exist.', $id)); 46 - continue; 46 + $resources = $query->execute(); 47 + 48 + if ($ids) { 49 + $id_map = mpull($resources, null, 'getID'); 50 + 51 + foreach ($ids as $id) { 52 + $resource = idx($resources, $id); 53 + 54 + if (!$resource) { 55 + throw new PhutilArgumentUsageException( 56 + pht('Resource "%s" does not exist.', $id)); 57 + } 47 58 } 48 59 60 + $resources = array_select_keys($id_map, $ids); 61 + } 62 + 63 + if (!$resources) { 64 + echo tsprintf( 65 + "%s\n", 66 + pht('No resources selected for release.')); 67 + 68 + return 0; 69 + } 70 + 71 + $drydock_phid = id(new PhabricatorDrydockApplication())->getPHID(); 72 + 73 + PhabricatorWorker::setRunAllTasksInProcess(true); 74 + 75 + foreach ($resources as $resource) { 49 76 if (!$resource->canRelease()) { 50 77 echo tsprintf( 51 78 "%s\n", 52 - pht('Resource "%s" is not releasable.', $id)); 79 + pht( 80 + 'Resource "%s" is not releasable.', 81 + $resource->getDisplayName())); 53 82 continue; 54 83 } 55 84 ··· 63 92 64 93 echo tsprintf( 65 94 "%s\n", 66 - pht('Scheduled release of resource "%s".', $id)); 95 + pht( 96 + 'Scheduled release of resource "%s".', 97 + $resource->getDisplayName())); 67 98 } 68 99 100 + return 0; 69 101 } 70 102 103 + private function getReleaseableResourceStatuses() { 104 + $statuses = DrydockResourceStatus::getAllStatuses(); 105 + foreach ($statuses as $key => $status) { 106 + $statuses[$key] = DrydockResourceStatus::newStatusObject($status); 107 + } 108 + 109 + foreach ($statuses as $key => $status) { 110 + if (!$status->canRelease()) { 111 + unset($statuses[$key]); 112 + } 113 + } 114 + 115 + return $statuses; 116 + } 71 117 }
+4
src/applications/drydock/storage/DrydockLease.php
··· 471 471 return "/drydock/lease/{$id}/"; 472 472 } 473 473 474 + public function getDisplayName() { 475 + return pht('Drydock Lease %d', $this->getID()); 476 + } 477 + 474 478 475 479 /* -( Status )------------------------------------------------------------- */ 476 480
+4
src/applications/drydock/storage/DrydockResource.php
··· 286 286 return $log->save(); 287 287 } 288 288 289 + public function getDisplayName() { 290 + return pht('Drydock Resource %d', $this->getID()); 291 + } 292 + 289 293 290 294 /* -( Status )------------------------------------------------------------- */ 291 295