Don't load or install extensions during a Review Board upgrade.

Review Request #10243 — Created Oct. 19, 2018 and submitted — Latest diff uploaded

Information

Review Board
release-3.0.x
dbf71de...

Reviewers

A customer hit a bug where they had upgraded the Review Board package,
but not the database, and had run a management command that found the
new rbintegrations package and tried to install it, triggering an
early database upgrade. This was quite problematic, and caused a lot of
confusion while trying to diagnose a separate upgrade problem.

To avoid this, and potentially other problems, we no longer load any
extensions if the Review Board version stored in the database does not
match the package version. Instead, extensions will only load if the
version matches. This lets us avoid these early migrations prior to a
database upgrade.

The one caveat is that this won't solve the problem if syncdb and
evolve are run in separate sessions (by invoking manage.py twice,
for instance). syncdb will set the new database version, meaning that
evolve is free to load extensions again. This is only really an issue
during development, since rb-site upgrade runs these in the same
session.

Part of this will be addressed in some longer-term Django Evolution
work, which will be providing a command similar to modern Django's
migrate command, where everything can be done all at once.
Shorter-term, an upcoming change will add an upgrade command to
manage.py.

Reproduced the original problem by upgrading the Review Board package
and running a management command. Saw that the database upgrade did not
trigger until I explicitly performed it.