With the new peg-rev/operative-rev processing, a client operation can start at
one URL and then migrate to another one. Unfortunately, our RA interface is
pegged to one URL at a time. So if the URL changes as a result of the
peg-rev/operative-rev lookup, we have to open a new session, which in some cases
(notably svn+ssh:// with password authentication) is user-visible. (Our users
are used to that kind of badness because we currently use two sessions for
checkout, but in an ideal world we would use only one session per client operation.)
If we could go back in time to fix this problem, the fix would probably involve
reconceptualizing the RA layer a bit, so that it's anchored to a repository and
not to a single URL. But since we haven't quite gotten the hang of time travel
yet, we should look for solutions which involve a less painful transition. On
IRC, CMike suggested adding a "reparent" operation to the RA interface which
lets us go from one URL to another.
This should be relatively straightforward to implement. In ra_dav, it's a local
operation; in ra_svn, if we run into an svnserve which doesn't support the
operation, we can close and reopen the connection, or return an error and make
the caller open a new session.