uninstalling a selected port ...
jason.swails at gmail.com
Fri Feb 28 06:17:19 PST 2014
On Fri, 2014-02-28 at 14:53 +0100, Peter Danecek wrote:
> On 28 Feb 2014, at 14:44, Jason Swails <jason.swails at gmail.com> wrote:
> > On Fri, 2014-02-28 at 14:33 +0100, Peter Danecek wrote:
> >> Hi all,
> >> I observe a behaviour, which I believe is due to the fact that I
> >> uninstalled an selected port (see below). This seems to leave the
> >> selection mechanism in an undesired state and should be handled. Now I
> >> wonder which is the expected behaviour, so that I can eventually file
> >> a ticket against the right component.
> >> Thanks!
> >> --- snip ---
> >> petr% sudo port select --list postgresql
> >> Available versions for postgresql:
> >> none (active)
> >> postgresql93
> >> petr% sudo port select --set postgresql postgresql93
> >> Selecting 'postgresql93' for 'postgresql' failed: symlink: /opt/local/etc/select/postgresql/current-> postgresql93: file already exists
> > Try forcing the issue.
> > sudo port -f select --set postgresql postgresql93
> > In my opinion, such protection is a Good Thing (TM). There's a way to
> > work around it if you know the reason behind the file collision, but I
> > certainly wouldn't want a program (especially one I run as root) to go
> > around clobbering existing files without me knowing it.
> Well, I understand your point and it would be fine if it is decided to
> leave ALL untouched.
> But then in expect consistent information, i.e. all should be left
> pointing to `postgresql92` (even if it does not exist), so at least
> you know the status. If I am informed that it point to `none` this
> should be the case.
I believe it is consistent. As I understand it, the simlinks created by
"port select" are not *owned* by the selected port. Since the port
itself does not maintain these simlinks (but rather 'port select' does),
there are good arguments to be made that the port should _not_ own
simlinks created by select. As a result, uninstalling that port should
not touch those simlinks. This results in the errors you saw.
An alternative when you know that you are uninstalling a port is to
select none. So something like
sudo port select --set postgresql none
to get rid of the simlinks, then another
sudo port select --set postgresql postgresql93
to set the simlinks to the new version you want to track. (This
approach is untested, but I think it should work.) A feature request
may be for "port select" to detect dangling links and print an
informative message (perhaps with a suggested command to eliminate the
dangling links). That's largely aesthetic, though.
All the best,
Jason M. Swails
More information about the macports-users