All of the regression/not regression actually comes from LocalTransport.__init__
It used to use a local function that would *not* call realpath because of how we did/didn't want to follow symlinks. (I believe at the time we didn't want it to follow so that 'bzr add link' would work).
I think the appropriate way to handle it is to have get_transport() not call realpath, but to have the Branch.__init__ (or BzrDir.__init__()) renormalize it's url.
The other problem, though, is that we detect a BzrDir by taking: path + '/.bzr/branch-format'
And that will work for a symlink to a directory. We may want to change the open_containing functions to stat the target, or some other extra hackery. (WT.open_containing() could certainly consider stat'ing the target file/directory/symlink).
Arguably, it could be different for WT.open_containing() (which we've defined *must* be local) and Branch.open_containing() (which may be a URL).
All of the regression/not regression actually comes from LocalTransport. __init_ _
It used to use a local function that would *not* call realpath because of how we did/didn't want to follow symlinks. (I believe at the time we didn't want it to follow so that 'bzr add link' would work).
I think the appropriate way to handle it is to have get_transport() not call realpath, but to have the Branch.__init__ (or BzrDir.__init__()) renormalize it's url.
The other problem, though, is that we detect a BzrDir by taking: path + '/.bzr/ branch- format'
And that will work for a symlink to a directory. We may want to change the open_containing functions to stat the target, or some other extra hackery. (WT.open_ containing( ) could certainly consider stat'ing the target file/directory/ symlink) .
Arguably, it could be different for WT.open_ containing( ) (which we've defined *must* be local) and Branch. open_containing () (which may be a URL).
Just a thought.