Use Django Evolution 2.0's new Evolver for extension database management.

Review Request #10602 — Created June 19, 2019 and submitted — Latest diff uploaded




Django Evolution 2.0 introduces a new Evolver class for
programmatically synchronizing models to the database and applying
evolutions and migrations. This is now required by Djblets if the
extension framework at all wants to allow for extensions with models.

This replaces shelling out to syncdb/migrate and evolve,
simplifying our code considerably and letting Django Evolution handle
all the hard parts.

It also has a very strong advantage of only managing the apps owned by
the extension, preventing any other apps from ever being affected.
Previously, if there was a new model or evolution introduced somewhere
(by another app, or by Review Board itself), it woud have been
synced/evolved as well, which posed problems at times. Now that we have
greater control, changes to the database (and the stored project
signature) will be minimized.

Unit tests have been updated to work with the new Django Evolution APIs,
and to assume that Django Evolution is present for tests (since we
include this in dev-requirements.txt).

The dependency version has been bumped as well, currently requiring that
the version in the Django Evolution master branch in Git be installed.

Unit tests pass on Django 1.6 and 1.11.