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

at recaptime-dev/main 118 lines 2.8 kB view raw
1<?php 2 3final class DrydockManagementReleaseLeaseWorkflow 4 extends DrydockManagementWorkflow { 5 6 protected function didConstruct() { 7 $this 8 ->setName('release-lease') 9 ->setSynopsis(pht('Release a lease.')) 10 ->setArguments( 11 array( 12 array( 13 'name' => 'id', 14 'param' => 'id', 15 'repeat' => true, 16 'help' => pht('Lease ID to release.'), 17 ), 18 array( 19 'name' => 'all', 20 'help' => pht('Release all leases. Dangerous!'), 21 ), 22 )); 23 } 24 25 public function execute(PhutilArgumentParser $args) { 26 $is_all = $args->getArg('all'); 27 $ids = $args->getArg('id'); 28 29 if (!$ids && !$is_all) { 30 throw new PhutilArgumentUsageException( 31 pht( 32 'Select which leases you want to release. See "--help" for '. 33 'guidance.')); 34 } 35 36 $viewer = $this->getViewer(); 37 38 $statuses = $this->getReleaseableLeaseStatuses(); 39 40 $query = id(new DrydockLeaseQuery()) 41 ->setViewer($viewer) 42 ->withStatuses(mpull($statuses, 'getKey')); 43 44 if ($ids) { 45 $query->withIDs($ids); 46 } 47 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 } 59 } 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) { 77 if (!$lease->canRelease()) { 78 echo tsprintf( 79 "%s\n", 80 pht( 81 'Lease "%s" is not releasable.', 82 $lease->getDisplayName())); 83 continue; 84 } 85 86 $command = DrydockCommand::initializeNewCommand($viewer) 87 ->setTargetPHID($lease->getPHID()) 88 ->setAuthorPHID($drydock_phid) 89 ->setCommand(DrydockCommand::COMMAND_RELEASE) 90 ->save(); 91 92 $lease->scheduleUpdate(); 93 94 echo tsprintf( 95 "%s\n", 96 pht( 97 'Scheduled release of lease "%s".', 98 $lease->getDisplayName())); 99 } 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; 116 } 117 118}