Re: [gentoo-portage-dev] repos.conf location w.r.t PORTAGE_CONFIGROOT

2015-05-08 Thread Joakim Tjernlund
On Thu, 2015-05-07 at 14:09 -0700, Zac Medico wrote:
 On 05/07/2015 03:51 AM, Joakim Tjernlund wrote:
  On Wed, 2015-05-06 at 22:45 +, Joakim Tjernlund wrote:
   On Wed, 2015-05-06 at 15:16 -0700, Zac Medico wrote:
On 05/06/15 14:57, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 14:36 -0700, Zac Medico wrote:
  On 05/06/15 14:30, Joakim Tjernlund wrote:
   On Wed, 2015-05-06 at 13:30 -0700, Zac Medico wrote:
On 05/06/15 13:22, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 12:54 -0700, Zac Medico wrote:
  On 05/06/15 12:41, Joakim Tjernlund wrote:
   On Wed, 2015-05-06 at 19:13 +, Joakim Tjernlund wrote:
On Wed, 2015-05-06 at 11:37 -0700, Zac Medico wrote:
 On 05/06/15 09:54, Joakim Tjernlund wrote:
  I am trying to rebuild an old cross sysroot and I 
  got problems.
  I cannot make emerge to select my old ebuilds in an 
  overlay over those
  in /usr/portage.
  
  What new is since last time I did this is 
  /etc/portage/repos.conf/
  I suspect emerge always reads 
  /etc/portage/repos.conf/ no matter
  what I set PORTAGE_CONFIGROOT / ROOT to ?
  
   Jocke
  
 
 It instantiates 2 config instances, one using 
 /etc/portage/repos.conf
 (for build time DEPEND) and another one using
 $PORTAGE_CONFIGROOT/etc/portage/repos.conf (for run 
 time {P,R}DEPEND).
 You can see that it's joined with PORTAGE_CONFIGROOT 
 in the
 load_repository_config function:
 
 https://gitweb.gentoo.org/proj/portage.git/tree/pym/portage/repository/config.py?id=
 0f19
 11
 13cc
 cd04
 9e11
 fdbe
 73
 493eb1efbf4bf89e#n971

I see, doesn't this prevent exactly what I want to do?

I can't see why this should be needed, it only creates 
a mess, another example:
I tried to specify exact version of my old binutils and 
while that worked, portage 
wanted
to pull in a newer binutils-config from the hosts 
master gentoo repo and
thus the build failed.

If a someone really wants this behaviour, he can just 
add the hosts master repo
in his PORTAGE_CONFIGROOT IMHO

  
  Maybe emerge --root-deps=rdeps is what you are looking for. 
  This will
  cause it to ignore DEPEND.
 
 That is not the same is it? if I emerge ncurses it will 
 build ncurses but still
 take the ebuild from the hosts master since it is newer 
 version.
 
 I realize now that I can change what repos are searched by 
 using 
 PORTAGE_REPOSITORIES=/my/own/repos.conf/
 but I still find the default behaviour very confusing and I 
 don't see that it is useful.

The idea is that you have separate repositories configured for 
each
ROOT. If it's satisfying a build-time DEPEND that will be 
installed into
ROOT=/, then it's supposed to use the repositories configured 
for ROOT=/.
   
   I see, but in my case I only install into my sysroot so I don't 
   want this behaviour.
  
  So, why don't you use the --root-deps option?
 
 Just did(and --root-deps=rdeps too) and it didn't work, still wants 
 to use
 my newer hosts pkgs. :(

It shouldn't do that. It sounds like maybe the [gentoo] config
from/usr/share/portage/config/repos.conf is the source of your problems,
since you $PORTAGE_CONFIGROOT config will always inherit that. Would
that be consistent with your observations?
   
   Moving that file out of the way changed things, now I got I profile error:
   !!! Unable to parse profile: '/etc/portage/make.profile'
   !!! ParseError: Parent 'gentoo:default/linux/amd64/13.0' not found:
   '/var/lib/layman/transmode/profiles/gentoo64-server/parent'
   !!! Your current profile is invalid. If you have just changed your profile
   !!! configuration, you should revert back to the previous configuration.
   !!! Allowed actions are limited to --help, --info, --search, --sync, and
   !!! --version.
   
   Which I think is a problem in my cross env.
  
  No, this is not it. Portage just bails when reading the host profile which 
  it should not.
  
  Note: defining
PORTAGE_REPOSITORIES=/my/own/repos.conf
  gives the same error.
  
 
 According to the error message, your transmode profile inherits a gentoo
 profile, so you need the gentoo repository (at least the relevant profile).

I have a my own profile in 

Re: [gentoo-portage-dev] repos.conf location w.r.t PORTAGE_CONFIGROOT

2015-05-08 Thread Zac Medico
On 05/07/2015 11:43 PM, Joakim Tjernlund wrote:
 On Thu, 2015-05-07 at 14:09 -0700, Zac Medico wrote:
 On 05/07/2015 03:51 AM, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 22:45 +, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 15:16 -0700, Zac Medico wrote:
 On 05/06/15 14:57, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 14:36 -0700, Zac Medico wrote:
 On 05/06/15 14:30, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 13:30 -0700, Zac Medico wrote:
 On 05/06/15 13:22, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 12:54 -0700, Zac Medico wrote:
 On 05/06/15 12:41, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 19:13 +, Joakim Tjernlund wrote:
 On Wed, 2015-05-06 at 11:37 -0700, Zac Medico wrote:
 On 05/06/15 09:54, Joakim Tjernlund wrote:
 I am trying to rebuild an old cross sysroot and I got problems.
 I cannot make emerge to select my old ebuilds in an overlay 
 over those
 in /usr/portage.

 What new is since last time I did this is 
 /etc/portage/repos.conf/
 I suspect emerge always reads /etc/portage/repos.conf/ no matter
 what I set PORTAGE_CONFIGROOT / ROOT to ?

  Jocke


 It instantiates 2 config instances, one using 
 /etc/portage/repos.conf
 (for build time DEPEND) and another one using
 $PORTAGE_CONFIGROOT/etc/portage/repos.conf (for run time 
 {P,R}DEPEND).
 You can see that it's joined with PORTAGE_CONFIGROOT in the
 load_repository_config function:

 https://gitweb.gentoo.org/proj/portage.git/tree/pym/portage/repository/config.py?id=
 0f19
 11
 13cc
 cd04
 9e11
 fdbe
 73
 493eb1efbf4bf89e#n971

 I see, doesn't this prevent exactly what I want to do?

 I can't see why this should be needed, it only creates a mess, 
 another example:
 I tried to specify exact version of my old binutils and while 
 that worked, portage 
 wanted
 to pull in a newer binutils-config from the hosts master gentoo 
 repo and
 thus the build failed.

 If a someone really wants this behaviour, he can just add the 
 hosts master repo
 in his PORTAGE_CONFIGROOT IMHO


 Maybe emerge --root-deps=rdeps is what you are looking for. This 
 will
 cause it to ignore DEPEND.

 That is not the same is it? if I emerge ncurses it will build 
 ncurses but still
 take the ebuild from the hosts master since it is newer version.

 I realize now that I can change what repos are searched by using 
 PORTAGE_REPOSITORIES=/my/own/repos.conf/
 but I still find the default behaviour very confusing and I don't 
 see that it is useful.

 The idea is that you have separate repositories configured for each
 ROOT. If it's satisfying a build-time DEPEND that will be installed 
 into
 ROOT=/, then it's supposed to use the repositories configured for 
 ROOT=/.

 I see, but in my case I only install into my sysroot so I don't want 
 this behaviour.

 So, why don't you use the --root-deps option?

 Just did(and --root-deps=rdeps too) and it didn't work, still wants to 
 use
 my newer hosts pkgs. :(

 It shouldn't do that. It sounds like maybe the [gentoo] config
 from/usr/share/portage/config/repos.conf is the source of your problems,
 since you $PORTAGE_CONFIGROOT config will always inherit that. Would
 that be consistent with your observations?

 Moving that file out of the way changed things, now I got I profile error:
 !!! Unable to parse profile: '/etc/portage/make.profile'
 !!! ParseError: Parent 'gentoo:default/linux/amd64/13.0' not found:
 '/var/lib/layman/transmode/profiles/gentoo64-server/parent'
 !!! Your current profile is invalid. If you have just changed your profile
 !!! configuration, you should revert back to the previous configuration.
 !!! Allowed actions are limited to --help, --info, --search, --sync, and
 !!! --version.

 Which I think is a problem in my cross env.

 No, this is not it. Portage just bails when reading the host profile which 
 it should not.

 Note: defining
   PORTAGE_REPOSITORIES=/my/own/repos.conf
 gives the same error.


 According to the error message, your transmode profile inherits a gentoo
 profile, so you need the gentoo repository (at least the relevant profile).
 
 I have a my own profile in PORTAGE_CONFIGROOT which does not
 reference the host /etc/portage/make.profile at all so I think
 portage is using the wrong profile.

When using ROOT=/foo, it always instantiates 2 profiles, and it uses one
profile for ROOT=/foo and the other profile for ROOT=/.

 Futhermore, it does not understand the host profile, probably
 because my own PORTAGE_CONFIGROOT don't have profile-formats = portage-2

You're saying this beciase of the above ParseError? I think maybe what
you want to do keep the default /usr/share/portage/config/repos.conf and
mask */*::gentoo in $PORTAGE_CONFIGROOT/etc/portage/package.mask.
-- 
Thanks,
Zac



[gentoo-portage-dev] [PATCH] VdbMetadataDelta.applyDelta: handle remove events properly (bug 547532)

2015-05-08 Thread Zac Medico
Since commit d800d224ab38c0f524d3fe858ebe201cbfa903c1, emerge --search
could report removed packages as installed, since applyDelta failed to
apply remove events unless the cpv exactly matched. Fix it to apply
the remove event to each affected package slot, using the same code
which is used to handle replaced packages for add events.

Fixes: d800d224ab38 (Log changes between vdb_metadata.pickle updates)
X-Gentoo-Bug: 547532
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=547532
---
 pym/portage/dbapi/_VdbMetadataDelta.py | 39 ++
 1 file changed, 21 insertions(+), 18 deletions(-)

diff --git a/pym/portage/dbapi/_VdbMetadataDelta.py 
b/pym/portage/dbapi/_VdbMetadataDelta.py
index 2dbb07a..7461f87 100644
--- a/pym/portage/dbapi/_VdbMetadataDelta.py
+++ b/pym/portage/dbapi/_VdbMetadataDelta.py
@@ -139,12 +139,12 @@ class VdbMetadataDelta(object):
 
def applyDelta(self, data):
packages = self._vardb._aux_cache[packages]
-   added_slots = {}
+   deltas = {}
for delta in data[deltas]:
cpv = delta[package] + - + delta[version]
+   deltas[cpv] = delta
event = delta[event]
if event == add:
-   added_slots[cpv] = delta
# Use aux_get to populate the cache
# for this cpv.
if cpv not in packages:
@@ -155,19 +155,22 @@ class VdbMetadataDelta(object):
elif event == remove:
packages.pop(cpv, None)
 
-   # Remove replaced versions from updated slots
-   for cached_cpv, (mtime, metadata) in list(packages.items()):
-   if cached_cpv in added_slots:
-   continue
-   replaced = False
-   for cpv, delta in added_slots.items():
-   if (cached_cpv.startswith(delta[package]) and
-   metadata.get(SLOT) == delta[slot] 
and
-   cpv_getkey(cached_cpv) == 
delta[package]):
-   replaced = True
-   break
-   if replaced:
-   del packages[cached_cpv]
-   del added_slots[cpv]
-   if not added_slots:
-   break
+   if deltas:
+   # Delete removed or replaced versions from affected 
slots
+   for cached_cpv, (mtime, metadata) in 
list(packages.items()):
+   if cached_cpv in deltas:
+   continue
+
+   removed = False
+   for cpv, delta in deltas.items():
+   if 
(cached_cpv.startswith(delta[package]) and
+   metadata.get(SLOT) == 
delta[slot] and
+   cpv_getkey(cached_cpv) == 
delta[package]):
+   removed = True
+   break
+
+   if removed:
+   del packages[cached_cpv]
+   del deltas[cpv]
+   if not deltas:
+   break
-- 
2.3.5