Differential D14337 Diff 34622 src/applications/drydock/worker/DrydockRepositoryOperationUpdateWorker.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/drydock/worker/DrydockRepositoryOperationUpdateWorker.php
| Show First 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | private function handleUpdate(DrydockRepositoryOperation $operation) { | ||||
| // enforce sequential evaluation of operations against the same target so | // enforce sequential evaluation of operations against the same target so | ||||
| // that if you land "A" and then land "B", we always finish "A" first. | // that if you land "A" and then land "B", we always finish "A" first. | ||||
| // For now, just let stuff happen in any order. We can't lease until | // For now, just let stuff happen in any order. We can't lease until | ||||
| // we know we're good to move forward because we might deadlock if we do: | // we know we're good to move forward because we might deadlock if we do: | ||||
| // we're waiting for another operation to complete, and that operation is | // we're waiting for another operation to complete, and that operation is | ||||
| // waiting for a lease we're holding. | // waiting for a lease we're holding. | ||||
| try { | try { | ||||
| $operation->getImplementation() | |||||
| ->setViewer($viewer); | |||||
| $lease = $this->loadWorkingCopyLease($operation); | $lease = $this->loadWorkingCopyLease($operation); | ||||
| $interface = $lease->getInterface( | $interface = $lease->getInterface( | ||||
| DrydockCommandInterface::INTERFACE_TYPE); | DrydockCommandInterface::INTERFACE_TYPE); | ||||
| // No matter what happens here, destroy the lease away once we're done. | // No matter what happens here, destroy the lease away once we're done. | ||||
| $lease->releaseOnDestruction(true); | $lease->releaseOnDestruction(true); | ||||
| $operation->getImplementation() | |||||
| ->setViewer($viewer); | |||||
| $operation->applyOperation($interface); | $operation->applyOperation($interface); | ||||
| } catch (PhabricatorWorkerYieldException $ex) { | } catch (PhabricatorWorkerYieldException $ex) { | ||||
| throw $ex; | throw $ex; | ||||
| } catch (Exception $ex) { | } catch (Exception $ex) { | ||||
| $operation | $operation | ||||
| ->setOperationState(DrydockRepositoryOperation::STATE_FAIL) | ->setOperationState(DrydockRepositoryOperation::STATE_FAIL) | ||||
| ->save(); | ->save(); | ||||
| ▲ Show 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | switch ($type) { | ||||
| default: | default: | ||||
| throw new Exception( | throw new Exception( | ||||
| pht( | pht( | ||||
| 'Unknown repository operation target type "%s" (in target "%s").', | 'Unknown repository operation target type "%s" (in target "%s").', | ||||
| $type, | $type, | ||||
| $target)); | $target)); | ||||
| } | } | ||||
| $spec['merges'] = $operation->getWorkingCopyMerges(); | |||||
| $map = array(); | $map = array(); | ||||
| $map[$repository->getCloneName()] = array( | $map[$repository->getCloneName()] = array( | ||||
| 'phid' => $repository->getPHID(), | 'phid' => $repository->getPHID(), | ||||
| 'default' => true, | 'default' => true, | ||||
| ) + $spec; | ) + $spec; | ||||
| return $map; | return $map; | ||||
| } | } | ||||
| } | } | ||||