Use the new ExtensionFinder to find static files in extensions.

This just adds the new ExtensionFinder in Djblets to the list of static
file finders, so that extension-bundled static/ directories will be
searched.
Add a hook for working with comments in the review dialog.

This new hook, ReviewDialogCommentHook, allows an extension to display
data or provide UI for a comment in the review dialog. It takes a view
type that will later be instantiated and passed the comment as a model.
The view can do whatever it needs to with the model, including providing
UI to set new data on it.
Rename 'view-interdiff' url to 'view_interdiff'

Most of our other views (and all of the other diff-related views) use
underscores in the URL names. This change just makes us consistent.

Reviewed at https://reviews.reviewboard.org/r/4745/
Add missing documentation for extension hooks

This change adds docs for the following hooks:
* ActionHook (and its various subclasses)
* FileAttachmentThumbnailHook
* ReviewRequestDetailHook
* TemplateHook

I've arranged the hooks documentation alphabetically, since I'm not sure of a
better way. While I was doing this I noticed a little bit of weirdness in the
ActionHook __init__ (actions should have been an empty list, not an empty
dict).

Testing done:
Generated the HTML docs and checked that things made sense and cross-linked
correctly.

Reviewed at https://reviews.reviewboard.org/r/4744/
Don't trigger revisionSelected from the revision selector when there's no change.

Dragging a handle on the revision selector would cause a reload, even if it was
dropped back on the place that it started. This change guards it, and fixes
some logic to copy the values array instead of referencing it.

Testing done:
Checked that changing the revision selector would trigger a load, except when
the handle was dropped back on its previous location.

Reviewed at https://reviews.reviewboard.org/r/4746/
Update to use Djblets's new extension imports.

This updates the imports to pull from the new locations in the
djblets.extensions module. It leaves the Review Board extension modules
as they were.
Update to the latest version of django-pipeline.

Now that django-pipeline has an explicit setting for enabling/disabling
media pipelining, and now that we're using Django 1.5, we can make use
of it again. This upgrades us to the latest release of pipeline.
Fix switching to Custom repositories and missing hosting services.

When switching the hosting service of a repository from a service to
Custom, the repository would stay on the hosting service. This was due
to a repository still being associated with a HostingServiceAccount. We
now set that to None when switching.

There was also an issue loading the administration page for repositories
when a hosting service was missing (due to an extension not being
enabled). If a repository had a hosting service account, it was assumed
that it could load that account, and that would fail, breaking the
listing of repositories. We're now a little more careful in this
particular code path.
Merge branch 'release-1.7.x'
Fix review-requests/ resource to catch diff related errors.

There were several diff parser related exceptions that weren't being handled in
the review requests resource, which would cause a 500. This change catches
those errors and translates them into equivalent API errors.

Testing done: Ran unit tests.
Reviewed at https://reviews.reviewboard.org/r/4754/
Centralize much of the comment API update/create code.

Most of the comment create/update code was duplicated, and some fixes
were missing from places. That code has now been centralized, making it
easier to maintain and to update.
Support the new static bundles for extensions.

This updates to support the new static bundles for extensions. The
appropriate template tags have been placed in the base template, so that
the default bundles will be loaded.

There's also a new reviewboard.extensions.packaging module, which
contains a setup function that an extension's setup.py can use in place
of the standard setuptools one. This will set some required options for
the package, and set things up to install static bundles.

The documentation and extension generator have been updated.
Support static media bundles in review UIs.

ReviewUI now has css_bundle_names and js_bundle_names variables, which
specify static media bundles that will be loaded in when displaying the
review UI. This makes it easier to write a Review UI without having to
use a custom template to include the required files.

Extensions can use Extension.get_bundle_id to pass in bundle IDs for a
review UI, but it must do it in the ReviewUI's __init__ function, or
patch the class in the Extension's __init__, as the extension IDs (and
therefore bundle IDs) are computed once an extension is enabled and
constructed, not when defining the classes.
Fix a typo in the extension docs.

In the docs dealing with extension configuration pages, one of the citations
said "admin_url.py" where it should have said "admin_urls.py". Trivial fix.
Fix the fill-database command.

Changes in the diff code as well as django-1.5 caused fill-database to break.
This change fixes it, switching to use the UploadDiffForm from the reviews
module, and calling is_valid() to make sure that the form cleans the input
data.

Testing done:
Ran the command and saw that it actually ran and populated the database
correctly. Ran the unit tests, they all pass.

Reviewed at https://reviews.reviewboard.org/r/4692/
Add a sample GitHub token setting to settings_local.py.tmpl.

This adds commented out, documented GITHUB_CLIENT_ID and
GITHUB_CLIENT_SECRET settings to the settings_local.py.tmpl, which is
generated when doing a prepare-dev.py.

Reviewed at https://reviews.reviewboard.org/r/4665/
Fix revision label strings to be consistent.

The latest revision and older revision strings weren't consistent in their
capitalization of the phrase "Diff Revision", which I didn't notice until I was
making screenshots for documentation. Trivial fix.
Add docs uploaded directory to .gitignore
Pass through template name for the configure_extension view.

djblets' configure_extension allows specifying a custom template, but review
board's didn't. This meant that if an extension wanted something special on its
settings page, it would have to re-implement the code from
reviewboard.extensions.views.
Merge branch 'release-1.7.x'