Re: [gentoo-portage-dev] Re: About system and world

2007-10-23 Thread Marius Mauch
On Mon, 22 Oct 2007 21:29:02 -0700
Zac Medico [EMAIL PROTECTED] wrote:

 -BEGIN PGP SIGNED MESSAGE-
 Hash: SHA1
 
 Ryan Hill wrote:
  Zac Medico wrote:
  implement greedy atoms for the world set. I've been pondering the
  idea of making world non-greedy for slots by default [1], since you
  can add slot atoms to the world file to pull in any specific
  slot(s) that you want.
  
  That would rock.  Portage always insisting on pulling in the highest
  SLOT whether needed or not is one of my biggest pet-peeves.
 
 Well, you can already use SLOT atoms in your world file if you don't
 want the highest available. Packages that pull in =foo are a
 different story though. I suppose we can add something like a
 - --upgrade=minimal option that prevents pulling in new slots if they
 aren't required.

Don't restrict it to SLOTs though. minimal implies that only upgrades
required to satisfy the depgraph are performed. The described
behavior should be another value, e.g. no-slot-change.

Marius

-- 
Public Key at http://www.genone.de/info/gpg-key.pub

In the beginning, there was nothing. And God said, 'Let there be
Light.' And there was still nothing, but you could see a bit better.


signature.asc
Description: PGP signature


Re: [gentoo-portage-dev] Re: About system and world

2007-10-23 Thread Thomas de Grenier de Latour
On 2007/10/23, Marius Mauch [EMAIL PROTECTED] wrote:

 On Mon, 22 Oct 2007 21:29:02 -0700
 Zac Medico [EMAIL PROTECTED] wrote:
 
  Well, you can already use SLOT atoms in your world file if you don't
  want the highest available. Packages that pull in =foo are a
  different story though. I suppose we can add something like a
  - --upgrade=minimal option that prevents pulling in new slots if
  they aren't required.
 
 Don't restrict it to SLOTs though. minimal implies that only
 upgrades required to satisfy the depgraph are performed. 

Couldn't this minimal behavior just be triggered by lack of the
--upgrade option (emerge -D set)?

Actually, the current --upgrade behavior (with or without --deep)
is a bit weird imho, i would prefer something like this (with foo 
being either a set or an atom):

 * emerge foo: do the minimum upgrades or new installs required to
get foo satisfied.  Only its direct deps are checked (and direct
deps of the unsatisfied ones, etc.), with the minimal heuristic
(upgrade them only if stricly required).

 * emerge -u foo: do all required new installs and possible upgrades
of foo.  Only its direct deps are checked (and direct deps of the
unsatisfied ones, etc.), with the minimal heuristic (upgrade them only
if strictly needed).

 * emerge -D foo: do the minimal upgrades or new installs required to
get foo satisfied.  Also, check all of its direct and indirect deps,
with the minimal heuristic (upgrade only if strictly needed).

 * emerge -uD foo: do all required new installs and possible upgrades
of foo.  Also, all its direct and indirect deps are checked, and
upgraded where possible.


For those who wonder, and if i'm not mistaken, current behaviors of
this four combinations, expressed in those words, are:

 * emerge foo: do all required new installs and possible upgrades
of foo.  Only its direct deps are checked (and direct deps of the
unsatisfied ones, etc.), with the minimal heuristic (upgrade them 
only if strictly needed).  
  = same as my emerge -u foo

 * emerge -u foo: do all required new installs and possible upgrades
of foo and its direct deps.  Also, check all of their direct and
indirect deps, with the minimal heuristic (upgrade them only if
strictly needed).
  = i don't see usefulness of this special case.  Whether some code is
direct or indirect dep is often subject to some maintainer's choices,
and may vary with time (for instance, an internal lib of a big package
being splitted out as a separate dep of this package).

 * emerge -D foo and emerge -uD foo : do all required new installs
and possible upgrades of foo.  Also, all its direct and indirect deps
are checked, and upgraded where possible.
 = same as my emerge -uD foo.  But waste of one of the four options
combinations.


-- 
TGL.
-- 
[EMAIL PROTECTED] mailing list



Re: [gentoo-portage-dev] Re: About system and world

2007-10-23 Thread Marius Mauch
On Tue, 23 Oct 2007 21:11:48 +0200
Thomas de Grenier de Latour [EMAIL PROTECTED] wrote:

 On 2007/10/23, Marius Mauch [EMAIL PROTECTED] wrote:
 
  On Mon, 22 Oct 2007 21:29:02 -0700
  Zac Medico [EMAIL PROTECTED] wrote:
  
   Well, you can already use SLOT atoms in your world file if you
   don't want the highest available. Packages that pull in =foo are
   a different story though. I suppose we can add something like a
   - --upgrade=minimal option that prevents pulling in new slots if
   they aren't required.
  
  Don't restrict it to SLOTs though. minimal implies that only
  upgrades required to satisfy the depgraph are performed. 
 
 Couldn't this minimal behavior just be triggered by lack of the
 --upgrade option (emerge -D set)?

--upgrade != the current --update (at least that's what I assumed)

 Actually, the current --upgrade behavior (with or without --deep)
 is a bit weird imho, i would prefer something like this (with foo 
 being either a set or an atom):

Yes, --update has a history of being a mess of random behavior.
Personally I'd drop it completely, or alias it to --noreplace.

  * emerge foo: do the minimum upgrades or new installs required to
 get foo satisfied.  Only its direct deps are checked (and direct
 deps of the unsatisfied ones, etc.), with the minimal heuristic
 (upgrade them only if stricly required).
 
  * emerge -u foo: do all required new installs and possible upgrades
 of foo.  Only its direct deps are checked (and direct deps of the
 unsatisfied ones, etc.), with the minimal heuristic (upgrade them
 only if strictly needed).
 
  * emerge -D foo: do the minimal upgrades or new installs required
 to get foo satisfied.  Also, check all of its direct and indirect
 deps, with the minimal heuristic (upgrade only if strictly needed).
 
  * emerge -uD foo: do all required new installs and possible
 upgrades of foo.  Also, all its direct and indirect deps are checked,
 and upgraded where possible.
 
Maybe --upgrade as name was an unfortunate choice, --resolver might be
better. What I'd like ideally (as a user) is to replace --update,
--deep, --noreplace and --emptytree with the following options:

--resolver={minimal,noslotchange,leastchange,default}
minimal: select the lowest possible version
noslotchange: like default, but try to avoid slotchanges
leastchange: select the version with the smallest version delta
compared to the installed version, otherwise like default
default: current behavior

--rebuild={never,always,changeduse,newuse,changeddeps,selected}
never: never rebuild packages
always: always rebuild packages (like current --emtpytree)
changeduse: rebuild packages if $USE has changed
newuse: rebuild packages if $USE or $IUSE has changed
changeddeps: rebuild packages if any of its direct dependencies were
updated
selected: rebuild the selected arguments (root nodes)

--deplevel=n
check n level of dependencies for updates (with -1 == infinite)
of course all dependencies have to be satisfied, this controls only
what deps should be checked for optional updates

current defaults would be --resolver=default --rebuild=selected
--deplevel=0

--update would be --rebuild=never --deplevel=1
--deep would be --deplevel=-1
--emptytree would be --rebuild=always --deplevel=-1

But that's just me dreaming of a better world, where we don't have
to deal with legacies ;)

Marius

-- 
Public Key at http://www.genone.de/info/gpg-key.pub

In the beginning, there was nothing. And God said, 'Let there be
Light.' And there was still nothing, but you could see a bit better.


signature.asc
Description: PGP signature


Re: [gentoo-portage-dev] Re: About system and world

2007-10-23 Thread Marius Mauch
On Wed, 24 Oct 2007 00:03:47 +0200
Thomas de Grenier de Latour [EMAIL PROTECTED] wrote:

 Bah, you're introducing a new options set, and have (i think) ways to
 emulate all of the old ones with them, so what is stopping you?  You
 would just have to forbid mixes of old style and new style on the same
 command line.

Mainly the work required to implement it ;) And I'd rather finish
dynoparse first so it can be used here.
Oh, and ideally the mentioned values wouldn't be hardcoded lists, but
come from a pluggable resolver system, but that probably counts as
overengineering.

Marius

-- 
Public Key at http://www.genone.de/info/gpg-key.pub

In the beginning, there was nothing. And God said, 'Let there be
Light.' And there was still nothing, but you could see a bit better.


signature.asc
Description: PGP signature