Bump to 2.0.4 dev.
Fix the recaptcha registration URL.

Apparently google moved the registration page for recaptcha and didn't keep the
old URL functional. Trivial fix.

Fixes bug 3471.
Merge branch 'release-1.7.x' into release-2.0.x
Merge branch 'release-2.0.x'
Fix update_index management command lines in crontab and docs.

The commands that we started advertising left out the crucial -- argument,
which made them fail to parse arguments. Trivial fix.
Merge branch 'release-2.0.x'
Fix argument to header_encoding for PySVN.

Apparently PySVN doesn't understand the string 'utf-8', and instead requires
'UTF-8'. This is completely undocumented, but a helpful user discovered the
issue and suggested the fix. Trivial change.
Fix args to error callback when publishing a draft review request.

It appears, from my testing and from the Firefox debugger, that the error
callback in DraftReviewResource.publish() has the same args as .save(), that
is, (model, xhr, ...).  I believe an earlier change to just (xhr) for the
publish() error callback was in error.

Testing Done:
Manually generated a PublishError via an extension.  Confirmed that the message
did not appear in the alert dialog without the fix, and that it did with the
fix.

Reviewed at https://reviews.reviewboard.org/r/6108/
Merge branch 'release-2.0.x'
Import Italian translations from Transifex.
Don't trust the browser-provided mimetype if it looks bogus.

A user was reporting that their PDF file uploads were being assigned the
mimetype of "text/text/application/pdf", which is completely bogus. If
splitting on '/' produces anything other than a list of two strings, don't
allow it to proceed.

Testing done: Ran unit tests.

Fixes bug 3427.

Reviewed at https://reviews.reviewboard.org/r/6118/
Don't assume that profiles exist in datagrid code.

If a new user was created but the associated profile was not, loading the
dashboard would cause an error (because in 1.7.x, `User.get_profile()` won't
create the profile). This is already fixed in the 2.0.x series, because we've
completely replaced `User.get_profile()` there.

There are numerious other places where the profile is assumed to exist, but
this is the only one that we've encountered in production.

Testing done:
Ran unit tests.

Fixes bug 3083.

Reviewed at https://reviews.reviewboard.org/r/6111/
Merge branch 'release-1.7.x' into release-2.0.x
Merge branch 'release-2.0.x'
Fix word wrapping in review request details fields.

Long strings in the review request details fields (on the right-hand side of
the fields) would increase the width of the entire table, eventually
overlapping the main fields in a very ugly way. This change adds a max-width to
the field spans using javascript to compute the correct width, and specifies a
word-wrap to force browsers to insert line breaks in the middle of words in the
case that it can't break at a natural place.

I've also made our layout recomputation method be throttled to 100ms, which
dramatically improves performance when resizing the window.

Testing done:
* Set a branch that was just one long unbroken string of characters and saw it
  wrap at the width of the details pane.
* Checked that a bunch of comma-separated bug numbers still wrapped at an ideal
  place in the text.
* Changed a label in a field to be longer and saw that the span max-width fit
  everything on the screen.
* Resized the window and saw that things worked correctly.

Fixes bug 3371.

Reviewed at https://reviews.reviewboard.org/r/5951/
Fix error handling in "Upload Diff" and "Add File" dialogs.

These dialogs are still driven by some pretty ancient javascript code in
common.js. All the backend code had been changed to use the new resource
models, but the error handling callback hadn't been updated for the new
attributes. The result of this was that instead of seeing an error in the form,
users would just see an endless "Loading..." spinner.

Testing done:
- Tried to upload a .png file instead of a diff and saw the error shown next to
  the 'diff' field.
- Tried to submit the 'Add File' form without selecting a file and saw the
  error shown next to the 'path' field.

Fixes bug 3413.

Reviewed at https://reviews.reviewboard.org/r/6112/
Merge branch 'release-2.0.x'
Add parent diff support to the pre-commit section of "New Review Request".

In general, the new "New Review Request" page works very well for people. One
feature that was missed by a small number of users was the ability to specify a
parent diff. This change adds back that feature.

If the given diff fails due to missing files or revisions, the user is shown
the error, but additionally given the option of uploading a parent diff. This
keeps the streamlined workflow for the general case but makes it possible for
the complex one.

While I was in here, I also plumbed through errors when creating the review
request or diff to display. I don't think we've ever hit these errors in
practice, due to the diff validation step (I had to artificially hack the code
to trigger them).

Testing done:
- Uploaded a plain diff via both DnD and the select button and saw it create
  the review request.
- Uploaded a diff which required a parent diff and saw the expected error
  message with new form.
- Uploaded diff + parent diff using both DnD and the select button, and saw it
  create the review request.
- Uploaded a broken diff and saw the right error.
- Uploaded a diff and parent diff which still required another parent to
  completely resolve all changes and saw an error.
- Checked that "Start over" worked on both error pages.
- Ran jshint
- Ran js-tests

Reviewed at https://reviews.reviewboard.org/r/6117/
Merge branch 'release-2.0.x'
Fix a flub in the PreCommitView.

At the last minute, I added a call to Backbone.View.initialize, but this method
doesn't exist. Trivial fix.