Merge "Report correctly when dequeuing dependent changes"
diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index dbcfd1b..c6c608f 100755
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -1028,14 +1028,19 @@
 
         self.assertEqual(A.data['status'], 'MERGED')
         self.assertEqual(A.reported, 2)
+        self.assertIn('Build succeeded', A.messages[1])
         self.assertEqual(B.data['status'], 'NEW')
         self.assertEqual(B.reported, 2)
+        self.assertIn('Build failed', B.messages[1])
         self.assertEqual(C.data['status'], 'NEW')
         self.assertEqual(C.reported, 2)
+        self.assertIn('depends on a change', C.messages[1])
         self.assertEqual(D.data['status'], 'NEW')
         self.assertEqual(D.reported, 2)
+        self.assertIn('depends on a change', D.messages[1])
         self.assertEqual(E.data['status'], 'MERGED')
         self.assertEqual(E.reported, 2)
+        self.assertIn('Build succeeded', E.messages[1])
         self.assertEqual(len(self.history), 18)
 
     def test_head_is_dequeued_once(self):
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index c2fc378..b3163b3 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -1458,19 +1458,25 @@
     def formatReport(self, item):
         ret = ''
 
-        if not self.pipeline.didMergerSucceed(item):
+        if item.dequeued_needing_change:
+            ret += 'This change depends on a change that failed to merge.\n'
+        elif not self.pipeline.didMergerSucceed(item):
             ret += self.pipeline.merge_failure_message
-            if item.dequeued_needing_change:
-                ret += ('\n\nThis change depends on a change that failed to '
-                        'merge.')
-            if self.pipeline.footer_message:
-                ret += '\n\n' + self.pipeline.footer_message
-            return ret
-
-        if self.pipeline.didAllJobsSucceed(item):
-            ret += self.pipeline.success_message + '\n\n'
         else:
-            ret += self.pipeline.failure_message + '\n\n'
+            if self.pipeline.didAllJobsSucceed(item):
+                ret += self.pipeline.success_message + '\n\n'
+            else:
+                ret += self.pipeline.failure_message + '\n\n'
+            ret += self._formatReportJobs(item)
+
+        if self.pipeline.footer_message:
+            ret += '\n' + self.pipeline.footer_message
+
+        return ret
+
+    def _formatReportJobs(self, item):
+        # Return the list of jobs portion of the report
+        ret = ''
 
         if self.sched.config.has_option('zuul', 'url_pattern'):
             url_pattern = self.sched.config.get('zuul', 'url_pattern')
@@ -1521,8 +1527,6 @@
                     name = job.name + ' '
             ret += '- %s%s : %s%s%s\n' % (name, url, result, elapsed,
                                           voting)
-        if self.pipeline.footer_message:
-            ret += '\n' + self.pipeline.footer_message
         return ret
 
     def formatDescription(self, build):