Ticket #194 (new defect)

Opened 6 months ago

Last modified 6 months ago

a repo_atom should be able to access a shadowed cpv in an overlay stack

Reported by: nus Owned by:
Priority: normal Milestone: 0.4.7.3
Component: pkgcore Version: 0.4.7.2
Keywords: Cc:

Description

>>> config = pkgcore.config.load_config()
>>> domain = config.get_default('domain')
>>> all_repos=domain.all_repos
>>> restriction = parserestrict.parse_match("x11-libs/libXft::gentoo")
>>> all_repos.trees[1]
<filterTree raw_repo=<pkgcore.ebuild.repository.ConfiguredTree raw_repo=<pkgcore.ebuild.overlay_repository.OverlayRepo object at 0xaa66cec> wrapped=['provides', 'license', 'fetchables', 'post_rdepends', 'depends', 'rdepends', 'src_uri'] @0xaf4b96c> restriction=<AndRestriction negate=False type='package' finalized=False restrictions=[<OrRestriction negate=False type='package' finalized=False restrictions=[<pkgcore.restrictions.delegated.delegate object at 0xae254ec>, <pkgcore.restrictions.delegated.delegate object at 0xaf434cc>] @0xa30252c>, <pkgcore.restrictions.delegated.delegate object at 0xaf43c0c>] @0xa30248c> sentinel=True @0xaf4ba8c>
>>> [x for x in r1.raw_repo.itermatch(restriction)]
[]
>>> r1 = all_repos.trees[1].raw_repo
>>> r1
<pkgcore.ebuild.repository.ConfiguredTree raw_repo=<pkgcore.ebuild.overlay_repository.OverlayRepo object at 0xaa66cec> wrapped=['provides', 'license', 'fetchables', 'post_rdepends', 'depends', 'rdepends', 'src_uri'] @0xaf4b96c>
>>> r1.raw_repo.trees(<ebuild SlavedTree location='/usr/local/layman/pro-audio' @0xaa66b8c>, <ebuild SlavedTree location='/usr/local/layman/pkgcore-bzr' @0xabb758c>, <ebuild SlavedTree location='/usr/local/layman/gentoo-xeffects' @0xacde18c>, <ebuild SlavedTree location='/usr/local/layman/gentoo-soor' @0xace910c>, <ebuild SlavedTree location='/usr/local/layman/gentoo-lisp' @0xacf10ec>, <ebuild SlavedTree location='/usr/local/layman/emacs' @0xacd124c>, <ebuild UnconfiguredTree location='/usr/portage' @0xacf618c>)
>>> slaved_trees = [ t for t in r1.raw_repo.trees ]
>>> slaved_trees
[<ebuild SlavedTree location='/usr/local/layman/pro-audio' @0xaa66b8c>, <ebuild SlavedTree location='/usr/local/layman/pkgcore-bzr' @0xabb758c>, <ebuild SlavedTree location='/usr/local/layman/gentoo-xeffects' @0xacde18c>, <ebuild SlavedTree location='/usr/local/layman/gentoo-soor' @0xace910c>, <ebuild SlavedTree location='/usr/local/layman/gentoo-lisp' @0xacf10ec>, <ebuild SlavedTree location='/usr/local/layman/emacs' @0xacd124c>, <ebuild UnconfiguredTree location='/usr/portage' @0xacf618c>]
>>> [x for x in slaved_trees[6].itermatch(restriction)]
[<<class 'pkgcore.ebuild.ebuild_src.package'> cpv='x11-libs/libXft-2.1.12' @0xb46d2d4>]
>>>

Attachments

overlay-repo-handle-cpv-clones.patch (1.3 kB) - added by nus 6 months ago.

Change History

Changed 6 months ago by nus

comment:1 Changed 6 months ago by nus

  • summary changed from OverlayRepo doesn't cover the corner case whe the same cpv is present in multiple slave repos to a repo_atom be able to access a shadowed cpv in an overlay stack

ferringb pointed on irc that the patch effectively converts overlay trees to multiplex, so it's a wrong solution. The problem still stays: given same cpv for multiple ebuilds in multiple overlay repos, pmerge <cpv>::<repo_id> fails to access all but one.

comment:2 Changed 6 months ago by nus

  • summary changed from a repo_atom be able to access a shadowed cpv in an overlay stack to a repo_atom should be able to access a shadowed cpv in an overlay stack

comment:3 Changed 6 months ago by nus

A more appropriate example:

>>> import pkgcore.config
>>> from pkgcore.util import parserestrict
>>> config = pkgcore.config.load_config()
>>> domain = config.get_default('domain')
>>> all_repos = domain.all_repos
>>> overlay_tree = all_repos.trees[1]
>>> restr = parserestrict.parse_match('x11-libs/libXft')
>>> restr_gentoo = parserestrict.parse_match('x11-libs/libXft::gentoo')
>>> restr_xeffects = parserestrict.parse_match('x11-libs/libXft::xeffects')
>>> restr_soor = parserestrict.parse_match('x11-libs/libXft::soor')
>>> key_matches = set(x.key for x in all_repos.itermatch(restr))
>>> key_matches_gentoo = set(x.key for x in all_repos.itermatch(restr_gentoo))
>>> key_matches_xeffects = set(x.key for x in all_repos.itermatch(restr_xeffects))
>>> key_matches_soor = set(x.key for x in all_repos.itermatch(restr_soor))
>>> key_matches
set(['x11-libs/libXft'])
>>> key_matches_gentoo
set([])
>>> key_matches_xeffects
set(['x11-libs/libXft'])
>>> key_matches_soor
set([])
>>> [x for x in overlay_tree.itermatch(restr)]
[<PackageWrapper pkg=<<class 'pkgcore.ebuild.ebuild_src.package'> cpv='x11-libs/libXft-2.1.12' @0x922124c> wrapped='use' @0x91fef7c>]
>>> [x for x in overlay_tree.itermatch(restr_gentoo)]
[]
>>> [x for x in overlay_tree.itermatch(restr_soor)]
[]
>>> all_repos
<pkgcore.repository.multiplex.tree trees=(<pkgcore.ebuild.profiles.AliasedVirtuals object at 0x92177ac>, <filterTree raw_repo=<pkgcore.ebuild.repository.ConfiguredTree raw_repo=<pkgcore.ebuild.overlay_repository.OverlayRepo object at 0x908e50c> wrapped=['provides', 'license', 'fetchables', 'post_rdepends', 'depends', 'rdepends', 'src_uri'] @0x920f20c> restriction=<AndRestriction negate=False type='package' finalized=False restrictions=[<OrRestriction negate=False type='package' finalized=False restrictions=[<pkgcore.restrictions.delegated.delegate object at 0x91fa4ec>, <pkgcore.restrictions.delegated.delegate object at 0x920488c>] @0x91f7f04>, <pkgcore.restrictions.delegated.delegate object at 0x9204b4c>] @0x91f7edc> sentinel=True @0x920f74c>, <filterTree raw_repo=<pkgcore.binpkg.repository.ConfiguredBinpkgTree object at 0x920f7ac> restriction=<AndRestriction negate=False type='package' finalized=False restrictions=[<OrRestriction negate=False type='package' finalized=False restrictions=[<pkgcore.restrictions.delegated.delegate object at 0x91fa4ec>, <pkgcore.restrictions.delegated.delegate object at 0x920488c>] @0x91f7f04>, <pkgcore.restrictions.delegated.delegate object at 0x9204b4c>] @0x91f7edc> sentinel=True @0x920f82c>) @0xa7b5d4cc>
Note: See TracTickets for help on using tickets.