Improve progress reporting in condensediffs.

condensediffs now shows more information on the progress of the
conversion of diffs. Along with the existing percentage, it will also
now show the number of processed items, how many there are total, and
the estimated time to completion.

Since the estimated time to completion is based on the average time
taken per item, and the number of items, the estimate becomes more
accurate over time. Instead of showing some useless numbers up-front, we
wait 30 seconds until we show the estimate. From my testing, this
appears to be a a good number, as the estimate settled around that point
in the databases I used.

This helps give administrators an idea as to how long the operation will
take, which is useful for knowing whether to keep it going or to abort
and finish later.
Backport FileDiff migration and condensediffs to 1.7.x.

While Review Board 1.7.x introduced FileDiffData for new diffs, it never
gained the migration support. This was added for 2.0, by way of
on-access migration in FileDiff and the condensediffs management
command.

Diff migration has been thoroughly tested at this point, and is known to
work really well. It's also a beneficial thing to run before an upgrade
to 2.0. This change backports everything needed to get modern
(pre-RawFileDiffData) migration in 1.7.x.

Reviewed at https://reviews.reviewboard.org/r/6229/
Fix the revision selector on IE 9/10/11.

The code for the revision selector used a property for the page scroll
offset that wasn't standard across all browsers. That property is just
an alias for the actual standard property, pageXOffset. Switching to
this fixes the revision slider on IE.

Fixes bug #3373
Reviewed at https://reviews.reviewboard.org/r/6230/
Fix upload diffs on IE.

We were using File.readAsBinaryString() to get the contents of an
uploaded file. While Chrome and Firefox support this still, it's
actually a deprecated function that never made it out of beta, and IE
doesn't support it.

The proper solution, which is a bit more lengthy, is to read in as an
ArrayBuffer, create a Uint8Array view around it, and then convert the
contents to characters in the payload. This works on all browsers.

Fixes bug #3441.
Reviewed at https://reviews.reviewboard.org/r/6231/
Add release notes for 1.7.28

This covers all fixes and improvements since 1.7.27.

Testing done: Built html docs and looked at them.

Reviewed at https://reviews.reviewboard.org/r/6251/
Release Review Board 1.7.28.
Fixed the syntax for a command in the 1.7.28 release notes.

The command was showing as a broken link, since in ReST, surrounding
text with single backticks makes it a link. We now use :command:`...`
instead.
Merge branch 'release-1.7.x' into release-2.0.x
Add release notes for 2.0.6.

This covers all the fixes and improvements made since 2.0.5.
Release Review Board 2.0.6.
Bump to 2.0.7 dev.
Fix hg parent diffs (again?).

If a standard hg diff is posted, along with a parent diff, and the diff
touches files that the parent diff didn't, application will fail. This
change now properly fills the source_revision field on these filediffs
so that we don't attempt to fetch the file for the revision the parent
diff created.

The revision handling for the hg case is messy and could really use some
more love to make things more sensical and robust. I'm going to hold off
on any big changes for now since I think it's important to just get this
use case working.

Reviewed at https://reviews.reviewboard.org/r/6253/
Fix an annoying unicode comparison warning.

If a given patch file isn't coercible to unicode, it would cause a
UnicodeWarning when comparing it to the empty string. I've replaced this test
with a truthy-test, which won't try to convert the arguments.

Testing done: Ran unit tests.

Reviewed at https://reviews.reviewboard.org/r/6254/
Cache rendered diff fragments with large_data=True

Diff fragments usually aren't too big for individual cache entries, but when
they are, they cause warnings. This change stores them using large_data=True,
which will split them into pieces before caching.

Testing done:
- Ran unit tests
- Created a diff where a fragment exceeded the cache entry size limit and
  didn't see a warning.

Reviewed at https://reviews.reviewboard.org/r/6255/