Comment 7 for bug 715000

Revision history for this message
John A Meinel (jameinel) wrote :

Just to mention fetch already has code for tracking through fallbacks, as it was the first place we encountered it.

What we have to watch out for is whether operations can happen remotely or not. Imagine this case:

 A stacked on B stacked on C

A = local branch and repository
B = Launchpad branch B
C = Launchpad branch C

The issue is that the local client has something like:

RepoA is a GroupCompressRepo with _fallback_repository = [RemoteRepoB]
RemoteRepoB is a RemoteRepository with _fallback_repository = [RemoteRepoC]
RemoteRepoC is a RemoteRepository with _fallback_repository = []

However, on the server side, we have:

RepoB is a GroupCompressRepo with _fallback_repository = []
RepoC is a GroupCompressRepo with _fallback_repository = []

Fetch is currently special, because it is evaluated in the server side. So client-side fetch had to be updated, since server side repositories don't see their fallbacks.

Note that VersionedFile objects get an equivalent VF for fallbacks.

I'm also pretty sure that at least James didn't realize that
RepoA._fallback_repositories != [RemoteRepoB, RemoteRepoC]