Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15392989
D21312.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
23 KB
Referenced Files
None
Subscribers
None
D21312.id.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
@@ -64,8 +64,14 @@
'ArcanistBrowseURIHardpointQuery' => 'browse/query/ArcanistBrowseURIHardpointQuery.php',
'ArcanistBrowseURIRef' => 'browse/ref/ArcanistBrowseURIRef.php',
'ArcanistBrowseWorkflow' => 'browse/workflow/ArcanistBrowseWorkflow.php',
- 'ArcanistBuildPlanRef' => 'ref/ArcanistBuildPlanRef.php',
- 'ArcanistBuildRef' => 'ref/ArcanistBuildRef.php',
+ 'ArcanistBuildBuildplanHardpointQuery' => 'ref/build/ArcanistBuildBuildplanHardpointQuery.php',
+ 'ArcanistBuildPlanRef' => 'ref/buildplan/ArcanistBuildPlanRef.php',
+ 'ArcanistBuildPlanSymbolRef' => 'ref/buildplan/ArcanistBuildPlanSymbolRef.php',
+ 'ArcanistBuildRef' => 'ref/build/ArcanistBuildRef.php',
+ 'ArcanistBuildSymbolRef' => 'ref/build/ArcanistBuildSymbolRef.php',
+ 'ArcanistBuildableBuildsHardpointQuery' => 'ref/buildable/ArcanistBuildableBuildsHardpointQuery.php',
+ 'ArcanistBuildableRef' => 'ref/buildable/ArcanistBuildableRef.php',
+ 'ArcanistBuildableSymbolRef' => 'ref/buildable/ArcanistBuildableSymbolRef.php',
'ArcanistBundle' => 'parser/ArcanistBundle.php',
'ArcanistBundleTestCase' => 'parser/__tests__/ArcanistBundleTestCase.php',
'ArcanistCSSLintLinter' => 'lint/linter/ArcanistCSSLintLinter.php',
@@ -401,8 +407,9 @@
'ArcanistReusedIteratorXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistReusedIteratorXHPASTLinterRule.php',
'ArcanistReusedIteratorXHPASTLinterRuleTestCase' => 'lint/linter/xhpast/rules/__tests__/ArcanistReusedIteratorXHPASTLinterRuleTestCase.php',
'ArcanistRevisionAuthorHardpointQuery' => 'ref/revision/ArcanistRevisionAuthorHardpointQuery.php',
+ 'ArcanistRevisionBuildableHardpointQuery' => 'ref/revision/ArcanistRevisionBuildableHardpointQuery.php',
'ArcanistRevisionCommitMessageHardpointQuery' => 'ref/revision/ArcanistRevisionCommitMessageHardpointQuery.php',
- 'ArcanistRevisionParentRevisionRefsHardpointQuery' => 'ref/revision/ArcanistRevisionParentRevisionRefsHardpointQuery.php',
+ 'ArcanistRevisionParentRevisionsHardpointQuery' => 'ref/revision/ArcanistRevisionParentRevisionsHardpointQuery.php',
'ArcanistRevisionRef' => 'ref/revision/ArcanistRevisionRef.php',
'ArcanistRevisionRefSource' => 'ref/ArcanistRevisionRefSource.php',
'ArcanistRevisionSymbolRef' => 'ref/revision/ArcanistRevisionSymbolRef.php',
@@ -1048,8 +1055,23 @@
'ArcanistBrowseURIHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
'ArcanistBrowseURIRef' => 'ArcanistRef',
'ArcanistBrowseWorkflow' => 'ArcanistArcWorkflow',
- 'ArcanistBuildPlanRef' => 'Phobject',
- 'ArcanistBuildRef' => 'Phobject',
+ 'ArcanistBuildBuildplanHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
+ 'ArcanistBuildPlanRef' => array(
+ 'ArcanistRef',
+ 'ArcanistDisplayRefInterface',
+ ),
+ 'ArcanistBuildPlanSymbolRef' => 'ArcanistSimpleSymbolRef',
+ 'ArcanistBuildRef' => array(
+ 'ArcanistRef',
+ 'ArcanistDisplayRefInterface',
+ ),
+ 'ArcanistBuildSymbolRef' => 'ArcanistSimpleSymbolRef',
+ 'ArcanistBuildableBuildsHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
+ 'ArcanistBuildableRef' => array(
+ 'ArcanistRef',
+ 'ArcanistDisplayRefInterface',
+ ),
+ 'ArcanistBuildableSymbolRef' => 'ArcanistSimpleSymbolRef',
'ArcanistBundle' => 'Phobject',
'ArcanistBundleTestCase' => 'PhutilTestCase',
'ArcanistCSSLintLinter' => 'ArcanistExternalLinter',
@@ -1393,8 +1415,9 @@
'ArcanistReusedIteratorXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistReusedIteratorXHPASTLinterRuleTestCase' => 'ArcanistXHPASTLinterRuleTestCase',
'ArcanistRevisionAuthorHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
+ 'ArcanistRevisionBuildableHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
'ArcanistRevisionCommitMessageHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
- 'ArcanistRevisionParentRevisionRefsHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
+ 'ArcanistRevisionParentRevisionsHardpointQuery' => 'ArcanistRuntimeHardpointQuery',
'ArcanistRevisionRef' => array(
'ArcanistRef',
'ArcanistDisplayRefInterface',
diff --git a/src/ref/ArcanistBuildPlanRef.php b/src/ref/ArcanistBuildPlanRef.php
deleted file mode 100644
--- a/src/ref/ArcanistBuildPlanRef.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-final class ArcanistBuildPlanRef
- extends Phobject {
-
- private $parameters;
-
- public static function newFromConduit(array $data) {
- $ref = new self();
- $ref->parameters = $data;
- return $ref;
- }
-
- public function getPHID() {
- return $this->parameters['phid'];
- }
-
- public function getBehavior($behavior_key, $default = null) {
- return idxv(
- $this->parameters,
- array('fields', 'behaviors', $behavior_key, 'value'),
- $default);
- }
-
-}
diff --git a/src/ref/ArcanistBuildRef.php b/src/ref/ArcanistBuildRef.php
deleted file mode 100644
--- a/src/ref/ArcanistBuildRef.php
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php
-
-final class ArcanistBuildRef
- extends Phobject {
-
- private $parameters;
-
- public static function newFromConduit(array $data) {
- $ref = new self();
- $ref->parameters = $data;
- return $ref;
- }
-
- private function getStatusMap() {
- // The modern "harbormaster.build.search" API method returns this in the
- // "fields" list; the older API method returns it at the root level.
- if (isset($this->parameters['fields']['buildStatus'])) {
- $status = $this->parameters['fields']['buildStatus'];
- } else if (isset($this->parameters['buildStatus'])) {
- $status = $this->parameters['buildStatus'];
- } else {
- $status = 'unknown';
- }
-
- // We may either have an array or a scalar here. The array comes from
- // "harbormaster.build.search", or from "harbormaster.querybuilds" if
- // the server is newer than August 2016. The scalar comes from older
- // versions of that method. See PHI261.
- if (is_array($status)) {
- $map = $status;
- } else {
- $map = array(
- 'value' => $status,
- );
- }
-
- // If we don't have a name, try to fill one in.
- if (!isset($map['name'])) {
- $name_map = array(
- 'inactive' => pht('Inactive'),
- 'pending' => pht('Pending'),
- 'building' => pht('Building'),
- 'passed' => pht('Passed'),
- 'failed' => pht('Failed'),
- 'aborted' => pht('Aborted'),
- 'error' => pht('Error'),
- 'paused' => pht('Paused'),
- 'deadlocked' => pht('Deadlocked'),
- 'unknown' => pht('Unknown'),
- );
-
- $map['name'] = idx($name_map, $map['value'], $map['value']);
- }
-
- // If we don't have an ANSI color code, try to fill one in.
- if (!isset($map['color.ansi'])) {
- $color_map = array(
- 'failed' => 'red',
- 'passed' => 'green',
- );
-
- $map['color.ansi'] = idx($color_map, $map['value'], 'yellow');
- }
-
- return $map;
- }
-
- public function getID() {
- return $this->parameters['id'];
- }
-
- public function getPHID() {
- return $this->parameters['phid'];
- }
-
- public function getName() {
- if (isset($this->parameters['fields']['name'])) {
- return $this->parameters['fields']['name'];
- }
-
- return $this->parameters['name'];
- }
-
- public function getStatus() {
- $map = $this->getStatusMap();
- return $map['value'];
- }
-
- public function getStatusName() {
- $map = $this->getStatusMap();
- return $map['name'];
- }
-
- public function getStatusANSIColor() {
- $map = $this->getStatusMap();
- return $map['color.ansi'];
- }
-
- public function getObjectName() {
- return pht('Build %d', $this->getID());
- }
-
- public function getBuildPlanPHID() {
- return idxv($this->parameters, array('fields', 'buildPlanPHID'));
- }
-
- public function isComplete() {
- switch ($this->getStatus()) {
- case 'passed':
- case 'failed':
- case 'aborted':
- case 'error':
- case 'deadlocked':
- return true;
- default:
- return false;
- }
- }
-
- public function isPassed() {
- return ($this->getStatus() === 'passed');
- }
-
- public function getStatusSortVector() {
- $status = $this->getStatus();
-
- // For now, just sort passed builds first.
- if ($this->isPassed()) {
- $status_class = 1;
- } else {
- $status_class = 2;
- }
-
- return id(new PhutilSortVector())
- ->addInt($status_class)
- ->addString($status);
- }
-
-
-}
diff --git a/src/ref/build/ArcanistBuildBuildplanHardpointQuery.php b/src/ref/build/ArcanistBuildBuildplanHardpointQuery.php
new file mode 100644
--- /dev/null
+++ b/src/ref/build/ArcanistBuildBuildplanHardpointQuery.php
@@ -0,0 +1,44 @@
+<?php
+
+final class ArcanistBuildBuildplanHardpointQuery
+ extends ArcanistRuntimeHardpointQuery {
+
+ public function getHardpoints() {
+ return array(
+ ArcanistBuildRef::HARDPOINT_BUILDPLANREF,
+ );
+ }
+
+ protected function canLoadRef(ArcanistRef $ref) {
+ return ($ref instanceof ArcanistBuildRef);
+ }
+
+ public function loadHardpoint(array $refs, $hardpoint) {
+ $plan_phids = mpull($refs, 'getBuildPlanPHID');
+ $plan_phids = array_fuse($plan_phids);
+ $plan_phids = array_values($plan_phids);
+
+ $plans = (yield $this->yieldConduitSearch(
+ 'harbormaster.buildplan.search',
+ array(
+ 'phids' => $plan_phids,
+ )));
+
+ $plan_refs = array();
+ foreach ($plans as $plan) {
+ $plan_ref = ArcanistBuildPlanRef::newFromConduit($plan);
+ $plan_refs[] = $plan_ref;
+ }
+ $plan_refs = mpull($plan_refs, 'getPHID');
+
+ $results = array();
+ foreach ($refs as $key => $build_ref) {
+ $plan_phid = $build_ref->getBuildPlanPHID();
+ $plan = idx($plan_refs, $plan_phid);
+ $results[$key] = $plan;
+ }
+
+ yield $this->yieldMap($results);
+ }
+
+}
diff --git a/src/ref/build/ArcanistBuildRef.php b/src/ref/build/ArcanistBuildRef.php
new file mode 100644
--- /dev/null
+++ b/src/ref/build/ArcanistBuildRef.php
@@ -0,0 +1,106 @@
+<?php
+
+final class ArcanistBuildRef
+ extends ArcanistRef
+ implements
+ ArcanistDisplayRefInterface {
+
+ const HARDPOINT_BUILDPLANREF = 'ref.build.buildplanRef';
+
+ private $parameters;
+
+ protected function newHardpoints() {
+ return array(
+ $this->newHardpoint(self::HARDPOINT_BUILDPLANREF),
+ );
+ }
+
+ public function getRefDisplayName() {
+ return $this->getDisplayRefObjectName();
+ }
+
+ public static function newFromConduit(array $parameters) {
+ $ref = new self();
+ $ref->parameters = $parameters;
+ return $ref;
+ }
+
+ public function getID() {
+ return idx($this->parameters, 'id');
+ }
+
+ public function getPHID() {
+ return idx($this->parameters, 'phid');
+ }
+
+ public function getName() {
+ return idxv($this->parameters, array('fields', 'name'));
+ }
+
+ public function getDisplayRefObjectName() {
+ return pht('Build %d', $this->getID());
+ }
+
+ public function getDisplayRefTitle() {
+ return $this->getName();
+ }
+
+ public function getBuildPlanRef() {
+ return $this->getHardpoint(self::HARDPOINT_BUILDPLANREF);
+ }
+
+ public function getBuildablePHID() {
+ return idxv($this->parameters, array('fields', 'buildablePHID'));
+ }
+
+ public function getBuildPlanPHID() {
+ return idxv($this->parameters, array('fields', 'buildPlanPHID'));
+ }
+
+ public function getStatus() {
+ return idxv($this->parameters, array('fields', 'buildStatus', 'value'));
+ }
+
+ public function getStatusName() {
+ return idxv($this->parameters, array('fields', 'buildStatus', 'name'));
+ }
+
+ public function getStatusANSIColor() {
+ return idxv(
+ $this->parameters,
+ array('fields', 'buildStatus', 'color.ansi'));
+ }
+
+ public function isComplete() {
+ switch ($this->getStatus()) {
+ case 'passed':
+ case 'failed':
+ case 'aborted':
+ case 'error':
+ case 'deadlocked':
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ public function isPassed() {
+ return ($this->getStatus() === 'passed');
+ }
+
+ public function getStatusSortVector() {
+ $status = $this->getStatus();
+
+ // For now, just sort passed builds first.
+ if ($this->isPassed()) {
+ $status_class = 1;
+ } else {
+ $status_class = 2;
+ }
+
+ return id(new PhutilSortVector())
+ ->addInt($status_class)
+ ->addString($status);
+ }
+
+}
diff --git a/src/ref/build/ArcanistBuildSymbolRef.php b/src/ref/build/ArcanistBuildSymbolRef.php
new file mode 100644
--- /dev/null
+++ b/src/ref/build/ArcanistBuildSymbolRef.php
@@ -0,0 +1,30 @@
+<?php
+
+final class ArcanistBuildSymbolRef
+ extends ArcanistSimpleSymbolRef {
+
+ public function getRefDisplayName() {
+ return pht('Build Symbol "%s"', $this->getSymbol());
+ }
+
+ protected function getSimpleSymbolPHIDType() {
+ return 'HMBD';
+ }
+
+ public function getSimpleSymbolConduitSearchMethodName() {
+ return 'harbormaster.build.search';
+ }
+
+ public function getSimpleSymbolConduitSearchAttachments() {
+ return array();
+ }
+
+ public function getSimpleSymbolInspectFunctionName() {
+ return 'build';
+ }
+
+ public function newSimpleSymbolObjectRef() {
+ return new ArcanistBuildRef();
+ }
+
+}
diff --git a/src/ref/buildable/ArcanistBuildableBuildsHardpointQuery.php b/src/ref/buildable/ArcanistBuildableBuildsHardpointQuery.php
new file mode 100644
--- /dev/null
+++ b/src/ref/buildable/ArcanistBuildableBuildsHardpointQuery.php
@@ -0,0 +1,43 @@
+<?php
+
+final class ArcanistBuildableBuildsHardpointQuery
+ extends ArcanistRuntimeHardpointQuery {
+
+ public function getHardpoints() {
+ return array(
+ ArcanistBuildableRef::HARDPOINT_BUILDREFS,
+ );
+ }
+
+ protected function canLoadRef(ArcanistRef $ref) {
+ return ($ref instanceof ArcanistBuildableRef);
+ }
+
+ public function loadHardpoint(array $refs, $hardpoint) {
+ $buildable_phids = mpull($refs, 'getPHID');
+
+ $builds = (yield $this->yieldConduitSearch(
+ 'harbormaster.build.search',
+ array(
+ 'buildables' => $buildable_phids,
+ )));
+
+ $build_refs = array();
+ foreach ($builds as $build) {
+ $build_ref = ArcanistBuildRef::newFromConduit($build);
+ $build_refs[] = $build_ref;
+ }
+
+ $build_refs = mgroup($build_refs, 'getBuildablePHID');
+
+ $results = array();
+ foreach ($refs as $key => $buildable_ref) {
+ $buildable_phid = $buildable_ref->getPHID();
+ $buildable_builds = idx($build_refs, $buildable_phid, array());
+ $results[$key] = $buildable_builds;
+ }
+
+ yield $this->yieldMap($results);
+ }
+
+}
diff --git a/src/ref/buildable/ArcanistBuildableRef.php b/src/ref/buildable/ArcanistBuildableRef.php
new file mode 100644
--- /dev/null
+++ b/src/ref/buildable/ArcanistBuildableRef.php
@@ -0,0 +1,63 @@
+<?php
+
+final class ArcanistBuildableRef
+ extends ArcanistRef
+ implements
+ ArcanistDisplayRefInterface {
+
+ const HARDPOINT_BUILDREFS = 'ref.buildable.buildRefs';
+
+ private $parameters;
+
+ protected function newHardpoints() {
+ $object_list = new ArcanistObjectListHardpoint();
+ return array(
+ $this->newTemplateHardpoint(
+ self::HARDPOINT_BUILDREFS,
+ $object_list),
+ );
+ }
+
+ public function getRefDisplayName() {
+ return pht('Buildable "%s"', $this->getMonogram());
+ }
+
+ public static function newFromConduit(array $parameters) {
+ $ref = new self();
+ $ref->parameters = $parameters;
+ return $ref;
+ }
+
+ public function getID() {
+ return idx($this->parameters, 'id');
+ }
+
+ public function getPHID() {
+ return idx($this->parameters, 'phid');
+ }
+
+ public function getName() {
+ return idxv($this->parameters, array('fields', 'name'));
+ }
+
+ public function getObjectPHID() {
+ return idxv($this->parameters, array('fields', 'objectPHID'));
+ }
+
+ public function getMonogram() {
+ return 'B'.$this->getID();
+ }
+
+ public function getDisplayRefObjectName() {
+ return $this->getMonogram();
+ }
+
+ public function getDisplayRefTitle() {
+ return $this->getName();
+ }
+
+ public function getBuildRefs() {
+ return $this->getHardpoint(self::HARDPOINT_BUILDREFS);
+ }
+
+}
diff --git a/src/ref/buildable/ArcanistBuildableSymbolRef.php b/src/ref/buildable/ArcanistBuildableSymbolRef.php
new file mode 100644
--- /dev/null
+++ b/src/ref/buildable/ArcanistBuildableSymbolRef.php
@@ -0,0 +1,30 @@
+<?php
+
+final class ArcanistBuildableSymbolRef
+ extends ArcanistSimpleSymbolRef {
+
+ public function getRefDisplayName() {
+ return pht('Buildable Symbol "%s"', $this->getSymbol());
+ }
+
+ protected function getSimpleSymbolPHIDType() {
+ return 'HMBB';
+ }
+
+ public function getSimpleSymbolConduitSearchMethodName() {
+ return 'harbormaster.buildable.search';
+ }
+
+ public function getSimpleSymbolConduitSearchAttachments() {
+ return array();
+ }
+
+ public function getSimpleSymbolInspectFunctionName() {
+ return 'buildable';
+ }
+
+ public function newSimpleSymbolObjectRef() {
+ return new ArcanistBuildableRef();
+ }
+
+}
diff --git a/src/ref/buildplan/ArcanistBuildPlanRef.php b/src/ref/buildplan/ArcanistBuildPlanRef.php
new file mode 100644
--- /dev/null
+++ b/src/ref/buildplan/ArcanistBuildPlanRef.php
@@ -0,0 +1,47 @@
+<?php
+
+final class ArcanistBuildPlanRef
+ extends ArcanistRef
+ implements
+ ArcanistDisplayRefInterface {
+
+ private $parameters;
+
+ public function getRefDisplayName() {
+ return $this->getDisplayRefObjectName();
+ }
+
+ public static function newFromConduit(array $parameters) {
+ $ref = new self();
+ $ref->parameters = $parameters;
+ return $ref;
+ }
+
+ public function getID() {
+ return idx($this->parameters, 'id');
+ }
+
+ public function getPHID() {
+ return idx($this->parameters, 'phid');
+ }
+
+ public function getName() {
+ return idxv($this->parameters, array('fields', 'name'));
+ }
+
+ public function getDisplayRefObjectName() {
+ return pht('Build Plan %d', $this->getID());
+ }
+
+ public function getDisplayRefTitle() {
+ return $this->getName();
+ }
+
+ public function getBehavior($behavior_key, $default = null) {
+ return idxv(
+ $this->parameters,
+ array('fields', 'behaviors', $behavior_key, 'value'),
+ $default);
+ }
+
+}
diff --git a/src/ref/buildplan/ArcanistBuildPlanSymbolRef.php b/src/ref/buildplan/ArcanistBuildPlanSymbolRef.php
new file mode 100644
--- /dev/null
+++ b/src/ref/buildplan/ArcanistBuildPlanSymbolRef.php
@@ -0,0 +1,30 @@
+<?php
+
+final class ArcanistBuildPlanSymbolRef
+ extends ArcanistSimpleSymbolRef {
+
+ public function getRefDisplayName() {
+ return pht('Build Plan Symbol "%s"', $this->getSymbol());
+ }
+
+ protected function getSimpleSymbolPHIDType() {
+ return 'HMCP';
+ }
+
+ public function getSimpleSymbolConduitSearchMethodName() {
+ return 'harbormaster.buildplan.search';
+ }
+
+ public function getSimpleSymbolConduitSearchAttachments() {
+ return array();
+ }
+
+ public function getSimpleSymbolInspectFunctionName() {
+ return 'buildplan';
+ }
+
+ public function newSimpleSymbolObjectRef() {
+ return new ArcanistBuildPlanRef();
+ }
+
+}
diff --git a/src/ref/revision/ArcanistRevisionBuildableHardpointQuery.php b/src/ref/revision/ArcanistRevisionBuildableHardpointQuery.php
new file mode 100644
--- /dev/null
+++ b/src/ref/revision/ArcanistRevisionBuildableHardpointQuery.php
@@ -0,0 +1,60 @@
+<?php
+
+final class ArcanistRevisionBuildableHardpointQuery
+ extends ArcanistRuntimeHardpointQuery {
+
+ public function getHardpoints() {
+ return array(
+ ArcanistRevisionRef::HARDPOINT_BUILDABLEREF,
+ );
+ }
+
+ protected function canLoadRef(ArcanistRef $ref) {
+ return ($ref instanceof ArcanistRevisionRef);
+ }
+
+ public function loadHardpoint(array $refs, $hardpoint) {
+ $diff_map = array();
+ foreach ($refs as $key => $revision_ref) {
+ $diff_phid = $revision_ref->getDiffPHID();
+ if ($diff_phid) {
+ $diff_map[$key] = $diff_phid;
+ }
+ }
+
+ if (!$diff_map) {
+ yield $this->yieldValue($refs, null);
+ }
+
+ $buildables = (yield $this->yieldConduitSearch(
+ 'harbormaster.buildable.search',
+ array(
+ 'objectPHIDs' => $diff_map,
+ 'manual' => false,
+ )));
+
+ $buildable_refs = array();
+ foreach ($buildables as $buildable) {
+ $buildable_ref = ArcanistBuildableRef::newFromConduit($buildable);
+ $object_phid = $buildable_ref->getObjectPHID();
+ $buildable_refs[$object_phid] = $buildable_ref;
+ }
+
+ $results = array_fill_keys(array_keys($refs), null);
+ foreach ($refs as $key => $revision_ref) {
+ if (!isset($diff_map[$key])) {
+ continue;
+ }
+
+ $diff_phid = $diff_map[$key];
+ if (!isset($buildable_refs[$diff_phid])) {
+ continue;
+ }
+
+ $results[$key] = $buildable_refs[$diff_phid];
+ }
+
+ yield $this->yieldMap($results);
+ }
+
+}
diff --git a/src/ref/revision/ArcanistRevisionParentRevisionRefsHardpointQuery.php b/src/ref/revision/ArcanistRevisionParentRevisionsHardpointQuery.php
rename from src/ref/revision/ArcanistRevisionParentRevisionRefsHardpointQuery.php
rename to src/ref/revision/ArcanistRevisionParentRevisionsHardpointQuery.php
--- a/src/ref/revision/ArcanistRevisionParentRevisionRefsHardpointQuery.php
+++ b/src/ref/revision/ArcanistRevisionParentRevisionsHardpointQuery.php
@@ -1,6 +1,6 @@
<?php
-final class ArcanistRevisionParentRevisionRefsHardpointQuery
+final class ArcanistRevisionParentRevisionsHardpointQuery
extends ArcanistRuntimeHardpointQuery {
public function getHardpoints() {
diff --git a/src/ref/revision/ArcanistRevisionRef.php b/src/ref/revision/ArcanistRevisionRef.php
--- a/src/ref/revision/ArcanistRevisionRef.php
+++ b/src/ref/revision/ArcanistRevisionRef.php
@@ -7,6 +7,7 @@
const HARDPOINT_COMMITMESSAGE = 'ref.revision.commitmessage';
const HARDPOINT_AUTHORREF = 'ref.revision.authorRef';
+ const HARDPOINT_BUILDABLEREF = 'ref.revision.buildableRef';
const HARDPOINT_PARENTREVISIONREFS = 'ref.revision.parentRevisionRefs';
private $parameters;
@@ -21,6 +22,7 @@
return array(
$this->newHardpoint(self::HARDPOINT_COMMITMESSAGE),
$this->newHardpoint(self::HARDPOINT_AUTHORREF),
+ $this->newHardpoint(self::HARDPOINT_BUILDABLEREF),
$this->newTemplateHardpoint(
self::HARDPOINT_PARENTREVISIONREFS,
$object_list),
@@ -124,6 +126,10 @@
return idx($this->parameters, 'phid');
}
+ public function getDiffPHID() {
+ return idxv($this->parameters, array('fields', 'diffPHID'));
+ }
+
public function getName() {
return idxv($this->parameters, array('fields', 'title'));
}
@@ -153,6 +159,10 @@
return $this->getHardpoint(self::HARDPOINT_PARENTREVISIONREFS);
}
+ public function getBuildableRef() {
+ return $this->getHardpoint(self::HARDPOINT_BUILDABLEREF);
+ }
+
public function getDisplayRefObjectName() {
return $this->getMonogram();
}
diff --git a/src/ref/simple/ArcanistSimpleSymbolRef.php b/src/ref/simple/ArcanistSimpleSymbolRef.php
--- a/src/ref/simple/ArcanistSimpleSymbolRef.php
+++ b/src/ref/simple/ArcanistSimpleSymbolRef.php
@@ -22,6 +22,10 @@
$matches = null;
$prefix_pattern = $this->getSimpleSymbolPrefixPattern();
+ if ($prefix_pattern === null) {
+ $prefix_pattern = '';
+ }
+
$id_pattern = '(^'.$prefix_pattern.'([1-9]\d*)\z)';
$is_id = preg_match($id_pattern, $symbol, $matches);
@@ -46,7 +50,10 @@
$symbol));
}
- abstract protected function getSimpleSymbolPrefixPattern();
+ protected function getSimpleSymbolPrefixPattern() {
+ return null;
+ }
+
abstract protected function getSimpleSymbolPHIDType();
abstract public function getSimpleSymbolConduitSearchMethodName();
abstract public function getSimpleSymbolInspectFunctionName();
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Mar 16, 6:45 PM (1 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7386201
Default Alt Text
D21312.id.diff (23 KB)
Attached To
Mode
D21312: Add modern refs and hardpoints for buildables, builds, and build plans
Attached
Detach File
Event Timeline
Log In to Comment