Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15438238
D19673.id47013.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
D19673.id47013.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 26, 11:48 PM (6 d, 21 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7225798
Default Alt Text
D19673.id47013.diff (11 KB)
Attached To
Mode
D19673: Write a trivial log when starting a repository operation
Attached
Detach File
Event Timeline
Log In to Comment