diff --git a/site_utils/run_suite.py b/site_utils/run_suite.py
index 63487cc..1f6c24f 100755
--- a/site_utils/run_suite.py
+++ b/site_utils/run_suite.py
@@ -493,34 +493,45 @@
         """Generate a link formatted to meet buildbot expectations.
 
         If there is a bug associated with this link, report a link to the bug
-        and a link to the job logs;
-        otherwise report a link to the job logs.
+        and a link to the job logs; otherwise report a link to the job logs.
 
-        @return A list of links formatted for the buildbot log annotator.
+        @return A generator of links formatted for the buildbot log annotator.
         """
-        bug_info_strings = []
-        info_strings = []
+        if self.bug_url:
+            yield self._get_link_to_bug()
+        yield self._get_link_to_job_logs()
 
+
+    def _get_link_to_bug(self):
+        """Return buildbot link to bug.
+
+        @return A link formatted for the buildbot log annotator.
+        """
+        info_strings = self._get_info_strings()
+        info_strings.append(self._bug_count_text)
+        anchor_text = self._format_anchor_text(self._BUG_LINK_PREFIX,
+                                               info_strings)
+        return annotations.StepLink(anchor_text, self.bug_url)
+
+
+    def _get_link_to_job_logs(self):
+        """Return buildbot link to job logs.
+
+        @return A link formatted for the buildbot log annotator.
+        """
+        anchor_text = self._format_anchor_text(self._LOG_LINK_PREFIX,
+                                               self._get_info_strings())
+        return annotations.StepLink(anchor_text, self.url)
+
+
+    def _get_info_strings(self):
+        """Return a list of info strings for _format_anchor_text()."""
+        info_strings = []
         if self.retry_count > 0:
             info_strings.append('retry_count: %d' % self.retry_count)
-            bug_info_strings.append('retry_count: %d' % self.retry_count)
-
         if self.reason:
-            bug_info_strings.append(self.reason)
             info_strings.append(self.reason)
-
-        # Add the bug link to buildbot_links
-        if self.bug_url:
-            bug_info_strings.append(self._bug_count_text)
-
-            bug_anchor_text = self._format_anchor_text(self._BUG_LINK_PREFIX,
-                                                       bug_info_strings)
-
-            yield annotations.StepLink(bug_anchor_text, self.bug_url)
-
-        anchor_text = self._format_anchor_text(self._LOG_LINK_PREFIX,
-                                               info_strings)
-        yield annotations.StepLink(anchor_text, self.url)
+        return info_strings
 
 
     def _format_anchor_text(self, prefix, info_strings):
