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