Page MenuHomePhabricator

D19636.diff
No OneTemporary

D19636.diff

diff --git a/src/applications/drydock/operation/DrydockRepositoryOperationType.php b/src/applications/drydock/operation/DrydockRepositoryOperationType.php
--- a/src/applications/drydock/operation/DrydockRepositoryOperationType.php
+++ b/src/applications/drydock/operation/DrydockRepositoryOperationType.php
@@ -3,6 +3,8 @@
abstract class DrydockRepositoryOperationType extends Phobject {
private $viewer;
+ private $operation;
+ private $interface;
abstract public function applyOperation(
DrydockRepositoryOperation $operation,
@@ -29,6 +31,27 @@
return $this->viewer;
}
+ final public function setOperation(DrydockRepositoryOperation $operation) {
+ $this->operation = $operation;
+ return $this;
+ }
+
+ final public function getOperation() {
+ return $this->operation;
+ }
+
+ final public function setInterface(DrydockInterface $interface) {
+ $this->interface = $interface;
+ return $this;
+ }
+
+ final public function getInterface() {
+ if (!$this->interface) {
+ throw new PhutilInvalidStateException('setInterface');
+ }
+ return $this->interface;
+ }
+
final public function getOperationConstant() {
return $this->getPhobjectClassConstant('OPCONST', 32);
}
diff --git a/src/applications/drydock/query/DrydockRepositoryOperationQuery.php b/src/applications/drydock/query/DrydockRepositoryOperationQuery.php
--- a/src/applications/drydock/query/DrydockRepositoryOperationQuery.php
+++ b/src/applications/drydock/query/DrydockRepositoryOperationQuery.php
@@ -62,6 +62,8 @@
protected function willFilterPage(array $operations) {
$implementations = DrydockRepositoryOperationType::getAllOperationTypes();
+ $viewer = $this->getViewer();
+
foreach ($operations as $key => $operation) {
$impl = idx($implementations, $operation->getOperationType());
if (!$impl) {
@@ -69,7 +71,10 @@
unset($operations[$key]);
continue;
}
- $impl = clone $impl;
+ $impl = id(clone $impl)
+ ->setViewer($viewer)
+ ->setOperation($operation);
+
$operation->attachImplementation($impl);
}
diff --git a/src/applications/drydock/storage/DrydockRepositoryOperation.php b/src/applications/drydock/storage/DrydockRepositoryOperation.php
--- a/src/applications/drydock/storage/DrydockRepositoryOperation.php
+++ b/src/applications/drydock/storage/DrydockRepositoryOperation.php
@@ -137,9 +137,9 @@
}
public function applyOperation(DrydockInterface $interface) {
- return $this->getImplementation()->applyOperation(
- $this,
- $interface);
+ $impl = $this->getImplementation();
+ $impl->setInterface($interface);
+ return $impl->applyOperation($this, $interface);
}
public function getOperationDescription(PhabricatorUser $viewer) {
diff --git a/src/applications/drydock/worker/DrydockRepositoryOperationUpdateWorker.php b/src/applications/drydock/worker/DrydockRepositoryOperationUpdateWorker.php
--- a/src/applications/drydock/worker/DrydockRepositoryOperationUpdateWorker.php
+++ b/src/applications/drydock/worker/DrydockRepositoryOperationUpdateWorker.php
@@ -25,8 +25,6 @@
private function handleUpdate(DrydockRepositoryOperation $operation) {
- $viewer = $this->getViewer();
-
$operation_state = $operation->getOperationState();
switch ($operation_state) {
@@ -53,9 +51,6 @@
// waiting for a lease we're holding.
try {
- $operation->getImplementation()
- ->setViewer($viewer);
-
$lease = $this->loadWorkingCopyLease($operation);
$interface = $lease->getInterface(

File Metadata

Mime Type
text/plain
Expires
Sat, Jun 1, 11:13 AM (3 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6289073
Default Alt Text
D19636.diff (3 KB)

Event Timeline