On 2017-7-13 22:49 , Arno Hautala wrote:
On Wed, Jul 12, 2017 at 8:07 PM, Joshua Root <[email protected]> wrote:
On 2017-7-13 08:10 , Umesh Singla wrote:

  3. ensuring that active versions are installed after the inactive
     versions

The install action of port(1) does execute the activate target, however your
code could run only the install target for ports that were not active. That
is what restore_ports.tcl does.

Wouldn't it still be possible to end up in the wrong state due to
dependencies? Imagine that port A+huge depends on port B+huge, while
A+tiny depends on B+tiny. +huge is inactive, +tiny is active.

This is also all predicated on the idea that MacPorts handles
dependent variants. I forget what the current state is there.

Depending on a variant is currently impossible.

Installing A+huge would install and activate A+huge and B+huge.
Installing, but not activating A+tiny, would first require installing
and activating B+tiny.

Certainly this could be resolved by installing and not activating the
port and everything in the dependency tree. I haven't examined
restore_ports to see what it does with dependencies.

Another method would be to install and deactivate all the inactive
ports first. Or even just default to not installing anything that's
inactive and providing an option to install those as well (or
presenting a list to pick from). That's perhaps getting a bit too
extensive at this point.

You do have to install the ports in dependency order to get it right, and that is what restore_ports does. There may be cases where previously inactive ports don't build due to requiring a specific variant in a dependency that was also inactive. (Which is equivalent to "you can't depend on a variant".)

- Josh

Reply via email to