Assume empty (or nonexistent) trunk means it was moved

Looking at you, zope.sqlalchemy.
Extract requirements for setuptools extras
Count blockers for setuptools extras
Option to consider extras in dependency graphs