Merge lp:~gmb/launchpad/inline-help-for-bugwatches-2-bug-530162 into lp:launchpad

Proposed by Graham Binns
Status: Merged
Approved by: Abel Deuring
Approved revision: no longer in the source branch.
Merged at revision: 10906
Proposed branch: lp:~gmb/launchpad/inline-help-for-bugwatches-2-bug-530162
Merge into: lp:launchpad
Diff against target: 497 lines (+289/-76)
9 files modified
lib/lp/bugs/browser/bugtask.py (+61/-2)
lib/lp/bugs/browser/configure.zcml (+3/-0)
lib/lp/bugs/configure.zcml (+0/-1)
lib/lp/bugs/interfaces/bugwatch.py (+0/-3)
lib/lp/bugs/model/bugwatch.py (+0/-47)
lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt (+23/-16)
lib/lp/bugs/templates/bugtask-edit-form.pt (+9/-3)
lib/lp/bugs/templates/bugtask-tasks-and-nominations-table-row.pt (+8/-4)
lib/lp/bugs/templates/bugwatch-error-help.pt (+185/-0)
To merge this branch: bzr merge lp:~gmb/launchpad/inline-help-for-bugwatches-2-bug-530162
Reviewer Review Type Date Requested Status
Abel Deuring (community) code Approve
Matthew Revell (community) help Approve
Review via email: mp+25784@code.launchpad.net

Commit message

Popup help has been added for BugWatch errors.

Description of the change

This branch adds inline help for bug watch errors. The idea is that users should be able to fix bug watch error problems themselves (where possible) rather than just being presented with an opaque error.

I've made the following changes:

== lib/lp/bugs/browser/bugtask.py ==

 - I've added a mixin class that can be used by views that display bugwatch error data. This has a single property, bug_watch_error_message, which returns a dict of error-message related gubbins. This property contains the functionality previously found in BugWatch.getLastErrorMessage(), but since that method was used only in view code it seemed to make more sense to implement it in a view mixin rather than as part of the model.

== lib/lp/bugs/browser/configure.zcml ==

 - I've added the necessary ZCML for the BugWatch +error-help view.

== lib/lp/bugs/configure.zcml ==

 - I've removed getLastErrorMessage() from the BugWatch ZCML.

== lib/lp/bugs/interfaces/bugwatch.py ==

 - I've removed the declaration of IBugWatch.getLastErrorMessage()

== lib/lp/bugs/model/bugwatch.py ==

 - I've removed the implementation of BugWatch.getLastErrorMessage()

== lib/lp/bugs/templates/bugtask-edit-form.pt ==

 - I've added popup help to the warning icon that appears when a BugWatch has failed to update.

== lib/lp/bugs/templates/bugtask-tasks-and-nominations-table-row.pt ==

 - I've added a popup help link to the error message that appears when a BugWatch has failed to update.

== lib/lp/bugs/templates/bugwatch-error-help.pt ==

 - I've added help for the various different types of error that a BugWatch could encounter.

=== lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt ==

 - I've updated the story to take account of the popup help links.

To post a comment you must log in.
Revision history for this message
Matthew Revell (matthew.revell) wrote :

+1 on the help pop-up text and great work on creating a dynamic help pop-up.

Small typo:

"The remote bug ID that the bug watch is linked it isn't valid on the remote bug tracker."

Should that be "...is linked to..." ?

review: Approve (help)
Revision history for this message
Abel Deuring (adeuring) :
review: Approve (code)
Revision history for this message
Abel Deuring (adeuring) wrote :
Download full text (6.7 KiB)

/lp/bugs/templates/bugwatch-error-help.pt'
> --- lib/lp/bugs/templates/bugwatch-error-help.pt 1970-01-01 00:00:00 +0000
> +++ lib/lp/bugs/templates/bugwatch-error-help.pt 2010-05-21 14:59:31 +0000
> @@ -0,0 +1,182 @@
> +<html>
> + <head>
> + <title>Bug watch errors</title>
> + <link rel="stylesheet" type="text/css"
> + href="/+icing/yui/cssreset/reset.css" />
> + <link rel="stylesheet" type="text/css"
> + href="/+icing/yui/cssfonts/fonts.css" />
> + <link rel="stylesheet" type="text/css"
> + href="/+icing/yui/cssbase/base.css" />
> + </head>
> + <body tal:define="watch view/context">
> + <h1>Bug watch update errors</h1>
> + <p>
> + Bug watches don't always update successfully. When a bug watch
> + fails to update, Launchpad records what went wrong.
> + </p>
> + <a name="UNKNOWN"></a>
> + <h2>Unknown error</h2>
> + <h3>What went wrong?</h3>
> + <p>
> + Launchpad encountered an unexpected error when trying to retrieve
> + the bug from the remote server.
> + </p>
> + <h3>How can I help fix it?</h3>
> + <p>
> + <a href="mailto:<email address hidden>">Contact us</a> and let us
> + know about the problem.
> + </p>
> + <a name="BUG_NOT_FOUND"></a>
> + <h2>Bug Not Found</h2>
> + <h3>What went wrong?</h3>
> + <p>
> + Launchpad could not find the specified bug on the remote server.
> + </p>
> + <h3>How can I help fix it?</h3>
> + <p>
> + Check that the remote bug
> + (<a tal:replace="structure watch/fmt:external-link" />)
> + exists on the external bug tracker. If it doesn't, you should try
> + to find the correct bug and
> + <a tal:attributes="href watch/fmt:url">update the watch</a> so
> + that it points to the correct remote bug.
> + </p>
> + <a name="CONNECTION_ERROR"></a>
> + <h2>Connection Error</h2>
> + <h3>What went wrong?</h3>
> + <p>
> + Launchpad was unable to connect to the remote server.
> + </p>
> + <h3>How can I help fix it?</h3>
> + <p>
> + Check that the remote bug tracker
> + (<a tal:replace="structure watch/bugtracker/fmt:external-link" />)
> + is on-line. If it is, you should
> + <a href="mailto:<email address hidden>">contact us</a> and let us
> + know about the problem.
> + </p>
> + <a name="INVALID_BUG_ID"></a>
> + <h2>Invalid Bug ID</h2>
> + <h3>What went wrong?</h3>
> + <p>
> + The remote bug ID that the bug watch is linked it isn't valid on
> + the remote bug tracker.
> + </p>
> + <h3>How can I help fix it?</h3>
> + <p>
> + <a href="mailto:<email address hidden>">Contact us</a> and let us

...know about the problem

> + </p>
> + <a name="TIMEOUT"></a>
> + <h2>Timeout</h2>
> + <h3>What went wrong?</h3>
> + <p>
> + Launchpad encountered a timeout when trying to connect to the
> + remote server and was unable to retrieve the bug's status.
> + </p>
> + <h3>How can I help fix it?</h3>
> + <p>
> + <a href="mailto:<email address hidden>">Contact us</a> and let us

...know about the problem

> + </p>
> + <p>
> + Check that the remote b...

Read more...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/bugs/browser/bugtask.py'
2--- lib/lp/bugs/browser/bugtask.py 2010-05-09 16:08:47 +0000
3+++ lib/lp/bugs/browser/bugtask.py 2010-05-21 16:19:26 +0000
4@@ -115,6 +115,7 @@
5 IProductSeriesBugTask, IRemoveQuestionFromBugTaskForm, IUpstreamBugTask,
6 IUpstreamProductBugTaskSearch, UNRESOLVED_BUGTASK_STATUSES)
7 from lp.bugs.interfaces.bugtracker import BugTrackerType
8+from lp.bugs.interfaces.bugwatch import BugWatchActivityStatus
9 from lp.bugs.interfaces.cve import ICveSet
10 from lp.bugs.interfaces.malone import IMaloneApplication
11 from lp.registry.interfaces.distribution import IDistribution
12@@ -1176,7 +1177,64 @@
13 return '_'.join(parts)
14
15
16-class BugTaskEditView(LaunchpadEditFormView):
17+class BugTaskBugWatchMixin:
18+ """A mixin to be used where a BugTask view displays BugWatch data."""
19+
20+ @property
21+ def bug_watch_error_message(self):
22+ """Return a browser-useable error message for a bug watch."""
23+ if not self.context.bugwatch:
24+ return None
25+
26+ bug_watch = self.context.bugwatch
27+ if not bug_watch.last_error_type:
28+ return None
29+
30+ error_message_mapping = {
31+ BugWatchActivityStatus.BUG_NOT_FOUND: "%(bugtracker)s bug #"
32+ "%(bug)s appears not to exist. Check that the bug "
33+ "number is correct.",
34+ BugWatchActivityStatus.CONNECTION_ERROR: "Launchpad couldn't "
35+ "connect to %(bugtracker)s.",
36+ BugWatchActivityStatus.INVALID_BUG_ID: "Bug ID %(bug)s isn't "
37+ "valid on %(bugtracker)s. Check that the bug ID is "
38+ "correct.",
39+ BugWatchActivityStatus.TIMEOUT: "Launchpad's connection to "
40+ "%(bugtracker)s timed out.",
41+ BugWatchActivityStatus.UNKNOWN: "Launchpad couldn't import bug "
42+ "#%(bug)s from " "%(bugtracker)s.",
43+ BugWatchActivityStatus.UNPARSABLE_BUG: "Launchpad couldn't "
44+ "extract a status from %(bug)s on %(bugtracker)s.",
45+ BugWatchActivityStatus.UNPARSABLE_BUG_TRACKER: "Launchpad "
46+ "couldn't determine the version of %(bugtrackertype)s "
47+ "running on %(bugtracker)s.",
48+ BugWatchActivityStatus.UNSUPPORTED_BUG_TRACKER: "Launchpad "
49+ "doesn't support importing bugs from %(bugtrackertype)s"
50+ " bug trackers.",
51+ BugWatchActivityStatus.PRIVATE_REMOTE_BUG: "The bug is marked as "
52+ "private on the remote bug tracker. Launchpad cannot import "
53+ "the status of private remote bugs.",
54+ }
55+
56+ if bug_watch.last_error_type in error_message_mapping:
57+ message = error_message_mapping[bug_watch.last_error_type]
58+ else:
59+ message = bug_watch.last_error_type.description
60+
61+ error_data = {
62+ 'bug': bug_watch.remotebug,
63+ 'bugtracker': bug_watch.bugtracker.title,
64+ 'bugtrackertype': bug_watch.bugtracker.bugtrackertype.title}
65+
66+ return {
67+ 'message': message % error_data,
68+ 'help_url': '%s#%s' % (
69+ canonical_url(bug_watch, view_name="+error-help"),
70+ bug_watch.last_error_type.name),
71+ }
72+
73+
74+class BugTaskEditView(LaunchpadEditFormView, BugTaskBugWatchMixin):
75 """The view class used for the task +editstatus page."""
76
77 schema = IBugTask
78@@ -3264,7 +3322,7 @@
79 return None
80
81
82-class BugTaskTableRowView(LaunchpadView):
83+class BugTaskTableRowView(LaunchpadView, BugTaskBugWatchMixin):
84 """Browser class for rendering a bugtask row on the bug page."""
85
86 is_conjoined_slave = None
87@@ -3841,3 +3899,4 @@
88 @property
89 def text(self):
90 return self.context.bug.displayname
91+
92
93=== modified file 'lib/lp/bugs/browser/configure.zcml'
94--- lib/lp/bugs/browser/configure.zcml 2010-05-18 22:36:20 +0000
95+++ lib/lp/bugs/browser/configure.zcml 2010-05-21 16:19:26 +0000
96@@ -1133,6 +1133,9 @@
97 <browser:page
98 name="+portlet-details"
99 template="../templates/bugwatch-portlet-details.pt"/>
100+ <browser:page
101+ name="+error-help"
102+ template="../templates/bugwatch-error-help.pt"/>
103 </browser:pages>
104 <browser:url
105 for="lp.bugs.interfaces.bugwatch.IBugWatchSet"
106
107=== modified file 'lib/lp/bugs/configure.zcml'
108--- lib/lp/bugs/configure.zcml 2010-04-19 19:26:05 +0000
109+++ lib/lp/bugs/configure.zcml 2010-05-21 16:19:26 +0000
110@@ -852,7 +852,6 @@
111 can_be_rescheduled
112 datecreated
113 failed_activity
114- getLastErrorMessage
115 hasComment
116 unpushed_comments
117 id
118
119=== modified file 'lib/lp/bugs/interfaces/bugwatch.py'
120--- lib/lp/bugs/interfaces/bugwatch.py 2010-04-30 03:10:17 +0000
121+++ lib/lp/bugs/interfaces/bugwatch.py 2010-05-21 16:19:26 +0000
122@@ -230,9 +230,6 @@
123 def destroySelf():
124 """Delete this bug watch."""
125
126- def getLastErrorMessage():
127- """Return a string describing the contents of last_error_type."""
128-
129 def hasComment(comment_id):
130 """Return True if a comment has been imported for the BugWatch.
131
132
133=== modified file 'lib/lp/bugs/model/bugwatch.py'
134--- lib/lp/bugs/model/bugwatch.py 2010-05-13 12:49:15 +0000
135+++ lib/lp/bugs/model/bugwatch.py 2010-05-21 16:19:26 +0000
136@@ -201,53 +201,6 @@
137 assert len(self.bugtasks) == 0, "Can't delete linked bug watches"
138 SQLBase.destroySelf(self)
139
140- def getLastErrorMessage(self):
141- """See `IBugWatch`."""
142-
143- if not self.last_error_type:
144- return None
145-
146- error_message_mapping = {
147- BugWatchActivityStatus.BUG_NOT_FOUND: "%(bugtracker)s bug #"
148- "%(bug)s appears not to exist. Check that the bug "
149- "number is correct.",
150- BugWatchActivityStatus.CONNECTION_ERROR: "Launchpad couldn't "
151- "connect to %(bugtracker)s.",
152- BugWatchActivityStatus.INVALID_BUG_ID: "Bug ID %(bug)s isn't "
153- "valid on %(bugtracker)s. Check that the bug ID is "
154- "correct.",
155- BugWatchActivityStatus.TIMEOUT: "Launchpad's connection to "
156- "%(bugtracker)s timed out.",
157- BugWatchActivityStatus.UNKNOWN: "Launchpad couldn't import bug "
158- "#%(bug)s from " "%(bugtracker)s.",
159- BugWatchActivityStatus.UNPARSABLE_BUG: "Launchpad couldn't "
160- "extract a status from %(bug)s on %(bugtracker)s.",
161- BugWatchActivityStatus.UNPARSABLE_BUG_TRACKER: "Launchpad "
162- "couldn't determine the version of %(bugtrackertype)s "
163- "running on %(bugtracker)s.",
164- BugWatchActivityStatus.UNSUPPORTED_BUG_TRACKER: "Launchpad "
165- "doesn't support importing bugs from %(bugtrackertype)s"
166- " bug trackers.",
167- BugWatchActivityStatus.PRIVATE_REMOTE_BUG: "The bug is marked as "
168- "private on the remote bug tracker. Launchpad cannot import "
169- "the status of private remote bugs.",
170- }
171-
172- if self.last_error_type in error_message_mapping:
173- message = error_message_mapping[self.last_error_type]
174- elif self.last_error_type != BugWatchActivityStatus.UNKNOWN:
175- message = self.last_error_type.description
176- else:
177- message = ("Launchpad couldn't import bug #%(bug)s from "
178- "%(bugtracker)s.")
179-
180- error_data = {
181- 'bug': self.remotebug,
182- 'bugtracker': self.bugtracker.title,
183- 'bugtrackertype': self.bugtracker.bugtrackertype.title}
184-
185- return message % error_data
186-
187 @property
188 def unpushed_comments(self):
189 """Return the unpushed comments for this `BugWatch`."""
190
191=== modified file 'lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt'
192--- lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt 2010-04-17 02:56:58 +0000
193+++ lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt 2010-05-21 16:19:26 +0000
194@@ -45,14 +45,19 @@
195 >>> logout()
196
197 The error, telling us that the bug wasn't found on the remote server,
198-should now be displayed to the user.
199+should now be displayed to the user, along with a link to the popup help
200+for that error message.
201
202 >>> user_browser.open('http://bugs.launchpad.dev/thunderbird/+bug/12')
203 >>> for tag in find_tags_by_class(user_browser.contents,
204 ... 'error message'):
205- ... print tag.renderContents()
206+ ... print extract_text(tag.renderContents())
207 The Mozilla.org Bug Tracker bug #900 appears not to exist. Check
208- that the bug number is correct.
209+ that the bug number is correct. (what does this mean?)
210+
211+ >>> help_link = user_browser.getLink('(what does this mean?)')
212+ >>> print help_link.url
213+ http://bugs.launchpad.dev/.../+error-help#BUG_NOT_FOUND
214
215 It's also shown in the tooltip of the warning icon next to the bug watch
216 in the bugtask table.
217@@ -77,29 +82,31 @@
218 ... user_browser.open('http://bugs.launchpad.dev/thunderbird/+bug/12')
219 ... for tag in find_tags_by_class(user_browser.contents,
220 ... 'error message'):
221- ... print tag.renderContents()
222- Launchpad couldn't import bug #900 from The Mozilla.org Bug Tracker.
223+ ... print extract_text(tag.renderContents())
224+ Launchpad couldn't import bug #900 from The Mozilla.org Bug
225+ Tracker...
226 The Mozilla.org Bug Tracker bug #900 appears not to exist. Check
227- that the bug number is correct.
228- Launchpad couldn't connect to The Mozilla.org Bug Tracker.
229+ that the bug number is correct...
230+ Launchpad couldn't connect to The Mozilla.org Bug Tracker...
231 Bug ID 900 isn't valid on The Mozilla.org Bug Tracker. Check that
232- the bug ID is correct.
233- Launchpad's connection to The Mozilla.org Bug Tracker timed out.
234+ the bug ID is correct...
235+ Launchpad's connection to The Mozilla.org Bug Tracker timed out...
236 Launchpad couldn't extract a status from 900 on The Mozilla.org Bug
237- Tracker.
238+ Tracker...
239 Launchpad couldn't determine the version of Bugzilla running on The
240- Mozilla.org Bug Tracker.
241- Launchpad doesn't support importing bugs from Bugzilla bug trackers.
242+ Mozilla.org Bug Tracker...
243+ Launchpad doesn't support importing bugs from Bugzilla bug
244+ trackers...
245 The bug is marked as private on the remote bug tracker. Launchpad
246- cannot import the status of private remote bugs.
247+ cannot import the status of private remote bugs...
248 The remote bug's status was synchronized successfully but comments
249- could not be imported from the remote bug.
250+ could not be imported from the remote bug...
251 The remote bug's status was synchronized successfully and its
252 comments were successfully imported but Launchpad was unable to push
253- comments back to the remote bug.
254+ comments back to the remote bug...
255 The remote bug's status and comments were synchronized sucessfully
256 with Launchpad but Launchpad was unable to set the remote bug's link
257- back to the relevant Launchpad bug.
258+ back to the relevant Launchpad bug...
259
260 Finally, if the error gets solved (or no error occurs), the error
261 message will go away.
262
263=== modified file 'lib/lp/bugs/templates/bugtask-edit-form.pt'
264--- lib/lp/bugs/templates/bugtask-edit-form.pt 2009-07-17 17:59:07 +0000
265+++ lib/lp/bugs/templates/bugtask-edit-form.pt 2010-05-21 16:19:26 +0000
266@@ -36,9 +36,15 @@
267 <tal:bugtracker-active
268 condition="watch/bugtracker/active">
269 <p tal:condition="watch/last_error_type"
270- class="error message"
271- tal:content="watch/getLastErrorMessage"
272- />
273+ class="error message">
274+ <tal:bugwatch-error-message define="
275+ message view/bug_watch_error_message/message;
276+ help_url view/bug_watch_error_message/help_url;">
277+ <tal:message replace="message" /><br />
278+ <a tal:attributes="href help_url" target="help" class="help"
279+ >(what does this mean?)</a>
280+ </tal:bugwatch-error-message>
281+ </p>
282 </tal:bugtracker-active>
283 <p class="warning message"
284 tal:condition="not:watch/bugtracker/active">
285
286=== modified file 'lib/lp/bugs/templates/bugtask-tasks-and-nominations-table-row.pt'
287--- lib/lp/bugs/templates/bugtask-tasks-and-nominations-table-row.pt 2010-04-16 11:20:33 +0000
288+++ lib/lp/bugs/templates/bugtask-tasks-and-nominations-table-row.pt 2010-05-21 16:19:26 +0000
289@@ -114,10 +114,14 @@
290 condition="context/bugwatch/bugtracker/active">
291 <span tal:condition="not:context/bugwatch/last_error_type"
292 class="sprite bug-remote"></span>
293- <span tal:condition="context/bugwatch/last_error_type"
294- class="sprite warning-icon"
295- tal:attributes="title context/bugwatch/getLastErrorMessage"
296- id="bugwatch-error-sprite"></span>
297+ <a tal:condition="context/bugwatch/last_error_type"
298+ tal:attributes="href view/bug_watch_error_message/help_url"
299+ target="help"
300+ class="icon help">
301+ <span class="sprite warning-icon"
302+ tal:attributes="title view/bug_watch_error_message/message"
303+ id="bugwatch-error-sprite"></span>
304+ </a>
305 </tal:bugtracker-active>
306 <span tal:condition="not:context/bugwatch/bugtracker/active"
307 class="sprite warning-icon"></span>
308
309=== added file 'lib/lp/bugs/templates/bugwatch-error-help.pt'
310--- lib/lp/bugs/templates/bugwatch-error-help.pt 1970-01-01 00:00:00 +0000
311+++ lib/lp/bugs/templates/bugwatch-error-help.pt 2010-05-21 16:19:26 +0000
312@@ -0,0 +1,185 @@
313+<html>
314+ <head>
315+ <title>Bug watch errors</title>
316+ <link rel="stylesheet" type="text/css"
317+ href="/+icing/yui/cssreset/reset.css" />
318+ <link rel="stylesheet" type="text/css"
319+ href="/+icing/yui/cssfonts/fonts.css" />
320+ <link rel="stylesheet" type="text/css"
321+ href="/+icing/yui/cssbase/base.css" />
322+ </head>
323+ <body tal:define="watch view/context">
324+ <h1>Bug watch update errors</h1>
325+ <p>
326+ Bug watches don't always update successfully. When a bug watch
327+ fails to update, Launchpad records what went wrong.
328+ </p>
329+ <a name="UNKNOWN"></a>
330+ <h2>Unknown error</h2>
331+ <h3>What went wrong?</h3>
332+ <p>
333+ Launchpad encountered an unexpected error when trying to retrieve
334+ the bug from the remote server.
335+ </p>
336+ <h3>How can I help fix it?</h3>
337+ <p>
338+ <a href="mailto:feedback@launchpad.net">Contact us</a> and let us
339+ know about the problem.
340+ </p>
341+ <a name="BUG_NOT_FOUND"></a>
342+ <h2>Bug Not Found</h2>
343+ <h3>What went wrong?</h3>
344+ <p>
345+ Launchpad could not find the specified bug on the remote server.
346+ </p>
347+ <h3>How can I help fix it?</h3>
348+ <p>
349+ Check that the remote bug
350+ (<a tal:replace="structure watch/fmt:external-link" />)
351+ exists on the external bug tracker. If it doesn't, you should try
352+ to find the correct bug and
353+ <a tal:attributes="href watch/fmt:url">update the watch</a> so
354+ that it points to the correct remote bug.
355+ </p>
356+ <a name="CONNECTION_ERROR"></a>
357+ <h2>Connection Error</h2>
358+ <h3>What went wrong?</h3>
359+ <p>
360+ Launchpad was unable to connect to the remote server.
361+ </p>
362+ <h3>How can I help fix it?</h3>
363+ <p>
364+ Check that the remote bug tracker
365+ (<a tal:replace="structure watch/bugtracker/fmt:external-link" />)
366+ is on-line. If it is, you should
367+ <a href="mailto:feedback@launchpad.net">contact us</a> and let us
368+ know about the problem.
369+ </p>
370+ <a name="INVALID_BUG_ID"></a>
371+ <h2>Invalid Bug ID</h2>
372+ <h3>What went wrong?</h3>
373+ <p>
374+ The remote bug ID that the bug watch is linked to isn't valid on
375+ the remote bug tracker.
376+ </p>
377+ <h3>How can I help fix it?</h3>
378+ <p>
379+ <a href="mailto:feedback@launchpad.net">Contact us</a> and let us
380+ know about the problem.
381+ </p>
382+ <a name="TIMEOUT"></a>
383+ <h2>Timeout</h2>
384+ <h3>What went wrong?</h3>
385+ <p>
386+ Launchpad encountered a timeout when trying to connect to the
387+ remote server and was unable to retrieve the bug's status.
388+ </p>
389+ <h3>How can I help fix it?</h3>
390+ <p>
391+ <a href="mailto:feedback@launchpad.net">Contact us</a> and let us
392+ know about the problem.
393+ </p>
394+ <p>
395+ Check that the remote bug tracker
396+ (<a tal:replace="structure watch/bugtracker/fmt:external-link" />)
397+ is on-line. If it is, you should
398+ <a href="mailto:feedback@launchpad.net">contact us</a> and let us
399+ know about the problem.
400+ </p>
401+ <a name="UNPARSABLE_BUG"></a>
402+ <h2>Unparsable Bug</h2>
403+ <h3>What went wrong?</h3>
404+ <p>
405+ Launchpad could not extract a status from the data it received
406+ from the remote server.
407+ </p>
408+ <h3>How can I help fix it?</h3>
409+ <p>
410+ Check the <a attributes="href watch/fmt:url">bug watch page</a> to
411+ see if this error has happened more than once. If it hasn't, it
412+ could be due to bad data in the most recent update.
413+ </p>
414+ <p>
415+ If the error has occurred more than once, you should
416+ <a href="mailto:feedback@launchpad.net">contact us</a> and let us
417+ know about the problem.
418+ </p>
419+ <a name="UNPARSABLE_BUG_TRACKER"></a>
420+ <h2>Unparsable Bug Tracker Version</h2>
421+ <h3>What went wrong?</h3>
422+ <p>
423+ Launchpad could not determine the version of the bug tracker
424+ software running on the remote server.
425+ </p>
426+ <h3>How can I help fix it?</h3>
427+ <p>
428+ <a href="mailto:feedback@launchpad.net">Contact us</a> and let us
429+ know about the problem.
430+ </p>
431+ <a name="UNSUPPORTED_BUG_TRACKER"></a>
432+ <h2>Unsupported Bugtracker</h2>
433+ <h3>What went wrong?</h3>
434+ <p>
435+ The remote server is using bug tracker software which Launchpad
436+ does not currently support.
437+ </p>
438+ <h3>How can I help fix it?</h3>
439+ <p>
440+ <a href="https://bugs.launchpad.dev/malone/+filebug"
441+ >File a bug</a> requesting that Launchpad support interactions
442+ with the remote bug tracker.
443+ </p>
444+ <a name="PRIVATE_REMOTE_BUG"></a>
445+ <h2>Private Remote Bug</h2>
446+ <h3>What went wrong?</h3>
447+ <p>
448+ The bug is marked as private on the remote bug tracker. Launchpad
449+ cannot import the status of private remote bugs.
450+ </p>
451+ <h3>How can I help fix it?</h3>
452+ <p>
453+ Unfortunately there isn't a lot that can be done about this.
454+ You can manually update any bug task linked to the bug watch by
455+ choosing "None, the status of the bug is updated manually" for
456+ the Remote Watch option of each linked bug task.
457+ </p>
458+ <a name="COMMENT_IMPORT_FAILED"></a>
459+ <h2>Unable to import comments</h2>
460+ <h3>What went wrong?</h3>
461+ <p>
462+ The remote bug's status was synchronized successfully but comments
463+ could not be imported from the remote bug.
464+ </p>
465+ <h3>How can I help fix it?</h3>
466+ <p>
467+ <a href="mailto:feedback@launchpad.net">Contact us</a> and let us
468+ know about the problem.
469+ </p>
470+ <a name="COMMENT_PUSH_FAILED"></a>
471+ <h2>Unable to push comments</h2>
472+ <h3>What went wrong?</h3>
473+ <p>
474+ The remote bug's status was synchronized successfully and its
475+ comments were successfully imported but Launchpad was unable to
476+ push comments back to the remote bug.
477+ </p>
478+ <h3>How can I help fix it?</h3>
479+ <p>
480+ <a href="mailto:feedback@launchpad.net">Contact us</a> and let us
481+ know about the problem.
482+ </p>
483+ <a name="BACKLINK_FAILED"></a>
484+ <h2>Unable to set the link to the Launchpad bug on the remote server</h2>
485+ <h3>What went wrong?</h3>
486+ <p>
487+ The remote bug's status and comments were synchronized sucessfully
488+ with Launchpad but Launchpad was unable to set the remote bug's
489+ link back to the relevant Launchpad bug.
490+ </p>
491+ <h3>How can I help fix it?</h3>
492+ <p>
493+ <a href="mailto:feedback@launchpad.net">Contact us</a> and let us
494+ know about the problem.
495+ </p>
496+ </body>
497+</html>