Use raw ID fields for the LocalSite fields in the admin UI.

The LocalSite fields may become very large up on certain large-scale
deployments. This changes them to be raw ID fields instead of a drop-down of
options, which will speed up browsing the admin UI.
Fix screenshot thumbnails.

The CSS classes for screenshot thumbnails had changed, but the template
and JavaScript were still using the old names. I didn't catch this due
to generated media being cached here. They've now been changed.
Prevent useless comment fetching for screenshots and file attachments.

Screenshots and file attachments without comments weren't having their
_comments variable set, which was causing us to do a fetch later on
for each screenshot and file attachment. We now make sure to always
set _comments in review_detail, preventing these extra, useless fetches.
Add mutation APIs for review groups and their users.

This adds APIs for creating, updating, and destroying review groups, and
for managing the user list on groups.

The /groups/ API responds to HTTP POST and DELETE. /groups/<name>/
responds to PUT for updating all fields.

The /groups/<name>/users/ resource responds to HTTP POST and accepts a
username to add to the group. /groups/<name>/users/<username>/ accepts a
HTTP DELETE to remove from the group.

Unit tests were added to ensure that all responses are as expected for
various conditions, and that they work properly with LocalSites.

This was originally based on work done by Stephen Holsappie and Paul Hobb.
Update the docs database for the latest schema changes.
Update our README to be a bit more up-to-date.
Fix the quick search to use rbautocomplete instead of autocomplete.

The quick search field was using jQuery-UI's autocomplete instead of
our rbautocomplete, which was incompatible. This is the last remaining
big JavaScript issue I'm aware of with the jQuery/jQuery-UI upgrade.
Fix borders on dashboard

With my shiny (oh so shiny) new high resolution screen, the top right and bottom
right corners on the dashboard looked pretty gross. The problem here was that
while the outer container had a border radius, the inner container didn't, so it
overlapped in an ugly fashion.
Fix border radius on account navigation menu.

This fixes a minor styling issue where all items in the account navigation have
rounded borders (on the bottom left and bottom right) in the hover state, when
only the last item needs this styling applied.

Verified on Chrome, Safari, Firefox (all latest). Did not test in IE (no access
to Windows at the moment). :last-child isn't supported for IE < 9, but neither
is border-radius, so it shouldn't affect older versions of IE.

Reviewed at http://reviews.reviewboard.org/r/3489/
Skip tests that would fail if mercurial or p4python aren't installed.

When the hostingsvcs tests got added, they weren't added with sufficient checks
to avoid a bunch of failures if the underlying packages weren't installed. After
this change there are still a bunch of failures if pysvn isn't present, but
that's another bag of fish.
Add installation instructions for post-review.

This adds much-needed installation instructions for post-review on
Windows and Linux. It covers some tricky parts, like requiring the
32-bit installer on Windows, and being clear about 2.x vs. 3.x.
Fix starred groups list in dashboard when user.pk != profile.pk.

The code that generated the list of the watched groups in the dashboard sidebar
was passing the wrong object in for the starred_by relation, which meant that if
the user's pk wasn't the same as the profile pk, it would show an incorrect
list.

Testing done: Set up the reproduction case and looked at the dashboard. Grepped
around to verify that nowhere else made this same mistake.
Add a fallback encoding conversion for diff content.

When trying to convert the resulting diff content to unicode, we first try
straight utf-8, and then try any encodings which were configured on the
repository. This change adds one additional step, where we try to interpret the
file as utf-8 but replace any unknown characters with U+FFFD.

Fixes bug 2776.
Reviewed at. http://reviews.reviewboard.org/r/3528/
Fix errors when manipulating the "New Review Request" field in wonky ways.

On the "New Review Request" form, if the user first chooses a perforce
repository and enters a change number, but then changes the repository type to
"None (Graphics Only)", the changenum field will still be sent to the server.
Unfortunately, NewReviewRequestForm.create() was conditionalizing only on
"changenum" and nothing else.

Fixes bug 2708.
Reviewed at http://reviews.reviewboard.org/r/3529/
Remove useless, broken supports_change_timezone conditionals.

I guess when we initially did the timezone support, we thought it might be
connected to the auth backend. The result of this was code that would hide the
field on the preferences dialog for all auth backends except the standard
builtin one, and then fail to save when users tried to change their preferences
because the field was still marked as required.

Because the timezone setting is just part of the user profile and unrelated to
the auth backend, there's no reason to have these conditionals present.

Fixes bug 2797.
Reviewed at http://reviews.reviewboard.org/r/3491/
Add better help text to the repository form's Path field.

Our help text for the Path field was a big ol' mess of information for a
variety of SCMTools, and certainly didn't scale or look readable.

We now allow SCMTools to provide their own help text for any fields they
choose (though right now, it's only used for Path). When switching tools
on the repository form, the help text for all affected fields will
change.

The existing help text has been split up into the various SCMTools we
previously documented, and cleaned up a bit.
Choose a better default for the hosting account on the repository form.

When switching hosting services on the repository form, the Account
dropdown would default to "<Link a new account>", unless there was
already a matching account selected before. This is not a good default
when there are actual, valid accounts previously linked.

Now we choose the 1st real account as the default, unless we find a
previously selected account in the list, in which case that'll be the
default.
Add API support for creating a review request with no repository.

Our API wasn't allowing the creation of review requests without a
repository. This should be allowed, as the web UI allows it, and not all
review requests going forward will have anything to do with diffs.

The 'repository' parameter is now optional. Documentation was updated to
explain the new usage of this parameter.
Fix a memory leak with the new in-database SVN cert storage.

The new SVN cert support introduced a memory leak due to a circular
dependency.

The client was holding on to a reference to the function on SVNTool,
while SVNTool was holding on to the client, preventing either from being
cleaned up.

An attempt was made at inlining the function, but as that accessed data
bound to the class, the circular dependency remained.

This appears to be an issue specifically with PySVN, as an independent
repro case could be devised for pysvn.Client's callbacks, but not those
from a mock object.

The callback is now defined as a classmethod and the only attribute it
needs, a repository, is set up as a weakptr which is then accessed by a
lambda calling the callback. This prevents the repository and SVNTool
from remaining around indefinitely.
Change the FileAttachmentComment API to require an "extra_data." prefix for extra data.

Recently, FileAttachmentComment was given support for specifying extra
data to store with a comment. This took any unknown variable and stored
it as extra data, but that meant that typos would also get stored.

Now it requires an "extra_data." prefix for any variables meant to be
stored there. That corresponds to the resulting payload, which is a
dictionary in 'extra_data'.