Page MenuHomePhabricator

D19673.id.diff
No OneTemporary

D19673.id.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1168,6 +1168,7 @@
'DrydockManagementUpdateResourceWorkflow' => 'applications/drydock/management/DrydockManagementUpdateResourceWorkflow.php',
'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php',
'DrydockObjectAuthorizationView' => 'applications/drydock/view/DrydockObjectAuthorizationView.php',
+ 'DrydockOperationWorkLogType' => 'applications/drydock/logtype/DrydockOperationWorkLogType.php',
'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php',
'DrydockRepositoryOperation' => 'applications/drydock/storage/DrydockRepositoryOperation.php',
'DrydockRepositoryOperationController' => 'applications/drydock/controller/DrydockRepositoryOperationController.php',
@@ -6575,6 +6576,7 @@
'DrydockManagementUpdateResourceWorkflow' => 'DrydockManagementWorkflow',
'DrydockManagementWorkflow' => 'PhabricatorManagementWorkflow',
'DrydockObjectAuthorizationView' => 'AphrontView',
+ 'DrydockOperationWorkLogType' => 'DrydockLogType',
'DrydockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'DrydockRepositoryOperation' => array(
'DrydockDAO',
diff --git a/src/applications/drydock/controller/DrydockBlueprintViewController.php b/src/applications/drydock/controller/DrydockBlueprintViewController.php
--- a/src/applications/drydock/controller/DrydockBlueprintViewController.php
+++ b/src/applications/drydock/controller/DrydockBlueprintViewController.php
@@ -58,8 +58,11 @@
$log_query = id(new DrydockLogQuery())
->withBlueprintPHIDs(array($blueprint->getPHID()));
+ $log_table = $this->buildLogTable($log_query)
+ ->setHideBlueprints(true);
+
$logs = $this->buildLogBox(
- $log_query,
+ $log_table,
$this->getApplicationURI("blueprint/{$id}/logs/query/all/"));
$view = id(new PHUITwoColumnView())
diff --git a/src/applications/drydock/controller/DrydockController.php b/src/applications/drydock/controller/DrydockController.php
--- a/src/applications/drydock/controller/DrydockController.php
+++ b/src/applications/drydock/controller/DrydockController.php
@@ -79,7 +79,7 @@
->addRawContent($table);
}
- protected function buildLogBox(DrydockLogQuery $query, $all_uri) {
+ protected function buildLogTable(DrydockLogQuery $query) {
$viewer = $this->getViewer();
$logs = $query
@@ -89,9 +89,12 @@
$log_table = id(new DrydockLogListView())
->setUser($viewer)
- ->setLogs($logs)
- ->render();
+ ->setLogs($logs);
+ return $log_table;
+ }
+
+ protected function buildLogBox(DrydockLogListView $log_table, $all_uri) {
$log_header = id(new PHUIHeaderView())
->setHeader(pht('Logs'))
->addActionLink(
diff --git a/src/applications/drydock/controller/DrydockLeaseViewController.php b/src/applications/drydock/controller/DrydockLeaseViewController.php
--- a/src/applications/drydock/controller/DrydockLeaseViewController.php
+++ b/src/applications/drydock/controller/DrydockLeaseViewController.php
@@ -43,8 +43,11 @@
$log_query = id(new DrydockLogQuery())
->withLeasePHIDs(array($lease->getPHID()));
+ $log_table = $this->buildLogTable($log_query)
+ ->setHideLeases(true);
+
$logs = $this->buildLogBox(
- $log_query,
+ $log_table,
$this->getApplicationURI("lease/{$id}/logs/query/all/"));
$crumbs = $this->buildApplicationCrumbs();
diff --git a/src/applications/drydock/controller/DrydockRepositoryOperationViewController.php b/src/applications/drydock/controller/DrydockRepositoryOperationViewController.php
--- a/src/applications/drydock/controller/DrydockRepositoryOperationViewController.php
+++ b/src/applications/drydock/controller/DrydockRepositoryOperationViewController.php
@@ -50,8 +50,11 @@
$log_query = id(new DrydockLogQuery())
->withOperationPHIDs(array($operation->getPHID()));
+ $log_table = $this->buildLogTable($log_query)
+ ->setHideOperations(true);
+
$logs = $this->buildLogBox(
- $log_query,
+ $log_table,
$this->getApplicationURI("operation/{$id}/logs/query/all/"));
$view = id(new PHUITwoColumnView())
diff --git a/src/applications/drydock/controller/DrydockResourceViewController.php b/src/applications/drydock/controller/DrydockResourceViewController.php
--- a/src/applications/drydock/controller/DrydockResourceViewController.php
+++ b/src/applications/drydock/controller/DrydockResourceViewController.php
@@ -48,8 +48,11 @@
$log_query = id(new DrydockLogQuery())
->withResourcePHIDs(array($resource->getPHID()));
- $log_box = $this->buildLogBox(
- $log_query,
+ $log_table = $this->buildLogTable($log_query)
+ ->setHideResources(true);
+
+ $logs = $this->buildLogBox(
+ $log_table,
$this->getApplicationURI("resource/{$id}/logs/query/all/"));
$crumbs = $this->buildApplicationCrumbs();
@@ -86,11 +89,12 @@
$view = id(new PHUITwoColumnView())
->setHeader($header)
->setCurtain($curtain)
- ->setMainColumn(array(
- $object_box,
- $lease_box,
- $log_box,
- ));
+ ->setMainColumn(
+ array(
+ $object_box,
+ $lease_box,
+ $logs,
+ ));
return $this->newPage()
->setTitle($title)
diff --git a/src/applications/drydock/logtype/DrydockOperationWorkLogType.php b/src/applications/drydock/logtype/DrydockOperationWorkLogType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/drydock/logtype/DrydockOperationWorkLogType.php
@@ -0,0 +1,19 @@
+<?php
+
+final class DrydockOperationWorkLogType extends DrydockLogType {
+
+ const LOGCONST = 'core.operation.work';
+
+ public function getLogTypeName() {
+ return pht('Started Work');
+ }
+
+ public function getLogTypeIcon(array $data) {
+ return 'fa-check green';
+ }
+
+ public function renderLog(array $data) {
+ return pht('Started this operation in a working copy.');
+ }
+
+}
diff --git a/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php b/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php
--- a/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php
+++ b/src/applications/drydock/phid/DrydockRepositoryOperationPHIDType.php
@@ -5,7 +5,7 @@
const TYPECONST = 'DRYO';
public function getTypeName() {
- return pht('Drydock Repository Operation');
+ return pht('Repository Operation');
}
public function newObject() {
@@ -33,7 +33,7 @@
$operation = $objects[$phid];
$id = $operation->getID();
- $handle->setName(pht('Drydock Repository Operation %d', $id));
+ $handle->setName(pht('Repository Operation %d', $id));
$handle->setURI("/drydock/operation/{$id}/");
}
}
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
@@ -25,6 +25,7 @@
private $repository = self::ATTACHABLE;
private $object = self::ATTACHABLE;
private $implementation = self::ATTACHABLE;
+ private $workingCopyLease = self::ATTACHABLE;
public static function initializeNewOperation(
DrydockRepositoryOperationType $op) {
@@ -90,6 +91,19 @@
return $this->implementation;
}
+ public function getWorkingCopyLease() {
+ return $this->assertAttached($this->workingCopyLease);
+ }
+
+ public function attachWorkingCopyLease(DrydockLease $lease) {
+ $this->workingCopyLease = $lease;
+ return $this;
+ }
+
+ public function hasWorkingCopyLease() {
+ return ($this->workingCopyLease !== self::ATTACHABLE);
+ }
+
public function getProperty($key, $default = null) {
return idx($this->properties, $key, $default);
}
@@ -189,6 +203,29 @@
return $this->getProperty('exec.workingcopy.error');
}
+ public function logEvent($type, array $data = array()) {
+ $log = id(new DrydockLog())
+ ->setEpoch(PhabricatorTime::getNow())
+ ->setType($type)
+ ->setData($data);
+
+ $log->setOperationPHID($this->getPHID());
+
+ if ($this->hasWorkingCopyLease()) {
+ $lease = $this->getWorkingCopyLease();
+ $log->setLeasePHID($lease->getPHID());
+
+ $resource_phid = $lease->getResourcePHID();
+ if ($resource_phid) {
+ $resource = $lease->getResource();
+
+ $log->setResourcePHID($resource->getPHID());
+ $log->setBlueprintPHID($resource->getBlueprintPHID());
+ }
+ }
+
+ return $log->save();
+ }
/* -( PhabricatorPolicyInterface )----------------------------------------- */
diff --git a/src/applications/drydock/view/DrydockLogListView.php b/src/applications/drydock/view/DrydockLogListView.php
--- a/src/applications/drydock/view/DrydockLogListView.php
+++ b/src/applications/drydock/view/DrydockLogListView.php
@@ -3,6 +3,46 @@
final class DrydockLogListView extends AphrontView {
private $logs;
+ private $hideBlueprints;
+ private $hideResources;
+ private $hideLeases;
+ private $hideOperations;
+
+ public function setHideBlueprints($hide_blueprints) {
+ $this->hideBlueprints = $hide_blueprints;
+ return $this;
+ }
+
+ public function getHideBlueprints() {
+ return $this->hideBlueprints;
+ }
+
+ public function setHideResources($hide_resources) {
+ $this->hideResources = $hide_resources;
+ return $this;
+ }
+
+ public function getHideResources() {
+ return $this->hideResources;
+ }
+
+ public function setHideLeases($hide_leases) {
+ $this->hideLeases = $hide_leases;
+ return $this;
+ }
+
+ public function getHideLeases() {
+ return $this->hideLeases;
+ }
+
+ public function setHideOperations($hide_operations) {
+ $this->hideOperations = $hide_operations;
+ return $this;
+ }
+
+ public function getHideOperations() {
+ return $this->hideOperations;
+ }
public function setLogs(array $logs) {
assert_instances_of($logs, 'DrydockLog');
@@ -41,6 +81,13 @@
$lease = null;
}
+ $operation_phid = $log->getOperationPHID();
+ if ($operation_phid) {
+ $operation = $viewer->renderHandle($operation_phid);
+ } else {
+ $operation = null;
+ }
+
if ($log->isComplete()) {
$type_key = $log->getType();
if (isset($types[$type_key])) {
@@ -72,6 +119,7 @@
$blueprint,
$resource,
$lease,
+ $operation,
id(new PHUIIconView())->setIcon($icon),
$type,
$data,
@@ -86,13 +134,22 @@
pht('Blueprint'),
pht('Resource'),
pht('Lease'),
+ pht('Operation'),
null,
pht('Type'),
pht('Data'),
pht('Date'),
))
+ ->setColumnVisibility(
+ array(
+ !$this->getHideBlueprints(),
+ !$this->getHideResources(),
+ !$this->getHideLeases(),
+ !$this->getHideOperations(),
+ ))
->setColumnClasses(
array(
+ '',
'',
'',
'',
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
@@ -59,6 +59,10 @@
// No matter what happens here, destroy the lease away once we're done.
$lease->setReleaseOnDestruction(true);
+ $operation->attachWorkingCopyLease($lease);
+
+ $operation->logEvent(DrydockOperationWorkLogType::LOGCONST);
+
$operation->applyOperation($interface);
} catch (PhabricatorWorkerYieldException $ex) {

File Metadata

Mime Type
text/plain
Expires
Thu, Mar 27, 9:03 AM (6 d, 12 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7225798
Default Alt Text
D19673.id.diff (11 KB)

Event Timeline