Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 15 Jan 2006 13:37:08 +0200
From:      Panagiotis Astithas <past@ebs.gr>
To:        Doug Barton <dougb@freebsd.org>
Cc:        Alexander Leidinger <Alexander@Leidinger.net>, pav@freebsd.org, freebsd ports <freebsd-ports@freebsd.org>
Subject:   Re: New /bin/sh based script to manage ports
Message-ID:  <43CA33E4.40809@ebs.gr>
In-Reply-To: <43C97BEB.3030601@FreeBSD.org>
References:  <43BCF31F.8050900@FreeBSD.org>	<1136501778.40648.17.camel@localhost>	<43C38A38.1020408@FreeBSD.org>	<1136893017.2410.9.camel@pav.hide.vol.cz>	<43C8E446.5010603@FreeBSD.org>	<20060114144016.1dc9fdd0@Magellan.Leidinger.net> <43C97BEB.3030601@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Doug Barton wrote:
> Alexander Leidinger wrote:
> 
>> On Sat, 14 Jan 2006 03:45:10 -0800 Doug Barton <dougb@freebsd.org> wrote:
>>
>>> This is done too now, although it turned out to be a lot harder than I
>>>  expected. It required redoing how some of the internal stuff worked,
>>> but in the end it made the whole script better, so I'm glad I pursued
>>> this. As an extra bonus you can now do 'portmaster -af' and it will
>>> force an update of all ports on your system, starting with the leaves.
>>
>>
>> "Leafes" as in "those ports which no other ports depends upon"?
> 
> 
> Yes.
> 
>> If yes: are you sure this is a good idea? Wouldn't you think a better
>> approach would be to start with those ports, which depend upon no other
>> port (= "root" ports in my terminology)?
> 
> 
> Yes, except that I left out one important part of that explanation. :)
> 
> What portmaster does when asked to update a given port is (leaving out 
> some steps):
> 
> 1. cd to the port directory
> 2. make config
> 3. Get a list of dependencies by doing 'make all-depends-list'
> 4. Recursively check to see if each of those dependencies is up to date, 
> and update it if not by launching a child process of itself
> 5. Return to the original port, and update it
> 
> So, in the non-forced update case, any dependencies of a leaf port will 
> get updated before the leaf does. Anything that is already up to date 
> won't get touched. In the forced update case, we'll recurse through the 
> dependency list of the first leaf port all the way down to the root 
> ports, then back up through each dependency, and finally back up to the 
> leaf. In the force case, I keep a list of ports that have been updated 
> so that we only have to do that once for each port.
> 
> Now theoretically there is nothing wrong with your suggestion, and other 
> than the fact that I wanted to keep the same process in place for 
> updating all the ports as I do for updating them one at a time, I could 
> have done it that way. In fact, the more I think about it the more I 
> think it makes sense to do it in this order for the 'update all' case:
> 
> 1. ports that have no dependencies (roots)
> 2. ports that have dependencies, and are depended on (branches?)
> 3. ports that have dependencies, and are not depended on (leaves)
> 
> I'll do some testing on this and let you know, thanks for this suggestion.

Can portmaster be used to do something like 'portupgrade -rf gnutls' 
(i.e. rebuild all dependent applications), like it is often requested in 
UPDATING?

Cheers,

Panagiotis



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?43CA33E4.40809>