On Mon, 19 Feb 2018 17:05:03 +0200, Alan McKinnon wrote:

> On 19/02/2018 14:55, Holger Hoffstätte wrote:
>> Hey,
>> 
>> I'm not exactly new to portage, but one thing that I cannot seem to figure
>> out is how to rebuild all dependants of a package. Not *dependencies*,
>> dependants: packages that require said package.
>> 
>> As a recent example: whenever go (the language) is updated to a new version
>> (say from 1.9 to 1.10, as it happended recently), I'd like to rebuild docker
>> & friends - or more specifically 'things that are compiled with go'.
>> 
>> The --changed-deps option doesn't seem to do the trick, so instead I manually
>> do a -vp --depclean on go and manually --oneshot all installed packages that
>> have their hands on it. This is obviously stupid and error-prone.
>> 
>> Am I missing something or is this really not easily possible?
>> Basically I'm looking for a hard --oneshot --revdep-rebuild with a package
>> argument.
> 
> 
> There isn't really a one-shot way to do this easily. Ebuilds do not 
> contain dependants, they contain dependencies and that is a one-way 
> arrow. So you end up having to walk the tree to get the information you 
> are after.

There are numerous cases where portage/equery already do that and
perform the equivalent of a grep throug the entire tree.

> I have to question though why you think you need to do this. If you want

Because of static linking. In this case go embeds the runtime (esp.
the gc) into executables, so the only way to get improvements into
existing binaries is to rebuild. Neither subslots nor changed-deps do
this, esp. not on demand.
 
I can think of numerous opther cases where this is necessary (mostly
related to C++ and/or static linking) but really don't have the time
or patience right now.

cheers
Holger


Reply via email to