Detect dependency cycles introduced with new patchsets

When Zuul updates its copy of data about a change, it protects itself
from inifinite loops by detecting dependency cycles.  However, this
only happens when updating a change.  If a change depends on another
change already in Zuul's cache, it will not necessarily update the
cached change, and the dependency cycle detection code will not run.
This can later cause problems when Zuul attempts to work with these
changes.

Correct this by always performing a dependency cycle check, even
on cached changes which are not updated.

A test is added for this, and it also ensures that the situation can
still be corrected by the user by removing the dependency cycle.

Many debug log lines in the Gerrit source driver are updated to make
it more clear what change is being updated in the updateChange method,
since this method is recursive and otherwise logs can get somewhat
confusing.

Change-Id: I6ab570f734d3abed2f71d547f130d9c392b976d6
2 files changed