Merge ~cjwatson/launchpad:doctest-reformat-headers into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: 509c09bb8067888b42b7aac9a06cb5e9a4f42539
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:doctest-reformat-headers
Merge into: launchpad:master
Diff against target: 10666 lines (+2106/-1053)
321 files modified
configs/README.txt (+22/-11)
lib/lp/answers/stories/faq-add.txt (+2/-1)
lib/lp/answers/stories/faq-browse-and-search.txt (+12/-6)
lib/lp/answers/stories/faq-edit.txt (+2/-1)
lib/lp/answers/stories/question-add-in-other-languages.txt (+2/-1)
lib/lp/answers/stories/question-browse-and-search.txt (+42/-21)
lib/lp/answers/stories/question-compatibility-urls.txt (+18/-9)
lib/lp/answers/stories/question-edit.txt (+6/-3)
lib/lp/answers/stories/question-message.txt (+6/-3)
lib/lp/answers/stories/question-obfuscation.txt (+6/-3)
lib/lp/answers/stories/question-reject-and-change-status.txt (+4/-2)
lib/lp/answers/stories/question-search-multiple-languages.txt (+10/-5)
lib/lp/answers/stories/question-subscriptions.txt (+8/-4)
lib/lp/answers/stories/this-is-a-faq.txt (+18/-9)
lib/lp/app/doc/displaying-numbers.txt (+6/-3)
lib/lp/app/doc/launchpadform.txt (+28/-14)
lib/lp/app/doc/tales-email-formatting.txt (+6/-3)
lib/lp/app/doc/validation.txt (+4/-2)
lib/lp/app/stories/basics/marketing.txt (+20/-10)
lib/lp/app/stories/basics/max-batch-size.txt (+2/-1)
lib/lp/app/stories/basics/user-requested-oops.txt (+2/-1)
lib/lp/app/stories/basics/xx-dbpolicy.txt (+2/-1)
lib/lp/app/stories/basics/xx-developerexceptions.txt (+4/-2)
lib/lp/app/stories/basics/xx-lowercase-redirection.txt (+2/-1)
lib/lp/app/stories/basics/xx-maintenance-message.txt (+4/-2)
lib/lp/app/stories/folder.txt (+10/-5)
lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt (+8/-4)
lib/lp/app/widgets/doc/announcement-date-widget.txt (+2/-1)
lib/lp/app/widgets/doc/lower-case-text-widget.txt (+2/-1)
lib/lp/app/widgets/doc/noneable-text-widgets.txt (+6/-3)
lib/lp/app/widgets/doc/project-scope-widget.txt (+10/-5)
lib/lp/app/widgets/doc/tokens-text-widget.txt (+2/-1)
lib/lp/app/widgets/doc/zope3-widgets-use-form-ng.txt (+2/-1)
lib/lp/archivepublisher/tests/deathrow.txt (+4/-2)
lib/lp/archiveuploader/tests/upload-path-parsing.txt (+10/-5)
lib/lp/blueprints/stories/blueprints/xx-buglinks.txt (+6/-3)
lib/lp/blueprints/stories/blueprints/xx-dependencies.txt (+18/-9)
lib/lp/blueprints/stories/standalone/xx-batching.txt (+2/-1)
lib/lp/blueprints/stories/standalone/xx-informational-blueprints.txt (+6/-3)
lib/lp/bugs/browser/tests/buglinktarget-views.txt (+10/-5)
lib/lp/bugs/browser/tests/bugtask-edit-views.txt (+12/-6)
lib/lp/bugs/browser/tests/bugtask-search-views.txt (+10/-5)
lib/lp/bugs/browser/tests/distrosourcepackage-bug-views.txt (+4/-2)
lib/lp/bugs/doc/bug-change.txt (+34/-17)
lib/lp/bugs/doc/bug-reported-acknowledgement.txt (+2/-1)
lib/lp/bugs/doc/bug-reporting-guidelines.txt (+2/-1)
lib/lp/bugs/doc/bug-set-status.txt (+6/-3)
lib/lp/bugs/doc/bugmessage-visibility.txt (+2/-1)
lib/lp/bugs/doc/bugmessage.txt (+12/-6)
lib/lp/bugs/doc/bugnotifications.txt (+20/-10)
lib/lp/bugs/doc/bugtarget.txt (+4/-2)
lib/lp/bugs/doc/bugtask-package-bugcounts.txt (+6/-3)
lib/lp/bugs/doc/bugtask-search-old-urls.txt (+2/-1)
lib/lp/bugs/doc/bugtask-status-workflow.txt (+4/-2)
lib/lp/bugs/doc/bugwidget.txt (+2/-1)
lib/lp/bugs/doc/cve.txt (+12/-6)
lib/lp/bugs/doc/displaying-bugs-and-tasks.txt (+10/-5)
lib/lp/bugs/doc/externalbugtracker-checkwatches.txt (+4/-2)
lib/lp/bugs/doc/externalbugtracker-comment-pushing.txt (+4/-2)
lib/lp/bugs/doc/externalbugtracker-emailaddress.txt (+6/-3)
lib/lp/bugs/doc/externalbugtracker-linking-back.txt (+4/-2)
lib/lp/bugs/doc/externalbugtracker-mantis-csv.txt (+6/-3)
lib/lp/bugs/doc/externalbugtracker-mantis.txt (+6/-3)
lib/lp/bugs/doc/externalbugtracker-roundup-python-bugs.txt (+4/-2)
lib/lp/bugs/doc/externalbugtracker-roundup.txt (+12/-6)
lib/lp/bugs/doc/externalbugtracker-rt.txt (+18/-9)
lib/lp/bugs/doc/externalbugtracker-sourceforge.txt (+12/-6)
lib/lp/bugs/doc/externalbugtracker-trac.txt (+14/-7)
lib/lp/bugs/doc/product-update-remote-product-script.txt (+2/-1)
lib/lp/bugs/doc/products-with-no-remote-product.txt (+2/-1)
lib/lp/bugs/doc/treelookup.txt (+12/-6)
lib/lp/bugs/stories/bug-also-affects/xx-also-affects-distribution-default-values.txt (+2/-1)
lib/lp/bugs/stories/bug-also-affects/xx-also-affects-new-upstream.txt (+4/-2)
lib/lp/bugs/stories/bug-also-affects/xx-bugtracker-information.txt (+2/-1)
lib/lp/bugs/stories/bug-also-affects/xx-duplicate-bugwatches.txt (+6/-3)
lib/lp/bugs/stories/bug-also-affects/xx-request-distribution-no-release-fix.txt (+6/-3)
lib/lp/bugs/stories/bug-also-affects/xx-upstream-bugtracker-links.txt (+2/-1)
lib/lp/bugs/stories/bug-release-management/nomination-navigation.txt (+2/-1)
lib/lp/bugs/stories/bug-tags/xx-searching-for-tags.txt (+4/-2)
lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.txt (+2/-1)
lib/lp/bugs/stories/bugattachments/xx-display-filesize-attachment.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-add-comment-bugtask-edit.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-add-comment-distribution-no-current-release.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-add-comment-with-bugwatch-and-cve.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.txt (+6/-3)
lib/lp/bugs/stories/bugs/xx-bug-heat-on-bug-page.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-bug-hidden-comments.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-bug-nomination-table-row.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-bug-text-pages.txt (+12/-6)
lib/lp/bugs/stories/bugs/xx-distributionsourcepackage-bugs.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt (+6/-3)
lib/lp/bugs/stories/bugs/xx-duplicate-of-private-bug.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-edit-no-currentrelease-distribution-task.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-front-page-search.txt (+14/-7)
lib/lp/bugs/stories/bugs/xx-front-page-statistics.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt (+10/-5)
lib/lp/bugs/stories/bugs/xx-project-bugs-page.txt (+2/-1)
lib/lp/bugs/stories/bugs/xx-unique-ids-on-bug-page.txt (+2/-1)
lib/lp/bugs/stories/bugtask-management/xx-bug-privileged-statuses.txt (+6/-3)
lib/lp/bugs/stories/bugtask-management/xx-edit-email-address-bugtask.txt (+6/-3)
lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.txt (+2/-1)
lib/lp/bugs/stories/bugtask-searches/xx-listing-basics.txt (+18/-9)
lib/lp/bugs/stories/bugtask-searches/xx-old-urls-still-work.txt (+4/-2)
lib/lp/bugs/stories/bugtracker/xx-bugtracker-handshake-tokens.txt (+2/-1)
lib/lp/bugs/stories/bugwatches/xx-bugwatch-comments.txt (+2/-1)
lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt (+2/-1)
lib/lp/bugs/stories/cve/xx-cve-link-xss.txt (+2/-1)
lib/lp/bugs/stories/feeds/xx-bug-atom.txt (+28/-14)
lib/lp/bugs/stories/feeds/xx-bug-html.txt (+14/-7)
lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.txt (+2/-1)
lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug.txt (+4/-2)
lib/lp/bugs/stories/guided-filebug/xx-filebug-attachments.txt (+6/-3)
lib/lp/bugs/stories/guided-filebug/xx-filebug-tags.txt (+6/-3)
lib/lp/bugs/stories/guided-filebug/xx-options-for-bug-supervisors.txt (+4/-2)
lib/lp/bugs/stories/guided-filebug/xx-productseries-guided-filebug.txt (+2/-1)
lib/lp/bugs/stories/guided-filebug/xx-sorting-by-relevance.txt (+2/-1)
lib/lp/bugs/stories/upstream-bugprivacy/xx-upstream-bug-privacy.txt (+2/-1)
lib/lp/bugs/stories/webservice/xx-bug-target.txt (+8/-4)
lib/lp/bugs/stories/webservice/xx-hide-comments.txt (+2/-1)
lib/lp/bugs/tests/buglinktarget.txt (+10/-5)
lib/lp/bugs/tests/trac-xmlrpc-transport.txt (+14/-7)
lib/lp/buildmaster/doc/buildqueue.txt (+6/-3)
lib/lp/buildmaster/stories/builder-views.txt (+10/-5)
lib/lp/buildmaster/stories/xx-buildfarm-index.txt (+2/-1)
lib/lp/code/doc/branch-karma.txt (+8/-4)
lib/lp/code/doc/branch-notifications.txt (+16/-8)
lib/lp/code/doc/code-jobs.txt (+20/-10)
lib/lp/code/doc/codeimport-job.txt (+18/-9)
lib/lp/code/doc/codeimport-result.txt (+6/-3)
lib/lp/code/doc/codereviewcomment.txt (+6/-3)
lib/lp/code/doc/revision.txt (+16/-8)
lib/lp/code/stories/branches/package-branch-merge-proposals.txt (+2/-1)
lib/lp/code/stories/branches/package-branch-merges-with-product-branches.txt (+2/-1)
lib/lp/code/stories/branches/xx-branch-listings-merge-proposal-badge.txt (+2/-1)
lib/lp/code/stories/branches/xx-branch-listings.txt (+16/-8)
lib/lp/code/stories/branches/xx-branch-mirror-failures.txt (+6/-3)
lib/lp/code/stories/branches/xx-claiming-team-code-reviews.txt (+2/-1)
lib/lp/code/stories/branches/xx-distribution-branches.txt (+2/-1)
lib/lp/code/stories/branches/xx-distroseries-branches.txt (+2/-1)
lib/lp/code/stories/branches/xx-person-portlet-teambranches.txt (+2/-1)
lib/lp/code/stories/branches/xx-product-overview.txt (+2/-1)
lib/lp/code/stories/branches/xx-source-package-branches-empty.txt (+2/-1)
lib/lp/code/stories/branches/xx-source-package-branches-listing.txt (+2/-1)
lib/lp/code/stories/branches/xx-upload-directions.txt (+10/-5)
lib/lp/code/stories/codeimport/xx-codeimport-machines.txt (+6/-3)
lib/lp/code/stories/codeimport/xx-edit-codeimport.txt (+14/-7)
lib/lp/code/stories/codeimport/xx-failing-codeimport.txt (+2/-1)
lib/lp/code/stories/feeds/xx-branch-atom.txt (+12/-6)
lib/lp/code/stories/feeds/xx-revision-atom.txt (+10/-5)
lib/lp/code/stories/webservice/xx-branches.txt (+8/-4)
lib/lp/code/stories/webservice/xx-branchmergeproposal.txt (+18/-9)
lib/lp/coop/answersbugs/stories/question-buglink.txt (+8/-4)
lib/lp/coop/answersbugs/stories/question-makebug.txt (+2/-1)
lib/lp/registry/browser/tests/poll-views_0.txt (+8/-4)
lib/lp/registry/browser/tests/team-join-views.txt (+4/-2)
lib/lp/registry/codesofconduct/1.0.1.txt (+2/-1)
lib/lp/registry/codesofconduct/1.0.txt (+2/-1)
lib/lp/registry/codesofconduct/1.1.txt (+2/-1)
lib/lp/registry/codesofconduct/2.0.txt (+6/-3)
lib/lp/registry/doc/announcement.txt (+18/-9)
lib/lp/registry/doc/cache-country-mirrors.txt (+2/-1)
lib/lp/registry/doc/distribution-mirror.txt (+16/-8)
lib/lp/registry/doc/distribution-sourcepackage.txt (+14/-7)
lib/lp/registry/doc/featuredproject.txt (+2/-1)
lib/lp/registry/doc/hasowner-authorization.txt (+2/-1)
lib/lp/registry/doc/irc.txt (+2/-1)
lib/lp/registry/doc/jabber.txt (+2/-1)
lib/lp/registry/doc/karmacache.txt (+6/-3)
lib/lp/registry/doc/launchpad-container.txt (+8/-4)
lib/lp/registry/doc/personroles.txt (+12/-6)
lib/lp/registry/doc/pillar-aliases-field.txt (+2/-1)
lib/lp/registry/doc/pillar.txt (+8/-4)
lib/lp/registry/doc/productrelease.txt (+2/-1)
lib/lp/registry/doc/productseries.txt (+12/-6)
lib/lp/registry/doc/standing.txt (+8/-4)
lib/lp/registry/doc/team-nav-menus.txt (+2/-1)
lib/lp/registry/doc/user-to-user.txt (+8/-4)
lib/lp/registry/doc/wikiname.txt (+2/-1)
lib/lp/registry/stories/distributionmirror/xx-distribution-countrymirrors.txt (+2/-1)
lib/lp/registry/stories/distributionmirror/xx-distributionmirror-prober-logs.txt (+2/-1)
lib/lp/registry/stories/gpg-coc/xx-gpg-coc.txt (+10/-5)
lib/lp/registry/stories/mailinglists/hosted-email-address.txt (+2/-1)
lib/lp/registry/stories/milestone/xx-milestone-add-and-edit.txt (+8/-4)
lib/lp/registry/stories/milestone/xx-milestone-description.txt (+6/-3)
lib/lp/registry/stories/person/xx-add-sshkey.txt (+2/-1)
lib/lp/registry/stories/person/xx-approve-members.txt (+2/-1)
lib/lp/registry/stories/person/xx-person-working-on.txt (+2/-1)
lib/lp/registry/stories/pillar/xx-pillar-deactivation.txt (+2/-1)
lib/lp/registry/stories/pillar/xx-pillar-sprints.txt (+2/-1)
lib/lp/registry/stories/pillar/xx-pillar-traversal.txt (+2/-1)
lib/lp/registry/stories/product/xx-launchpad-project-search.txt (+4/-2)
lib/lp/registry/stories/product/xx-product-edit-sourceforge-project.txt (+2/-1)
lib/lp/registry/stories/productrelease/xx-productrelease-basics.txt (+8/-4)
lib/lp/registry/stories/productrelease/xx-productrelease-delete.txt (+2/-1)
lib/lp/registry/stories/project/xx-project-add.txt (+2/-1)
lib/lp/registry/stories/team-polls/create-poll-options.txt (+2/-1)
lib/lp/registry/stories/team-polls/edit-options.txt (+2/-1)
lib/lp/registry/stories/team-polls/edit-poll.txt (+2/-1)
lib/lp/registry/stories/team-polls/vote-poll.txt (+6/-3)
lib/lp/registry/stories/team/xx-team-add-my-teams.txt (+2/-1)
lib/lp/registry/stories/team/xx-team-contactemail-xss.txt (+2/-1)
lib/lp/registry/stories/team/xx-team-contactemail.txt (+4/-2)
lib/lp/registry/stories/teammembership/private-team.txt (+6/-3)
lib/lp/registry/stories/teammembership/xx-member-renewed-membership.txt (+2/-1)
lib/lp/registry/stories/teammembership/xx-renew-subscription.txt (+2/-1)
lib/lp/registry/stories/teammembership/xx-team-leave.txt (+6/-3)
lib/lp/registry/stories/webservice/xx-distribution-mirror.txt (+6/-3)
lib/lp/registry/stories/webservice/xx-private-team.txt (+4/-2)
lib/lp/registry/stories/webservice/xx-structuralsubscription.txt (+2/-1)
lib/lp/registry/tests/bug-249185.txt (+2/-1)
lib/lp/registry/tests/person_from_principal.txt (+2/-1)
lib/lp/services/database/doc/decoratedresultset.txt (+14/-7)
lib/lp/services/database/doc/multitablecopy.txt (+24/-12)
lib/lp/services/database/doc/storm-store-reset.txt (+2/-1)
lib/lp/services/database/tests/decoratedresultset.txt (+24/-12)
lib/lp/services/doc/looptuner.txt (+28/-14)
lib/lp/services/feeds/doc/feeds.txt (+10/-5)
lib/lp/services/feeds/stories/xx-links.txt (+30/-15)
lib/lp/services/feeds/stories/xx-navigation.txt (+12/-6)
lib/lp/services/fields/doc/uri-field.txt (+18/-9)
lib/lp/services/gpg/doc/gpghandler.txt (+10/-5)
lib/lp/services/oauth/doc/oauth-pages.txt (+4/-2)
lib/lp/services/oauth/stories/access-token.txt (+2/-1)
lib/lp/services/oauth/stories/managing-tokens.txt (+2/-1)
lib/lp/services/oauth/stories/request-token.txt (+2/-1)
lib/lp/services/scripts/doc/profile.txt (+2/-1)
lib/lp/services/verification/browser/tests/logintoken-views.txt (+4/-2)
lib/lp/services/verification/doc/logintoken.txt (+4/-2)
lib/lp/services/webapp/doc/canonical_url.txt (+24/-12)
lib/lp/services/webapp/doc/canonicalurl.txt (+8/-4)
lib/lp/services/webapp/doc/launchbag.txt (+2/-1)
lib/lp/services/webapp/doc/menus.txt (+26/-13)
lib/lp/services/webapp/doc/navigation.txt (+22/-11)
lib/lp/services/webapp/doc/notification-text-escape.txt (+2/-1)
lib/lp/services/webapp/doc/renamed-view.txt (+10/-5)
lib/lp/services/webapp/doc/timeout.txt (+4/-2)
lib/lp/services/webapp/doc/uri.txt (+2/-1)
lib/lp/services/webapp/doc/xmlrpc-infrastructure.txt (+2/-1)
lib/lp/services/webapp/doc/zcmldirectives.txt (+18/-9)
lib/lp/services/webapp/tests/test_launchpad_login_source.txt (+2/-1)
lib/lp/services/webservice/doc/launchpadlib.txt (+2/-1)
lib/lp/services/webservice/doc/webservice-configuration.txt (+4/-2)
lib/lp/services/webservice/doc/webservice-error.txt (+2/-1)
lib/lp/services/webservice/doc/webservice-marshallers.txt (+4/-2)
lib/lp/services/webservice/stories/apidoc.txt (+2/-1)
lib/lp/services/webservice/stories/root.txt (+2/-1)
lib/lp/services/webservice/stories/xx-wadl.txt (+2/-1)
lib/lp/services/worlddata/stories/webservice/xx-country.txt (+4/-2)
lib/lp/soyuz/browser/tests/archivesubscription-views.txt (+4/-2)
lib/lp/soyuz/browser/tests/binarypackagerelease-views.txt (+2/-1)
lib/lp/soyuz/browser/tests/distroseriesqueue-views.txt (+4/-2)
lib/lp/soyuz/browser/tests/sourcepackage-views.txt (+2/-1)
lib/lp/soyuz/doc/archiveauthtoken.txt (+8/-4)
lib/lp/soyuz/doc/binarypackagerelease.txt (+4/-2)
lib/lp/soyuz/doc/build-failedtoupload-workflow.txt (+4/-2)
lib/lp/soyuz/doc/build-files.txt (+2/-1)
lib/lp/soyuz/doc/distroseriesbinarypackage.txt (+2/-1)
lib/lp/soyuz/doc/fakepackager.txt (+8/-4)
lib/lp/soyuz/doc/package-cache-script.txt (+2/-1)
lib/lp/soyuz/doc/package-meta-classes.txt (+2/-1)
lib/lp/soyuz/doc/package-relationship-pages.txt (+2/-1)
lib/lp/soyuz/doc/package-relationship.txt (+2/-1)
lib/lp/soyuz/doc/packagecopyrequest.txt (+2/-1)
lib/lp/soyuz/doc/pocketchroot.txt (+2/-1)
lib/lp/soyuz/doc/sampledata-setup.txt (+2/-1)
lib/lp/soyuz/doc/sourcepackagerelease.txt (+8/-4)
lib/lp/soyuz/stories/packaging/package-pages-navigation.txt (+16/-8)
lib/lp/soyuz/stories/ppa/xx-edit-dependencies.txt (+14/-7)
lib/lp/soyuz/stories/ppa/xx-ppa-navigation.txt (+2/-1)
lib/lp/soyuz/stories/ppa/xx-private-ppa-presentation.txt (+6/-3)
lib/lp/soyuz/stories/ppa/xx-private-ppa-subscription-stories.txt (+30/-15)
lib/lp/soyuz/stories/ppa/xx-private-ppa-subscriptions.txt (+10/-5)
lib/lp/soyuz/stories/ppa/xx-private-ppas.txt (+10/-5)
lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.txt (+24/-12)
lib/lp/soyuz/stories/soyuz/xx-binarypackagerelease-index.txt (+2/-1)
lib/lp/soyuz/stories/soyuz/xx-distribution-add.txt (+2/-1)
lib/lp/soyuz/stories/soyuz/xx-distribution-archives.txt (+2/-1)
lib/lp/soyuz/stories/soyuz/xx-distribution-edit.txt (+2/-1)
lib/lp/soyuz/stories/soyuz/xx-distroarchseries.txt (+10/-5)
lib/lp/soyuz/stories/soyuz/xx-distroseries-binary-packages.txt (+2/-1)
lib/lp/soyuz/stories/soyuz/xx-distroseries-index.txt (+2/-1)
lib/lp/soyuz/stories/soyuz/xx-package-diff.txt (+8/-4)
lib/lp/soyuz/stories/soyuz/xx-portlet-publishing-details.txt (+2/-1)
lib/lp/soyuz/stories/soyuz/xx-private-builds.txt (+10/-5)
lib/lp/soyuz/stories/webservice/xx-person-createppa.txt (+6/-3)
lib/lp/testing/doc/sample-data-assertions.txt (+4/-2)
lib/lp/translations/browser/tests/productseries-views.txt (+6/-3)
lib/lp/translations/doc/message-sharing-merge-script.txt (+2/-1)
lib/lp/translations/doc/poexport-request-productseries.txt (+2/-1)
lib/lp/translations/doc/poexport-request.txt (+10/-5)
lib/lp/translations/doc/poexportqueue-replication-lag.txt (+2/-1)
lib/lp/translations/doc/remove-translations-by.txt (+4/-2)
lib/lp/translations/doc/translationbranchapprover.txt (+2/-1)
lib/lp/translations/doc/translationbuildapprover.txt (+2/-1)
lib/lp/translations/doc/translationrelicensingagreement.txt (+2/-1)
lib/lp/translations/stories/distribution/xx-distribution-change-language-pack-admins.txt (+2/-1)
lib/lp/translations/stories/importqueue/xx-entry-error-output.txt (+2/-1)
lib/lp/translations/stories/importqueue/xx-translation-import-queue-filtering.txt (+18/-9)
lib/lp/translations/stories/importqueue/xx-translation-import-queue-targets.txt (+10/-5)
lib/lp/translations/stories/navigation-links/pofile.txt (+2/-1)
lib/lp/translations/stories/productseries/xx-productseries-translation-export.txt (+12/-6)
lib/lp/translations/stories/productseries/xx-productseries-translations-bzr-request.txt (+8/-4)
lib/lp/translations/stories/standalone/xx-person-editlanguages.txt (+6/-3)
lib/lp/translations/stories/standalone/xx-pofile-translate-dismiss-suggestions.txt (+4/-2)
lib/lp/translations/stories/standalone/xx-pofile-translate-legal-warning.txt (+2/-1)
lib/lp/translations/stories/standalone/xx-pofile-translate-performance.txt (+6/-3)
lib/lp/translations/stories/standalone/xx-pofile-translate-search.txt (+2/-1)
lib/lp/translations/stories/standalone/xx-products-with-translations.txt (+2/-1)
lib/lp/translations/stories/standalone/xx-rosetta-distributionsourcepackage-list.txt (+2/-1)
lib/lp/translations/stories/standalone/xx-rosetta-sourcepackage-list.txt (+2/-1)
lib/lp/translations/stories/standalone/xx-translation-access-display.txt (+6/-3)
lib/lp/translations/stories/standalone/xx-translation-credits.txt (+2/-1)
lib/lp/translations/stories/standalone/xx-translation-help.txt (+2/-1)
lib/lp/translations/stories/translations/xx-translations.txt (+8/-4)
lib/lp/translations/stories/webservice/xx-translationfocus.txt (+2/-1)
lib/lp/translations/utilities/doc/gettext_mo_exporter.txt (+8/-4)
lib/lp/translations/utilities/doc/gettext_po_exporter.txt (+8/-4)
lib/lp/translations/utilities/doc/gettext_po_parser.txt (+20/-10)
lib/lp/translations/utilities/doc/gettext_po_parser_context.txt (+14/-7)
lib/lp/translations/utilities/doc/kde-po-file-format.txt (+18/-9)
lib/lp/translations/utilities/doc/templatenames.txt (+2/-1)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+406176@code.launchpad.net

Commit message

Reformat doctest headers in reStructuredText style

Description of the change

pocket-lint (and hence lp-lint-doctest) have been complaining about Moin-style headers in doctests for a long time, but we've never got round to fixing them all. Let's just get it over with.

Patch generated by:

  git grep -El '^= .+ = *$' | fgrep .txt | \
    xargs perl -pi -e 's/^= (.+) = *$/"$1\n" . ("=" x length($1))/e'
  git grep -El '^== .+ == *$' | fgrep .txt | \
    xargs perl -pi -e 's/^== (.+) == *$/"$1\n" . ("-" x length($1))/e'
  git grep -El '^=== .+ === *$' | fgrep .txt | \
    xargs perl -pi -e 's/^=== (.+) === *$/"$1\n" . ("." x length($1))/e'

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) wrote :

Self-approving (trivial and mechanical).

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/configs/README.txt b/configs/README.txt
2index 38e2893..4348000 100644
3--- a/configs/README.txt
4+++ b/configs/README.txt
5@@ -1,10 +1,12 @@
6-= Launchpad configs =
7+Launchpad configs
8+=================
9
10 This directory defines the configurations used to run Launchpad
11 applications in specific environments.
12
13
14-== Environments ==
15+Environments
16+------------
17
18 This directory stores configs. The config used is selected on startup
19 using the LPCONFIG environment variable.
20@@ -24,13 +26,15 @@ to do this if you are adding a new required config option to
21 launchpad-lazr.conf.
22
23
24-== LaunchpadConfig ==
25+LaunchpadConfig
26+---------------
27
28 Launchpad uses a singleton LaunchpadConfig object to select the config
29 to load and manage its state.
30
31
32-=== Instance directories and process files ===
33+Instance directories and process files
34+......................................
35
36 The directories in configs/ represent environment's config `instance`.
37 Environment and instance are synonymous in this case. The instance is
38@@ -60,7 +64,8 @@ All this information is available in the config object.
39 '.../configs/development/launchpad-lazr.conf'
40
41
42-=== Accessing the LaunchpadConfig in code ===
43+Accessing the LaunchpadConfig in code
44+.....................................
45
46 The LaunchpadConfig singleton is exposed as config in its module.
47
48@@ -87,7 +92,8 @@ You can learn more about lp.services.config in the doctest located at
49 lib/canonical/launchpad/doc/canonical-config.txt
50
51
52-=== Testing with LaunchpadConfig ===
53+Testing with LaunchpadConfig
54+............................
55
56 Configurations are meant to be immutable--applications should never
57 alter the config. Nor should tests. Older code and tests assumed
58@@ -121,7 +127,8 @@ the config.
59 'answers.launchpad.net'
60
61
62-== lazr.conf schema and confs ==
63+lazr.conf schema and confs
64+--------------------------
65
66 All Launchpad configs inherit from the Launchpad schema defined
67 in ../lib/lp/services/config/schema-lazr.conf (it is symlinked
68@@ -166,7 +173,8 @@ You can learn more about lazr.config in the doctest located at
69 lib/canonical/lazr/doc/config.txt
70
71
72-=== schema template and optional sections ===
73+schema template and optional sections
74+.....................................
75
76 The schema can contain [<category>.template] sections that define a
77 common set of keys and default value for category of sections.
78@@ -238,7 +246,8 @@ Including just the section ([vhost.xmlrpc_private]) will suffice. In
79 this case, the two keys were redefined.
80
81
82-=== Implicit typing ===
83+Implicit typing
84+...............
85
86 lazr.config support implicit typing so that the application does not
87 need to coerce the config values:
88@@ -264,7 +273,8 @@ the callsite must split the host:port compound object and coerce the
89 port to an int.
90
91
92-=== Config inheritance ===
93+Config inheritance
94+..................
95
96 The lazr configurations in this directory descend from the
97 Launchpad schema. This is a general outline of inheritance:
98@@ -323,7 +333,8 @@ There are other configuration in this directory that are not
99 listed here
100
101
102-=== Viewing a configuration with lsconf.py ===
103+Viewing a configuration with lsconf.py
104+......................................
105
106 You can view the complete configuration for an process using the
107 lsconf.py utility to assemble the configuration from the lazr
108diff --git a/lib/lp/answers/stories/faq-add.txt b/lib/lp/answers/stories/faq-add.txt
109index c17df73..ac6023e 100644
110--- a/lib/lp/answers/stories/faq-add.txt
111+++ b/lib/lp/answers/stories/faq-add.txt
112@@ -1,4 +1,5 @@
113-== Creating a new FAQ ==
114+Creating a new FAQ
115+------------------
116
117 New FAQs can be created for a project by users who have 'moderation'
118 privileges. This includes answer contacts and the project's owner.
119diff --git a/lib/lp/answers/stories/faq-browse-and-search.txt b/lib/lp/answers/stories/faq-browse-and-search.txt
120index 51ba8eb..555aa33 100644
121--- a/lib/lp/answers/stories/faq-browse-and-search.txt
122+++ b/lib/lp/answers/stories/faq-browse-and-search.txt
123@@ -1,6 +1,8 @@
124-= Browsing and Searching FAQs =
125+Browsing and Searching FAQs
126+===========================
127
128-== No FAQs ==
129+No FAQs
130+-------
131
132 Miss Piggy decided to give Kubuntu a try based on the recommendations of
133 Kermit. She wants to watch the wedding scene of The Muppets Take
134@@ -36,7 +38,8 @@ Kubuntu:
135 There are no FAQs for Kubuntu.
136
137
138-== Browsing FAQs ==
139+Browsing FAQs
140+-------------
141
142 She learns through Fozzie Bear that support for Kubuntu is really
143 happening on the Ubuntu project.
144@@ -94,7 +97,8 @@ The FAQ page has a link back to the FAQ listing:
145 http://answers.launchpad.test/ubuntu/+faqs
146
147
148-== Searching FAQs ==
149+Searching FAQs
150+--------------
151
152 All FAQs listing have a search box at the top, where the user can
153 enter keywords that be used to filter the displayed FAQs.
154@@ -158,7 +162,8 @@ Following the link will show the questions results:
155 Flash/Java web pages
156
157
158-== Distribution Source Packages and FAQs ==
159+Distribution Source Packages and FAQs
160+-------------------------------------
161
162 Altough distribution source packages aren't directly associated with
163 FAQs. The 'All FAQs' link that appears in that context links to the
164@@ -173,7 +178,8 @@ distribution FAQs.
165 http://answers.launchpad.test/ubuntu/+faqs
166
167
168-== Accessing an FAQ directly ==
169+Accessing an FAQ directly
170+-------------------------
171
172 Asking for a non-existent FAQ or an invalid ID will raise a 404 error.
173
174diff --git a/lib/lp/answers/stories/faq-edit.txt b/lib/lp/answers/stories/faq-edit.txt
175index dc5969c..9a635d4 100644
176--- a/lib/lp/answers/stories/faq-edit.txt
177+++ b/lib/lp/answers/stories/faq-edit.txt
178@@ -1,4 +1,5 @@
179-= Editing FAQs =
180+Editing FAQs
181+============
182
183 It is possible to modify the title, keywords and content of an existing
184 FAQ. To do this, the user goes to the FAQ that they want to modify and
185diff --git a/lib/lp/answers/stories/question-add-in-other-languages.txt b/lib/lp/answers/stories/question-add-in-other-languages.txt
186index 9ec7b8d..47498e5 100644
187--- a/lib/lp/answers/stories/question-add-in-other-languages.txt
188+++ b/lib/lp/answers/stories/question-add-in-other-languages.txt
189@@ -1,4 +1,5 @@
190-= Asking questions in languages other than English =
191+Asking questions in languages other than English
192+================================================
193
194 It is possible to ask questions in a language other than English. The
195 'Ask a question' page has a pop-up where the user can select the language
196diff --git a/lib/lp/answers/stories/question-browse-and-search.txt b/lib/lp/answers/stories/question-browse-and-search.txt
197index 6c5bc69..ba3b8f9 100644
198--- a/lib/lp/answers/stories/question-browse-and-search.txt
199+++ b/lib/lp/answers/stories/question-browse-and-search.txt
200@@ -1,4 +1,5 @@
201-= Browsing and Searching Questions =
202+Browsing and Searching Questions
203+================================
204
205 This story describes some common use cases about using the browsing and
206 searching features of the Answer Tracker.
207@@ -9,7 +10,8 @@ IP address, since we'll use that later.
208 >>> browser.addHeader('X_FORWARDED_FOR', '196.36.161.227')
209
210
211-== When Nobody Uses the Answer Tracker ==
212+When Nobody Uses the Answer Tracker
213+-----------------------------------
214
215 Average Joe has recently installed Kubuntu. He has a problem with his
216 system and goes to the Kubuntu's support page in Launchpad to see if
217@@ -46,7 +48,8 @@ For projects that don't have products, the Answers facet is disabled.
218 ...
219 zope.testbrowser.browser.LinkNotFoundError
220
221-== Browsing Questions ==
222+Browsing Questions
223+------------------
224
225 He realises that support for Kubuntu is probably going on in the Ubuntu
226 Answers page and goes there to check.
227@@ -143,7 +146,8 @@ details of the question are available.
228 [<div class="report"><p>I get really poor hard drive performance.</p></div>]
229
230
231-== Jumping to Questions ==
232+Jumping to Questions
233+--------------------
234
235 The Answer Tracker main page permits the user to jump to a question by
236 submitting the question's id in the text input field with the 'Find
237@@ -188,7 +192,8 @@ is shown search results instead of the question.
238 There are no questions matching "question 8" with the requested statuses.
239
240
241-== Searching Questions ==
242+Searching Questions
243+-------------------
244
245 Browsing is fine when the number of questions is small, but searching
246 is more convenient as the number of questions grow larger.
247@@ -250,7 +255,8 @@ error is displayed when the user forgets to select a status.
248 You must choose at least one status.
249
250
251-== Controlling the Sort Order ==
252+Controlling the Sort Order
253+--------------------------
254
255 That question isn't exactly what Average Joe was looking for. Now, he'd
256 like to see all the questions that were related to the firefox package.
257@@ -289,12 +295,14 @@ selects the 'oldest first' sort order.
258 </table>
259
260
261-== Common Reports ==
262+Common Reports
263+--------------
264
265 In the actions menu, we find links to some common reports.
266
267
268-=== Open Questions ===
269+Open Questions
270+..............
271
272 Nice Guy likes helping others. He uses the 'Open' link to view the most
273 recent questions on Mozilla Firefox.
274@@ -329,7 +337,8 @@ problems:
275 Problem showing the SVG demo on W3C site
276
277
278-=== Answered Questions ===
279+Answered Questions
280+..................
281
282 A random user has a problem with firefox in Ubuntu. They use the
283 'Answered' link on the 'Answers' facet of the distribution to look for
284@@ -363,7 +372,8 @@ they enter 'Evolution' as a keyword and hit the search button.
285 ...
286
287
288-=== My questions ===
289+My questions
290+............
291
292 Sample Person remembers posting a question on mozilla-firefox. They use
293 the 'My questions' link on the distribution source package Answers facet
294@@ -435,7 +445,8 @@ informing them of this fact is displayed.
295 You didn't ask any questions about gnomebaker.
296
297
298-=== Need attention ===
299+Need attention
300+..............
301
302 A user can often forget which questions need their attention. For
303 this purpose, there is a 'Need attention' report which displays the
304@@ -488,7 +499,8 @@ informing them of this fact is displayed.
305 No questions need your attention for gnomebaker.
306
307
308-== Person Reports ==
309+Person Reports
310+--------------
311
312 The Answers facet on on person also contains various searchable
313 listings.
314@@ -553,7 +565,8 @@ The actions menu contains links to listing that contain only a specific
315 type of involvement.
316
317
318-=== Assigned ===
319+Assigned
320+........
321
322 The assigned report only lists the questions to which the person is
323 assigned.
324@@ -565,7 +578,8 @@ assigned.
325 No questions assigned to Foo Bar found with the requested statuses.
326
327
328-=== Answered ===
329+Answered
330+........
331
332 The 'Answered' link displays all the questions where the person is the
333 answerer.
334@@ -579,7 +593,8 @@ answerer.
335 mailto: problem in webpage
336
337
338-=== Commented ===
339+Commented
340+.........
341
342 The report available under the 'Commented' link displays all the
343 questions commented on by the person.
344@@ -597,7 +612,8 @@ questions commented on by the person.
345 Newly installed plug-in doesn't seem to be used
346
347
348-=== Asked ===
349+Asked
350+.....
351
352 The 'Asked' link displays a listing containing all the questions
353 asked by the person.
354@@ -612,7 +628,8 @@ asked by the person.
355 Firefox loses focus and gets stuck
356
357
358-=== Need attention ===
359+Need attention
360+..............
361
362 The 'Need attention' link displays all the questions that need
363 the attention of that person.
364@@ -627,7 +644,8 @@ the attention of that person.
365 Slow system
366
367
368-=== Subscribed ===
369+Subscribed
370+..........
371
372 Foo Bar can find all the questions to which they are subscribed by
373 visiting the 'Subscribed' link in the 'Answers' facet.
374@@ -641,7 +659,8 @@ visiting the 'Subscribed' link in the 'Answers' facet.
375 Slow system
376
377
378-== Browsing and Searching Questions in a ProjectGroup ==
379+Browsing and Searching Questions in a ProjectGroup
380+--------------------------------------------------
381
382 When going to the Answers facet of a project, a listing of all the
383 questions filed against any of the project's products is displayed.
384@@ -699,7 +718,8 @@ The same standard reports than on regular QuestionTarget are available:
385 Questions needing your attention for The Mozilla Project : Questions : The Mozilla Project
386
387
388-== Searching All Questions ==
389+Searching All Questions
390+-----------------------
391
392 It is possible from the Answer Tracker front page to search among all
393 questions ever filed on Launchpad.
394@@ -754,7 +774,8 @@ display all questions asked in Launchpad with the selected statuses.
395 Firefox cannot render Bank Site Mozilla Firefox
396
397
398-== Searching in a Selected Project ==
399+Searching in a Selected Project
400+-------------------------------
401
402 From the Answers front page, the user can select to search questions
403 only in a particular project. In this context a "project" means either
404diff --git a/lib/lp/answers/stories/question-compatibility-urls.txt b/lib/lp/answers/stories/question-compatibility-urls.txt
405index 29eaf2a..25572d9 100644
406--- a/lib/lp/answers/stories/question-compatibility-urls.txt
407+++ b/lib/lp/answers/stories/question-compatibility-urls.txt
408@@ -1,16 +1,19 @@
409-= Backward Compatible URLs =
410+Backward Compatible URLs
411+========================
412
413 The Answer Tracker was renamed from the old Technical Support Tracker.
414 As part of that rename many URLs were changed to reflect the new
415 terminology. We provide redirect from the old names to the new ones.
416
417-== Answer Contact Page ==
418+Answer Contact Page
419+-------------------
420
421 >>> user_browser.open('http://launchpad.test/firefox/+support-contact')
422 >>> print(user_browser.url)
423 http://answers.launchpad.test/firefox/+answer-contact
424
425-== Add Question Page ==
426+Add Question Page
427+-----------------
428
429 >>> user_browser.open('http://launchpad.test/firefox/+addticket')
430 >>> print(user_browser.url)
431@@ -20,19 +23,22 @@ terminology. We provide redirect from the old names to the new ones.
432 >>> print(user_browser.url)
433 http://answers.launchpad.test/mozilla/+addquestion
434
435-== My Questions Page ==
436+My Questions Page
437+-----------------
438
439 >>> user_browser.open('http://launchpad.test/firefox/+mytickets')
440 >>> print(user_browser.url)
441 http://answers.launchpad.test/firefox/+myquestions
442
443-== Questions Listing ==
444+Questions Listing
445+-----------------
446
447 >>> browser.open('http://launchpad.test/firefox/+tickets')
448 >>> print(browser.url)
449 http://answers.launchpad.test/firefox/+questions
450
451-== Question Page ==
452+Question Page
453+-------------
454
455 >>> browser.open('http://launchpad.test/firefox/+ticket/1')
456 >>> print(browser.url)
457@@ -42,7 +48,8 @@ terminology. We provide redirect from the old names to the new ones.
458 >>> print(browser.url)
459 http://api.launchpad.test/devel/firefox/+question/1
460
461-== Person Questions Listing ==
462+Person Questions Listing
463+------------------------
464
465 >>> browser.open('http://launchpad.test/~name12/+tickets')
466 >>> print(browser.url)
467@@ -73,7 +80,8 @@ terminology. We provide redirect from the old names to the new ones.
468 http://answers.launchpad.test/~name12/+subscribedquestions
469
470
471-== Unsupported questions ==
472+Unsupported questions
473+---------------------
474
475 The Unsupported View is irrelevant. The question search page provides
476 links to the +by-language pages that have unsolved questions.
477@@ -83,7 +91,8 @@ links to the +by-language pages that have unsolved questions.
478 http://answers.launchpad.test/ubuntu/+questions
479
480
481-== Enumeration changes in search URLs ==
482+Enumeration changes in search URLs
483+----------------------------------
484
485 The switch from dbschema to lazr based enums changed the values of
486 status and sort from titles to uppercase tokens in the search URLs.
487diff --git a/lib/lp/answers/stories/question-edit.txt b/lib/lp/answers/stories/question-edit.txt
488index be19a95..ef36a05 100644
489--- a/lib/lp/answers/stories/question-edit.txt
490+++ b/lib/lp/answers/stories/question-edit.txt
491@@ -1,4 +1,5 @@
492-= Editing Questions =
493+Editing Questions
494+=================
495
496 To edit the title and description of question, one uses the 'Edit
497 Question' menu item. You need to be logged in to see the edit form, and
498@@ -61,7 +62,8 @@ You can even modify the title and description of 'Answered' and
499 <Link...>
500
501
502-== Source Package ==
503+Source Package
504+--------------
505
506 Distribution questions can have a source package associated with them.
507 Any logged in user can change the question source package on the
508@@ -82,7 +84,8 @@ Product questions ignore sourcepackage information if it is submitted:
509 >>> user_browser.getControl('Save Changes').click()
510
511
512-== Changing Other Metadata ==
513+Changing Other Metadata
514+-----------------------
515
516 A user with 'launchpad.Admin' privilege (usually the product or
517 distribution owner) can also change the question Assignee, and
518diff --git a/lib/lp/answers/stories/question-message.txt b/lib/lp/answers/stories/question-message.txt
519index 0afd96b..50e9a8c 100644
520--- a/lib/lp/answers/stories/question-message.txt
521+++ b/lib/lp/answers/stories/question-message.txt
522@@ -1,4 +1,5 @@
523-= Question messages =
524+Question messages
525+=================
526
527 Question messages are plain text. They are formatted as HTML for web
528 pages. Many messages originate from emails where unwanted or
529@@ -31,7 +32,8 @@ quoted passage, and a signature with an email address in it.
530 >>> user_browser.getControl('Add Information Request').click()
531
532
533-== Email addresses are only shown to authenticated users ==
534+Email addresses are only shown to authenticated users
535+-----------------------------------------------------
536
537 Email addresses are visible to authenticated users. Sample Person is
538 authenticated already, so they will see 'human@somewhere.org'.
539@@ -63,7 +65,8 @@ see the obfuscated email address (<email address hidden>).
540 Witty signatures rock!
541
542
543-== Signatures and quoted passages are hidden ==
544+Signatures and quoted passages are hidden
545+-----------------------------------------
546
547 The style and script in the user_browser control the display and
548 behaviour of content inside tags with the class 'foldable'. The script
549diff --git a/lib/lp/answers/stories/question-obfuscation.txt b/lib/lp/answers/stories/question-obfuscation.txt
550index 87133b1..f6a23c9 100644
551--- a/lib/lp/answers/stories/question-obfuscation.txt
552+++ b/lib/lp/answers/stories/question-obfuscation.txt
553@@ -1,4 +1,5 @@
554-= Question obfuscation =
555+Question obfuscation
556+====================
557
558 Launchpad obfuscates email addresses when pages are viewed by
559 anonymous users to prevent address harvesting by spammers. Logged
560@@ -6,7 +7,8 @@ in users can see the email address in Question descriptions.
561 See question-message.txt for additional documentation.
562
563
564-== Logged in users can see email addresses ==
565+Logged in users can see email addresses
566+---------------------------------------
567
568 No Privileges Person can see the email address in the tooltip of the
569 questions in the Latest questions solved portlet on the Answers
570@@ -87,7 +89,8 @@ description. They can then see the email address in the tooltip in the
571 ...
572
573
574-== Anonymous users cannot see email addresses ==
575+Anonymous users cannot see email addresses
576+------------------------------------------
577
578 Anonymous cannot see the email address anywhere on the Answers front
579 page.
580diff --git a/lib/lp/answers/stories/question-reject-and-change-status.txt b/lib/lp/answers/stories/question-reject-and-change-status.txt
581index ece123c..c7466fd 100644
582--- a/lib/lp/answers/stories/question-reject-and-change-status.txt
583+++ b/lib/lp/answers/stories/question-reject-and-change-status.txt
584@@ -1,4 +1,5 @@
585-= Rejecting Questions =
586+Rejecting Questions
587+===================
588
589 Answer contacts and administrators can reject a question.
590 This should be done when the question isn't an actual pertinent question
591@@ -87,7 +88,8 @@ stating that the question is already rejected:
592 ... print(message.decode_contents())
593 The question is already rejected.
594
595-= Changing the Question Status =
596+Changing the Question Status
597+============================
598
599 In the previous example, that rejection was clearly a mistake: you
600 shouldn't reject a question because it is related to a bug, for these
601diff --git a/lib/lp/answers/stories/question-search-multiple-languages.txt b/lib/lp/answers/stories/question-search-multiple-languages.txt
602index aaa1ccc..5188300 100644
603--- a/lib/lp/answers/stories/question-search-multiple-languages.txt
604+++ b/lib/lp/answers/stories/question-search-multiple-languages.txt
605@@ -1,4 +1,5 @@
606-= Searching Questions in Multiple Languages =
607+Searching Questions in Multiple Languages
608+=========================================
609
610 By default, only questions written in English or one of the user
611 preferred languages are listed and searched.
612@@ -10,7 +11,8 @@ African IP address, since we'll use that later.
613 >>> user_browser.addHeader('X_FORWARDED_FOR', '196.36.161.227')
614
615
616-== Anonymous searching ==
617+Anonymous searching
618+-------------------
619
620 For example, a user who isn't logged in will only see questions
621 written in English, in one of the language configured in their browser,
622@@ -154,7 +156,8 @@ then questions with those language will be displayed:
623 Installation failed
624
625
626-== Authenticated searching ==
627+Authenticated searching
628+-----------------------
629
630 Authenticated users without preferred languages are assumed to have
631 the languages determined by what their browser sends in the
632@@ -261,7 +264,8 @@ English, and can use it to locate English questions.
633 Slow system
634
635
636-== Questions by language ==
637+Questions by language
638+---------------------
639
640 When open questions are in languages that no answer contacts
641 speak, the project questions page displays links to see those
642@@ -308,7 +312,8 @@ the preceding page.
643 The page in all other respects behaves like a question search page.
644
645
646-== My questions ignores preferred languages ==
647+My questions ignores preferred languages
648+----------------------------------------
649
650 The "My questions" view ignores the user's language preferences, because
651 they may change them over time, but they must always see their questions. For
652diff --git a/lib/lp/answers/stories/question-subscriptions.txt b/lib/lp/answers/stories/question-subscriptions.txt
653index 3ceaf6a..e4e6b2e 100644
654--- a/lib/lp/answers/stories/question-subscriptions.txt
655+++ b/lib/lp/answers/stories/question-subscriptions.txt
656@@ -1,10 +1,12 @@
657-= Question Subscriptions =
658+Question Subscriptions
659+======================
660
661 Users can subscribe to specific questions. When they are subscribed they
662 will receive notifications for any changes to the question.
663
664
665-== Subscribing ==
666+Subscribing
667+-----------
668
669 To subscribe, users use the 'Subscribe' link and then confirm that
670 they want to subscribe by clicking on the 'Subscribe' button. The user
671@@ -27,7 +29,8 @@ A message confirming that they were subscribed is displayed:
672 You have subscribed to this question.
673
674
675-== Unsubscribing ==
676+Unsubscribing
677+-------------
678
679 When the user is subscribed to the question, the 'Subscribe' link
680 becomes an 'Unsubscribe' link. To unsubscribe, the user follows that
681@@ -49,7 +52,8 @@ A confirmation is displayed:
682 You have unsubscribed from this question.
683
684
685-== Subscribing While Posting A Message ==
686+Subscribing While Posting A Message
687+-----------------------------------
688
689 It is also possible to subscribe at the same time than posting a message
690 on an existing question. The user can simply check the 'Email me future
691diff --git a/lib/lp/answers/stories/this-is-a-faq.txt b/lib/lp/answers/stories/this-is-a-faq.txt
692index 3164116..ec9e715 100644
693--- a/lib/lp/answers/stories/this-is-a-faq.txt
694+++ b/lib/lp/answers/stories/this-is-a-faq.txt
695@@ -1,4 +1,5 @@
696-= Link to a FAQ =
697+Link to a FAQ
698+=============
699
700 Even though similar questions are shown when a user creates a new
701 question, common questions still happen for a number of reasons.
702@@ -6,7 +7,8 @@ The Answer Tracker can be used to manage common answers
703 (a.k.a. Frequently Asked Question - FAQ) which can be used to answer
704 a particular question.
705
706-== Fix up sample data ==
707+Fix up sample data
708+------------------
709
710 The sample data has question titles which perform poorly with the sample data's
711 answers in fulltext searching, using efficient tsearch2 queries; we are going
712@@ -23,7 +25,8 @@ permits better matching. See bug 612384.
713 >>> logout()
714
715
716-== Linking to a FAQ ==
717+Linking to a FAQ
718+----------------
719
720 Any logged in user can use the 'Link to a FAQ' action item to link
721 the question to an existing FAQ.
722@@ -140,7 +143,8 @@ The answer message was added to the question's discussion:
723 FAQ #10: \u201cHow do I install plugins...
724
725
726-== Modifying the FAQ ==
727+Modifying the FAQ
728+-----------------
729
730 The link to the FAQ can be changed by using the same 'Link to a FAQ'
731 option. Continuing on the previous example, the user went on to read
732@@ -193,7 +197,8 @@ The link was also removed from the details portlet:
733 Related FAQ: None ...
734
735
736-== Creating a new FAQ ==
737+Creating a new FAQ
738+------------------
739
740 When no existing FAQs are relevant, it is possible to create a new FAQ
741 from the same 'Link to a FAQ' action. But this option is reserved to
742@@ -289,7 +294,8 @@ description:
743 Related FAQ: Displaying SVG in Firefox ...
744
745
746-== Viewing a FAQ ==
747+Viewing a FAQ
748+-------------
749
750 From a question page which has a related FAQ, the user can click on the
751 FAQ title to display the FAQ content.
752@@ -328,7 +334,8 @@ the FAQ:
753 http://answers.launchpad.test/firefox/+question/2
754
755
756-== Distribution and Source Packages ==
757+Distribution and Source Packages
758+--------------------------------
759
760 Questions asked about a distribution or distribution source package
761 can also be linked to FAQs.
762@@ -351,7 +358,8 @@ can also be linked to FAQs.
763 'Is question #8 a FAQ...
764
765
766-== Solved questions can be linked to a FAQ ==
767+Solved questions can be linked to a FAQ
768+---------------------------------------
769
770 When linking a solved question to a FAQ the action is treated as a
771 comment.
772@@ -397,7 +405,8 @@ discussion.
773 FAQ #6: ...How can I play MP3/Divx/DVDs/Quicktime/Realmedia files...
774
775
776-== FAQs are links ==
777+FAQs are links
778+--------------
779
780 You can respond to a question by pointing people to a FAQ. FAQs are
781 linkified as you would expect! You can use the "this is a FAQ" menu
782diff --git a/lib/lp/app/doc/displaying-numbers.txt b/lib/lp/app/doc/displaying-numbers.txt
783index eb1069b..fcdd4e0 100644
784--- a/lib/lp/app/doc/displaying-numbers.txt
785+++ b/lib/lp/app/doc/displaying-numbers.txt
786@@ -1,8 +1,10 @@
787-= Displaying Numbers with ZPT =
788+Displaying Numbers with ZPT
789+===========================
790
791 >>> from lp.testing import test_tales
792
793-== bytes: Byte contractions ==
794+bytes: Byte contractions
795+------------------------
796
797 The TALES formatter for numbers allows them to be rendered as byte
798 contractions as per IEC60027-2:
799@@ -37,7 +39,8 @@ that (thank god!)
800 >>> test_tales('foo/fmt:bytes', foo=123456789012345678901234567890)
801 '102121.1 YiB'
802
803-== float: Float formatting ==
804+float: Float formatting
805+-----------------------
806
807 There's a method that allows formatting float values in TAL analogously
808 to how the Python "%f" string formatter works:
809diff --git a/lib/lp/app/doc/launchpadform.txt b/lib/lp/app/doc/launchpadform.txt
810index e79a5ec..5bf686b 100644
811--- a/lib/lp/app/doc/launchpadform.txt
812+++ b/lib/lp/app/doc/launchpadform.txt
813@@ -1,4 +1,5 @@
814-= LaunchpadFormView =
815+LaunchpadFormView
816+=================
817
818 LaunchpadFormView is a base class for form views in Launchpad. It is
819 intended as a replacement for GeneralFormView.
820@@ -39,7 +40,8 @@ There is also a LaunchpadEditFormView class to make it easier to write
821 edit views.
822
823
824-== The Schema ==
825+The Schema
826+----------
827
828 The schema can be an interface implemented by your content object, or
829 an interface specifically tailored for data entry. Below is an
830@@ -77,7 +79,8 @@ A form that handles all fields in the schema needs only set the
831 ['name', 'displayname', 'password']
832
833
834-== Restricting Displayed Fields ==
835+Restricting Displayed Fields
836+----------------------------
837
838 The list of fields can be restricted with the "field_names" attribute:
839
840@@ -93,7 +96,8 @@ The list of fields can be restricted with the "field_names" attribute:
841 ['name', 'displayname']
842
843
844-== Custom Adapters ==
845+Custom Adapters
846+---------------
847
848 Sometimes a schema is used for a form that is not actually implemented
849 by the context widget. This can be handled by providing some custom
850@@ -123,7 +127,8 @@ should in turn have the FormTest instance as a context:
851 True
852
853
854-== Custom Widgets ==
855+Custom Widgets
856+--------------
857
858 In some cases we will want to use a custom widget for a particular
859 field. These can be installed easily with a "custom_widget_NAME"
860@@ -150,7 +155,8 @@ attribute:
861 <...TextWidget object at ...>
862
863
864-== Using Another Context ==
865+Using Another Context
866+---------------------
867
868 setUpWidgets() uses the view's context by default when setting up the
869 widgets, but it's also possible to specify the context explicitly.
870@@ -167,7 +173,8 @@ widgets, but it's also possible to specify the context explicitly.
871 True
872
873
874-== Actions ==
875+Actions
876+-------
877
878 In order for a form to accept submissions, it will need one or more
879 submit actions. These are added to the view class using the "action"
880@@ -201,7 +208,8 @@ method. Instead, it should be performed in the validate() method, or
881 in per-field validators.
882
883
884-== Form Wide Validation ==
885+Form Wide Validation
886+--------------------
887
888 While constraints on individual fields and schema invariants can catch
889 the majority of input errors, in some cases it is necessary to
890@@ -319,7 +327,8 @@ The default behaviour is to validate all widgets.
891 Password: Required input is missing.
892
893
894-== Redirect URL ==
895+Redirect URL
896+------------
897
898 If the form is successfully posted, then LaunchpadFormView will
899 redirect the user to another URL. The URL is specified by the
900@@ -348,7 +357,8 @@ redirect the user to another URL. The URL is specified by the
901 http://www.ubuntu.com/
902
903
904-== Form Rendering ==
905+Form Rendering
906+--------------
907
908 (Let's define the view for the rendering tests.)
909 >>> class RenderFormTest(LaunchpadFormView):
910@@ -414,7 +424,8 @@ This is also true of failure handlers:
911 Some errors occured.
912
913
914-== Initial Focused Widget ==
915+Initial Focused Widget
916+----------------------
917
918 The standard template for LaunchpadFormView can set the initial focus
919 on a form element. This is achieved by some javascript that gets run
920@@ -461,7 +472,8 @@ error, the generated script will focus the first widget with an error:
921 // -->
922
923
924-== Hidden widgets ==
925+Hidden widgets
926+--------------
927
928 Any widget can be hidden in a LaunchpadFormView while still having its
929 value POSTed with the values of the other (visible) ones. The widget's
930@@ -513,7 +525,8 @@ using its hidden() method, which should return a hidden <input> tag.
931 >>> os.remove(filename)
932
933
934-== Safe Actions ==
935+Safe Actions
936+------------
937
938 By default, LaunchpadFormView requires that form submissions be done
939 via POST requests. There are a number of reasons for this:
940@@ -580,7 +593,8 @@ In contrast, the "search" action can be submitted with a GET request:
941
942
943
944-== LaunchpadEditFormView ==
945+LaunchpadEditFormView
946+---------------------
947
948 The LaunchpadEditFormView differs from LaunchpadFormView in the
949 following ways:
950diff --git a/lib/lp/app/doc/tales-email-formatting.txt b/lib/lp/app/doc/tales-email-formatting.txt
951index 8c5fc79..0dd70cb 100644
952--- a/lib/lp/app/doc/tales-email-formatting.txt
953+++ b/lib/lp/app/doc/tales-email-formatting.txt
954@@ -1,4 +1,5 @@
955-= TALES email formatting =
956+TALES email formatting
957+======================
958
959 There are many edge-cases when marking up email text for presentation.
960 There is subtle differences in how people quote text that must be
961@@ -12,7 +13,8 @@ First, let's bring in a small helper function:
962
963 >>> from lp.testing import test_tales
964
965-== Quoting styles ==
966+Quoting styles
967+--------------
968
969 Paragraphs that mix quoted and reply text fold only the quoted lines.
970
971@@ -100,7 +102,8 @@ wrapped in a foldable-quoted span.
972 </span></p>
973
974
975-== Python interpreter and dpkg handling ==
976+Python interpreter and dpkg handling
977+------------------------------------
978
979 The output from the Python interpreter is not quoted text. Passages
980 of text that start with '>>> ' are exempted from the 'foldable-quoted'
981diff --git a/lib/lp/app/doc/validation.txt b/lib/lp/app/doc/validation.txt
982index 7244fe5..3eff615 100644
983--- a/lib/lp/app/doc/validation.txt
984+++ b/lib/lp/app/doc/validation.txt
985@@ -1,6 +1,8 @@
986-= Validation =
987+Validation
988+==========
989
990-== LaunchpadValidationError ==
991+LaunchpadValidationError
992+------------------------
993
994 LaunchpadValidationError is the standard exception used for custom
995 validators upon a validation error. Rendering one is done by getting
996diff --git a/lib/lp/app/stories/basics/marketing.txt b/lib/lp/app/stories/basics/marketing.txt
997index 714be3a..eeb08b6 100644
998--- a/lib/lp/app/stories/basics/marketing.txt
999+++ b/lib/lp/app/stories/basics/marketing.txt
1000@@ -1,4 +1,5 @@
1001-= Launchpad tour =
1002+Launchpad tour
1003+==============
1004
1005 From Launchpad's front page, you can access the tour.
1006
1007@@ -50,7 +51,8 @@ But the source directory isn't available:
1008 zope.publisher.interfaces.NotFound: ...
1009
1010
1011-== +about compatibility ==
1012++about compatibility
1013+--------------------
1014
1015 Each application used to have an introduction living at +about, this is
1016 now redirected to the relevant tour page.
1017@@ -80,7 +82,8 @@ now redirected to the relevant tour page.
1018 http://launchpad.test/+tour/community-support
1019
1020
1021-== +tour compatibility ==
1022++tour compatibility
1023+-------------------
1024
1025 Similarly, each application has their +tour redirecting to their proper
1026 tour page.
1027@@ -110,7 +113,8 @@ tour page.
1028 http://launchpad.test/+tour/community-support
1029
1030
1031-== +faq compatibility ==
1032++faq compatibility
1033+------------------
1034
1035 Each application also had a +faq link, that link is also redirected to
1036 the appropriate tour page.
1037@@ -136,13 +140,15 @@ the appropriate tour page.
1038 http://launchpad.test/+tour/community-support
1039
1040
1041-== Links to tour on application main page ==
1042+Links to tour on application main page
1043+--------------------------------------
1044
1045 Each application home page features a 'Take a tour' button that brings
1046 the user to the appropriate tour page.
1047
1048
1049-=== Code ===
1050+Code
1051+....
1052
1053 >>> browser.open('http://code.launchpad.test')
1054 >>> tour_link = browser.getLink('Take a tour')
1055@@ -151,7 +157,8 @@ the user to the appropriate tour page.
1056 >>> tour_link.click()
1057
1058
1059-=== Bugs ===
1060+Bugs
1061+....
1062
1063 >>> browser.open('http://bugs.launchpad.test')
1064 >>> tour_link = browser.getLink('take a tour')
1065@@ -160,7 +167,8 @@ the user to the appropriate tour page.
1066 >>> tour_link.click()
1067
1068
1069-=== Blueprints ===
1070+Blueprints
1071+..........
1072
1073 >>> browser.open('http://blueprints.launchpad.test')
1074 >>> tour_link = browser.getLink('Take a tour')
1075@@ -169,7 +177,8 @@ the user to the appropriate tour page.
1076 >>> tour_link.click()
1077
1078
1079-=== Translations ===
1080+Translations
1081+............
1082
1083 >>> browser.open('http://translations.launchpad.test')
1084 >>> tour_link = browser.getLink('Take a tour')
1085@@ -178,7 +187,8 @@ the user to the appropriate tour page.
1086 >>> tour_link.click()
1087
1088
1089-=== Answers ===
1090+Answers
1091+.......
1092
1093 >>> browser.open('http://answers.launchpad.test')
1094 >>> tour_link = browser.getLink('Take a tour')
1095diff --git a/lib/lp/app/stories/basics/max-batch-size.txt b/lib/lp/app/stories/basics/max-batch-size.txt
1096index 9bd585b..ce3d44b 100644
1097--- a/lib/lp/app/stories/basics/max-batch-size.txt
1098+++ b/lib/lp/app/stories/basics/max-batch-size.txt
1099@@ -1,4 +1,5 @@
1100-= Invalid batch size =
1101+Invalid batch size
1102+==================
1103
1104 To prevent users from exhausting server resources, pages that use
1105 batching have a maximum on the batch size. For example, requesting 1000
1106diff --git a/lib/lp/app/stories/basics/user-requested-oops.txt b/lib/lp/app/stories/basics/user-requested-oops.txt
1107index d2475a0..0be69d2 100644
1108--- a/lib/lp/app/stories/basics/user-requested-oops.txt
1109+++ b/lib/lp/app/stories/basics/user-requested-oops.txt
1110@@ -1,4 +1,5 @@
1111-= Requesting an OOPS from Launchpad =
1112+Requesting an OOPS from Launchpad
1113+=================================
1114
1115 OOPSes happen from time to time in Launchpad, and they contain lots of
1116 interesting information for helping debug. Sometimes though it is useful to
1117diff --git a/lib/lp/app/stories/basics/xx-dbpolicy.txt b/lib/lp/app/stories/basics/xx-dbpolicy.txt
1118index 1d42045..433973f 100644
1119--- a/lib/lp/app/stories/basics/xx-dbpolicy.txt
1120+++ b/lib/lp/app/stories/basics/xx-dbpolicy.txt
1121@@ -1,4 +1,5 @@
1122-= Application Server Database Policy =
1123+Application Server Database Policy
1124+==================================
1125
1126 The database policy chooses the default Storm store to used. Its goal
1127 is to distribute load away from the master databases to read only
1128diff --git a/lib/lp/app/stories/basics/xx-developerexceptions.txt b/lib/lp/app/stories/basics/xx-developerexceptions.txt
1129index a8d08b6..ee8c170 100644
1130--- a/lib/lp/app/stories/basics/xx-developerexceptions.txt
1131+++ b/lib/lp/app/stories/basics/xx-developerexceptions.txt
1132@@ -1,4 +1,5 @@
1133-= Developer exceptions =
1134+Developer exceptions
1135+====================
1136
1137 Launchpad developers get tracebacks and a linkified OOPS if an exception
1138 occurs. Other users get no traceback and only the OOPS ID.
1139@@ -96,7 +97,8 @@ unregister the adapter.
1140 >>> error_view_fixture.cleanUp()
1141
1142
1143-= http handle_errors =
1144+http handle_errors
1145+==================
1146
1147 lp.testing.pages.http accepts the handle_errors parameter in case you
1148 want to see tracebacks instead of error pages.
1149diff --git a/lib/lp/app/stories/basics/xx-lowercase-redirection.txt b/lib/lp/app/stories/basics/xx-lowercase-redirection.txt
1150index 394eda3..b477fe3 100644
1151--- a/lib/lp/app/stories/basics/xx-lowercase-redirection.txt
1152+++ b/lib/lp/app/stories/basics/xx-lowercase-redirection.txt
1153@@ -1,4 +1,5 @@
1154-= Redirection of Mixed Case paths =
1155+Redirection of Mixed Case paths
1156+===============================
1157
1158 When someone visits a page such as http://launchpad.net/jOkOshEr
1159 launchpad does a permanent redirect to the lowercase path:
1160diff --git a/lib/lp/app/stories/basics/xx-maintenance-message.txt b/lib/lp/app/stories/basics/xx-maintenance-message.txt
1161index 51a2a7f..6416bbf 100644
1162--- a/lib/lp/app/stories/basics/xx-maintenance-message.txt
1163+++ b/lib/lp/app/stories/basics/xx-maintenance-message.txt
1164@@ -1,4 +1,5 @@
1165-= Launchpad maintenance messages =
1166+Launchpad maintenance messages
1167+==============================
1168
1169 A system adminstrator can write an iso format timestamp to the file
1170 "+maintenancetime.txt" in the launchpad application root directory.
1171@@ -95,7 +96,8 @@ Remove +maintenancetime.txt to clean up.
1172 >>> os.remove('+maintenancetime.txt')
1173
1174
1175-== Per-page maintenance messages ==
1176+Per-page maintenance messages
1177+-----------------------------
1178
1179 Alternatively, a maintenance message can be set in the
1180 app.maintenance_message feature flag, which can be scoped to particular
1181diff --git a/lib/lp/app/stories/folder.txt b/lib/lp/app/stories/folder.txt
1182index 8ebd441..8124932 100644
1183--- a/lib/lp/app/stories/folder.txt
1184+++ b/lib/lp/app/stories/folder.txt
1185@@ -1,9 +1,11 @@
1186-= Serving directories of files =
1187+Serving directories of files
1188+============================
1189
1190 LAZR adds special views that can be used to serve all the files under a
1191 particular directory.
1192
1193-== ExportedFolder ==
1194+ExportedFolder
1195+--------------
1196
1197 This is the base implementation. To export a directory, you need to
1198 subclass that view and provide a folder property returning the path of
1199@@ -99,7 +101,8 @@ As requesting a non-existent file.
1200 zope.publisher.interfaces.NotFound: ...
1201
1202
1203-== ExportedImageFolder ==
1204+ExportedImageFolder
1205+-------------------
1206
1207 For images, it's often convenient not to request the extension. There is
1208 an ExportedImageFolder subclass, that will accept serving an image file
1209@@ -140,7 +143,8 @@ If a file without extension exists, that one will be served.
1210 Image with extension
1211
1212
1213-== Exporting trees ==
1214+Exporting trees
1215+---------------
1216
1217 By default ExportedFolder doesn't export contained folders, but if the
1218 export_subdirectories is set to True, it will allow traversing to
1219@@ -201,7 +205,8 @@ NotFound.
1220 zope.publisher.interfaces.NotFound: ...
1221
1222
1223-== Clean-up ==
1224+Clean-up
1225+--------
1226
1227 >>> import shutil
1228 >>> shutil.rmtree(resource_dir)
1229diff --git a/lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt b/lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt
1230index bf0dd16..3f1771a 100644
1231--- a/lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt
1232+++ b/lib/lp/app/stories/launchpad-root/xx-featuredprojects.txt
1233@@ -1,5 +1,6 @@
1234
1235-= Featured Projects =
1236+Featured Projects
1237+=================
1238
1239 We maintain a list of featured projects, which are displayed on the home
1240 page and managed via a special admin-only page.
1241@@ -7,7 +8,8 @@ page and managed via a special admin-only page.
1242 >>> MANAGE_LINK = "Manage featured project list"
1243
1244
1245-== The home page listing ==
1246+The home page listing
1247+---------------------
1248
1249 Featured projects are visible to everyone on the home page. One poject is
1250 featured as "project of the day" depending on the current day. As we do not
1251@@ -44,7 +46,8 @@ projects' pages in Launchpad. The "project of the day" is listed separately.
1252 Mozilla Thunderbird
1253 Ubuntu
1254
1255-== Adding a featured project ==
1256+Adding a featured project
1257+-------------------------
1258
1259 Anonymous users cannot see the link to administer featured projects:
1260
1261@@ -112,7 +115,8 @@ is now at index '4' and is therefore displayed as the top project:
1262 Mozilla Thunderbird
1263 Ubuntu
1264
1265-== Removing a project ==
1266+Removing a project
1267+------------------
1268
1269 >>> admin_browser.getLink(MANAGE_LINK).click()
1270 >>> admin_browser.getControl('Apache').click()
1271diff --git a/lib/lp/app/widgets/doc/announcement-date-widget.txt b/lib/lp/app/widgets/doc/announcement-date-widget.txt
1272index c6ac676..b33fcaa 100644
1273--- a/lib/lp/app/widgets/doc/announcement-date-widget.txt
1274+++ b/lib/lp/app/widgets/doc/announcement-date-widget.txt
1275@@ -1,4 +1,5 @@
1276-= AnnouncementDateWidget =
1277+AnnouncementDateWidget
1278+======================
1279
1280 This widget combines radio buttons and a DateTimeWidget. It allows you to
1281 choose to publish an announcement immediately, at a predetermined date in the
1282diff --git a/lib/lp/app/widgets/doc/lower-case-text-widget.txt b/lib/lp/app/widgets/doc/lower-case-text-widget.txt
1283index eb84fe1..d9a0237 100644
1284--- a/lib/lp/app/widgets/doc/lower-case-text-widget.txt
1285+++ b/lib/lp/app/widgets/doc/lower-case-text-widget.txt
1286@@ -1,4 +1,5 @@
1287-= LowerCaseTextWidget =
1288+LowerCaseTextWidget
1289+===================
1290
1291 This custom widget is used to convert strings to lower case.
1292
1293diff --git a/lib/lp/app/widgets/doc/noneable-text-widgets.txt b/lib/lp/app/widgets/doc/noneable-text-widgets.txt
1294index 911a9e3..85ca174 100644
1295--- a/lib/lp/app/widgets/doc/noneable-text-widgets.txt
1296+++ b/lib/lp/app/widgets/doc/noneable-text-widgets.txt
1297@@ -1,10 +1,12 @@
1298-= Noneable widgets =
1299+Noneable widgets
1300+================
1301
1302 In the spirit of Postel's Law, the Noneable widgets permits users to enter
1303 just whitespace, while ensuring that the schema's field value is None.
1304
1305
1306-== Noneable TextLine widget ==
1307+Noneable TextLine widget
1308+------------------------
1309
1310 This custom widget is used to normalise the value of meaning less
1311 text value to None.
1312@@ -36,7 +38,8 @@ Excess whitespace and newlines are stripped.
1313 flower
1314
1315
1316-== Noneable Description widget ==
1317+Noneable Description widget
1318+---------------------------
1319
1320 This custom widget is used to normalise the value of meaning less
1321 text value to None.
1322diff --git a/lib/lp/app/widgets/doc/project-scope-widget.txt b/lib/lp/app/widgets/doc/project-scope-widget.txt
1323index 8816009..e0bf442 100644
1324--- a/lib/lp/app/widgets/doc/project-scope-widget.txt
1325+++ b/lib/lp/app/widgets/doc/project-scope-widget.txt
1326@@ -1,4 +1,5 @@
1327-= The Project Scope Widget =
1328+The Project Scope Widget
1329+========================
1330
1331 Many application front pages contain a search form. The search
1332 can usually be across the whole Launchpad or only in one project.
1333@@ -74,7 +75,8 @@ By default, the 'All projects' scope is selected:
1334 One project:
1335 ...
1336
1337-== Selecting All Projects ==
1338+Selecting All Projects
1339+----------------------
1340
1341 When the 'All projects' option is selected, the widget returns None.
1342
1343@@ -88,7 +90,8 @@ When the 'All projects' option is selected, the widget returns None.
1344 >>> widget.getInputValue() is None
1345 True
1346
1347-== Selecting One Project ==
1348+Selecting One Project
1349+---------------------
1350
1351 If we select a project, the project with that name is returned
1352 by getInputValue().
1353@@ -159,7 +162,8 @@ If no project name is given at all, a widget error is also raised:
1354 >>> print(widget.error())
1355 Please enter a project name
1356
1357-== setRenderedValue() ==
1358+setRenderedValue()
1359+------------------
1360
1361 In order to initialize the widget with a value, setRenderedValue() is
1362 used. Passing a product to it will select the 'One project' radio
1363@@ -197,7 +201,8 @@ Setting the scope to None, will default to the 'All projects' option.
1364 type="radio" value="all" />
1365 ...
1366
1367-== getScope() and partial queries ==
1368+getScope() and partial queries
1369+------------------------------
1370
1371 In some cases, forms with a ProjectScopeWidget are requested by bots
1372 which incorrectly build the query string without without the `scope`
1373diff --git a/lib/lp/app/widgets/doc/tokens-text-widget.txt b/lib/lp/app/widgets/doc/tokens-text-widget.txt
1374index e51ff15..040b911 100644
1375--- a/lib/lp/app/widgets/doc/tokens-text-widget.txt
1376+++ b/lib/lp/app/widgets/doc/tokens-text-widget.txt
1377@@ -1,4 +1,5 @@
1378-= Tokens TextLine Widget =
1379+Tokens TextLine Widget
1380+======================
1381
1382 This custom widget is used to normalise the space between words,
1383 strip punctuation, and strip leading and trailing whitespace.
1384diff --git a/lib/lp/app/widgets/doc/zope3-widgets-use-form-ng.txt b/lib/lp/app/widgets/doc/zope3-widgets-use-form-ng.txt
1385index 241526d..5888dee 100644
1386--- a/lib/lp/app/widgets/doc/zope3-widgets-use-form-ng.txt
1387+++ b/lib/lp/app/widgets/doc/zope3-widgets-use-form-ng.txt
1388@@ -1,4 +1,5 @@
1389-= Zope Widgets use IBrowserFormNG =
1390+Zope Widgets use IBrowserFormNG
1391+===============================
1392
1393 Regular Zope widgets have the problem of failing with low-level
1394 exceptions (TypeError, AttributeError, ...) when the request contains
1395diff --git a/lib/lp/archivepublisher/tests/deathrow.txt b/lib/lp/archivepublisher/tests/deathrow.txt
1396index 92b4381..4d77654 100644
1397--- a/lib/lp/archivepublisher/tests/deathrow.txt
1398+++ b/lib/lp/archivepublisher/tests/deathrow.txt
1399@@ -1,4 +1,5 @@
1400-= Package Death Row =
1401+Package Death Row
1402+=================
1403
1404 We start by creating a pair of temporary directories to be used in
1405 this test.
1406@@ -29,7 +30,8 @@ The no-operation use case, reflects the sampledata status.
1407 DEBUG Marking 0 condemned packages as removed.
1408
1409
1410-== Removal unreferenced packages ==
1411+Removal unreferenced packages
1412+-----------------------------
1413
1414 Setup `SoyuzTestPublisher` for creating publications for Ubuntu/hoary.
1415
1416diff --git a/lib/lp/archiveuploader/tests/upload-path-parsing.txt b/lib/lp/archiveuploader/tests/upload-path-parsing.txt
1417index ea7666e..c4c998d 100644
1418--- a/lib/lp/archiveuploader/tests/upload-path-parsing.txt
1419+++ b/lib/lp/archiveuploader/tests/upload-path-parsing.txt
1420@@ -1,4 +1,5 @@
1421-= Upload path parsing =
1422+Upload path parsing
1423+===================
1424
1425 The upload path is used to decide in which context a uploaded package
1426 will be processed.
1427@@ -19,7 +20,8 @@ in several scenarios.
1428 ... print('Suite: %s' % suite_name)
1429
1430
1431-== Distribution uploads ==
1432+Distribution uploads
1433+--------------------
1434
1435 Upload placed on 'root', i.e, no 'relative_path' will be targeted to
1436 'ubuntu' primary archive.
1437@@ -74,7 +76,8 @@ is raised.
1438 lp.archiveuploader.uploadprocessor.UploadPathError: Could not find suite 'imaginary'.
1439
1440
1441-== PPA uploads ==
1442+PPA uploads
1443+-----------
1444
1445 An upload will be considered targeted to a PPA if the first path term
1446 starts with '~', then the subsequent text in this term will be looked
1447@@ -204,7 +207,8 @@ And the upload now found its way to the new named PPA.
1448 Suite: None
1449
1450
1451-== Non-sense upload paths ==
1452+Non-sense upload paths
1453+----------------------
1454
1455 Obviously upload paths can be completely bogus and the processing function
1456 identifies and warns users accordingly.
1457@@ -259,7 +263,8 @@ An old-style named PPA upload missing '~'.
1458 lp.archiveuploader.uploadprocessor.UploadPathError: Path format mismatch.
1459
1460
1461-== Binary uploads from build slaves ==
1462+Binary uploads from build slaves
1463+--------------------------------
1464
1465 A relative path for a binary upload from a build slave will have the
1466 following format: <archive_id>/<distribution_name> where archive_id
1467diff --git a/lib/lp/blueprints/stories/blueprints/xx-buglinks.txt b/lib/lp/blueprints/stories/blueprints/xx-buglinks.txt
1468index 6c4e692..04ea753 100644
1469--- a/lib/lp/blueprints/stories/blueprints/xx-buglinks.txt
1470+++ b/lib/lp/blueprints/stories/blueprints/xx-buglinks.txt
1471@@ -1,4 +1,5 @@
1472-= Linking Specs and Bugs =
1473+Linking Specs and Bugs
1474+======================
1475
1476 Specifications can be linked to bugs. Bug reports exposing problems that
1477 will be solved by the specification are likely candidates for such
1478@@ -16,7 +17,8 @@ the 'Related Bugs' section.
1479 Bug #1: Firefox does not support SVG New
1480
1481
1482-== Adding Links ==
1483+Adding Links
1484+------------
1485
1486 Linking a bug report to a specification is done by using the
1487 'Link to a bug report' link.
1488@@ -46,7 +48,8 @@ link.
1489 ...Reflow problems with complex page layouts...</div>
1490
1491
1492-== Removing Links ==
1493+Removing Links
1494+--------------
1495
1496 Oops, that was actually the wrong bug. So lets remove the link. This is
1497 done by using the 'Remove bug link' link.
1498diff --git a/lib/lp/blueprints/stories/blueprints/xx-dependencies.txt b/lib/lp/blueprints/stories/blueprints/xx-dependencies.txt
1499index 9b66034..9021466 100644
1500--- a/lib/lp/blueprints/stories/blueprints/xx-dependencies.txt
1501+++ b/lib/lp/blueprints/stories/blueprints/xx-dependencies.txt
1502@@ -1,4 +1,5 @@
1503-= Blueprint dependencies =
1504+Blueprint dependencies
1505+======================
1506
1507 Blueprints support the idea of dependencies: one blueprint can require
1508 another blueprint be complete before its own implementation can
1509@@ -18,7 +19,8 @@ itself.
1510 True
1511
1512
1513-== Adding a new dependency ==
1514+Adding a new dependency
1515+-----------------------
1516
1517 Let's add a new dependency for the "canvas" blueprint. We'll add the
1518 "extension-manager-upgrades" blueprint as a dependency. First, we
1519@@ -67,7 +69,8 @@ dependency.
1520 'http://blueprints.launchpad.test/firefox/+spec/canvas'
1521
1522
1523-== Removing a dependency ==
1524+Removing a dependency
1525+---------------------
1526
1527 But we don't want to keep that, so we will remove it as a dependency. First
1528 we make sure we can see the link to remove a dependency. We need to be
1529@@ -122,9 +125,11 @@ users with launchpad.Edit permission for the blueprint.
1530 zope.security.interfaces.Unauthorized: ...
1531
1532
1533-== Corner cases ==
1534+Corner cases
1535+------------
1536
1537-=== Cross-project blueprints ===
1538+Cross-project blueprints
1539+........................
1540
1541 Blueprints can only depend on blueprints in the same project. To
1542 show this, we register a blueprint for a different project.
1543@@ -152,7 +157,8 @@ blueprint we registered in jokosher.
1544 True
1545
1546
1547-=== Circular dependencies ===
1548+Circular dependencies
1549+.....................
1550
1551 In order to prevent circular dependencies, it is impossible to mark a
1552 blueprint A as depending on blueprint B, if B is already marked as
1553@@ -170,7 +176,8 @@ We know that "canvas" depends on "e4x". We try to make "e4x" depend on
1554 True
1555
1556
1557-=== Status ===
1558+Status
1559+......
1560
1561 It should be possible to indicate any blueprint as a dependency,
1562 regardless of its status. Let's mark mergewin as Implemented:
1563@@ -196,7 +203,8 @@ And ensure it works:
1564 'http://blueprints.launchpad.test/firefox/+spec/canvas'
1565
1566
1567-== Project dependency charts ==
1568+Project dependency charts
1569+-------------------------
1570
1571 We know that no blueprints depend on "canvas", but "canvas" depends on
1572 "e4x" and "e4x" depends on "svg-support". So the big picture is that
1573@@ -256,7 +264,8 @@ is useful for experimenting with the dot layout using production data.
1574 digraph "deptree" {
1575 ...
1576
1577-== Distro blueprints ==
1578+Distro blueprints
1579+-----------------
1580
1581 Let's look at blueprints targetting a distribution, rather than a product.
1582 We create two blueprints in `ubuntu`.
1583diff --git a/lib/lp/blueprints/stories/standalone/xx-batching.txt b/lib/lp/blueprints/stories/standalone/xx-batching.txt
1584index 0c3ca4c..619b246 100644
1585--- a/lib/lp/blueprints/stories/standalone/xx-batching.txt
1586+++ b/lib/lp/blueprints/stories/standalone/xx-batching.txt
1587@@ -1,4 +1,5 @@
1588-= Blueprint Batching =
1589+Blueprint Batching
1590+==================
1591
1592 For projects with large numbers of blueprints, it's important that users are
1593 able to navigate easily through those blueprints. It's also important for us
1594diff --git a/lib/lp/blueprints/stories/standalone/xx-informational-blueprints.txt b/lib/lp/blueprints/stories/standalone/xx-informational-blueprints.txt
1595index e2d67f8..0603ab6 100644
1596--- a/lib/lp/blueprints/stories/standalone/xx-informational-blueprints.txt
1597+++ b/lib/lp/blueprints/stories/standalone/xx-informational-blueprints.txt
1598@@ -1,4 +1,5 @@
1599-= Informational Blueprints =
1600+Informational Blueprints
1601+========================
1602
1603 Informational blueprints are blueprints for which no implementation is
1604 necessary, other than writing the blueprint itself. We track such blueprints
1605@@ -6,7 +7,8 @@ by setting their ''implementation_status'' to ''informational'' and using
1606 only their ''definition_status'' to follow change.
1607
1608
1609-== Tracking informational blueprints ==
1610+Tracking informational blueprints
1611+---------------------------------
1612
1613 When a blueprint does not require an implementation at all, it can be
1614 said to be ''informational'', and it isn't necessary to track its
1615@@ -38,7 +40,8 @@ The blueprint is displayed with the ''informational'' icon.
1616 <...Informational blueprint, no implementation necessary...>
1617
1618
1619-== Documentation ==
1620+Documentation
1621+-------------
1622
1623 An informational blueprint that has been approved, displays on the its
1624 project's documentation page.
1625diff --git a/lib/lp/bugs/browser/tests/buglinktarget-views.txt b/lib/lp/bugs/browser/tests/buglinktarget-views.txt
1626index 192d936..ed48965 100644
1627--- a/lib/lp/bugs/browser/tests/buglinktarget-views.txt
1628+++ b/lib/lp/bugs/browser/tests/buglinktarget-views.txt
1629@@ -1,4 +1,5 @@
1630-= IBugLinkTarget Views =
1631+IBugLinkTarget Views
1632+====================
1633
1634 The +linkbug and +unlinkbug views operates on IBugLinkTarget.
1635
1636@@ -24,7 +25,8 @@ The +linkbug and +unlinkbug views operates on IBugLinkTarget.
1637 >>> login('no-priv@canonical.com')
1638
1639
1640-== Link Bug View ==
1641+Link Bug View
1642+-------------
1643
1644 The +linkbug view is used to link bugs to IBugLinkTarget.
1645
1646@@ -72,7 +74,8 @@ A ObjectModifiedEvent was sent:
1647 >>> collected_events = []
1648
1649
1650-== Unlink Bugs View ==
1651+Unlink Bugs View
1652+----------------
1653
1654 (Link some other bugs first.)
1655 >>> link = cve.linkBug(bugset.get(2))
1656@@ -122,7 +125,8 @@ A ObjectModifiedEvent was sent:
1657 [1, 2, 3]
1658
1659
1660-== Bug titles are escaped in notifications ==
1661+Bug titles are escaped in notifications
1662+---------------------------------------
1663
1664 Bug titles may legitimately contain HTML markup, such as reporting that
1665 there is "Too much space between <h1> and <h2>". Notifications, like the
1666@@ -149,7 +153,8 @@ The notification contains the escaped bug title.
1667 ...&lt;script&gt;window.alert(&quot;Hello!&quot;)&lt;/script&gt;....
1668
1669
1670-== Cleanup ==
1671+Cleanup
1672+-------
1673
1674 (Deactivate the event listener.)
1675 >>> modified_listener.cleanUp()
1676diff --git a/lib/lp/bugs/browser/tests/bugtask-edit-views.txt b/lib/lp/bugs/browser/tests/bugtask-edit-views.txt
1677index 1896e5e..6dfeb04 100644
1678--- a/lib/lp/bugs/browser/tests/bugtask-edit-views.txt
1679+++ b/lib/lp/bugs/browser/tests/bugtask-edit-views.txt
1680@@ -1,10 +1,12 @@
1681-= Editing Bug Tasks =
1682+Editing Bug Tasks
1683+=================
1684
1685 A bugtask's status, assignee, package name, milestone, etc., can be
1686 modified on its +editstatus page.
1687
1688
1689-== Edit the Status ==
1690+Edit the Status
1691+---------------
1692
1693 Let's start simple and edit the status of a bug task logged in as Sample
1694 Person:
1695@@ -33,7 +35,8 @@ Person:
1696 'In Progress'
1697
1698
1699-== Edit the Package ==
1700+Edit the Package
1701+----------------
1702
1703 When editing the package of a distribution task, the user may enter
1704 either a binary or a source package name. We only deal with bugs on
1705@@ -91,7 +94,8 @@ exist in Launchpad. we'll get an error message.
1706 An error is reported to the user when a bug is retargeted and there is
1707 an existing task for the same target.
1708
1709-== Edit the Product ==
1710+Edit the Product
1711+----------------
1712
1713 +editstatus allows a bug to be retargeted to another product.
1714
1715@@ -141,7 +145,8 @@ If no product name is given, an error message is displayed.
1716 ('product', 'Project', RequiredMissing('product'))
1717
1718
1719-== Bug Watch Linkage ==
1720+Bug Watch Linkage
1721+-----------------
1722
1723 Let's edit a bugtask which is linked to a remote bug. The most
1724 important thing to edit is the bug watch, since it controls the status
1725@@ -204,7 +209,8 @@ set to their default values:
1726 True
1727
1728
1729-== Milestone Editing Permissions ==
1730+Milestone Editing Permissions
1731+-----------------------------
1732
1733 A milestone can be edited only by a user with launchpad.Edit permissions
1734 on the distribution or product context. When the user has this
1735diff --git a/lib/lp/bugs/browser/tests/bugtask-search-views.txt b/lib/lp/bugs/browser/tests/bugtask-search-views.txt
1736index 97120cc..041a1fa 100644
1737--- a/lib/lp/bugs/browser/tests/bugtask-search-views.txt
1738+++ b/lib/lp/bugs/browser/tests/bugtask-search-views.txt
1739@@ -1,4 +1,5 @@
1740-= Distribution Search page =
1741+Distribution Search page
1742+========================
1743
1744 In the 'Bugs' facet of a distribution we can find a list of bugs
1745 reported in that distribution and simple and advanced search forms.
1746@@ -208,7 +209,8 @@ in each series. In this case, the component search widget is hidden.
1747 False
1748
1749
1750-== Distribution Series search page ==
1751+Distribution Series search page
1752+-------------------------------
1753
1754 >>> sarge = debian.getSeries('sarge')
1755
1756@@ -286,7 +288,8 @@ The same is true for a sarge package.
1757 []
1758
1759
1760-== ProjectGroup Search Page ==
1761+ProjectGroup Search Page
1762+------------------------
1763
1764 >>> from lp.registry.interfaces.projectgroup import IProjectGroupSet
1765 >>> mozilla = getUtility(IProjectGroupSet).getByName('mozilla')
1766@@ -353,7 +356,8 @@ Check what milestones are displayed on the advanced search form:
1767 Mozilla Firefox 1.0 (2056-10-16)
1768
1769
1770-== Searching by information type ==
1771+Searching by information type
1772+-----------------------------
1773
1774 The advanced form allows us to query for bugs matching specific
1775 information types.
1776@@ -390,7 +394,8 @@ Submit the search:
1777 >>> flush_database_updates()
1778
1779
1780-== Constructing search filter urls ==
1781+Constructing search filter urls
1782+-------------------------------
1783
1784 There is a helper method, get_buglisting_search_filter_url(), which can
1785 be used to construct bug search URLs. It takes keyword parameters for
1786diff --git a/lib/lp/bugs/browser/tests/distrosourcepackage-bug-views.txt b/lib/lp/bugs/browser/tests/distrosourcepackage-bug-views.txt
1787index 48620d1..c3a85c2 100644
1788--- a/lib/lp/bugs/browser/tests/distrosourcepackage-bug-views.txt
1789+++ b/lib/lp/bugs/browser/tests/distrosourcepackage-bug-views.txt
1790@@ -1,6 +1,8 @@
1791-= Distro Source Package Bug Views =
1792+Distro Source Package Bug Views
1793+===============================
1794
1795-== Searching ==
1796+Searching
1797+---------
1798
1799 Simple searching is possible on the distro source package bug view page.
1800
1801diff --git a/lib/lp/bugs/doc/bug-change.txt b/lib/lp/bugs/doc/bug-change.txt
1802index f2e2170..f51c352 100644
1803--- a/lib/lp/bugs/doc/bug-change.txt
1804+++ b/lib/lp/bugs/doc/bug-change.txt
1805@@ -1,4 +1,5 @@
1806-= Tracking changes to a bug =
1807+Tracking changes to a bug
1808+=========================
1809
1810 The base class for BugChanges doesn't actually implement anything.
1811
1812@@ -190,9 +191,11 @@ notification you'll get an error.
1813 AssertionError: notification_data must include a `text` value.
1814
1815
1816-== BugChange subclasses ==
1817+BugChange subclasses
1818+--------------------
1819
1820-=== Getting the right bug change class ===
1821+Getting the right bug change class
1822+..................................
1823
1824 Given that we know what's changing and the name of the field that is
1825 being changed, we can find a suitable IBugChange implementation to
1826@@ -221,7 +224,8 @@ get_bug_change_class will also work for BugTasks.
1827 <class '...BugTaskImportanceChange'>
1828
1829
1830-=== AttributeChange ===
1831+AttributeChange
1832+...............
1833
1834 The AttributeChange class offers basic functionality for dealing with
1835 bug attribute changes.
1836@@ -244,7 +248,8 @@ method.
1837 'whatchanged': 'title'}
1838
1839
1840-=== BugDescriptionChange ===
1841+BugDescriptionChange
1842+....................
1843
1844 This describes a change to the description of a
1845 bug. getBugNotification() returns a formatted description of the
1846@@ -264,7 +269,8 @@ change.
1847 + Well, maybe not
1848
1849
1850-=== BugTitleChange ===
1851+BugTitleChange
1852+..............
1853
1854 This, surprisingly, describes a title change for a bug. Again,
1855 getBugNotification() returns a specially formatted description of
1856@@ -291,7 +297,8 @@ within the UI.
1857 summary
1858
1859
1860-=== BugDuplicateChange ===
1861+BugDuplicateChange
1862+..................
1863
1864 This describes a change to the duplicate marker for a bug.
1865
1866@@ -316,7 +323,8 @@ returned fields.
1867 'whatchanged': 'marked as duplicate'}
1868
1869
1870-== BugTagsChange ==
1871+BugTagsChange
1872+-------------
1873
1874 BugTagsChange is used to represent a change in a Bug's tag list.
1875
1876@@ -345,7 +353,8 @@ Addtions and removals are expressed separately in the notification.
1877 ** Tags added: zillionth-tag
1878
1879
1880-=== CveLinkedToBug / CveUnlinkedFromBug ===
1881+CveLinkedToBug / CveUnlinkedFromBug
1882+...................................
1883
1884 These describe the linking or unlinking of a CVE to a bug.
1885
1886@@ -381,7 +390,8 @@ And when a CVE is unlinked from a bug.
1887 ** CVE removed: https://cve.mitre.org/cgi-bin/cvename.cgi?name=1999-8979
1888
1889
1890-== BugAttachmentChange ==
1891+BugAttachmentChange
1892+-------------------
1893
1894 BugAttachmentChange is used to handle the addition and removal of
1895 attachments from a bug.
1896@@ -426,7 +436,8 @@ Or remove one.
1897 http://bugs.launchpad.test/bugs/.../+attachment/.../+files/...
1898
1899
1900-== BugTaskAttributeChange ==
1901+BugTaskAttributeChange
1902+----------------------
1903
1904 BugTaskAttributeChange is a generic BugChange that can be used to
1905 represent a change in the attributes of one of a Bug's BugTasks. It is
1906@@ -467,7 +478,8 @@ Several types of attribute change can be handled by
1907 BugTaskAttributeChange.
1908
1909
1910-=== Status changes ===
1911+Status changes
1912+..............
1913
1914 Status changes use a BugTaskStatus's `title` attribute to describe to
1915 the user what has changed.
1916@@ -490,7 +502,8 @@ the user what has changed.
1917 Status: New => Fix Released
1918
1919
1920-=== Importance changes ===
1921+Importance changes
1922+..................
1923
1924 Importance changes use a BugTaskImportance's `title` attribute to
1925 describe to the user what has changed.
1926@@ -514,7 +527,8 @@ describe to the user what has changed.
1927 Importance: Undecided => Critical
1928
1929
1930-=== Milestone changes ===
1931+Milestone changes
1932+.................
1933
1934 Milestone changes use a Milestone's `name` attribute to describe to
1935 the user what has changed.
1936@@ -541,7 +555,8 @@ the user what has changed.
1937 Milestone: None => example-milestone
1938
1939
1940-=== Bugwatch changes ===
1941+Bugwatch changes
1942+................
1943
1944 Bugwatch changes use a Bugwatch's `title` attribute to describe to the
1945 user what has changed.
1946@@ -570,7 +585,8 @@ user what has changed.
1947 Remote watch: None => bugs.example.com/ #1245
1948
1949
1950-=== Assignee changes ===
1951+Assignee changes
1952+................
1953
1954 Assignee changes use the assignee's `unique_displayname` attribute to
1955 describe to the user what has changed.
1956@@ -593,7 +609,8 @@ describe to the user what has changed.
1957 Assignee: (unassigned) => Ford Prefect (ford-prefect)
1958
1959
1960-=== Target (Affects) changes ===
1961+Target (Affects) changes
1962+........................
1963
1964 Changes to the bug task target (aka affects) use the BugTaskTargetChange
1965 class to describe the change. It inspects the `bugtargetname`
1966diff --git a/lib/lp/bugs/doc/bug-reported-acknowledgement.txt b/lib/lp/bugs/doc/bug-reported-acknowledgement.txt
1967index 6997fa4..393b23b 100644
1968--- a/lib/lp/bugs/doc/bug-reported-acknowledgement.txt
1969+++ b/lib/lp/bugs/doc/bug-reported-acknowledgement.txt
1970@@ -1,4 +1,5 @@
1971-= Bug Reported Acknowledgement Message =
1972+Bug Reported Acknowledgement Message
1973+====================================
1974
1975 A message of acknowledgement to be displayed to bug reporters after they've
1976 reported a bug can be set at the Distribution, DistributionSourcePackage,
1977diff --git a/lib/lp/bugs/doc/bug-reporting-guidelines.txt b/lib/lp/bugs/doc/bug-reporting-guidelines.txt
1978index b6ebff5..44cb6c4 100644
1979--- a/lib/lp/bugs/doc/bug-reporting-guidelines.txt
1980+++ b/lib/lp/bugs/doc/bug-reporting-guidelines.txt
1981@@ -1,4 +1,5 @@
1982-= Bug Reporting Guidelines =
1983+Bug Reporting Guidelines
1984+========================
1985
1986 Guidelines can be set at the Distribution, DistributionSourcePackage,
1987 ProjectGroup or Product level to help users file good bug reports, direct
1988diff --git a/lib/lp/bugs/doc/bug-set-status.txt b/lib/lp/bugs/doc/bug-set-status.txt
1989index af6cd66..89caa02 100644
1990--- a/lib/lp/bugs/doc/bug-set-status.txt
1991+++ b/lib/lp/bugs/doc/bug-set-status.txt
1992@@ -1,4 +1,5 @@
1993-= Setting the status of a bug =
1994+Setting the status of a bug
1995+===========================
1996
1997 If you have a bug and a target, there's method which makes it easier to
1998 change the bug's status for that specific target. It expects the user
1999@@ -67,7 +68,8 @@ bugtask already has the specified status, None is returned.
2000 >>> print(bug.setStatus(firefox, BugTaskStatus.CONFIRMED, no_priv))
2001 None
2002
2003-=== Product series ===
2004+Product series
2005+..............
2006
2007 If a product series is specified, but the bug is target only to the
2008 product, not the product series, the product bugtask is edited.
2009@@ -126,7 +128,8 @@ updated automatically.
2010 >>> firefox_bugtask.status.name
2011 'CONFIRMED'
2012
2013-=== Distributions and packages ===
2014+Distributions and packages
2015+..........................
2016
2017 Setting the status of a distribution or package bugtask work the same as
2018 for product tasks.
2019diff --git a/lib/lp/bugs/doc/bugmessage-visibility.txt b/lib/lp/bugs/doc/bugmessage-visibility.txt
2020index 0c91cfb..43c683e 100644
2021--- a/lib/lp/bugs/doc/bugmessage-visibility.txt
2022+++ b/lib/lp/bugs/doc/bugmessage-visibility.txt
2023@@ -1,4 +1,5 @@
2024-= Bug message visibility =
2025+Bug message visibility
2026+======================
2027
2028 Bug messages have a visible field, which provides a means
2029 for hiding messages rather than having to delete them.
2030diff --git a/lib/lp/bugs/doc/bugmessage.txt b/lib/lp/bugs/doc/bugmessage.txt
2031index 9e14348..34c4e7f 100644
2032--- a/lib/lp/bugs/doc/bugmessage.txt
2033+++ b/lib/lp/bugs/doc/bugmessage.txt
2034@@ -1,4 +1,5 @@
2035-= Bug Messages =
2036+Bug Messages
2037+============
2038
2039 Bug messages are messages associated with bugs. A bug message is
2040 described by the IBugMessage interface.
2041@@ -6,7 +7,8 @@ described by the IBugMessage interface.
2042 One IMessage can be associated with many IBugs, but one IBugMessage is
2043 always associated with exactly one bug.
2044
2045-== Retrieving bug messages ==
2046+Retrieving bug messages
2047+-----------------------
2048
2049 IBugMessageSet represents the set of all IBugMessages in the
2050 system.
2051@@ -47,7 +49,8 @@ bug watch.
2052 ...
2053
2054
2055-== Creating bug messages ==
2056+Creating bug messages
2057+---------------------
2058
2059 To create a bug message, use IBugMessageSet.createMessage:
2060
2061@@ -74,7 +77,8 @@ And the index of the bugmessage is set:
2062 2
2063
2064
2065-== Links and CVEs in bug messages ==
2066+Links and CVEs in bug messages
2067+------------------------------
2068
2069 If a bug message contains links to an external bug report or a CVE,
2070 bugwatches resp. CVE watches are automatically created. We add this
2071@@ -156,7 +160,8 @@ an external bug tracker.
2072 http://some.bugzilla/show_bug.cgi?id=9876
2073
2074
2075-== Last message date ==
2076+Last message date
2077+-----------------
2078
2079 For each bug, we cache the date of the last message linked to it using
2080 the attribute `date_last_message` in order to optimize searches the need
2081@@ -174,7 +179,8 @@ to compare this value for every bug in a large set.
2082 True
2083
2084
2085-== Retrieving IMessage.id from IBugMessage ==
2086+Retrieving IMessage.id from IBugMessage
2087+---------------------------------------
2088
2089 Each IBugMessage has a message_id attribute, which allows access
2090 to IBugMessage.IMessage.id without the additional query.
2091diff --git a/lib/lp/bugs/doc/bugnotifications.txt b/lib/lp/bugs/doc/bugnotifications.txt
2092index 1e364cc..d4ea291 100644
2093--- a/lib/lp/bugs/doc/bugnotifications.txt
2094+++ b/lib/lp/bugs/doc/bugnotifications.txt
2095@@ -1,15 +1,18 @@
2096
2097-= Bug notifications =
2098+Bug notifications
2099+=================
2100
2101
2102-== What is a bug notification? ==
2103+What is a bug notification?
2104+---------------------------
2105
2106 A bug notification gets added when something interesting happens to the
2107 bug. It's stored in a a table, and later on a cronscript constructs an
2108 email and sends the notification to the bug's subscribers.
2109
2110
2111-== When do bug notifications get added? ==
2112+When do bug notifications get added?
2113+------------------------------------
2114
2115 Not *every* change on a bug causes a notification to be added. This
2116 section will give a rundown of the things that do cause notifications to
2117@@ -21,7 +24,8 @@ Here are the things that cause bug notifications to be added and what
2118 those notifications look like.
2119
2120
2121-=== Reporting a new bug ===
2122+Reporting a new bug
2123+...................
2124
2125 >>> from zope.event import notify
2126 >>> from lazr.lifecycle.event import ObjectCreatedEvent
2127@@ -63,7 +67,8 @@ bugactivity.txt, but for now here is a small demo.
2128 Sample Person
2129
2130
2131-=== Editing a bug report ===
2132+Editing a bug report
2133+....................
2134
2135 >>> from lp.services.webapp.snapshot import notify_modified
2136
2137@@ -88,7 +93,8 @@ bugactivity.txt, but for now here is a small demo.
2138 a new description
2139
2140
2141-=== Filing a new task on an existing bug ===
2142+Filing a new task on an existing bug
2143+....................................
2144
2145 There are three kinds of tasks that can be added to an existing
2146 bug. Let's take a look at each type.
2147@@ -201,7 +207,8 @@ bug. Let's take a look at each type.
2148 ...
2149
2150
2151-=== Commenting on a bug report ===
2152+Commenting on a bug report
2153+..........................
2154
2155 >>> from lp.bugs.interfaces.bugmessage import IBugMessageSet
2156
2157@@ -223,7 +230,8 @@ bug. Let's take a look at each type.
2158 just a test comment
2159
2160
2161-=== Editing a task ===
2162+Editing a task
2163+..............
2164
2165 Let's demonstrate a notification email where Sample Person marks a
2166 task Fixed, and assigns themselves to it.
2167@@ -265,7 +273,8 @@ task Fixed, and assigns themselves to it.
2168 ...
2169
2170
2171-=== Adding and editing a CVE reference ===
2172+Adding and editing a CVE reference
2173+..................................
2174
2175 Adding a CVE reference to a bug also causes a notification email to go
2176 out to the bug notification recipient list. Let's create a CVE ref and
2177@@ -290,7 +299,8 @@ this document:
2178 ** CVE added: https://cve.mitre.org/cgi-bin/cvename.cgi?name=2004-0276
2179
2180
2181-=== Expiring notifications ===
2182+Expiring notifications
2183+......................
2184
2185 During bulk imports or changes of bugs, we often want to suppress
2186 email notifications. Due to the previous operation, there is a
2187diff --git a/lib/lp/bugs/doc/bugtarget.txt b/lib/lp/bugs/doc/bugtarget.txt
2188index 9fa9f2d..59a60fd 100644
2189--- a/lib/lp/bugs/doc/bugtarget.txt
2190+++ b/lib/lp/bugs/doc/bugtarget.txt
2191@@ -1,10 +1,12 @@
2192-= Bug Targets =
2193+Bug Targets
2194+===========
2195
2196 A bug target is a thing on which a bug can be reported, e.g., an
2197 IDistributionSourcePackage, an IProduct, etc.
2198
2199
2200-== Bug Tasks on Bug Targets ==
2201+Bug Tasks on Bug Targets
2202+------------------------
2203
2204 Bug targets have a bugtargetdisplayname attribute, which returns a value
2205 tailored for human reading (e.g. display in Web pages); and a bugtargetname
2206diff --git a/lib/lp/bugs/doc/bugtask-package-bugcounts.txt b/lib/lp/bugs/doc/bugtask-package-bugcounts.txt
2207index 60af96d..7d24bfc 100644
2208--- a/lib/lp/bugs/doc/bugtask-package-bugcounts.txt
2209+++ b/lib/lp/bugs/doc/bugtask-package-bugcounts.txt
2210@@ -1,4 +1,5 @@
2211-= Bug Counts For Open Bugs on Packages =
2212+Bug Counts For Open Bugs on Packages
2213+====================================
2214
2215 BugTaskset has a method, getBugCountsForPackages(), which returns counts
2216 for open bugs on each package.
2217@@ -128,7 +129,8 @@ If we mark the bug as In Progress, the open_inprogress will increase.
2218 open_unassigned: 1
2219 package: mozilla-firefox (Ubuntu)
2220
2221-== Privacy ==
2222+Privacy
2223+-------
2224
2225 Only those bugs that the user has access to are shown, so if we mark the
2226 bug as private, No Privileges Person will only see that there is one
2227@@ -160,7 +162,8 @@ Foo Bar still can see all the bugs, though.
2228 open_unassigned: 1
2229 package: mozilla-firefox (Ubuntu)
2230
2231-== Duplicate Bugs ==
2232+Duplicate Bugs
2233+--------------
2234
2235 Duplicates bugs are omitted from the counts.
2236
2237diff --git a/lib/lp/bugs/doc/bugtask-search-old-urls.txt b/lib/lp/bugs/doc/bugtask-search-old-urls.txt
2238index 388be56..34a6b7b 100644
2239--- a/lib/lp/bugs/doc/bugtask-search-old-urls.txt
2240+++ b/lib/lp/bugs/doc/bugtask-search-old-urls.txt
2241@@ -1,4 +1,5 @@
2242-= Searching bugtasks with old statuses =
2243+Searching bugtasks with old statuses
2244+====================================
2245
2246 The BugWorkflow spec renames several bug statuses, but we need
2247 bookmarks, etc., to keep working using the old status names. Instead
2248diff --git a/lib/lp/bugs/doc/bugtask-status-workflow.txt b/lib/lp/bugs/doc/bugtask-status-workflow.txt
2249index 3363180..2ffd3be 100644
2250--- a/lib/lp/bugs/doc/bugtask-status-workflow.txt
2251+++ b/lib/lp/bugs/doc/bugtask-status-workflow.txt
2252@@ -1,4 +1,5 @@
2253-= BugTask Status Workflow =
2254+BugTask Status Workflow
2255+=======================
2256
2257 BugTasks have a natural status workflow: New => Confirmed => In
2258 Progress => Fix Committed => Fix Released, etc. Some state transitions
2259@@ -301,7 +302,8 @@ setting an assignee has "side effects".
2260 True
2261
2262
2263-== date_xxx and the UNKNOWN status ==
2264+date_xxx and the UNKNOWN status
2265+-------------------------------
2266
2267 When an IBugTask is set to status UNKNOWN, the date_confirmed,
2268 date_closed, date_inprogress, date_triaged, date_fixcommitted
2269diff --git a/lib/lp/bugs/doc/bugwidget.txt b/lib/lp/bugs/doc/bugwidget.txt
2270index 680bf16..f20d44a 100644
2271--- a/lib/lp/bugs/doc/bugwidget.txt
2272+++ b/lib/lp/bugs/doc/bugwidget.txt
2273@@ -1,4 +1,5 @@
2274-= Widget for entering a bug id =
2275+Widget for entering a bug id
2276+============================
2277
2278 The BugWidget converts string bug ids to the corresponding bug object.
2279
2280diff --git a/lib/lp/bugs/doc/cve.txt b/lib/lp/bugs/doc/cve.txt
2281index 631cd55..6801d8f 100644
2282--- a/lib/lp/bugs/doc/cve.txt
2283+++ b/lib/lp/bugs/doc/cve.txt
2284@@ -1,4 +1,5 @@
2285-= Common Vulnerabilities and Exposures (CVE) =
2286+Common Vulnerabilities and Exposures (CVE)
2287+==========================================
2288
2289 Malone supports attaching CVE references to bugs. From
2290 https://cve.mitre.org/about/ CVE is:
2291@@ -11,11 +12,13 @@ For more information, consult the CVE website:
2292
2293 https://cve.mitre.org/
2294
2295-== CveSet ==
2296+CveSet
2297+------
2298
2299 The ICveSet utility is used to create and get CVEs and BugCves.
2300
2301-=== Creating CVE entries ===
2302+Creating CVE entries
2303+....................
2304
2305 CVE references can be created with the ICveSet utility.
2306
2307@@ -35,7 +38,8 @@ To create a CVE, call ICveSet.new(sequence, description,
2308 >>> print(cve.displayname)
2309 CVE-2004-0276
2310
2311-=== Number of CVE links ===
2312+Number of CVE links
2313+...................
2314
2315 We can get the number of CVE links to bugs in Launchpad using
2316 getBugCveCount.
2317@@ -62,7 +66,8 @@ And if we unlink it, the count will decrease.
2318 >>> cveset.getBugCveCount()
2319 2
2320
2321-== Linking CVEs to Bugs ==
2322+Linking CVEs to Bugs
2323+--------------------
2324
2325 You can link a CVE to a bug. You can also see which CVEs are currently
2326 linked to a bug:
2327@@ -139,7 +144,8 @@ Text references to CVEs using 2014 format can be found:
2328 True
2329 >>> b.unlinkCVE(cve_2014, user=no_priv)
2330
2331-== CVE Reports ==
2332+CVE Reports
2333+-----------
2334
2335 Launchpad offers distributions, distribution releases and products with
2336 reports that inform on the status of bugs related to CVEs in the
2337diff --git a/lib/lp/bugs/doc/displaying-bugs-and-tasks.txt b/lib/lp/bugs/doc/displaying-bugs-and-tasks.txt
2338index 25f9674..3e4af4f 100644
2339--- a/lib/lp/bugs/doc/displaying-bugs-and-tasks.txt
2340+++ b/lib/lp/bugs/doc/displaying-bugs-and-tasks.txt
2341@@ -1,11 +1,13 @@
2342-= Displaying Information on Bugs and Bug Tasks =
2343+Displaying Information on Bugs and Bug Tasks
2344+============================================
2345
2346 This document discusses TALES techniques and IBugTask object
2347 attributes that may be useful to you, if you're writing some code to
2348 display bug and bug task information.
2349
2350
2351-== Displaying an Icon with image:icon ==
2352+Displaying an Icon with image:icon
2353+----------------------------------
2354
2355 image:sprite_css is a TALES adapter that returns the CSS class for
2356 an icon for a bugtask.
2357@@ -60,7 +62,8 @@ Let's use a few examples to demonstrate:
2358 ... ORIGINAL_IMPORTANCE, getUtility(ILaunchBag).user)
2359
2360
2361-== Displaying Logos for Bug Tasks ==
2362+Displaying Logos for Bug Tasks
2363+------------------------------
2364
2365 The logo for a bug task display the corresponding logo for its
2366 target.
2367@@ -85,7 +88,8 @@ And the logo for a distro bug task shows the source package icon:
2368 '<img alt="" width="64" height="64" src="/@@/distribution-logo" />'
2369
2370
2371-== Displaying Status ==
2372+Displaying Status
2373+-----------------
2374
2375 Sometimes it's useful to display the status of an IBugTask as a
2376 human-readable string. So, instead of displaying something like:
2377@@ -157,7 +161,8 @@ Lastly, some cleanup:
2378 >>> test_task.transitionToAssignee(ORIGINAL_ASSIGNEE)
2379
2380
2381-== Status Elsewhere ==
2382+Status Elsewhere
2383+----------------
2384
2385 It's often useful to present information about the status of a bug in
2386 other contexts. Again, the listing-view holds a method which provides us
2387diff --git a/lib/lp/bugs/doc/externalbugtracker-checkwatches.txt b/lib/lp/bugs/doc/externalbugtracker-checkwatches.txt
2388index 0f4c01e..42d4c58 100644
2389--- a/lib/lp/bugs/doc/externalbugtracker-checkwatches.txt
2390+++ b/lib/lp/bugs/doc/externalbugtracker-checkwatches.txt
2391@@ -1,4 +1,5 @@
2392-= External Bug Tracker: checkwatches =
2393+External Bug Tracker: checkwatches
2394+==================================
2395
2396 Strictly speaking, checkwatches is the name of a cronscript and a
2397 module in the Launchpad codebase. In the absence of a more complete
2398@@ -12,7 +13,8 @@ framework.
2399 -- Gavin Panella, 2007-07-18
2400
2401
2402-== get_external_bugtracker ==
2403+get_external_bugtracker
2404+-----------------------
2405
2406 get_external_bugtracker is used to get an ExternalBugTracker suitable
2407 for a particular bugtracker.
2408diff --git a/lib/lp/bugs/doc/externalbugtracker-comment-pushing.txt b/lib/lp/bugs/doc/externalbugtracker-comment-pushing.txt
2409index e64217b..86d0359 100644
2410--- a/lib/lp/bugs/doc/externalbugtracker-comment-pushing.txt
2411+++ b/lib/lp/bugs/doc/externalbugtracker-comment-pushing.txt
2412@@ -1,4 +1,5 @@
2413-= Pushing comments to external bugtrackers =
2414+Pushing comments to external bugtrackers
2415+========================================
2416
2417 Some ExternalBugTrackers support the pushing of comments from Launchpad
2418 to the remote bug tracker.
2419@@ -268,7 +269,8 @@ invalid remote comment ID, an error will be raised:
2420 AssertionError: A remote_comment_id must be specified.
2421
2422
2423-== Formatting pushed comments ==
2424+Formatting pushed comments
2425+--------------------------
2426
2427 The comments that have been pushed to the remote bugtracker have been
2428 formatted to include data about the comment in Launchpad.
2429diff --git a/lib/lp/bugs/doc/externalbugtracker-emailaddress.txt b/lib/lp/bugs/doc/externalbugtracker-emailaddress.txt
2430index c440f94..9e6adf8 100644
2431--- a/lib/lp/bugs/doc/externalbugtracker-emailaddress.txt
2432+++ b/lib/lp/bugs/doc/externalbugtracker-emailaddress.txt
2433@@ -1,6 +1,8 @@
2434-= Email addresses as bug trackers =
2435+Email addresses as bug trackers
2436+===============================
2437
2438-== The EMAILADDRESS BugTrackerType ==
2439+The EMAILADDRESS BugTrackerType
2440+-------------------------------
2441
2442 Launchpad allows users to register an email address as an external bug
2443 tracker. This means that bugs for that bug tracker can be forwarded to
2444@@ -66,7 +68,8 @@ the local part of an email address (e.g. <local_name>@foobar.com).
2445 auto-another.bugtracker
2446
2447
2448-== Adding a BugWatch to an upstream email address ==
2449+Adding a BugWatch to an upstream email address
2450+----------------------------------------------
2451
2452 We can add a bug watch to an upstream email address in the normal
2453 fashion. For email addresses, we record the message ID of the mail sent
2454diff --git a/lib/lp/bugs/doc/externalbugtracker-linking-back.txt b/lib/lp/bugs/doc/externalbugtracker-linking-back.txt
2455index 32186e3..28b8597 100644
2456--- a/lib/lp/bugs/doc/externalbugtracker-linking-back.txt
2457+++ b/lib/lp/bugs/doc/externalbugtracker-linking-back.txt
2458@@ -1,4 +1,5 @@
2459-= Remote bugs linking back to Launchpad =
2460+Remote bugs linking back to Launchpad
2461+=====================================
2462
2463 Some bug trackers support linking back to bugs in Launchpad. This way we
2464 can tell external bug trackers that we're watching the bug, and make it
2465@@ -69,7 +70,8 @@ be related to a bug task, not just a bug.
2466 ... external_bugtracker, [bug_watch_without_bugtask])
2467
2468
2469-== BugWatchUpdater.linkLaunchpadBug() ==
2470+BugWatchUpdater.linkLaunchpadBug()
2471+----------------------------------
2472
2473 The BugWatchUpdater method that does the work of setting the Launchpad
2474 bug link is linkLaunchpadBug(). This method first retrieves the
2475diff --git a/lib/lp/bugs/doc/externalbugtracker-mantis-csv.txt b/lib/lp/bugs/doc/externalbugtracker-mantis-csv.txt
2476index 0cd932f..d9fb120 100644
2477--- a/lib/lp/bugs/doc/externalbugtracker-mantis-csv.txt
2478+++ b/lib/lp/bugs/doc/externalbugtracker-mantis-csv.txt
2479@@ -1,4 +1,5 @@
2480-= ExternalBugTracker: Mantis =
2481+ExternalBugTracker: Mantis
2482+==========================
2483
2484 This covers the implementation of the Mantis bug watch updater when
2485 used in the "CSV export" mode. The default mode is to page-scrape
2486@@ -8,7 +9,8 @@ installations work with it (at least two prominent installations
2487 return empty exports).
2488
2489
2490-== Basics ==
2491+Basics
2492+------
2493
2494 The class that implements ExternalBugTracker for Mantis is called,
2495 surprisingly, Mantis! It doesn't do any version probing and simply
2496@@ -42,7 +44,8 @@ If the status can't be converted an UnknownRemoteStatusError is raised.
2497 lp.bugs.externalbugtracker.base.UnknownRemoteStatusError: foo: bar
2498
2499
2500-== Updating Bug Watches ==
2501+Updating Bug Watches
2502+--------------------
2503
2504 Let's set up a BugTracker and some watches for the Example.com Bug
2505 Tracker:
2506diff --git a/lib/lp/bugs/doc/externalbugtracker-mantis.txt b/lib/lp/bugs/doc/externalbugtracker-mantis.txt
2507index bfc1b0a..bf2768b 100644
2508--- a/lib/lp/bugs/doc/externalbugtracker-mantis.txt
2509+++ b/lib/lp/bugs/doc/externalbugtracker-mantis.txt
2510@@ -1,9 +1,11 @@
2511-= ExternalBugTracker: Mantis =
2512+ExternalBugTracker: Mantis
2513+==========================
2514
2515 This covers the implementation of the Mantis bug watch updater.
2516
2517
2518-== Basics ==
2519+Basics
2520+------
2521
2522 The class that implements ExternalBugTracker for Mantis is called,
2523 surprisingly, Mantis! It doesn't do any version probing and simply
2524@@ -45,7 +47,8 @@ If the status can't be converted an UnknownRemoteStatusError is raised.
2525 lp.bugs.externalbugtracker.base.UnknownRemoteStatusError: foo: bar
2526
2527
2528-== Updating Bug Watches ==
2529+Updating Bug Watches
2530+--------------------
2531
2532 Let's set up a BugTracker and some watches for the Example.com Bug
2533 Tracker:
2534diff --git a/lib/lp/bugs/doc/externalbugtracker-roundup-python-bugs.txt b/lib/lp/bugs/doc/externalbugtracker-roundup-python-bugs.txt
2535index ee95543..4c2916a 100644
2536--- a/lib/lp/bugs/doc/externalbugtracker-roundup-python-bugs.txt
2537+++ b/lib/lp/bugs/doc/externalbugtracker-roundup-python-bugs.txt
2538@@ -1,4 +1,5 @@
2539-= ExternalBugTracker: Python =
2540+ExternalBugTracker: Python
2541+==========================
2542
2543 This covers the implementation of the ExternalBugTracker class for
2544 Python bugwatches.
2545@@ -11,7 +12,8 @@ common to Roundup and Python instances, see
2546 externalbugtracker-roundup.txt
2547
2548
2549-== Status Conversion ==
2550+Status Conversion
2551+-----------------
2552
2553 The basic Python bug statuses map to Launchpad bug statuses.
2554 Roundup.convertRemoteStatus() handles the conversion.
2555diff --git a/lib/lp/bugs/doc/externalbugtracker-roundup.txt b/lib/lp/bugs/doc/externalbugtracker-roundup.txt
2556index b4f4963..1d369a2 100644
2557--- a/lib/lp/bugs/doc/externalbugtracker-roundup.txt
2558+++ b/lib/lp/bugs/doc/externalbugtracker-roundup.txt
2559@@ -1,10 +1,12 @@
2560-= ExternalBugTracker: Roundup =
2561+ExternalBugTracker: Roundup
2562+===========================
2563
2564 This covers the implementation of the ExternalBugTracker class for Roundup
2565 bugwatches.
2566
2567
2568-== Basics ==
2569+Basics
2570+------
2571
2572 The ExternalBugTracker descendant class which implements methods for updating
2573 bug watches on Roundup bug trackers is externalbugtracker.Roundup, which
2574@@ -22,7 +24,8 @@ implements IExternalBugTracker.
2575 True
2576
2577
2578-== Status Conversion ==
2579+Status Conversion
2580+-----------------
2581
2582 The basic Roundup bug statuses (i.e. those available by default in new
2583 Roundup instances) map to Launchpad bug statuses.
2584@@ -70,7 +73,8 @@ understand an UnknownRemoteStatusError will be raised.
2585 lp.bugs.externalbugtracker.base.UnknownRemoteStatusError: Unrecognized value for field 1 (status): eggs
2586
2587
2588-== Initialization ==
2589+Initialization
2590+--------------
2591
2592 Calling initializeRemoteBugDB() on our Roundup instance and passing it a set
2593 of remote bug IDs will fetch those bug IDs from the server and file them in a
2594@@ -88,7 +92,8 @@ avoids relying on a working network connection.
2595 [1]
2596
2597
2598-== Export Methods ==
2599+Export Methods
2600+--------------
2601
2602 There are two means by which we can export Roundup bug statuses: on a
2603 bug-by-bug basis and as a batch. When the number of bugs that need updating is
2604@@ -115,7 +120,8 @@ fetched as a batch:
2605 GET http://test.roundup/issue?...@startwith=0
2606
2607
2608-== Updating Bug Watches ==
2609+Updating Bug Watches
2610+--------------------
2611
2612 First, we create some bug watches to test with:
2613
2614diff --git a/lib/lp/bugs/doc/externalbugtracker-rt.txt b/lib/lp/bugs/doc/externalbugtracker-rt.txt
2615index 215cf9d..2feb460 100644
2616--- a/lib/lp/bugs/doc/externalbugtracker-rt.txt
2617+++ b/lib/lp/bugs/doc/externalbugtracker-rt.txt
2618@@ -1,10 +1,12 @@
2619-= ExternalBugTracker: RT =
2620+ExternalBugTracker: RT
2621+======================
2622
2623 This covers the implementation of an ExternalBugTracker class for RT
2624 instances.
2625
2626
2627-== Basics ==
2628+Basics
2629+------
2630
2631 When importing bugs from remote RT instances, we use an RT-specific
2632 implementation of ExternalBugTracker, RequestTracker.
2633@@ -22,7 +24,8 @@ implementation of ExternalBugTracker, RequestTracker.
2634 True
2635
2636
2637-== Authentication Credentials ==
2638+Authentication Credentials
2639+--------------------------
2640
2641 RT instances require that we log in to be able to export statuses for
2642 their tickets. The RequestTracker ExternalBugTracker class has a
2643@@ -45,7 +48,8 @@ configuration files. rt.example.com is known to Launchpad.
2644 >>> print(pretty(rt_two.credentials))
2645 {'pass': 'pangalacticgargleblaster', 'user': 'zaphod'}
2646
2647-== Status Conversion ==
2648+Status Conversion
2649+-----------------
2650
2651 The RequestTracker class can convert the default RT ticket statuses into
2652 Launchpad statuses:
2653@@ -72,7 +76,8 @@ result in an UnknownRemoteStatusError being raised.
2654 lp.bugs.externalbugtracker.base.UnknownRemoteStatusError: spam
2655
2656
2657-== Importance Conversion ==
2658+Importance Conversion
2659+---------------------
2660
2661 There is no obvious mapping from ticket priorities to importances. They
2662 are all imported as Unknown. No exception is raised, because they are
2663@@ -82,7 +87,8 @@ all unknown.
2664 'Unknown'
2665
2666
2667-== Initialization ==
2668+Initialization
2669+--------------
2670
2671 Calling initializeRemoteBugDB() on our RequestTracker instance and
2672 passing it a set of remote bug IDs will fetch those bug IDs from the
2673@@ -119,7 +125,8 @@ Subsequent requests use this.
2674 GET http://example.com/REST/1.0/search/ticket/?...
2675
2676
2677-== Export Methods ==
2678+Export Methods
2679+--------------
2680
2681 There are two means by which we can export RT bug statuses: on a
2682 bug-by-bug basis and as a batch. When the number of bugs that need
2683@@ -166,7 +173,8 @@ This can also be demonstrated for importing bugs as a batch:
2684 ...
2685 lp.bugs.externalbugtracker.base.BugTrackerConnectError: ...
2686
2687-== Updating Bug Watches ==
2688+Updating Bug Watches
2689+--------------------
2690
2691 First, we create some bug watches to test with. Example.com hosts an RT
2692 instance which has several bugs that we wish to watch:
2693@@ -252,7 +260,8 @@ statuses:
2694 Remote bug 1589: Invalid
2695
2696
2697-== Getting the remote product for a bug ==
2698+Getting the remote product for a bug
2699+------------------------------------
2700
2701 It's possible to get the remote product for a remote RT bug using
2702 getRemoteProduct(). In the case of RT, what we refer to in Launchpad as
2703diff --git a/lib/lp/bugs/doc/externalbugtracker-sourceforge.txt b/lib/lp/bugs/doc/externalbugtracker-sourceforge.txt
2704index bcaf316..707bbb4 100644
2705--- a/lib/lp/bugs/doc/externalbugtracker-sourceforge.txt
2706+++ b/lib/lp/bugs/doc/externalbugtracker-sourceforge.txt
2707@@ -1,10 +1,12 @@
2708-= ExternalBugTracker: SourceForge =
2709+ExternalBugTracker: SourceForge
2710+===============================
2711
2712 This covers the implementation of the ExternalBugTracker class for
2713 SourceForge bugwatches.
2714
2715
2716-== Basics ==
2717+Basics
2718+------
2719
2720 The ExternalBugTracker descendant class which implements methods for
2721 updating bug watches on SourceForge bug trackers is
2722@@ -20,7 +22,8 @@ externalbugtracker.SourceForge, which implements IExternalBugTracker.
2723 True
2724
2725
2726-== Status Conversion ==
2727+Status Conversion
2728+-----------------
2729
2730 The SourceForge bug status/resolution combinations map to Launchpad bug
2731 statuses. SourceForge.convertRemoteStatus() handles the conversion.
2732@@ -73,7 +76,8 @@ understand an UnknownRemoteStatusError will be raised.
2733 lp.bugs.externalbugtracker.base.UnknownRemoteStatusError: eggs
2734
2735
2736-== Initialization ==
2737+Initialization
2738+--------------
2739
2740 Calling initializeRemoteBugDB() on our SourceForge instance and passing
2741 it a set of remote bug IDs will fetch those bug IDs from the server and
2742@@ -136,7 +140,8 @@ a PrivateRemoteBug error.
2743 lp.bugs.externalbugtracker.base.PrivateRemoteBug: Bug 99 on http://example.com is private.
2744
2745
2746-== Updating Bug Watches ==
2747+Updating Bug Watches
2748+--------------------
2749
2750 First, we create some bug watches to test with. Example.com hosts a
2751 SourceForge instance which has several bugs that we wish to watch:
2752@@ -260,7 +265,8 @@ statuses:
2753 Remote bug 1722259: Won't Fix
2754
2755
2756-== Getting the remote product for a bug ==
2757+Getting the remote product for a bug
2758+------------------------------------
2759
2760 It's possible to get the remote product for a bug by calling
2761 SourceForge.getRemoteProduct(). In SourceForge's case, what we refer to
2762diff --git a/lib/lp/bugs/doc/externalbugtracker-trac.txt b/lib/lp/bugs/doc/externalbugtracker-trac.txt
2763index 2dc976a..53df563 100644
2764--- a/lib/lp/bugs/doc/externalbugtracker-trac.txt
2765+++ b/lib/lp/bugs/doc/externalbugtracker-trac.txt
2766@@ -1,10 +1,12 @@
2767-= ExternalBugTracker: Trac =
2768+ExternalBugTracker: Trac
2769+========================
2770
2771 This covers the implementation of the ExternalBugTracker class for Trac
2772 bugwatches.
2773
2774
2775-== Basics ==
2776+Basics
2777+------
2778
2779 The ExternalBugTracker descendant class which implements methods for updating
2780 bug watches on Trac bug trackers is externalbugtracker.Trac, which implements
2781@@ -21,7 +23,8 @@ IExternalBugTracker.
2782 True
2783
2784
2785-== LP plugin ==
2786+LP plugin
2787+---------
2788
2789 Some Trac instances have a plugin installed to make it easier for us to
2790 communicate with them. getExternalBugTrackerToUse() probes the bug
2791@@ -99,7 +102,8 @@ persists.
2792 True
2793
2794
2795-== Status Conversion ==
2796+Status Conversion
2797+-----------------
2798
2799 The basic Trac ticket statuses map to Launchpad bug statuses.
2800 Trac.convertRemoteStatus() handles the conversion.
2801@@ -140,7 +144,8 @@ an UnknownRemoteStatusError will be raised.
2802 lp.bugs.externalbugtracker.base.UnknownRemoteStatusError: eggs
2803
2804
2805-== Initialization ==
2806+Initialization
2807+--------------
2808
2809 Calling initializeRemoteBugDB() on our Trac instance and passing it a set of
2810 remote bug IDs will fetch those bug IDs from the server and file them in a
2811@@ -164,7 +169,8 @@ If we initialize with a different set of keys we overwrite the first set:
2812 [6, 7, 8, 9, 10, 11, 12]
2813
2814
2815-== Export Methods ==
2816+Export Methods
2817+--------------
2818
2819 There are two means by which we can export Trac bug statuses: on a bug-by-bug
2820 basis and as a batch. When the number of bugs that need updating is less than
2821@@ -263,7 +269,8 @@ export, it will raise an UnparsableBugData error.
2822 lp.bugs.externalbugtracker.base.UnparsableBugData: External bugtracker http://test.trac does not define all the necessary fields for bug status imports (Defined field names: ['<html>']).
2823
2824
2825-== Updating Bug Watches ==
2826+Updating Bug Watches
2827+--------------------
2828
2829 First, we create some bug watches to test with:
2830
2831diff --git a/lib/lp/bugs/doc/product-update-remote-product-script.txt b/lib/lp/bugs/doc/product-update-remote-product-script.txt
2832index 4f76945..c0801b6 100644
2833--- a/lib/lp/bugs/doc/product-update-remote-product-script.txt
2834+++ b/lib/lp/bugs/doc/product-update-remote-product-script.txt
2835@@ -1,4 +1,5 @@
2836-== update-remote-product.py ==
2837+update-remote-product.py
2838+------------------------
2839
2840 The script that uses RemoteProductUpdater is update-remote-product.py.
2841
2842diff --git a/lib/lp/bugs/doc/products-with-no-remote-product.txt b/lib/lp/bugs/doc/products-with-no-remote-product.txt
2843index 6646de1..bb3d587 100644
2844--- a/lib/lp/bugs/doc/products-with-no-remote-product.txt
2845+++ b/lib/lp/bugs/doc/products-with-no-remote-product.txt
2846@@ -1,4 +1,5 @@
2847-= Products with no remote_product =
2848+Products with no remote_product
2849+===============================
2850
2851 Product.remote_product is used to keep track of which remote product in
2852 an upstream bug tracker, a Product registered in Launchpad corresponds
2853diff --git a/lib/lp/bugs/doc/treelookup.txt b/lib/lp/bugs/doc/treelookup.txt
2854index 7dfd661..7ef5b4e 100644
2855--- a/lib/lp/bugs/doc/treelookup.txt
2856+++ b/lib/lp/bugs/doc/treelookup.txt
2857@@ -1,4 +1,5 @@
2858-= Doing lookups in a tree =
2859+Doing lookups in a tree
2860+=======================
2861
2862 >>> from lp.bugs.adapters.treelookup import (
2863 ... LookupBranch, LookupTree)
2864@@ -35,7 +36,8 @@ tree, because it would not make sense for it to appear in any other
2865 position.
2866
2867
2868-== Creation ==
2869+Creation
2870+--------
2871
2872 >>> tree = LookupTree(
2873 ... ('Snack', LookupTree(
2874@@ -92,7 +94,8 @@ instances), `LookupTree._verify` also checks that every branch is a
2875 TypeError: Not a LookupBranch: ...'Greenland'
2876
2877
2878-== Searching ==
2879+Searching
2880+---------
2881
2882 Just call `tree.find`.
2883
2884@@ -113,7 +116,8 @@ But an exception is raised if it does not reach a leaf.
2885 KeyError: ...'Snack'
2886
2887
2888-== Development ==
2889+Development
2890+-----------
2891
2892 `LookupTree` makes development easy, because `describe` gives a
2893 complete description of the tree you've created.
2894@@ -152,7 +156,8 @@ Simple keys are shown without quotes, to aid readability, and default
2895 branches are shown with '*' as the key.
2896
2897
2898-== Pruning ==
2899+Pruning
2900+-------
2901
2902 During tree creation, branches which have keys that already appear in
2903 earlier branches are cloned and have those already seen keys
2904@@ -180,7 +185,8 @@ branches with keys are candidates for being discarded.
2905 )
2906
2907
2908-== Documentation ==
2909+Documentation
2910+-------------
2911
2912 You can discover the minimum and maximum depth of a tree.
2913
2914diff --git a/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-distribution-default-values.txt b/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-distribution-default-values.txt
2915index f5c7d6e..c6a1a27 100644
2916--- a/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-distribution-default-values.txt
2917+++ b/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-distribution-default-values.txt
2918@@ -1,4 +1,5 @@
2919-= Default values on the +distrotask form =
2920+Default values on the +distrotask form
2921+======================================
2922
2923 Source packages often share names across distributions, especially
2924 Debian and Ubuntu. So when you want to indicate that the bug affects
2925diff --git a/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-new-upstream.txt b/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-new-upstream.txt
2926index cbfe9a9..876f24e 100644
2927--- a/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-new-upstream.txt
2928+++ b/lib/lp/bugs/stories/bug-also-affects/xx-also-affects-new-upstream.txt
2929@@ -1,4 +1,5 @@
2930-= Registering an upstream affected by a given bug =
2931+Registering an upstream affected by a given bug
2932+===============================================
2933
2934 The test browser does not support javascript
2935 >>> user_browser.open(
2936@@ -93,7 +94,8 @@ the bug as affecting another (unregistered) upstream.
2937 The Bar Project ... auto-bugs.foo.org #123
2938 The Bar Project ... auto-bugs.foo.org #421
2939
2940-== Error handling ==
2941+Error handling
2942+--------------
2943
2944 If the URL of the remote bug is not recognized by Launchpad, we'll tell the
2945 user and ask them to check if it's correct.
2946diff --git a/lib/lp/bugs/stories/bug-also-affects/xx-bugtracker-information.txt b/lib/lp/bugs/stories/bug-also-affects/xx-bugtracker-information.txt
2947index 3ea9322..a238e64 100644
2948--- a/lib/lp/bugs/stories/bug-also-affects/xx-bugtracker-information.txt
2949+++ b/lib/lp/bugs/stories/bug-also-affects/xx-bugtracker-information.txt
2950@@ -1,4 +1,5 @@
2951-= Bug tracker information =
2952+Bug tracker information
2953+=======================
2954
2955 If a product doesn't use Launchpad to track its bugs, there's
2956 information about the product's bug tracker when adding an upstream
2957diff --git a/lib/lp/bugs/stories/bug-also-affects/xx-duplicate-bugwatches.txt b/lib/lp/bugs/stories/bug-also-affects/xx-duplicate-bugwatches.txt
2958index 9d380cf..53c99f1 100644
2959--- a/lib/lp/bugs/stories/bug-also-affects/xx-duplicate-bugwatches.txt
2960+++ b/lib/lp/bugs/stories/bug-also-affects/xx-duplicate-bugwatches.txt
2961@@ -1,6 +1,8 @@
2962-= Duplicate bug watches =
2963+Duplicate bug watches
2964+=====================
2965
2966-== Adding the same bug watch twice to a bug ==
2967+Adding the same bug watch twice to a bug
2968+----------------------------------------
2969
2970 When adding bug watches, existing bug watches are re-used if there
2971 already is one pointing to the same remote bug. For example, let's start
2972@@ -64,7 +66,8 @@ same bug watch.
2973 pmount (Debian) ... Unknown Unknown debbugs #42
2974
2975
2976-== Adding the same bug watch to two different bugs ==
2977+Adding the same bug watch to two different bugs
2978+-----------------------------------------------
2979
2980 If a bug watch which is already added to another bug is added, a
2981 notification is added linking to the bug. This is useful for detecting
2982diff --git a/lib/lp/bugs/stories/bug-also-affects/xx-request-distribution-no-release-fix.txt b/lib/lp/bugs/stories/bug-also-affects/xx-request-distribution-no-release-fix.txt
2983index a840405..072ba0a 100644
2984--- a/lib/lp/bugs/stories/bug-also-affects/xx-request-distribution-no-release-fix.txt
2985+++ b/lib/lp/bugs/stories/bug-also-affects/xx-request-distribution-no-release-fix.txt
2986@@ -1,10 +1,12 @@
2987-= Requesting a fix for a distribution with no current release =
2988+Requesting a fix for a distribution with no current release
2989+===========================================================
2990
2991 Sometimes a distribution might not have any releases, thus it won't have
2992 a current release either. In this case it will still be possible to
2993 request a fix for these releases.
2994
2995-== A distribution using Launchpad ==
2996+A distribution using Launchpad
2997+------------------------------
2998
2999 Gentoo is currently using Launchpad.
3000
3001@@ -22,7 +24,8 @@ Any user can request a fix for it.
3002 >>> user_browser.url
3003 'http://bugs.launchpad.test/gentoo/+bug/4'
3004
3005-== A distribution not using Launchpad ==
3006+A distribution not using Launchpad
3007+----------------------------------
3008
3009 If we change Gentoo not to use Launchpad, any user can still add a task and
3010 link to a external bug for it.
3011diff --git a/lib/lp/bugs/stories/bug-also-affects/xx-upstream-bugtracker-links.txt b/lib/lp/bugs/stories/bug-also-affects/xx-upstream-bugtracker-links.txt
3012index 9cc69fc..1d29a68 100644
3013--- a/lib/lp/bugs/stories/bug-also-affects/xx-upstream-bugtracker-links.txt
3014+++ b/lib/lp/bugs/stories/bug-also-affects/xx-upstream-bugtracker-links.txt
3015@@ -1,4 +1,5 @@
3016-= Links to upstream bug trackers =
3017+Links to upstream bug trackers
3018+==============================
3019
3020 Sometimes people will want to mark a bug as being upstream but will
3021 either not know what the bug's upstream URL is or will know that the bug
3022diff --git a/lib/lp/bugs/stories/bug-release-management/nomination-navigation.txt b/lib/lp/bugs/stories/bug-release-management/nomination-navigation.txt
3023index 5c951e4..b974d94 100644
3024--- a/lib/lp/bugs/stories/bug-release-management/nomination-navigation.txt
3025+++ b/lib/lp/bugs/stories/bug-release-management/nomination-navigation.txt
3026@@ -1,4 +1,5 @@
3027-= Bug nomination navigation =
3028+Bug nomination navigation
3029+=========================
3030
3031 Most people don't see the separate page for approving or declining a
3032 release nomination for a bug, because it's handled using an expandable
3033diff --git a/lib/lp/bugs/stories/bug-tags/xx-searching-for-tags.txt b/lib/lp/bugs/stories/bug-tags/xx-searching-for-tags.txt
3034index c51e388..4c45b07 100644
3035--- a/lib/lp/bugs/stories/bug-tags/xx-searching-for-tags.txt
3036+++ b/lib/lp/bugs/stories/bug-tags/xx-searching-for-tags.txt
3037@@ -1,4 +1,5 @@
3038-= Searching for bug tags =
3039+Searching for bug tags
3040+======================
3041
3042 On the advanced search page it's possible to search for a specific tag.
3043
3044@@ -38,7 +39,8 @@ If an invalid tag name is entered, an error message will be displayed.
3045 allowed after the first character.
3046
3047
3048-== Cross-Site Scripting, or XSS ==
3049+Cross-Site Scripting, or XSS
3050+----------------------------
3051
3052 The tags field and its related messages are properly escaped in order
3053 to prevent XSS.
3054diff --git a/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.txt b/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.txt
3055index b9f7292..00561d1 100644
3056--- a/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.txt
3057+++ b/lib/lp/bugs/stories/bugattachments/xx-delete-bug-attachment.txt
3058@@ -1,4 +1,5 @@
3059-= Deleting bug attachments =
3060+Deleting bug attachments
3061+========================
3062
3063 If some attachment gets added which isn't relevant to the bug, it can be
3064 deleted again from the bug attachment edit page.
3065diff --git a/lib/lp/bugs/stories/bugattachments/xx-display-filesize-attachment.txt b/lib/lp/bugs/stories/bugattachments/xx-display-filesize-attachment.txt
3066index 83571e0..4d94cd4 100644
3067--- a/lib/lp/bugs/stories/bugattachments/xx-display-filesize-attachment.txt
3068+++ b/lib/lp/bugs/stories/bugattachments/xx-display-filesize-attachment.txt
3069@@ -1,4 +1,5 @@
3070-== Display of filesize and mime type of attachments ==
3071+Display of filesize and mime type of attachments
3072+------------------------------------------------
3073
3074 File size and mime type are displayed for each attachment
3075
3076diff --git a/lib/lp/bugs/stories/bugs/xx-add-comment-bugtask-edit.txt b/lib/lp/bugs/stories/bugs/xx-add-comment-bugtask-edit.txt
3077index d2e6dcb..1698d19 100644
3078--- a/lib/lp/bugs/stories/bugs/xx-add-comment-bugtask-edit.txt
3079+++ b/lib/lp/bugs/stories/bugs/xx-add-comment-bugtask-edit.txt
3080@@ -1,4 +1,5 @@
3081-= Add a comment while editing the bugtask =
3082+Add a comment while editing the bugtask
3083+=======================================
3084
3085 When editing a bug task it's possible to add a comment as well. It's not
3086 necessary to actually edit the bug task in order to add the comment,
3087diff --git a/lib/lp/bugs/stories/bugs/xx-add-comment-distribution-no-current-release.txt b/lib/lp/bugs/stories/bugs/xx-add-comment-distribution-no-current-release.txt
3088index b90a49f..f68811c 100644
3089--- a/lib/lp/bugs/stories/bugs/xx-add-comment-distribution-no-current-release.txt
3090+++ b/lib/lp/bugs/stories/bugs/xx-add-comment-distribution-no-current-release.txt
3091@@ -1,4 +1,5 @@
3092-= Add a comment on a bug on a distribution with no current release =
3093+Add a comment on a bug on a distribution with no current release
3094+================================================================
3095
3096 If a bug is reported distribution with no current release, like Gentoo,
3097 it's still possible to add comments to the bug.
3098diff --git a/lib/lp/bugs/stories/bugs/xx-add-comment-with-bugwatch-and-cve.txt b/lib/lp/bugs/stories/bugs/xx-add-comment-with-bugwatch-and-cve.txt
3099index 6228d8c..147cc45 100644
3100--- a/lib/lp/bugs/stories/bugs/xx-add-comment-with-bugwatch-and-cve.txt
3101+++ b/lib/lp/bugs/stories/bugs/xx-add-comment-with-bugwatch-and-cve.txt
3102@@ -1,4 +1,5 @@
3103-= links to remote bug reports and CVEs in bug comments =
3104+links to remote bug reports and CVEs in bug comments
3105+====================================================
3106
3107 When a comment is added to a bug, links to "remote" bug reports and CVEs are
3108 added to the bugwatches resp CVEs related to this bug
3109diff --git a/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.txt b/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.txt
3110index e1c6458..33ce24b 100644
3111--- a/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.txt
3112+++ b/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.txt
3113@@ -1,4 +1,5 @@
3114-= Marking a bug as affecting the user =
3115+Marking a bug as affecting the user
3116+===================================
3117
3118 Users can mark bugs as affecting them. Let's create a sample bug to
3119 try this out.
3120@@ -66,7 +67,8 @@ Back at the bug page, the text changes once again.
3121 This bug affects 1 person, but not you
3122
3123
3124-== Anonymous users ==
3125+Anonymous users
3126+---------------
3127
3128 Anonymous users just see the number of affected users.
3129
3130@@ -87,7 +89,8 @@ appear at all to anonymous users.
3131 None
3132
3133
3134-== Static and dynamic support ==
3135+Static and dynamic support
3136+--------------------------
3137
3138 A bug page contains markup to support both static (no Javascript) and
3139 dynamic (Javascript enabled) scenarios.
3140diff --git a/lib/lp/bugs/stories/bugs/xx-bug-heat-on-bug-page.txt b/lib/lp/bugs/stories/bugs/xx-bug-heat-on-bug-page.txt
3141index d42f14c..141f6e8 100644
3142--- a/lib/lp/bugs/stories/bugs/xx-bug-heat-on-bug-page.txt
3143+++ b/lib/lp/bugs/stories/bugs/xx-bug-heat-on-bug-page.txt
3144@@ -1,4 +1,5 @@
3145-= Bug heat on bug page =
3146+Bug heat on bug page
3147+====================
3148
3149 Bug heat appears on the bug index page:
3150
3151diff --git a/lib/lp/bugs/stories/bugs/xx-bug-hidden-comments.txt b/lib/lp/bugs/stories/bugs/xx-bug-hidden-comments.txt
3152index e92f1ef..31fb476 100644
3153--- a/lib/lp/bugs/stories/bugs/xx-bug-hidden-comments.txt
3154+++ b/lib/lp/bugs/stories/bugs/xx-bug-hidden-comments.txt
3155@@ -1,4 +1,5 @@
3156-= Hide bug comments =
3157+Hide bug comments
3158+=================
3159
3160 Comments that have had their visible attribute set to False
3161 will not show up when browsing the comment list for a bug.
3162diff --git a/lib/lp/bugs/stories/bugs/xx-bug-nomination-table-row.txt b/lib/lp/bugs/stories/bugs/xx-bug-nomination-table-row.txt
3163index b1697d3..f5b0609 100644
3164--- a/lib/lp/bugs/stories/bugs/xx-bug-nomination-table-row.txt
3165+++ b/lib/lp/bugs/stories/bugs/xx-bug-nomination-table-row.txt
3166@@ -1,4 +1,5 @@
3167-= Bug nominations =
3168+Bug nominations
3169+===============
3170
3171 Bug nominations are displayed in the table at the top of the bug page,
3172 using the +bugtasks-and-nominations-table-row view. This view allows
3173diff --git a/lib/lp/bugs/stories/bugs/xx-bug-text-pages.txt b/lib/lp/bugs/stories/bugs/xx-bug-text-pages.txt
3174index aedbffd..d2e9c6d 100644
3175--- a/lib/lp/bugs/stories/bugs/xx-bug-text-pages.txt
3176+++ b/lib/lp/bugs/stories/bugs/xx-bug-text-pages.txt
3177@@ -1,4 +1,5 @@
3178-= Bug Text Pages =
3179+Bug Text Pages
3180+==============
3181
3182 Launchpad provides a way for users to view textual descriptions of bug reports,
3183 as an alternative to the graphical user interface.
3184@@ -43,7 +44,8 @@ toggle away from Fix Released we must be the target owner):
3185 >>> flush_database_updates()
3186
3187
3188-== Text Pages from a Bug Context ==
3189+Text Pages from a Bug Context
3190+-----------------------------
3191
3192 Users can view a textual description of any bug at that bug's text page,
3193 according to the following URL pattern:
3194@@ -167,7 +169,8 @@ The comments are represented as a MIME message.
3195 comment for file with space
3196
3197
3198-== Text Pages from a Bug Task Context ==
3199+Text Pages from a Bug Task Context
3200+----------------------------------
3201
3202 Users can also view a textual description of a bug from the context of a task
3203 relating to that bug, according to the following URL pattern:
3204@@ -234,7 +237,8 @@ The only differences are the download URLs of bug attachments:
3205 http://bugs.launchpad.test/bugs/1/.../+files/bug-patch.diff text/plain
3206 http://bugs.launchpad.test/firefox/+bug/.../+files/bug-patch.diff text/plain
3207
3208-== Duplicate Bugs ==
3209+Duplicate Bugs
3210+--------------
3211
3212 When one bug duplicates another bug, the textual description includes the
3213 duplicated bug's ID:
3214@@ -268,7 +272,8 @@ duplicate bug IDs:
3215 ...
3216
3217
3218-== Bug Lists ==
3219+Bug Lists
3220+---------
3221
3222 Users can also see a list of all bug IDs for a given target by viewing that
3223 product's bugs text page, according to the following URL pattern:
3224@@ -322,7 +327,8 @@ This page is also available for project groups.
3225 4
3226
3227
3228-== Private bugs ==
3229+Private bugs
3230+------------
3231
3232 When a bug is private, the textual description reflects this:
3233
3234diff --git a/lib/lp/bugs/stories/bugs/xx-distributionsourcepackage-bugs.txt b/lib/lp/bugs/stories/bugs/xx-distributionsourcepackage-bugs.txt
3235index da5542b..4608aa3 100644
3236--- a/lib/lp/bugs/stories/bugs/xx-distributionsourcepackage-bugs.txt
3237+++ b/lib/lp/bugs/stories/bugs/xx-distributionsourcepackage-bugs.txt
3238@@ -1,4 +1,5 @@
3239-= Distribution Source Package Bugs =
3240+Distribution Source Package Bugs
3241+================================
3242
3243 This page is like most bug listing pages, but it also has a portlet
3244 "portlet-publishing-details" giving information about the latest published
3245diff --git a/lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt b/lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt
3246index 7d95a21..5be0bc6 100644
3247--- a/lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt
3248+++ b/lib/lp/bugs/stories/bugs/xx-distrorelease-bugs-page.txt
3249@@ -1,4 +1,5 @@
3250-== The Distribution Series Bugs Page ==
3251+The Distribution Series Bugs Page
3252+---------------------------------
3253
3254 The +bugs page for a distribution series presents some basic information the
3255 bugs, as well as a listing.
3256@@ -26,7 +27,8 @@ It also has a link to subscribe to bug mail.
3257 http://bugs.launchpad.test/ubuntu/warty/+subscribe
3258
3259
3260-== Bugs Fixed Elsewhere ==
3261+Bugs Fixed Elsewhere
3262+--------------------
3263
3264 The Bugs frontpage includes the number of bugs that are fixed in some
3265 other context.
3266@@ -46,7 +48,8 @@ The link takes you to the list of the bugs fixed elsewhere.
3267 ...
3268
3269
3270-== Expirable Bugs ==
3271+Expirable Bugs
3272+--------------
3273
3274 The bugs page displays the number of Incomplete, unattended bugs that
3275 can expire when the project has enabled bug expiration.
3276diff --git a/lib/lp/bugs/stories/bugs/xx-duplicate-of-private-bug.txt b/lib/lp/bugs/stories/bugs/xx-duplicate-of-private-bug.txt
3277index 68bf232..c25ee8c 100644
3278--- a/lib/lp/bugs/stories/bugs/xx-duplicate-of-private-bug.txt
3279+++ b/lib/lp/bugs/stories/bugs/xx-duplicate-of-private-bug.txt
3280@@ -1,4 +1,5 @@
3281-= Showing a duplicate of a private bug =
3282+Showing a duplicate of a private bug
3283+====================================
3284
3285 When showing a duplicate of a private bug, the title of the private
3286 bug is not included in the page if the user does not have permission
3287diff --git a/lib/lp/bugs/stories/bugs/xx-edit-no-currentrelease-distribution-task.txt b/lib/lp/bugs/stories/bugs/xx-edit-no-currentrelease-distribution-task.txt
3288index 6a0539e..1d0245d 100644
3289--- a/lib/lp/bugs/stories/bugs/xx-edit-no-currentrelease-distribution-task.txt
3290+++ b/lib/lp/bugs/stories/bugs/xx-edit-no-currentrelease-distribution-task.txt
3291@@ -1,4 +1,5 @@
3292-= Editing a Distribution task with no current release =
3293+Editing a Distribution task with no current release
3294+===================================================
3295
3296 If a distribution doesn't have a current release, like Gentoo, it's
3297 still possible to edit its tasks from the bug page. There are no Gentoo
3298diff --git a/lib/lp/bugs/stories/bugs/xx-front-page-search.txt b/lib/lp/bugs/stories/bugs/xx-front-page-search.txt
3299index c7914a7..7367a15 100644
3300--- a/lib/lp/bugs/stories/bugs/xx-front-page-search.txt
3301+++ b/lib/lp/bugs/stories/bugs/xx-front-page-search.txt
3302@@ -1,4 +1,5 @@
3303-= Searching from the Bugs front page =
3304+Searching from the Bugs front page
3305+==================================
3306
3307 It's possible to search bug reports across all of Launchpad from the
3308 Bugs front page.
3309@@ -14,7 +15,8 @@ Either all projects, or a specific one can be searched.
3310 >>> anon_browser.getControl('One project') is not None
3311 True
3312
3313-== Searching all projects ==
3314+Searching all projects
3315+----------------------
3316
3317 When choosing to search all the projects, all open bug reports in
3318 Launchpad will be searched, and the bug target will be visible in the
3319@@ -69,7 +71,8 @@ the form at the front page.
3320 >>> anon_browser.title
3321 'Search all bug reports'
3322
3323-== Searching one project ==
3324+Searching one project
3325+---------------------
3326
3327 If the user chooses to search only one project, they will be forwarded to
3328 the project's bug listing, and the search will be performed there. If no
3329@@ -116,7 +119,8 @@ support javascript, so a 'Find' link pointing to /bugs is displayed.
3330 'Project' in this context means either a product, distribution or a
3331 project group.
3332
3333-=== Searching a product ===
3334+Searching a product
3335+...................
3336
3337 >>> anon_browser.open('http://bugs.launchpad.test/')
3338 >>> anon_browser.getControl('One project').selected = True
3339@@ -131,7 +135,8 @@ project group.
3340 7 A test bug Evolution
3341 Medium New
3342
3343-=== Searching a project ===
3344+Searching a project
3345+...................
3346
3347 >>> anon_browser.open('http://bugs.launchpad.test/')
3348 >>> anon_browser.getControl('One project').selected = True
3349@@ -146,7 +151,8 @@ project group.
3350 7 A test bug
3351 Evolution Medium New
3352
3353-=== Searching a distribution ===
3354+Searching a distribution
3355+........................
3356
3357 >>> anon_browser.open('http://bugs.launchpad.test/')
3358 >>> anon_browser.getControl('One project').selected = True
3359@@ -161,7 +167,8 @@ project group.
3360 10 another test bug
3361 linux-source-2.6.15 (Ubuntu) Medium New
3362
3363-=== Jumping to a bug ===
3364+Jumping to a bug
3365+................
3366
3367 Like with all other bug searches, it's possible to jump a bug by
3368 specifying only the bug id as the search term.
3369diff --git a/lib/lp/bugs/stories/bugs/xx-front-page-statistics.txt b/lib/lp/bugs/stories/bugs/xx-front-page-statistics.txt
3370index 918a76e..48782c7 100644
3371--- a/lib/lp/bugs/stories/bugs/xx-front-page-statistics.txt
3372+++ b/lib/lp/bugs/stories/bugs/xx-front-page-statistics.txt
3373@@ -1,4 +1,5 @@
3374-= Launchpad Bug Statistics =
3375+Launchpad Bug Statistics
3376+========================
3377
3378 The Bugs front page shows some statistics:
3379
3380diff --git a/lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt b/lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt
3381index f93df7f..b54b9f1 100644
3382--- a/lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt
3383+++ b/lib/lp/bugs/stories/bugs/xx-incomplete-bugs.txt
3384@@ -1,4 +1,5 @@
3385-= Incomplete bugs =
3386+Incomplete bugs
3387+===============
3388
3389 Bugs can have their status set to 'Incomplete', to indicate that more
3390 information is required before they can be confirmed.
3391@@ -79,7 +80,8 @@ incomplete bugs without response.
3392 False
3393
3394
3395-== Bugs that can expire display a notice ==
3396+Bugs that can expire display a notice
3397+-------------------------------------
3398
3399 Projects that use Launchpad to track bugs will expire 'Incomplete'
3400 bugs after the configured expiration age has passed. The rules
3401@@ -129,7 +131,8 @@ date. We alter the date_last_updated field of bug 11 to demonstrate this.
3402 >>> user_browser.getLink('find out why').url
3403 'https://help.launchpad.net/BugExpiry'
3404
3405-== The expirable bug search ==
3406+The expirable bug search
3407+------------------------
3408
3409 Users can view a list of expirable bugs via a link on the project's
3410 bug page. To see the behaviour of the bug listing, we need another
3411@@ -213,7 +216,8 @@ Jokosher's bug page.
3412 12 Copy, Cut and Delete operations should work ...
3413
3414
3415-== Incomplete bugs that do not expire ==
3416+Incomplete bugs that do not expire
3417+----------------------------------
3418
3419 Debian does not use launchpad to track bugs, so its incomplete bugs
3420 cannot expire. No Privileges Person sets a Debian bug to Incomplete,
3421@@ -246,7 +250,8 @@ expirable bugs they read that Debian does not use bug expiration.
3422 updating the project's details. See Bugs/Expiry.
3423
3424
3425-== Default search parameters for incomplete bugs ==
3426+Default search parameters for incomplete bugs
3427+---------------------------------------------
3428
3429 Default bug searches look for both Incomplete (with response) and
3430 Incomplete (without response) bugs.
3431diff --git a/lib/lp/bugs/stories/bugs/xx-project-bugs-page.txt b/lib/lp/bugs/stories/bugs/xx-project-bugs-page.txt
3432index 1ac1b71..6d9ad58 100644
3433--- a/lib/lp/bugs/stories/bugs/xx-project-bugs-page.txt
3434+++ b/lib/lp/bugs/stories/bugs/xx-project-bugs-page.txt
3435@@ -1,4 +1,5 @@
3436-= The ProjectGroup Bugs Page =
3437+The ProjectGroup Bugs Page
3438+==========================
3439
3440 The default page for a ProjectGroup on the bugs domain shows the bug listing
3441 for the ProjectGroup.
3442diff --git a/lib/lp/bugs/stories/bugs/xx-unique-ids-on-bug-page.txt b/lib/lp/bugs/stories/bugs/xx-unique-ids-on-bug-page.txt
3443index 5fc9584..b183d8f 100644
3444--- a/lib/lp/bugs/stories/bugs/xx-unique-ids-on-bug-page.txt
3445+++ b/lib/lp/bugs/stories/bugs/xx-unique-ids-on-bug-page.txt
3446@@ -1,4 +1,5 @@
3447-= Inline Editing of BugTasks =
3448+Inline Editing of BugTasks
3449+==========================
3450
3451 On the bug page, the bugtasks are editable inline. This means that
3452 basically the same form is included on the page for each bugtask. Even
3453diff --git a/lib/lp/bugs/stories/bugtask-management/xx-bug-privileged-statuses.txt b/lib/lp/bugs/stories/bugtask-management/xx-bug-privileged-statuses.txt
3454index fe928ec..ff2d0cd 100644
3455--- a/lib/lp/bugs/stories/bugtask-management/xx-bug-privileged-statuses.txt
3456+++ b/lib/lp/bugs/stories/bugtask-management/xx-bug-privileged-statuses.txt
3457@@ -1,4 +1,5 @@
3458-= Bug Privileged Statuses =
3459+Bug Privileged Statuses
3460+=======================
3461
3462 Some statuses, e.g. Won't Fix, are restricted. Only members of the Bug
3463 Supervisor team may change a bug to that status.
3464@@ -7,7 +8,8 @@ Supervisor team may change a bug to that status.
3465 >>> def print_highlighted_bugtask(browser):
3466 ... print_bug_affects_table(browser.contents, highlighted_only=True)
3467
3468-== Unprivileged users ==
3469+Unprivileged users
3470+------------------
3471
3472 >>> user_browser.open(
3473 ... 'http://bugs.launchpad.test/ubuntu/+source/'
3474@@ -50,7 +52,8 @@ those statuses are not shown in the UI:
3475 ...
3476 zope.testbrowser.browser.ItemNotFoundError: Triaged
3477
3478-== Bug Supervisor ==
3479+Bug Supervisor
3480+--------------
3481
3482 Ubuntu needs a Bug Supervisor first of all:
3483
3484diff --git a/lib/lp/bugs/stories/bugtask-management/xx-edit-email-address-bugtask.txt b/lib/lp/bugs/stories/bugtask-management/xx-edit-email-address-bugtask.txt
3485index f42e154..a238b7c 100644
3486--- a/lib/lp/bugs/stories/bugtask-management/xx-edit-email-address-bugtask.txt
3487+++ b/lib/lp/bugs/stories/bugtask-management/xx-edit-email-address-bugtask.txt
3488@@ -1,4 +1,5 @@
3489-= Editing Email Address bugtasks =
3490+Editing Email Address bugtasks
3491+==============================
3492
3493 >>> import transaction
3494 >>> from zope.component import getUtility
3495@@ -34,7 +35,8 @@
3496 ... print('Status: %s\nImportance: %s' % (status, importance))
3497
3498
3499-== "Normal" (not Email Address) bugtasks ==
3500+"Normal" (not Email Address) bugtasks
3501+-------------------------------------
3502
3503 Normally, it's not possible to edit the status or importance of a
3504 bugtask associated with a bugwatch that is linked to an external bug
3505@@ -95,7 +97,8 @@ And the bug supervisor can't see the widgets either.
3506 Importance: False
3507
3508
3509-== Email Address bugtasks ==
3510+Email Address bugtasks
3511+----------------------
3512
3513 The status and importance of a bugtask with an email address bugwatch
3514 will be editable.
3515diff --git a/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.txt b/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.txt
3516index 2d0e8fe..a7514ff 100644
3517--- a/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.txt
3518+++ b/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.txt
3519@@ -1,4 +1,5 @@
3520-= Searching for bugs with linked branches =
3521+Searching for bugs with linked branches
3522+=======================================
3523
3524 Using the "advanced search" form, we can limit a bug task search
3525 to bugs that are linked to branches or to bugs that are not linked
3526diff --git a/lib/lp/bugs/stories/bugtask-searches/xx-listing-basics.txt b/lib/lp/bugs/stories/bugtask-searches/xx-listing-basics.txt
3527index 2076c5b..e6921f7 100644
3528--- a/lib/lp/bugs/stories/bugtask-searches/xx-listing-basics.txt
3529+++ b/lib/lp/bugs/stories/bugtask-searches/xx-listing-basics.txt
3530@@ -1,4 +1,5 @@
3531-= Bug listings =
3532+Bug listings
3533+============
3534
3535 This test looks at various aspects of bug listings. Here's a very basic
3536 use case: Sample Person views the bug task listing for the Mozilla
3537@@ -35,7 +36,8 @@ But you can make it show fixed ones to:
3538 8 Printing doesn't work mozilla-firefox (Debian) Medium Fix Released
3539
3540
3541-== Example listings ==
3542+Example listings
3543+----------------
3544
3545 An anonymous user views the bug tasks in upstream Ubuntu.
3546
3547@@ -96,7 +98,8 @@ Do an advanced search with dupes turned on and find the duplicate in the results
3548 Mozilla Firefox Low New
3549
3550
3551-== Critical bugs ==
3552+Critical bugs
3553+-------------
3554
3555 A list of critical bugs reported in a given upstream can be viewed by
3556 clicking the "critical" quick search link. Debian has no open critical bugs:
3557@@ -113,7 +116,8 @@ But Firefox has a fixed one that Foo Bar can see:
3558 Mozilla Firefox Critical New
3559
3560
3561-== My todo list ==
3562+My todo list
3563+------------
3564
3565 The "my todo list" link gives the logged in user the ability to
3566 quickly see which bugs have been assigned to them.
3567@@ -130,7 +134,8 @@ This also works for upstream listings:
3568 Mozilla Firefox Critical New
3569
3570
3571-== Looking at unassigned bugs ==
3572+Looking at unassigned bugs
3573+--------------------------
3574
3575 View the unassigned bug tasks listing as user Sample Person.
3576
3577@@ -140,7 +145,8 @@ View the unassigned bug tasks listing as user Sample Person.
3578 Mozilla Firefox Medium New
3579
3580
3581-== Search criteria is persistent ==
3582+Search criteria is persistent
3583+-----------------------------
3584
3585 The bug listing pages save their search criteria.
3586
3587@@ -167,7 +173,8 @@ The result set is filtered to show only New bugs.
3588 2 Blackhole Trash folder Ubuntu Medium New
3589
3590
3591-== Searching for simple strings ==
3592+Searching for simple strings
3593+----------------------------
3594
3595 The bugtask search facility supports searching on a simple text
3596 string.
3597@@ -199,7 +206,8 @@ it'll say so.
3598 ...
3599
3600
3601-== Bug Badge Decoration ==
3602+Bug Badge Decoration
3603+--------------------
3604
3605 We display bug badges for associated branches, specifications, patches, etc.
3606
3607@@ -265,7 +273,8 @@ Patches also appear as badges in bug listings.
3608 Badge: haspatch
3609
3610
3611-== Bug heat in listings ==
3612+Bug heat in listings
3613+--------------------
3614
3615 Bug listings display the bug heat in the last column. Heat is displayed
3616 as a number.
3617diff --git a/lib/lp/bugs/stories/bugtask-searches/xx-old-urls-still-work.txt b/lib/lp/bugs/stories/bugtask-searches/xx-old-urls-still-work.txt
3618index 99d8893..2992c0b 100644
3619--- a/lib/lp/bugs/stories/bugtask-searches/xx-old-urls-still-work.txt
3620+++ b/lib/lp/bugs/stories/bugtask-searches/xx-old-urls-still-work.txt
3621@@ -1,4 +1,5 @@
3622-= Keeping old bookmarks working =
3623+Keeping old bookmarks working
3624+=============================
3625
3626 As part of the bug workflow spec various statuses are being changed
3627 but we need old bookmarks to keep working with the status names.
3628@@ -70,7 +71,8 @@ the new status names in place of the old.
3629 field.status:list=Unconfirmed --> field.status:list=New
3630 field.status:list=Needs Info --> field.status:list=Incomplete
3631
3632-== Assigned, Reported and Subscribed Bugs ==
3633+Assigned, Reported and Subscribed Bugs
3634+--------------------------------------
3635
3636 Bugs searched for in the context of a person or team are redirected
3637 too.
3638diff --git a/lib/lp/bugs/stories/bugtracker/xx-bugtracker-handshake-tokens.txt b/lib/lp/bugs/stories/bugtracker/xx-bugtracker-handshake-tokens.txt
3639index ba0cc92..d8f2e1a 100644
3640--- a/lib/lp/bugs/stories/bugtracker/xx-bugtracker-handshake-tokens.txt
3641+++ b/lib/lp/bugs/stories/bugtracker/xx-bugtracker-handshake-tokens.txt
3642@@ -1,4 +1,5 @@
3643-= Handling BugTracker handshake tokens =
3644+Handling BugTracker handshake tokens
3645+====================================
3646
3647 Launchpad can generate LoginTokens which can then be used to
3648 authenticate it with remote bug trackers. Generating these tokens is
3649diff --git a/lib/lp/bugs/stories/bugwatches/xx-bugwatch-comments.txt b/lib/lp/bugs/stories/bugwatches/xx-bugwatch-comments.txt
3650index 576043d..b64a470 100644
3651--- a/lib/lp/bugs/stories/bugwatches/xx-bugwatch-comments.txt
3652+++ b/lib/lp/bugs/stories/bugwatches/xx-bugwatch-comments.txt
3653@@ -1,4 +1,5 @@
3654-= Comments Imported From a Bug Watch =
3655+Comments Imported From a Bug Watch
3656+==================================
3657
3658 Comments can be imported from remote bugtrackers.
3659
3660diff --git a/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt b/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt
3661index ba403de..2501411 100644
3662--- a/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt
3663+++ b/lib/lp/bugs/stories/bugwatches/xx-bugwatch-errors.txt
3664@@ -1,4 +1,5 @@
3665-= Displaying Bug Watch Errors to the User =
3666+Displaying Bug Watch Errors to the User
3667+=======================================
3668
3669 If an error occurs when importing the remote status of a bug that is
3670 being watched in Launchpad that error will be displayed to users.
3671diff --git a/lib/lp/bugs/stories/cve/xx-cve-link-xss.txt b/lib/lp/bugs/stories/cve/xx-cve-link-xss.txt
3672index 96b75a0..8676508 100644
3673--- a/lib/lp/bugs/stories/cve/xx-cve-link-xss.txt
3674+++ b/lib/lp/bugs/stories/cve/xx-cve-link-xss.txt
3675@@ -1,4 +1,5 @@
3676-== Cross-Site Scripting, or XSS ==
3677+Cross-Site Scripting, or XSS
3678+----------------------------
3679
3680 The CVE Sequence Number field and its related messages are properly
3681 escaped in order to prevent XSS.
3682diff --git a/lib/lp/bugs/stories/feeds/xx-bug-atom.txt b/lib/lp/bugs/stories/feeds/xx-bug-atom.txt
3683index b36d6c8..a71dfc5 100644
3684--- a/lib/lp/bugs/stories/feeds/xx-bug-atom.txt
3685+++ b/lib/lp/bugs/stories/feeds/xx-bug-atom.txt
3686@@ -1,4 +1,5 @@
3687-= Atom Feeds =
3688+Atom Feeds
3689+==========
3690
3691 Atom feeds produce XML not HTML. Therefore we must parse the output as XML
3692 by asking BeautifulSoup to use lxml.
3693@@ -17,7 +18,8 @@ will arrange the entries in a different sort order based on the update
3694 time.
3695
3696
3697-== Latest bugs for a product ==
3698+Latest bugs for a product
3699+-------------------------
3700
3701 This feed gets the latest bugs reported against a product. The feed
3702 includes summary information about the bugs such as ID, title, author,
3703@@ -77,7 +79,8 @@ The Atom feed must have the content-type of "application/atom+xml".
3704 >>> browser.headers['content-type']
3705 'application/atom+xml;charset=utf-8'
3706
3707-== Latest bugs for a project ==
3708+Latest bugs for a project
3709+-------------------------
3710
3711 This feed gets the latest bugs for a project, and has the same type of content
3712 as the latest bugs feed for a product.
3713@@ -138,7 +141,8 @@ Ensure the entries are in reverse chronological order by published date.
3714 >>> assert check_entries_order(entries), (
3715 ... "Published dates are not sorted.")
3716
3717-== Latest bugs for a distro ==
3718+Latest bugs for a distro
3719+------------------------
3720
3721 This feed gets the latest bugs for a distribution, and has the same type
3722 of content as the latest bugs feed for a product.
3723@@ -176,7 +180,8 @@ of content as the latest bugs feed for a product.
3724 >>> assert check_entries_order(entries), (
3725 ... "Published dates are not sorted.")
3726
3727-=== Private teams as assignees ===
3728+Private teams as assignees
3729+..........................
3730
3731 Create a private team and assign an ubuntu distro bug to that team.
3732
3733@@ -222,7 +227,8 @@ Private teams should show as '-'.
3734 -
3735 -
3736
3737-== Latest bugs for a source package ==
3738+Latest bugs for a source package
3739+--------------------------------
3740
3741 This feed gets the latest bugs for a source package, and has the same
3742 type of content as the latest bugs feed for a product.
3743@@ -255,7 +261,8 @@ type of content as the latest bugs feed for a product.
3744 ... "Published dates are not sorted.")
3745
3746
3747-== Latest bugs for a distroseries ==
3748+Latest bugs for a distroseries
3749+------------------------------
3750
3751 This feed gets the latest bugs for a distribution series, and has the same
3752 type of content as the latest bugs feed for a product.
3753@@ -295,7 +302,8 @@ type of content as the latest bugs feed for a product.
3754 ... "Published dates are not sorted.")
3755
3756
3757-== Latest bugs for a product series ==
3758+Latest bugs for a product series
3759+--------------------------------
3760
3761 This feed gets the latest bugs for a product series, and has the same
3762 type of content as the latest bugs feed for a product.
3763@@ -335,7 +343,8 @@ type of content as the latest bugs feed for a product.
3764 ... "Published dates are not sorted.")
3765
3766
3767-== Latest bugs for a person ==
3768+Latest bugs for a person
3769+------------------------
3770
3771 This feed gets the latest bugs for a person.
3772
3773@@ -381,7 +390,8 @@ This feed gets the latest bugs for a person.
3774 ... "Published dates are not sorted.")
3775
3776
3777-== Latest bugs for a team ==
3778+Latest bugs for a team
3779+----------------------
3780
3781 This feed gets the latest bugs for a whole team.
3782 First, make a team responsible for some bugs.
3783@@ -438,7 +448,8 @@ some results.
3784 ... "Published dates are not sorted.")
3785
3786
3787-== Latest bugs for any target ==
3788+Latest bugs for any target
3789+--------------------------
3790
3791 This feed gets the latest bugs reported against any target.
3792
3793@@ -476,7 +487,8 @@ This feed gets the latest bugs reported against any target.
3794 ... "Published dates are not sorted.")
3795
3796
3797-== General bug search ==
3798+General bug search
3799+------------------
3800
3801 This feed is the most useful of them all. Any bug search can be turned into
3802 a feed.
3803@@ -550,7 +562,8 @@ to True.
3804 http://bugs.launchpad.test/~name12
3805
3806
3807-== Results for a single bug ==
3808+Results for a single bug
3809+------------------------
3810
3811 This feed shows the status of a single bug.
3812
3813@@ -570,7 +583,8 @@ This feed shows the status of a single bug.
3814 ... print(link)
3815 <link href="http://feeds.launchpad.test/bugs/1/bug.atom" rel="self"/>
3816
3817-== Feeds Configuration Options ==
3818+Feeds Configuration Options
3819+---------------------------
3820
3821 The max_bug_feed_cache_minutes configuration is provided to allow
3822 overriding the Expires and Cache-Control headers so that the feeds
3823diff --git a/lib/lp/bugs/stories/feeds/xx-bug-html.txt b/lib/lp/bugs/stories/feeds/xx-bug-html.txt
3824index 3b6a6c1..782b8f2 100644
3825--- a/lib/lp/bugs/stories/feeds/xx-bug-html.txt
3826+++ b/lib/lp/bugs/stories/feeds/xx-bug-html.txt
3827@@ -1,4 +1,5 @@
3828-= HTML Feeds =
3829+HTML Feeds
3830+==========
3831
3832 HTML feeds produce snippets of html for inclusion in user's own web pages.
3833 The content of an HTML feed is very similar to an Atom feed, but is formatted
3834@@ -40,7 +41,8 @@ And two for printing the results:
3835 ... return bug_numbers
3836
3837
3838-== Latest bugs for a product ==
3839+Latest bugs for a product
3840+-------------------------
3841
3842 This feed gets the latest bugs reported against a product. The feed includes
3843 summary information about the bugs such as ID, title, author, and a link to
3844@@ -67,7 +69,8 @@ the bug itself.
3845 >>> get_bug_numbers(entries)
3846 [12, 11]
3847
3848-== Latest bugs for a project ==
3849+Latest bugs for a project
3850+-------------------------
3851
3852 This feed gets the latest bugs for a project, and has the same type of content
3853 as the latest bugs feed for a product.
3854@@ -93,7 +96,8 @@ as the latest bugs feed for a product.
3855 >>> get_bug_numbers(entries)
3856 [15, 15, 9, 9, 5, 5, 5, 4, 1, 1, 1]
3857
3858-=== Private teams as assignees ===
3859+Private teams as assignees
3860+..........................
3861
3862 Create a private team and assign a mozilla bug to that team.
3863
3864@@ -121,7 +125,8 @@ Get the mozilla/latest-bugs feed. The previous bug should be included.
3865 >>> get_bug_numbers(entries)
3866 [15, 15, 9, 9, 5, 5, 5, 4, 1, 1, 1]
3867
3868-== Latest bugs for a person ==
3869+Latest bugs for a person
3870+------------------------
3871
3872 This feed gets the latest bugs for a person.
3873
3874@@ -147,7 +152,8 @@ This feed gets the latest bugs for a person.
3875 [15, 15, 12, 11, 10, 9, 9, 7, 7, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1]
3876
3877
3878-== Latest bugs for any target ==
3879+Latest bugs for any target
3880+--------------------------
3881
3882 This feed gets the latest bugs reported against any target.
3883
3884@@ -174,7 +180,8 @@ This feed gets the latest bugs reported against any target.
3885 2, 1, 1, 1]
3886
3887
3888-== General bug search ==
3889+General bug search
3890+------------------
3891
3892 This feed is the most useful of them all. Any bug search can be turned into
3893 a feed.
3894diff --git a/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.txt b/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.txt
3895index 48b4589..52aa4ef 100644
3896--- a/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.txt
3897+++ b/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug-tags.txt
3898@@ -1,4 +1,5 @@
3899-= Adding tags when filing bugs =
3900+Adding tags when filing bugs
3901+============================
3902
3903 Even though there's no input field for adding tags on the normal
3904 +filebug page, it's still possible to add tags to filed bugs on that
3905diff --git a/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug.txt b/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug.txt
3906index f835994..3755680 100644
3907--- a/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug.txt
3908+++ b/lib/lp/bugs/stories/guided-filebug/xx-distro-guided-filebug.txt
3909@@ -1,4 +1,5 @@
3910-= Filing bugs on Distributions =
3911+Filing bugs on Distributions
3912+============================
3913
3914 Like filing bugs on products, filing bugs on distributions involves
3915 first finding out if you're bug has already been reported.
3916@@ -73,7 +74,8 @@ Finally, let's submit the bug.
3917 http://bugs.launchpad.test/ubuntu/+source/mozilla-firefox/+bug/...
3918
3919
3920-== Filing a bug when there are none similar ==
3921+Filing a bug when there are none similar
3922+----------------------------------------
3923
3924 When no similar bugs are found the form works the same but appears
3925 different in the user agent.
3926diff --git a/lib/lp/bugs/stories/guided-filebug/xx-filebug-attachments.txt b/lib/lp/bugs/stories/guided-filebug/xx-filebug-attachments.txt
3927index 4843c14..ac1f245 100644
3928--- a/lib/lp/bugs/stories/guided-filebug/xx-filebug-attachments.txt
3929+++ b/lib/lp/bugs/stories/guided-filebug/xx-filebug-attachments.txt
3930@@ -1,11 +1,13 @@
3931-= Adding attachments when filing a bug =
3932+Adding attachments when filing a bug
3933+====================================
3934
3935 It is possible to add attachments when filing a bug. The tests in this
3936 file will cover this functionality for both the guided and advanced
3937 filebug forms.
3938
3939
3940-== Guided filebug form ==
3941+Guided filebug form
3942+-------------------
3943
3944 Adding an attachment to a new bug is part of the second step of the
3945 guided filebug form.
3946@@ -50,7 +52,8 @@ No Privileges Person can see the attachment in the attachments portlet.
3947 'http://bugs.launchpad.test/firefox/+bug/.../+attachment/.../+files/ex...'
3948
3949
3950-== Empty Attachment Fields ==
3951+Empty Attachment Fields
3952+-----------------------
3953
3954 Sometimes browsers submit values empty fields, leading them to being
3955 treated as non-empty by the receiving view. The attachment form will
3956diff --git a/lib/lp/bugs/stories/guided-filebug/xx-filebug-tags.txt b/lib/lp/bugs/stories/guided-filebug/xx-filebug-tags.txt
3957index f01789f..94d1640 100644
3958--- a/lib/lp/bugs/stories/guided-filebug/xx-filebug-tags.txt
3959+++ b/lib/lp/bugs/stories/guided-filebug/xx-filebug-tags.txt
3960@@ -1,7 +1,9 @@
3961-= Adding tags =
3962+Adding tags
3963+===========
3964
3965
3966-== Normal bug filing page ==
3967+Normal bug filing page
3968+----------------------
3969
3970 On the normal +filebug page, tags can be added to the bug as the bug
3971 is being filed.
3972@@ -25,7 +27,8 @@ is being filed.
3973 unofficial-tag foo
3974
3975
3976-== Pre-populating the tags field ==
3977+Pre-populating the tags field
3978+-----------------------------
3979
3980 For people wanting to pre-fill the tags field with certain tags, it's
3981 possible to do so by supplying a 'field.tags' URL parameter.
3982diff --git a/lib/lp/bugs/stories/guided-filebug/xx-options-for-bug-supervisors.txt b/lib/lp/bugs/stories/guided-filebug/xx-options-for-bug-supervisors.txt
3983index f5d8da2..ed42952 100644
3984--- a/lib/lp/bugs/stories/guided-filebug/xx-options-for-bug-supervisors.txt
3985+++ b/lib/lp/bugs/stories/guided-filebug/xx-options-for-bug-supervisors.txt
3986@@ -1,4 +1,5 @@
3987-= Bug filing options for bug supervisors =
3988+Bug filing options for bug supervisors
3989+======================================
3990
3991 During the bug filing process, normal or advanced, bug supervisors are
3992 able to set the status and importance of the bug being filed, can
3993@@ -55,7 +56,8 @@ Users who are bug supervisors can see these options:
3994 <Control name='field.assignee' type='text'>
3995
3996
3997-== Using these extra options ==
3998+Using these extra options
3999+-------------------------
4000
4001 >>> from lp.bugs.tests.bug import print_bug_affects_table
4002
4003diff --git a/lib/lp/bugs/stories/guided-filebug/xx-productseries-guided-filebug.txt b/lib/lp/bugs/stories/guided-filebug/xx-productseries-guided-filebug.txt
4004index 699005f..af6d155 100644
4005--- a/lib/lp/bugs/stories/guided-filebug/xx-productseries-guided-filebug.txt
4006+++ b/lib/lp/bugs/stories/guided-filebug/xx-productseries-guided-filebug.txt
4007@@ -1,4 +1,5 @@
4008-= Filing a bug from the product series page =
4009+Filing a bug from the product series page
4010+=========================================
4011
4012 The product series Bugs frontpage includes a link to report a bug.
4013
4014diff --git a/lib/lp/bugs/stories/guided-filebug/xx-sorting-by-relevance.txt b/lib/lp/bugs/stories/guided-filebug/xx-sorting-by-relevance.txt
4015index 994b4d1..f021320 100644
4016--- a/lib/lp/bugs/stories/guided-filebug/xx-sorting-by-relevance.txt
4017+++ b/lib/lp/bugs/stories/guided-filebug/xx-sorting-by-relevance.txt
4018@@ -1,4 +1,5 @@
4019-= Sorting the similar bugs found by relevance =
4020+Sorting the similar bugs found by relevance
4021+===========================================
4022
4023 When displaying the similar bugs, we display only a small number, even
4024 though the search usually returns a huge number of results. For this
4025diff --git a/lib/lp/bugs/stories/upstream-bugprivacy/xx-upstream-bug-privacy.txt b/lib/lp/bugs/stories/upstream-bugprivacy/xx-upstream-bug-privacy.txt
4026index cbc2de2..00bea23 100644
4027--- a/lib/lp/bugs/stories/upstream-bugprivacy/xx-upstream-bug-privacy.txt
4028+++ b/lib/lp/bugs/stories/upstream-bugprivacy/xx-upstream-bug-privacy.txt
4029@@ -62,7 +62,8 @@ bug listing.
4030 ...<div class="importance importanceUNDECIDED"> Undecided </div>...
4031 ...<span class="bugnumber">#BUG-ID</span>...
4032
4033-== Checking basic access to the private bug pages ==
4034+Checking basic access to the private bug pages
4035+----------------------------------------------
4036
4037 Trying to access the task edit page of a task on a private bug
4038 fails, because we pretend that inaccessible private bugs do not exist.
4039diff --git a/lib/lp/bugs/stories/webservice/xx-bug-target.txt b/lib/lp/bugs/stories/webservice/xx-bug-target.txt
4040index f4e4c45..6017625 100644
4041--- a/lib/lp/bugs/stories/webservice/xx-bug-target.txt
4042+++ b/lib/lp/bugs/stories/webservice/xx-bug-target.txt
4043@@ -1,10 +1,12 @@
4044-= Introduction =
4045+Introduction
4046+============
4047
4048 Many exposed objects in the API provide IBugTarget, including
4049 projects, distributions, distribution series, and source packages.
4050
4051
4052-== bug_reporting_guidelines ==
4053+bug_reporting_guidelines
4054+------------------------
4055
4056 All bug targets have a read/write bug_reporting_guidelines property.
4057
4058@@ -38,7 +40,8 @@ Not everyone can modify it however:
4059 (<Product at ...>, 'bug_reporting_guidelines', 'launchpad.BugSupervisor')
4060
4061
4062-== Official Bug Tags ==
4063+Official Bug Tags
4064+-----------------
4065
4066 We can access official bug tag targets and add and remove tags. We
4067 create a new product, owned by ~salgado.
4068@@ -138,7 +141,8 @@ We can also access official tags as a list.
4069 ... dumps({'official_bug_tags': [u'foo', u'bar']})))
4070 HTTP/1.1 209 Content Returned...
4071
4072-== bug_supervisor ==
4073+bug_supervisor
4074+--------------
4075
4076 We can retrieve or set a person or team as the bug supervisor for projects.
4077
4078diff --git a/lib/lp/bugs/stories/webservice/xx-hide-comments.txt b/lib/lp/bugs/stories/webservice/xx-hide-comments.txt
4079index dd5510e..8a2a6e1 100644
4080--- a/lib/lp/bugs/stories/webservice/xx-hide-comments.txt
4081+++ b/lib/lp/bugs/stories/webservice/xx-hide-comments.txt
4082@@ -1,4 +1,5 @@
4083-= Hide bug comments =
4084+Hide bug comments
4085+=================
4086
4087 Bug comments can be hidden by setting visible to False. There is
4088 a corresponding API method to do this. Call the method with the
4089diff --git a/lib/lp/bugs/tests/buglinktarget.txt b/lib/lp/bugs/tests/buglinktarget.txt
4090index c8c4099..119c94e 100644
4091--- a/lib/lp/bugs/tests/buglinktarget.txt
4092+++ b/lib/lp/bugs/tests/buglinktarget.txt
4093@@ -1,4 +1,5 @@
4094-= IBugLinkTarget Interface =
4095+IBugLinkTarget Interface
4096+========================
4097
4098 Launchpad includes Malone, the powerful bug tracker. One of the best
4099 features of Malone is the ability to track a bug in multiple products
4100@@ -22,7 +23,8 @@ shouldn't have any bugs linked to it at the start of the test.)
4101 >>> verifyObject(IBugLinkTarget, target)
4102 True
4103
4104-== linkBug() ==
4105+linkBug()
4106+---------
4107
4108 >>> bugset = getUtility(IBugSet)
4109 >>> bug1 = bugset.get(1)
4110@@ -100,7 +102,8 @@ if they are an administrator:
4111 >>> target.linkBug(private_bug, admin)
4112 True
4113
4114-== bugs ==
4115+bugs
4116+----
4117
4118 The list of bugs linked to the target should be available in the bugs
4119 attributes:
4120@@ -108,7 +111,8 @@ attributes:
4121 >>> [bug.id for bug in target.bugs]
4122 [1, 2, 6]
4123
4124-== unlinkBug() ==
4125+unlinkBug()
4126+-----------
4127
4128 The unlinkBug() method is used to remove a link between a bug and
4129 the target.
4130@@ -169,7 +173,8 @@ the bug or if they are an administrator.
4131 >>> target.unlinkBug(private_bug, admin)
4132 True
4133
4134-== Cleanup ==
4135+Cleanup
4136+-------
4137
4138 # Unregister event listeners.
4139 >>> linked_event_listener.cleanUp()
4140diff --git a/lib/lp/bugs/tests/trac-xmlrpc-transport.txt b/lib/lp/bugs/tests/trac-xmlrpc-transport.txt
4141index 66de8e7..7f52f95 100644
4142--- a/lib/lp/bugs/tests/trac-xmlrpc-transport.txt
4143+++ b/lib/lp/bugs/tests/trac-xmlrpc-transport.txt
4144@@ -1,4 +1,5 @@
4145-= TestTracXMLRPCTransport =
4146+TestTracXMLRPCTransport
4147+=======================
4148
4149 TestTracXMLRPCTransport is an XML-RPC transport which simulates the LP
4150 Trac plugin. It can be used to avoid network traffic while testing, and
4151@@ -26,7 +27,8 @@ some cookie is set.
4152 >>> trac_transport.setCookie('trac_auth=auth_cookie')
4153
4154
4155-== launchpad.bugtracker_version() ==
4156+launchpad.bugtracker_version()
4157+------------------------------
4158
4159 bugtracker_version() returns a list of
4160 [Trac version, plugin version, dupe knowledge]. The version numbers are
4161@@ -37,7 +39,8 @@ instance knows how to track duplicate bugs.
4162 ['0.11.0', '1.0', False]
4163
4164
4165-== launchpad.time_snapshot() ==
4166+launchpad.time_snapshot()
4167+-------------------------
4168
4169 time_snapshot returns information about what the Trac instance thinks
4170 the current time is. It returns the local time zone, the local time, and
4171@@ -57,7 +60,8 @@ isn't suitable.
4172 US/Eastern 1206328061 1206342461
4173
4174
4175-== launchpad.bug_info() ==
4176+launchpad.bug_info()
4177+--------------------
4178
4179 bug_info() returns, as the name suggests, info about a given bug or set
4180 of bugs. It takes two parameters: level, an integer indicating how much
4181@@ -215,7 +219,8 @@ are in the bugs list being returned.
4182 [{'id': '1'}]
4183
4184
4185-== launchpad.get_comments() ==
4186+launchpad.get_comments()
4187+------------------------
4188
4189 get_comments() returns a list of comment dicts. The comment dicts
4190 returned correspond to the comment IDs passed in the comments parameter.
4191@@ -245,7 +250,8 @@ returned correspond to the comment IDs passed in the comments parameter.
4192
4193
4194
4195-== launchpad.add_comment() ==
4196+launchpad.add_comment()
4197+-----------------------
4198
4199 The Trac XML-RPC API allows us to push comments to remote bug trackers
4200 via the launchpad.add_comment() method.
4201@@ -281,7 +287,8 @@ The comment will be included in the remote bug's comments.
4202 user: launchpad
4203
4204
4205-== Getting and setting the Launchpad bug ID ==
4206+Getting and setting the Launchpad bug ID
4207+----------------------------------------
4208
4209 The Trac XML-RPC API allows us to tell the remote tracker which
4210 Launchpad bug links to a particular one of its bugs and also allows us
4211diff --git a/lib/lp/buildmaster/doc/buildqueue.txt b/lib/lp/buildmaster/doc/buildqueue.txt
4212index e55c68a..f864ac2 100644
4213--- a/lib/lp/buildmaster/doc/buildqueue.txt
4214+++ b/lib/lp/buildmaster/doc/buildqueue.txt
4215@@ -1,4 +1,5 @@
4216-= BuildQueue =
4217+BuildQueue
4218+==========
4219
4220 BuildQueue class represents the run-time-records of builds being
4221 processed.
4222@@ -90,7 +91,8 @@ set 'manual' attribute atomically. For this we use manualScore:
4223 (True, 1000)
4224
4225
4226-== Dispatching and Reseting jobs ==
4227+Dispatching and Reseting jobs
4228+-----------------------------
4229
4230 The sampledata contains an active job, being built by the 'bob'
4231 builder.
4232@@ -151,7 +153,8 @@ the specified builder.
4233 BUILDING
4234
4235
4236-== BuildQueueSet utility ==
4237+BuildQueueSet utility
4238+---------------------
4239
4240 Now perform the tests for the BuildQueue zope utility, BuildQueueSet.
4241 Check if the instance returned as utility corresponds to its
4242diff --git a/lib/lp/buildmaster/stories/builder-views.txt b/lib/lp/buildmaster/stories/builder-views.txt
4243index f93d409..67d5ba3 100644
4244--- a/lib/lp/buildmaster/stories/builder-views.txt
4245+++ b/lib/lp/buildmaster/stories/builder-views.txt
4246@@ -1,4 +1,5 @@
4247-= Builder View Classes and Pages =
4248+Builder View Classes and Pages
4249+==============================
4250
4251 >>> from zope.component import getMultiAdapter, getUtility
4252 >>> from lp.buildmaster.interfaces.builder import IBuilderSet
4253@@ -28,7 +29,8 @@ mode button.
4254 Switch to manual-mode
4255
4256
4257-== Builder history ==
4258+Builder history
4259+---------------
4260
4261 Let's instantiate a view for +history:
4262
4263@@ -49,7 +51,8 @@ mock_form:
4264 5
4265
4266
4267-== Builder edit ==
4268+Builder edit
4269+------------
4270
4271 Let's instantiate the view for +edit and check that the correct title,
4272 fields and actions are displayed:
4273@@ -118,7 +121,8 @@ After editing a builder, a relevant notification is added to the view.
4274 The builder &quot;Bob The Builder&quot; was updated successfully.
4275
4276
4277-== Builders building private jobs ==
4278+Builders building private jobs
4279+------------------------------
4280
4281 In order to restrict access to private PPA details in general, we also
4282 need to be able to hide the fact that a builder is building a private
4283@@ -229,7 +233,8 @@ again.
4284 >>> login(ANONYMOUS)
4285
4286
4287-== BuilderSet view ==
4288+BuilderSet view
4289+---------------
4290
4291 BuilderSetView offer a way to treat the currently registered builders
4292 in categories. They are:
4293diff --git a/lib/lp/buildmaster/stories/xx-buildfarm-index.txt b/lib/lp/buildmaster/stories/xx-buildfarm-index.txt
4294index 5ab1e01..16932a5 100644
4295--- a/lib/lp/buildmaster/stories/xx-buildfarm-index.txt
4296+++ b/lib/lp/buildmaster/stories/xx-buildfarm-index.txt
4297@@ -1,4 +1,5 @@
4298-= BuildFarm page =
4299+BuildFarm page
4300+==============
4301
4302 The BuildFarm page is accessible from the root page, although we don't
4303 link to it yet because we are not yet sure of the benefits of doing
4304diff --git a/lib/lp/code/doc/branch-karma.txt b/lib/lp/code/doc/branch-karma.txt
4305index f780602..5b44699 100644
4306--- a/lib/lp/code/doc/branch-karma.txt
4307+++ b/lib/lp/code/doc/branch-karma.txt
4308@@ -1,4 +1,5 @@
4309-= Karma for branch related activity =
4310+Karma for branch related activity
4311+=================================
4312
4313 We want people to register their branches on Launchpad, and also to
4314 link their branches to bugs and specs, so we give them some karma for
4315@@ -29,7 +30,8 @@ give karma for it.
4316 >>> karma_helper = KarmaAssignedEventListener(show_person=True)
4317 >>> karma_helper.register_listener()
4318
4319-== Registering branches ==
4320+Registering branches
4321+--------------------
4322
4323 Karma is added for registering a branch.
4324
4325@@ -44,7 +46,8 @@ However, no karma is added for junk branches.
4326 >>> junk_branch = factory.makePersonalBranch(owner=eric)
4327
4328
4329-== Linking bugs and branches ==
4330+Linking bugs and branches
4331+-------------------------
4332
4333 You get karma for linking a bug to a branch.
4334
4335@@ -59,7 +62,8 @@ As long as it is not a junk branch.
4336 >>> branch_link = bug.linkBranch(junk_branch, eric)
4337
4338
4339-== Linking blueprints and branches ==
4340+Linking blueprints and branches
4341+-------------------------------
4342
4343 You get karma for linking a blueprint to a branch.
4344
4345diff --git a/lib/lp/code/doc/branch-notifications.txt b/lib/lp/code/doc/branch-notifications.txt
4346index 00696fe..d59000b 100644
4347--- a/lib/lp/code/doc/branch-notifications.txt
4348+++ b/lib/lp/code/doc/branch-notifications.txt
4349@@ -1,4 +1,5 @@
4350-= Email Notifications for Branches =
4351+Email Notifications for Branches
4352+================================
4353
4354 Only subscribers get email notifications. If the owner/author of the
4355 branch wants to receive emails, then they need to subscribe to the
4356@@ -12,7 +13,8 @@ There are two situations where emails are sent out for branches:
4357 - when the branch scanner scans new revisions in the branches history
4358
4359
4360-== Email Format ==
4361+Email Format
4362+------------
4363
4364 All branch notification emails use a standard email template.
4365
4366@@ -77,7 +79,8 @@ also sends the email to the list of recipients.
4367 >>> branch.unsubscribe(branch.owner, branch.owner)
4368
4369
4370-== Subscriptions ==
4371+Subscriptions
4372+-------------
4373
4374 When users subscribe to the branch, they specify which branch
4375 modified events they want to receive email for. This is one of the
4376@@ -192,7 +195,8 @@ to allow email filtering.
4377 mark@example.com Send entire diff Subscriber
4378
4379
4380-== Limiting the size of diff received by email ==
4381+Limiting the size of diff received by email
4382+-------------------------------------------
4383
4384 # A helper function to print out the To header and
4385 # email body
4386@@ -359,7 +363,8 @@ Unsubscribe everybody.
4387 0
4388
4389
4390-== Group subscriptions ==
4391+Group subscriptions
4392+-------------------
4393
4394 If a group is subscribed the emails are sent to the members of that team.
4395 If an individual is also subscribed to the branch, then the setting
4396@@ -398,7 +403,8 @@ that is used rather than the email addresses of the seven members.
4397 support@ubuntu.com 1000 lines Subscriber @ubuntu-team
4398
4399
4400-== Attribute emails ==
4401+Attribute emails
4402+----------------
4403
4404 # Another helper function to print out the To, From and Subject headers
4405 # and the email body
4406@@ -522,7 +528,8 @@ something like this:
4407 http://code.launchpad.test/~name12/firefox/new-name/+edit-subscription
4408
4409
4410-== Unicode in emails ==
4411+Unicode in emails
4412+-----------------
4413
4414 All the text fields of a branch are considered unicode, so the email
4415 must also handle the unicode.
4416@@ -551,7 +558,8 @@ must also handle the unicode.
4417 http://code.launchpad.test/~name12/firefox/new-name/+edit-subscription
4418
4419
4420-== Modifications by users other than the branch owner ==
4421+Modifications by users other than the branch owner
4422+--------------------------------------------------
4423
4424 If another user modified some branch attributes, then an email is sent
4425 to the branch owner.
4426diff --git a/lib/lp/code/doc/code-jobs.txt b/lib/lp/code/doc/code-jobs.txt
4427index 991cca4..732d9d6 100644
4428--- a/lib/lp/code/doc/code-jobs.txt
4429+++ b/lib/lp/code/doc/code-jobs.txt
4430@@ -1,9 +1,11 @@
4431-= Code Jobs =
4432+Code Jobs
4433+=========
4434
4435 The addition of the Job table provides a generic way to have server side jobs
4436 processing events generated from the web UI.
4437
4438-== Branch Jobs ==
4439+Branch Jobs
4440+-----------
4441
4442 This type of job processes events that have been generated for branches.
4443
4444@@ -18,7 +20,8 @@ created.
4445 The BranchJob table has a json_data field to hold details specific
4446 to the particular type of subscription job.
4447
4448-=== BranchJobType.REVISION ===
4449+BranchJobType.REVISION
4450+......................
4451
4452 The json data would hold:
4453 from_revno - the first revision number to process
4454@@ -26,19 +29,22 @@ The json data would hold:
4455 to_revno - the last revision number to process
4456 to_revid - the revision id of the to revno
4457
4458-=== BranchJobType.ATTRIBUTE ===
4459+BranchJobType.ATTRIBUTE
4460+.......................
4461
4462 The json data would hold the from and to values of the change, and for values
4463 where we only show the new values, it would hold those too.
4464
4465-=== BranchJobType.IMPORT ===
4466+BranchJobType.IMPORT
4467+....................
4468
4469 The json data here would effectively store the text of the message. Used
4470 primarily in the status changes on the import job itself. Perhpas this should
4471 be combined with the attribute type email and have a general preamble for the
4472 generated email.
4473
4474-== Branch Merge Proposal Jobs ==
4475+Branch Merge Proposal Jobs
4476+--------------------------
4477
4478 Jobs for merge proposals are slightly different from individual branch
4479 subscription based emails as merge proposal jobs end up sending emails to
4480@@ -52,22 +58,26 @@ subscribers of both the source and target branches.
4481
4482 Each job also has some optional json data.
4483
4484-=== BranchMergeProposalJobType.NEW ===
4485+BranchMergeProposalJobType.NEW
4486+..............................
4487
4488 The json data includes the identity of the initial comment if one was made,
4489 and the initial reviewer if one was requested.
4490
4491
4492-=== BranchMergeProposalJobType.COMMENT ===
4493+BranchMergeProposalJobType.COMMENT
4494+..................................
4495
4496 The json data here refers to the identify of the commit message.
4497
4498-=== BranchMergeProposalJobType.NEW_REVIEWER ===
4499+BranchMergeProposalJobType.NEW_REVIEWER
4500+.......................................
4501
4502 The json data here refers to the new reviewer and the type of review
4503 requested.
4504
4505-=== BranchMergeProposalJobType.DIFF_GENERATION ===
4506+BranchMergeProposalJobType.DIFF_GENERATION
4507+..........................................
4508
4509 The dynamic moving diff has been determined to be out of date, and a new diff
4510 needs to be generated. This is processed by the merge analysis deamon.
4511diff --git a/lib/lp/code/doc/codeimport-job.txt b/lib/lp/code/doc/codeimport-job.txt
4512index 0e83ca1..e28e6d8 100644
4513--- a/lib/lp/code/doc/codeimport-job.txt
4514+++ b/lib/lp/code/doc/codeimport-job.txt
4515@@ -1,4 +1,5 @@
4516-= Code Import Jobs =
4517+Code Import Jobs
4518+================
4519
4520 A CodeImportJob is a record of a pending or running code import job.
4521
4522@@ -45,7 +46,8 @@ modified using the CodeImportJobWorkflow utility.
4523 True
4524
4525
4526-== Sample data of interest ==
4527+Sample data of interest
4528+-----------------------
4529
4530 There are two CodeImport objects of interest in the sample data.
4531
4532@@ -79,7 +81,8 @@ required to initiate the action.
4533 >>> nopriv = person_set.getByName('no-priv')
4534
4535
4536-== Test helpers ==
4537+Test helpers
4538+------------
4539
4540 The NewEvents class helps testing the creation of CodeImportEvent
4541 objects.
4542@@ -88,7 +91,8 @@ objects.
4543 ... NewEvents)
4544
4545
4546-== Testing whether a job is overdue ==
4547+Testing whether a job is overdue
4548+--------------------------------
4549
4550 CodeImportJob objects have a date_due attribute that specifies when the
4551 job should ideally be started. If the date_due is in the past, the job
4552@@ -129,7 +133,8 @@ current transaction, then the job is overdue.
4553 True
4554
4555
4556-== Creating a new job ==
4557+Creating a new job
4558+------------------
4559
4560 CodeImportJob objects are created using the CodeImportJobWorkflow.newJob
4561 method.
4562@@ -158,7 +163,8 @@ the date due may be UTC_NOW or a timestamp in the future. This is
4563 covered in detail in the test_codeimportjob.py file.
4564
4565
4566-== Deleting a pending job ==
4567+Deleting a pending job
4568+----------------------
4569
4570 In normal use, the only case where a job object is deleted explicitly is
4571 when the review status of a code import is modified. This case is
4572@@ -173,7 +179,8 @@ associated job is not running, the job is deleted.
4573 None
4574
4575
4576-== Requesting a job run ==
4577+Requesting a job run
4578+--------------------
4579
4580 When a job is pending, users can request that it be run as soon as
4581 possible.
4582@@ -213,7 +220,8 @@ another user, present a message explaining that this has happened.
4583 ~vcs-imports/gnome-terminal/import was already requested by no-priv.
4584
4585
4586-== Starting a job ==
4587+Starting a job
4588+--------------
4589
4590 When a job is about to performed by a code import worker, the startJob
4591 workflow method updates the job's fields to indicate that it is now
4592@@ -235,7 +243,8 @@ The event is also recorded in the CodeImportEvent audit trail.
4593 START ~vcs-imports/gnome-terminal/import bazaar-importer
4594
4595
4596-== Recording progress on a job ==
4597+Recording progress on a job
4598+---------------------------
4599
4600 As the code import worker progresses, it calls the updateHeartbeat
4601 method at least every minute to indicate that it is still progressing.
4602diff --git a/lib/lp/code/doc/codeimport-result.txt b/lib/lp/code/doc/codeimport-result.txt
4603index 0e0fc26..402de61 100644
4604--- a/lib/lp/code/doc/codeimport-result.txt
4605+++ b/lib/lp/code/doc/codeimport-result.txt
4606@@ -1,4 +1,5 @@
4607-= Code Import Results =
4608+Code Import Results
4609+===================
4610
4611 A CodeImportResult is a record of a completed code import job. They
4612 are accessed via a utility registered for the ICodeImportResultSet
4613@@ -19,7 +20,8 @@ member of the vcs-imports team and can access the objects freely.
4614
4615 >>> login('david.allouche@canonical.com')
4616
4617-== Creating CodeImportResults ==
4618+Creating CodeImportResults
4619+--------------------------
4620
4621 Creating CodeImportResult objects is usually done by the finishJob()
4622 method of the CodeImportWorkflow utility, but here we use the object
4623@@ -85,7 +87,8 @@ A helper property exists to give the duration of the job run.
4624 4:00:00
4625
4626
4627-== Retrieving CodeImportResults ==
4628+Retrieving CodeImportResults
4629+----------------------------
4630
4631 The CodeImportResult objects for a given import can be retrieved in
4632 reverse chronological order with the results attribute on a code import.
4633diff --git a/lib/lp/code/doc/codereviewcomment.txt b/lib/lp/code/doc/codereviewcomment.txt
4634index 950915f..8023afd 100644
4635--- a/lib/lp/code/doc/codereviewcomment.txt
4636+++ b/lib/lp/code/doc/codereviewcomment.txt
4637@@ -1,4 +1,5 @@
4638-= Code review comments =
4639+Code review comments
4640+====================
4641
4642 When code is proposed to be merged, it's common to perform a review of
4643 that code, which is often in the form of a conversation. The reviewer
4644@@ -13,7 +14,8 @@ It has an IMessage as a member (in a one-to-one relationship), a vote
4645 about.
4646
4647
4648-== Creating CodeReviewComments ==
4649+Creating CodeReviewComments
4650+---------------------------
4651
4652 CodeReviewComments are created from their BranchMergeProposals:
4653
4654@@ -101,7 +103,8 @@ Now run the pending job to send the email.
4655 True
4656
4657
4658-== Interfaces ==
4659+Interfaces
4660+----------
4661
4662 The CodeReviewComment must implement the ICodeReviewComment interface.
4663
4664diff --git a/lib/lp/code/doc/revision.txt b/lib/lp/code/doc/revision.txt
4665index e514d69..054aa34 100644
4666--- a/lib/lp/code/doc/revision.txt
4667+++ b/lib/lp/code/doc/revision.txt
4668@@ -1,10 +1,12 @@
4669-= Bazaar Revisions =
4670+Bazaar Revisions
4671+================
4672
4673 Branches are collection of revisions, and a revision can exist independently
4674 from any branch. Revisions are created automatically by scanning branches,
4675 they have no creation interface and Launchpad cannot create or modify them.
4676
4677-== Interfaces ==
4678+Interfaces
4679+----------
4680
4681 >>> from lp.services.database.interfaces import IStore
4682 >>> from lp.testing import verifyObject
4683@@ -27,7 +29,8 @@ they have no creation interface and Launchpad cannot create or modify them.
4684 ... IStore(BranchRevision).find(BranchRevision).any())
4685 True
4686
4687-== Creating revisions ==
4688+Creating revisions
4689+------------------
4690
4691 The creator of a revision is identified by a RevisionAuthor. A RevisionAuthor
4692 is not a person because that is only an informational attribute, and even if
4693@@ -61,7 +64,8 @@ while the date_created is the time when the database record was created.
4694 ... revision_author=author, revision_id=revision_id_1,
4695 ... revision_date=date)
4696
4697-== Parents ==
4698+Parents
4699+-------
4700
4701 Bazaar revisions can have multiple parents, the "leftmost" parent is the
4702 revision that was used as a base when committing, other parents are used to
4703@@ -78,7 +82,8 @@ we can represent revisions whose at least one parent is a ghost revision.
4704 >>> rev2_parent = RevisionParent(sequence=0, revision=revision_2,
4705 ... parent_id=revision_1.revision_id)
4706
4707-== Branch ancestry ==
4708+Branch ancestry
4709+---------------
4710
4711 Revisions are associated to branches through the BranchRevision table. A given
4712 revision may appear in different positions in different branches thanks to
4713@@ -98,7 +103,8 @@ BranchRevision rows are created using `Branch.createBranchRevision`.
4714 >>> rev_no_1.branch == rev_no_2.branch == branch
4715 True
4716
4717-=== Accessing BranchRevision ===
4718+Accessing BranchRevision
4719+........................
4720
4721 >>> branch = getUtility(IBranchLookup).getByUniqueName(
4722 ... '~name12/+junk/junk.contrib')
4723@@ -161,7 +167,8 @@ history of the branch.
4724 foo@localhost-20051031170357-1301ad6d387feb23
4725
4726
4727-=== Deleting BranchRevisions ===
4728+Deleting BranchRevisions
4729+........................
4730
4731 If a branch gets overwritten or some revisions get uncommitted,
4732 Launchpad's view of the branch will differ from the actual state of the
4733@@ -211,7 +218,8 @@ may be referenced by some other branch):
4734 foo@localhost-20051031170357-1301ad6d387feb23
4735
4736
4737-== IRevisionSet.new() ==
4738+IRevisionSet.new()
4739+------------------
4740
4741 Revision objects can be created using the IRevisionSet utility.
4742 Associated RevisionAuthor and RevisionParent objects will be created
4743diff --git a/lib/lp/code/stories/branches/package-branch-merge-proposals.txt b/lib/lp/code/stories/branches/package-branch-merge-proposals.txt
4744index aa63f94..298659e 100644
4745--- a/lib/lp/code/stories/branches/package-branch-merge-proposals.txt
4746+++ b/lib/lp/code/stories/branches/package-branch-merge-proposals.txt
4747@@ -1,4 +1,5 @@
4748-= Package branch merge proposals =
4749+Package branch merge proposals
4750+==============================
4751
4752 Package branches can be used for merge proposals just like normal upstream
4753 branches.
4754diff --git a/lib/lp/code/stories/branches/package-branch-merges-with-product-branches.txt b/lib/lp/code/stories/branches/package-branch-merges-with-product-branches.txt
4755index fd71f6a..9dfe4e0 100644
4756--- a/lib/lp/code/stories/branches/package-branch-merges-with-product-branches.txt
4757+++ b/lib/lp/code/stories/branches/package-branch-merges-with-product-branches.txt
4758@@ -1,4 +1,5 @@
4759-= Package branch merging with product branches =
4760+Package branch merging with product branches
4761+============================================
4762
4763 If the source package is linked to the product, then package branches for that
4764 source package are allowed to be proposed for merging into product branches
4765diff --git a/lib/lp/code/stories/branches/xx-branch-listings-merge-proposal-badge.txt b/lib/lp/code/stories/branches/xx-branch-listings-merge-proposal-badge.txt
4766index ce25e5c..63ab38c 100644
4767--- a/lib/lp/code/stories/branches/xx-branch-listings-merge-proposal-badge.txt
4768+++ b/lib/lp/code/stories/branches/xx-branch-listings-merge-proposal-badge.txt
4769@@ -1,4 +1,5 @@
4770-= Check if the merge proposal badge is shown =
4771+Check if the merge proposal badge is shown
4772+==========================================
4773
4774 >>> def branchSummary(browser):
4775 ... table = find_tag_by_id(browser.contents, 'branchtable')
4776diff --git a/lib/lp/code/stories/branches/xx-branch-listings.txt b/lib/lp/code/stories/branches/xx-branch-listings.txt
4777index b1e0399..1df95ae 100644
4778--- a/lib/lp/code/stories/branches/xx-branch-listings.txt
4779+++ b/lib/lp/code/stories/branches/xx-branch-listings.txt
4780@@ -1,4 +1,5 @@
4781-= Branch Listing Pages =
4782+Branch Listing Pages
4783+====================
4784
4785 Pages that want to display lists of branches use the branch-listing
4786 page template, and views derived from BranchListingView.
4787@@ -12,7 +13,8 @@ various kinds and badge decoration.
4788 >>> reset_all_branch_last_modified()
4789
4790
4791-== Branch Batching ==
4792+Branch Batching
4793+---------------
4794
4795 Batching is applied to branch listings where there are many items.
4796 Luckily for us, many is 5 in the tests.
4797@@ -73,7 +75,8 @@ needed, then the table is sortable and no batching navigation links are shown.
4798 True
4799
4800
4801-== Lifecycle Filtering for Person Branches ==
4802+Lifecycle Filtering for Person Branches
4803+---------------------------------------
4804
4805 When the branches for a person is first loaded, only the 'Current' branches
4806 are shown. Current branches are those that have a lifecycle status of
4807@@ -206,7 +209,8 @@ first.
4808
4809
4810
4811-== Branch Badge Decoration ==
4812+Branch Badge Decoration
4813+-----------------------
4814
4815 We display badges for associated bugs.
4816
4817@@ -268,7 +272,8 @@ Now the badge is still shown for Sample Person...
4818 Linked to a bug
4819
4820
4821-== Sorting Branch Listings ==
4822+Sorting Branch Listings
4823+-----------------------
4824
4825 Aside from the implicitly sorted listings of recently registered,
4826 imported and changed branches, all branch listings have a widget that
4827@@ -361,7 +366,8 @@ Finally, sorting by a particular criterion has the desired effect.
4828 lp://dev/~name12/gnome-terminal/mirrored Development ...
4829
4830
4831-== Highlighting the development focus branch ==
4832+Highlighting the development focus branch
4833+-----------------------------------------
4834
4835 The branch associated with the development focus series is highlighted
4836 on the branch listings using the same CSS style that is used to
4837@@ -415,7 +421,8 @@ The current development focus is shown first though.
4838 lp://dev/gnome-terminal Series: trunk, alpha, pre-1.0 ...
4839
4840
4841-== Lifecycle Filtering for Product Branches ==
4842+Lifecycle Filtering for Product Branches
4843+----------------------------------------
4844
4845 When the branches for a product are first loaded, only the 'Current'
4846 branches are shown. Current branches are those that have a
4847@@ -464,7 +471,8 @@ first.
4848 lp://dev/gnome-terminal Series: trunk... Development ...
4849
4850
4851-== The last commit ==
4852+The last commit
4853+---------------
4854
4855 The last commit column shows the revision number, and part of the
4856 revision log for the last commit that Launchpad knows about. The
4857diff --git a/lib/lp/code/stories/branches/xx-branch-mirror-failures.txt b/lib/lp/code/stories/branches/xx-branch-mirror-failures.txt
4858index ac1ce8b..47b2a43 100644
4859--- a/lib/lp/code/stories/branches/xx-branch-mirror-failures.txt
4860+++ b/lib/lp/code/stories/branches/xx-branch-mirror-failures.txt
4861@@ -1,4 +1,5 @@
4862-= Branch mirror failure messages =
4863+Branch mirror failure messages
4864+==============================
4865
4866 If a branch fails to mirror, that information is displayed in the mirror's
4867 page, together with the last failure message we got when mirroring.
4868@@ -160,7 +161,8 @@ display any failure-related information.
4869 None
4870
4871
4872-== Errors for ssh protocols ==
4873+Errors for ssh protocols
4874+------------------------
4875
4876 If a branch has a sftp or bzr+ssh URL, immediately display an error message
4877 (even before mirroring is attempted) and do not display the mirror failure
4878@@ -182,7 +184,8 @@ or passwords, neither of which is currently supported.
4879 Launchpad cannot mirror this branch because its URL uses sftp or bzr+ssh.
4880
4881
4882-== Remote branches don't error on ssh access ==
4883+Remote branches don't error on ssh access
4884+-----------------------------------------
4885
4886 If a remote branch specifies a location with the scheme 'sftp' or 'bzr+ssh'
4887 then there is no error shown.
4888diff --git a/lib/lp/code/stories/branches/xx-claiming-team-code-reviews.txt b/lib/lp/code/stories/branches/xx-claiming-team-code-reviews.txt
4889index 3cded73..41f91b3 100644
4890--- a/lib/lp/code/stories/branches/xx-claiming-team-code-reviews.txt
4891+++ b/lib/lp/code/stories/branches/xx-claiming-team-code-reviews.txt
4892@@ -1,4 +1,5 @@
4893-= Claiming Team Code Reviews =
4894+Claiming Team Code Reviews
4895+==========================
4896
4897 When a team has been requested to review a merge proposal, any member of that
4898 team can claim that review. This can be done by clicking on the "[Review]"
4899diff --git a/lib/lp/code/stories/branches/xx-distribution-branches.txt b/lib/lp/code/stories/branches/xx-distribution-branches.txt
4900index b5d0038..fe2cde8 100644
4901--- a/lib/lp/code/stories/branches/xx-distribution-branches.txt
4902+++ b/lib/lp/code/stories/branches/xx-distribution-branches.txt
4903@@ -1,4 +1,5 @@
4904-= Branch listings for distributions =
4905+Branch listings for distributions
4906+=================================
4907
4908 All source package branches are associated with a distribution series, and
4909 hence a distribution.
4910diff --git a/lib/lp/code/stories/branches/xx-distroseries-branches.txt b/lib/lp/code/stories/branches/xx-distroseries-branches.txt
4911index adebd1e..e80ff33 100644
4912--- a/lib/lp/code/stories/branches/xx-distroseries-branches.txt
4913+++ b/lib/lp/code/stories/branches/xx-distroseries-branches.txt
4914@@ -1,4 +1,5 @@
4915-= Branch listings for distroseries =
4916+Branch listings for distroseries
4917+================================
4918
4919 All source package branches are associated with a distribution series and a
4920 source package name.
4921diff --git a/lib/lp/code/stories/branches/xx-person-portlet-teambranches.txt b/lib/lp/code/stories/branches/xx-person-portlet-teambranches.txt
4922index b9886ed..c071545 100644
4923--- a/lib/lp/code/stories/branches/xx-person-portlet-teambranches.txt
4924+++ b/lib/lp/code/stories/branches/xx-person-portlet-teambranches.txt
4925@@ -1,4 +1,5 @@
4926-= Person Team Branches Portlet =
4927+Person Team Branches Portlet
4928+============================
4929
4930 The purpose of this portlet is to indiciate that there are teams
4931 that this person participates in that has branches.
4932diff --git a/lib/lp/code/stories/branches/xx-product-overview.txt b/lib/lp/code/stories/branches/xx-product-overview.txt
4933index 7f9b8dd..28588f0 100644
4934--- a/lib/lp/code/stories/branches/xx-product-overview.txt
4935+++ b/lib/lp/code/stories/branches/xx-product-overview.txt
4936@@ -1,4 +1,5 @@
4937-== Latest branches ==
4938+Latest branches
4939+---------------
4940
4941 On the product overview page there is a portlet to show recently
4942 registered branches.
4943diff --git a/lib/lp/code/stories/branches/xx-source-package-branches-empty.txt b/lib/lp/code/stories/branches/xx-source-package-branches-empty.txt
4944index b38fe32..70b29f4 100644
4945--- a/lib/lp/code/stories/branches/xx-source-package-branches-empty.txt
4946+++ b/lib/lp/code/stories/branches/xx-source-package-branches-empty.txt
4947@@ -1,4 +1,5 @@
4948-= Empty source package branch listings =
4949+Empty source package branch listings
4950+====================================
4951
4952 When you look at an empty source package branch listing, you see some nice,
4953 helpful text.
4954diff --git a/lib/lp/code/stories/branches/xx-source-package-branches-listing.txt b/lib/lp/code/stories/branches/xx-source-package-branches-listing.txt
4955index 7f8a8f7..a90c1e9 100644
4956--- a/lib/lp/code/stories/branches/xx-source-package-branches-listing.txt
4957+++ b/lib/lp/code/stories/branches/xx-source-package-branches-listing.txt
4958@@ -1,4 +1,5 @@
4959-= Populated source package branch listings =
4960+Populated source package branch listings
4961+========================================
4962
4963 Going to a source package branch page shows a list of branches.
4964
4965diff --git a/lib/lp/code/stories/branches/xx-upload-directions.txt b/lib/lp/code/stories/branches/xx-upload-directions.txt
4966index bbe8717..4e894dd 100644
4967--- a/lib/lp/code/stories/branches/xx-upload-directions.txt
4968+++ b/lib/lp/code/stories/branches/xx-upload-directions.txt
4969@@ -1,4 +1,5 @@
4970-= Directions to upload to branches =
4971+Directions to upload to branches
4972+================================
4973
4974 The branch ~name12/gnome-terminal/pushed is an upload branch. Its index page
4975 shows contextual directions on how to upload to it.
4976@@ -41,7 +42,8 @@ We will also need a ssh key. Save it now.
4977 ... '8nAA7z21wAukvE1Pl6AQyG0e7U1sYS8Pc8dtmzJvdtVZWBl02/gqQJ7f06mFvn'
4978 ... 'sN45rR1Uyxnrwl6rbFwqabZDlyD5Ac6Icbvz9SG1gBOiI= andrew@trogdor')
4979
4980-== Branch owned by a person ==
4981+Branch owned by a person
4982+------------------------
4983
4984 Initially, the user is not logged in, the branch page points to the owner of
4985 the branch, and suggest logging in for directions.
4986@@ -79,7 +81,8 @@ URL for the branch.
4987 bzr push --use-existing-dir lp://dev/~name12/gnome-terminal/pushed
4988
4989
4990-== SSH key directions ==
4991+SSH key directions
4992+------------------
4993
4994 If the user has the permission to upload to a branch, but does not have an SSH
4995 key registered, point to the SSH keys form.
4996@@ -129,7 +132,8 @@ appear.
4997 None
4998
4999
5000-== Branch owned by a team ==
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to status/vote changes: