What do you think about this? It goes against the philosophy that I've been adopting to keep providers as dumb as possible.

An alternative would be that the provider defines a ``def iter_branches(self)`` method - returning repo name, branch name and head commit - and in https://github.com/pretenders/deploystream/pull/73/files#L0R54 we loop through each performing the relevant ``hierarchy.match_with_levels`` function.

Which way do you prefer?