Fix an exception when permanently deleting a review request.

The administrator-specific ability to permanently delete a review request
would succeed but generate an exception due to an incorrect variable being
accessed. The correct variable is now used.
Don't hide the screenshots area when uploading a new screenshot.

Uploading a new screenshot through the dialog would cause the screenshot
area to disappear. This is due to calling empty() to determine if the
area was empty. However, this doesn't check for emptiness; rather it actually
empties the area. The screenshots reappear on reload, but it can be confusing.

We now check the length of the jQuery element, as we should have originally.
Link the documentation to the 1.5 docs.
Fix the intervals for search updating in the crontab.

The interval for the full index was happening too often. It was mistakenly
occuring at every minute at 2AM on Sundays, instead of at 2AM.

The incremental updates are the same, but has been changed to use "*/10"
instead of "0,10,20,30,40,50" so that it's more manageable and readable.

Fixes bug #1843
Update our admin site to work with Django SVN trunk.

The admin site was using the old AdminSite.root attribute for URLs, which
no longer exists in Django SVN. We now use AdminSite.urls instead, which
is the supported way going forward, and is available in Django 1.1.
Add the Parent Diff field in the New Review Request page.

The Parent Diff field was missing in the New Review Request page. We now
show it for Git, Bazaar, Mercurial and Monotone.

Fixes bug #1651
Fix the URL include for the admin sites.

The new fix for the Django AdminSite.root removal was capturing all paths
after /admin/db/, causing sub-pages to not work. We now use the include
as it should be used.
Show permission denied errors when accessing unreachable Git repositories.

When adding a Git repository pointing to a directory that the web server
doesn't have permissions to browse, we would hit an error saying that
information couldn't be retrieved. We now check after failure if we even
have read permissions on the directory and display an appropriate error
message.

Fixes bug #1765.
Fix a unit test failure.

The addition of parent diff paths for Mercurial broke the unit tests. The
test was just checking which fields are supported, and wasn't taking into
account that we now have the parent_diff_path field.
Stop shipping our own copy of the Django Admin media files.

For historical reasons, we've shipped the Django Admin media files as part
of our build directory. This comes from a time before rb-site existed, when
we needed a single media directory with everything inside it. However, that's
just problematic these days.

Now we let the Django devserver handle the /media/admin path as it prefers
to, and we link the proper path during rb-site upgrade. This lets us reduce
our package size and prevents problems people may hit with different
versions of Django.
Fix a broken alias for SCons files.

There was a broken alias for SCons files, resulting in an exception that
broke the diff viewer. The .sc alias was pointing to itself rather than .py.
It now points to the correct file type.

Fixes bug #1864
Make the cron configuration work better on Solaris.

A recent change to use the */10 syntax instead of 0,10,20,30,40,50 broke
compatibility with Solaris and possibly systems with other cron
implementations. We now spell out the times again.
Add a rewrite rule in the lighttpd.conf file to make it work.

Several installs with lighttpd have just been giving 404s. This is fixed via a
new rewrite rule in the config to map reviewboard.fcgi back to real names.

Fixes bugs 1618 and 1639
Fix the path to the reviewboard directory for docs generation.

The docs generation was using the system ReviewBoard install since the
Python Path being set was pointing to the wrong directory. Now it will
use the correct one for the 1.5 docs.
Fix a typo in my docs path fix.
SVN hook can include empty arguments which seems to confuse svn diff

./rb-post-commit-hook /srv/svn/fred 11
/usr/bin/post-review --repository-url=file:///srv/svn/fred --
username=admin --password=admin -p --submit-as=mike --revision-
range=10:11   --server=http://localhost/reviews/fred --summary="refs
review"
Failed to execute command: ['/usr/bin/post-review', '--repository-
url=file:///srv/svn/fred', '--username=admin', '--password=admin', '-
p', '--submit-as=mike', '--revision-range=10:11', '', '', '--
server=http://localhost/reviews/fred' '--summary="refs #1 - publish
review"', '--description="(In [11]) refs #1 - publish review"', '']
Failed to execute command: ['svn', 'diff', '--diff-cmd=diff', 'file:///
srv/svn/fred/@10', 'file:///srv/svn/fred/@11', '', '', '']
['svn: Target lists to diff may not contain both working copy paths
and URLs\n']

The SVN hook can sometimes include empty arguments. Empty arguments should
be filtered from the argument list.

Fixes bug 1515.
Reduce SQL queries for some of the legacy API methods

This is similar to my changes in Djblets in
http://reviews.reviewboard.org/r/1894/. It uses select_related
(http://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related) to
reduce the number of queries needed to serve resources. Select_related will use
joins to include one-to-one relations in the initial query, meaning you won't
have to do another query to fetch them after the main object is retrieved.

This contains three changes:
* Optimize legacy API database access for lists of reviews. Goes from 4 + 5*n
  round trips to 3 + 2*n round trips.
* Add select_related() to some more legacy APIs to reduce their DB round-trips.
* Reduce SQL calls for getting repositories using select_related.

Note that there is also a change to get_from_user_query which avoids a user
lookup if you already have a username by using a join. The downside is that if
users stop being uniquely identified by username, this would break, but that
change seems unlikely.

Reviewed at http://reviews.reviewboard.org/r/1895/
Fix select_related in one case.

The recent patch from Ben Hollis improved database accesses, but in one case,
select_related() was called on an object, and not a queryset. This is easily
fixed by chaining it between objects() and get().
Fix splitting multiple email addresses for a group.

When a group has multiple email addresses, we weren't adding them properly to
the notification. This is because we left out a split().

Fixes bug 1661
Add release notes for Review Board 1.5.1.