Page MenuHomePhabricator

D20470.id48824.diff
No OneTemporary

D20470.id48824.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
@@ -714,6 +714,7 @@
'DiffusionCommitBranchesController' => 'applications/diffusion/controller/DiffusionCommitBranchesController.php',
'DiffusionCommitBranchesHeraldField' => 'applications/diffusion/herald/DiffusionCommitBranchesHeraldField.php',
'DiffusionCommitBuildableTransaction' => 'applications/diffusion/xaction/DiffusionCommitBuildableTransaction.php',
+ 'DiffusionCommitBuildsPassedHeraldField' => 'applications/diffusion/herald/DiffusionCommitBuildsPassedHeraldField.php',
'DiffusionCommitCommitterHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php',
'DiffusionCommitCommitterProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php',
'DiffusionCommitConcernTransaction' => 'applications/diffusion/xaction/DiffusionCommitConcernTransaction.php',
@@ -882,6 +883,7 @@
'DiffusionPreCommitContentAuthorProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorProjectsHeraldField.php',
'DiffusionPreCommitContentAuthorRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorRawHeraldField.php',
'DiffusionPreCommitContentBranchesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentBranchesHeraldField.php',
+ 'DiffusionPreCommitContentBuildsPassedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentBuildsPassedHeraldField.php',
'DiffusionPreCommitContentCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterHeraldField.php',
'DiffusionPreCommitContentCommitterProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterProjectsHeraldField.php',
'DiffusionPreCommitContentCommitterRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterRawHeraldField.php',
@@ -6373,6 +6375,7 @@
'DiffusionCommitBranchesController' => 'DiffusionController',
'DiffusionCommitBranchesHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitBuildableTransaction' => 'DiffusionCommitTransactionType',
+ 'DiffusionCommitBuildsPassedHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitCommitterHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitCommitterProjectsHeraldField' => 'DiffusionCommitHeraldField',
'DiffusionCommitConcernTransaction' => 'DiffusionCommitAuditTransaction',
@@ -6544,6 +6547,7 @@
'DiffusionPreCommitContentAuthorProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentAuthorRawHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentBranchesHeraldField' => 'DiffusionPreCommitContentHeraldField',
+ 'DiffusionPreCommitContentBuildsPassedHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentCommitterProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField',
'DiffusionPreCommitContentCommitterRawHeraldField' => 'DiffusionPreCommitContentHeraldField',
diff --git a/src/applications/differential/engine/DifferentialDiffExtractionEngine.php b/src/applications/differential/engine/DifferentialDiffExtractionEngine.php
--- a/src/applications/differential/engine/DifferentialDiffExtractionEngine.php
+++ b/src/applications/differential/engine/DifferentialDiffExtractionEngine.php
@@ -281,7 +281,11 @@
->setNewValue($revision->getModernRevisionStatus());
}
- $concerning_builds = $this->loadConcerningBuilds($revision);
+ $concerning_builds = self::loadConcerningBuilds(
+ $this->getViewer(),
+ $revision,
+ $strict = false);
+
if ($concerning_builds) {
$build_list = array();
foreach ($concerning_builds as $build) {
@@ -328,8 +332,11 @@
$editor->applyTransactions($revision, $xactions);
}
- private function loadConcerningBuilds(DifferentialRevision $revision) {
- $viewer = $this->getViewer();
+ public static function loadConcerningBuilds(
+ PhabricatorUser $viewer,
+ DifferentialRevision $revision,
+ $strict) {
+
$diff = $revision->getActiveDiff();
$buildables = id(new HarbormasterBuildableQuery())
@@ -342,7 +349,6 @@
return array();
}
-
$land_key = HarbormasterBuildPlanBehavior::BEHAVIOR_LANDWARNING;
$behavior = HarbormasterBuildPlanBehavior::getBehavior($land_key);
@@ -391,7 +397,13 @@
// cases where the repository is observed and the fetch pipeline
// stalls for a while.
- continue;
+ // If we're in strict mode (from a pre-commit content hook), we do
+ // not ignore these, since we're doing an instantaneous check against
+ // the current state.
+
+ if (!$strict) {
+ continue;
+ }
}
if ($build->isPassed()) {
diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php
--- a/src/applications/differential/storage/DifferentialRevision.php
+++ b/src/applications/differential/storage/DifferentialRevision.php
@@ -62,6 +62,7 @@
const PROPERTY_LINES_ADDED = 'lines.added';
const PROPERTY_LINES_REMOVED = 'lines.removed';
const PROPERTY_BUILDABLES = 'buildables';
+ const PROPERTY_WRONG_BUILDS = 'wrong.builds';
public static function initializeNewRevision(PhabricatorUser $actor) {
$app = id(new PhabricatorApplicationQuery())
diff --git a/src/applications/differential/xaction/DifferentialRevisionWrongBuildsTransaction.php b/src/applications/differential/xaction/DifferentialRevisionWrongBuildsTransaction.php
--- a/src/applications/differential/xaction/DifferentialRevisionWrongBuildsTransaction.php
+++ b/src/applications/differential/xaction/DifferentialRevisionWrongBuildsTransaction.php
@@ -13,6 +13,10 @@
return $value;
}
+ public function applyInternalEffects($object, $value) {
+ $object->setProperty(DifferentialRevision::PROPERTY_WRONG_BUILDS, true);
+ }
+
public function getIcon() {
return 'fa-exclamation';
}
diff --git a/src/applications/diffusion/herald/DiffusionCommitBuildsPassedHeraldField.php b/src/applications/diffusion/herald/DiffusionCommitBuildsPassedHeraldField.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/herald/DiffusionCommitBuildsPassedHeraldField.php
@@ -0,0 +1,49 @@
+<?php
+
+final class DiffusionCommitBuildsPassedHeraldField
+ extends DiffusionCommitHeraldField {
+
+ const FIELDCONST = 'diffusion.commit.builds.passed';
+
+ public function getHeraldFieldName() {
+ return pht('Revision has passing builds');
+ }
+
+ public function getFieldGroupKey() {
+ return HeraldRelatedFieldGroup::FIELDGROUPKEY;
+ }
+
+ public function getHeraldFieldValue($object) {
+ $adapter = $this->getAdapter();
+ $viewer = $adapter->getViewer();
+
+ $revision = $adapter->loadDifferentialRevision();
+ if (!$revision) {
+ return false;
+ }
+
+ if ($revision->isPublished()) {
+ $wrong_builds = DifferentialRevision::PROPERTY_WRONG_BUILDS;
+ return !$revision->getProperty($wrong_builds, false);
+ }
+
+ // Reload the revision to pick up active diffs.
+ $revision = id(new DifferentialRevisionQuery())
+ ->setViewer($viewer)
+ ->withPHIDs(array($revision->getPHID()))
+ ->needActiveDiffs(true)
+ ->executeOne();
+
+ $concerning = DifferentialDiffExtractionEngine::loadConcerningBuilds(
+ $viewer,
+ $revision,
+ $strict = false);
+
+ return !$concerning;
+ }
+
+ protected function getHeraldFieldStandardType() {
+ return self::STANDARD_BOOL;
+ }
+
+}
diff --git a/src/applications/diffusion/herald/DiffusionPreCommitContentBuildsPassedHeraldField.php b/src/applications/diffusion/herald/DiffusionPreCommitContentBuildsPassedHeraldField.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/herald/DiffusionPreCommitContentBuildsPassedHeraldField.php
@@ -0,0 +1,49 @@
+<?php
+
+final class DiffusionPreCommitContentBuildsPassedHeraldField
+ extends DiffusionPreCommitContentHeraldField {
+
+ const FIELDCONST = 'diffusion.pre.content.builds.passed';
+
+ public function getHeraldFieldName() {
+ return pht('Revision has passing builds');
+ }
+
+ public function getFieldGroupKey() {
+ return HeraldRelatedFieldGroup::FIELDGROUPKEY;
+ }
+
+ public function getHeraldFieldValue($object) {
+ $adapter = $this->getAdapter();
+ $viewer = $adapter->getViewer();
+
+ $revision = $adapter->getRevision();
+ if (!$revision) {
+ return false;
+ }
+
+ if ($revision->isPublished()) {
+ $wrong_builds = DifferentialRevision::PROPERTY_WRONG_BUILDS;
+ return !$revision->getProperty($wrong_builds, false);
+ }
+
+ // Reload the revision to pick up active diffs.
+ $revision = id(new DifferentialRevisionQuery())
+ ->setViewer($viewer)
+ ->withPHIDs(array($revision->getPHID()))
+ ->needActiveDiffs(true)
+ ->executeOne();
+
+ $concerning = DifferentialDiffExtractionEngine::loadConcerningBuilds(
+ $viewer,
+ $revision,
+ $strict = true);
+
+ return !$concerning;
+ }
+
+ protected function getHeraldFieldStandardType() {
+ return self::STANDARD_BOOL;
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 21, 5:54 PM (1 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7715830
Default Alt Text
D20470.id48824.diff (9 KB)

Event Timeline