Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15397293
D16483.id39659.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D16483.id39659.diff
View Options
diff --git a/src/applications/differential/controller/DifferentialRevisionViewController.php b/src/applications/differential/controller/DifferentialRevisionViewController.php
--- a/src/applications/differential/controller/DifferentialRevisionViewController.php
+++ b/src/applications/differential/controller/DifferentialRevisionViewController.php
@@ -292,9 +292,12 @@
'/differential/comment/inline/edit/'.$revision->getID().'/');
}
+ $broken_diffs = $this->loadHistoryDiffStatus($diffs);
+
$history = id(new DifferentialRevisionUpdateHistoryView())
->setUser($viewer)
->setDiffs($diffs)
+ ->setDiffUnitStatuses($broken_diffs)
->setSelectedVersusDiffID($diff_vs)
->setSelectedDiffID($target->getID())
->setSelectedWhitespace($whitespace)
@@ -776,6 +779,45 @@
return $actions_dict;
}
+ private function loadHistoryDiffStatus(array $diffs) {
+ assert_instances_of($diffs, 'DifferentialDiff');
+
+ $diff_phids = mpull($diffs, 'getPHID');
+ $bad_unit_status = array(
+ ArcanistUnitTestResult::RESULT_FAIL,
+ ArcanistUnitTestResult::RESULT_BROKEN,
+ );
+
+ $message = new HarbormasterBuildUnitMessage();
+ $target = new HarbormasterBuildTarget();
+ $build = new HarbormasterBuild();
+ $buildable = new HarbormasterBuildable();
+
+ $broken_diffs = queryfx_all(
+ $message->establishConnection('r'),
+ 'SELECT distinct a.buildablePHID
+ FROM %T m
+ JOIN %T t ON m.buildTargetPHID = t.phid
+ JOIN %T b ON t.buildPHID = b.phid
+ JOIN %T a ON b.buildablePHID = a.phid
+ WHERE a.buildablePHID IN (%Ls)
+ AND m.result in (%Ls)',
+ $message->getTableName(),
+ $target->getTableName(),
+ $build->getTableName(),
+ $buildable->getTableName(),
+ $diff_phids,
+ $bad_unit_status);
+
+ $unit_status = array();
+ foreach ($broken_diffs as $broken) {
+ $phid = $broken['buildablePHID'];
+ $unit_status[$phid] = DifferentialUnitStatus::UNIT_FAIL;
+ }
+
+ return $unit_status;
+ }
+
private function loadChangesetsAndVsMap(
DifferentialDiff $target,
DifferentialDiff $diff_vs = null,
diff --git a/src/applications/differential/customfield/DifferentialUnitField.php b/src/applications/differential/customfield/DifferentialUnitField.php
--- a/src/applications/differential/customfield/DifferentialUnitField.php
+++ b/src/applications/differential/customfield/DifferentialUnitField.php
@@ -61,7 +61,8 @@
);
$icon_color = idx($colors, $diff->getUnitStatus(), 'grey');
- $message = DifferentialRevisionUpdateHistoryView::getDiffUnitMessage($diff);
+ $message = DifferentialRevisionUpdateHistoryView::getDiffUnitMessage(
+ $diff->getUnitStatus());
$status = id(new PHUIStatusListView())
->addItem(
diff --git a/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php b/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php
--- a/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php
+++ b/src/applications/differential/view/DifferentialRevisionUpdateHistoryView.php
@@ -7,6 +7,7 @@
private $selectedDiffID;
private $selectedWhitespace;
private $commitsForLinks = array();
+ private $unitStatus = array();
public function setDiffs(array $diffs) {
assert_instances_of($diffs, 'DifferentialDiff');
@@ -35,6 +36,11 @@
return $this;
}
+ public function setDiffUnitStatuses(array $unit_status) {
+ $this->unitStatus = $unit_status;
+ return $this;
+ }
+
public function render() {
$this->requireResource('differential-core-view-css');
$this->requireResource('differential-revision-history-css');
@@ -139,6 +145,11 @@
}
if ($diff) {
+ $unit_status = idx(
+ $this->unitStatus,
+ $diff->getPHID(),
+ $diff->getUnitStatus());
+
$lint = self::renderDiffLintStar($row['obj']);
$lint = phutil_tag(
'div',
@@ -148,12 +159,12 @@
),
$lint);
- $unit = self::renderDiffUnitStar($row['obj']);
+ $unit = self::renderDiffUnitStar($unit_status);
$unit = phutil_tag(
'div',
array(
'class' => 'lintunit-star',
- 'title' => self::getDiffUnitMessage($diff),
+ 'title' => self::getDiffUnitMessage($unit_status),
),
$unit);
@@ -312,7 +323,7 @@
const STAR_FAIL = 'fail';
const STAR_SKIP = 'skip';
- public static function renderDiffLintStar(DifferentialDiff $diff) {
+ private static function renderDiffLintStar(DifferentialDiff $diff) {
static $map = array(
DifferentialLintStatus::LINT_NONE => self::STAR_NONE,
DifferentialLintStatus::LINT_OKAY => self::STAR_OKAY,
@@ -327,7 +338,7 @@
return self::renderDiffStar($star);
}
- public static function renderDiffUnitStar(DifferentialDiff $diff) {
+ private static function renderDiffUnitStar($unit_status) {
static $map = array(
DifferentialUnitStatus::UNIT_NONE => self::STAR_NONE,
DifferentialUnitStatus::UNIT_OKAY => self::STAR_OKAY,
@@ -336,8 +347,7 @@
DifferentialUnitStatus::UNIT_SKIP => self::STAR_SKIP,
DifferentialUnitStatus::UNIT_AUTO_SKIP => self::STAR_SKIP,
);
-
- $star = idx($map, $diff->getUnitStatus(), self::STAR_FAIL);
+ $star = idx($map, $unit_status, self::STAR_FAIL);
return self::renderDiffStar($star);
}
@@ -360,8 +370,8 @@
return pht('Unknown');
}
- public static function getDiffUnitMessage(DifferentialDiff $diff) {
- switch ($diff->getUnitStatus()) {
+ public static function getDiffUnitMessage($unit_status) {
+ switch ($unit_status) {
case DifferentialUnitStatus::UNIT_NONE:
return pht('No Unit Test Coverage');
case DifferentialUnitStatus::UNIT_OKAY:
@@ -384,7 +394,7 @@
return phutil_tag(
'span',
array('class' => $class),
- "\xE2\x98\x85");
+ "\xE2\x98\x85 ");
}
private function renderBaseRevision(DifferentialDiff $diff) {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 17, 7:23 PM (1 w, 6 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7708769
Default Alt Text
D16483.id39659.diff (5 KB)
Attached To
Mode
D16483: Show broken units in revision history
Attached
Detach File
Event Timeline
Log In to Comment