On Sat, 1 Apr 2017 18:02:03 -0700 Zac Medico <zmed...@gentoo.org> wrote:
> Fix action_build to populate binarytree instances with remote package > metadata following config reload, using a new getbinpkg_refresh=False > parameter to prevent redundant fetching of remote package metadata. > > X-Gentoo-bug: 614474 > X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=614474 > Fixes: e2d88ef3ff59 ("Add emerge --autounmask-continue option (bug > 582624)") --- > pym/_emerge/actions.py | 15 +++++++++++++++ > pym/portage/dbapi/bintree.py | 19 +++++++++++++++---- > 2 files changed, 30 insertions(+), 4 deletions(-) > > diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py > index cc0269d..818fab9 100644 > --- a/pym/_emerge/actions.py > +++ b/pym/_emerge/actions.py > @@ -347,6 +347,21 @@ def action_build(emerge_config, > trees=DeprecationWarning, adjust_configs(emerge_config.opts, > emerge_config.trees) settings, trees, mtimedb = emerge_config > > + # After config reload, the freshly > instantiated binarytree > + # instances need to load remote metadata if > --getbinpkg > + # is enabled. Use getbinpkg_refresh=False to > use cached > + # metadata, since the cache is already fresh. > + if "--getbinpkg" in emerge_config.opts: > + for root_trees in > emerge_config.trees.values(): > + try: > + > root_trees["bintree"].populate( > + > getbinpkgs=True, > + > getbinpkg_refresh=False) > + except ParseError as e: > + > writemsg("\n\n!!!%s.\nSee make.conf(5) for more info.\n" > + % > e, noiselevel=-1) > + return 1 > + > if "--autounmask-only" in myopts: > mydepgraph.display_problems() > return 0 > diff --git a/pym/portage/dbapi/bintree.py > b/pym/portage/dbapi/bintree.py index 12c3d3e..ca90ba8 100644 > --- a/pym/portage/dbapi/bintree.py > +++ b/pym/portage/dbapi/bintree.py > @@ -510,8 +510,16 @@ class binarytree(object): > except PortageException: > pass > > - def populate(self, getbinpkgs=0): > - "populates the binarytree" > + def populate(self, getbinpkgs=False, getbinpkg_refresh=True): > + """ > + Populates the binarytree with package metadata. > + > + @param getbinpkgs: include remote packages > + @type getbinpkgs: bool > + @param getbinpkg_refresh: attempt to refresh the > cache > + of remote package metadata if getbinpkgs is > also True > + @type getbinpkg_refresh: bool > + """ > > if self._populating: > return > @@ -522,13 +530,13 @@ class binarytree(object): > pkgindex_lock = > lockfile(self._pkgindex_file, wantnewlockfile=1) > self._populating = True > - self._populate(getbinpkgs) > + self._populate(getbinpkgs, > getbinpkg_refresh=getbinpkg_refresh) finally: > if pkgindex_lock: > unlockfile(pkgindex_lock) > self._populating = False > > - def _populate(self, getbinpkgs=0): > + def _populate(self, getbinpkgs=False, > getbinpkg_refresh=True): if (not os.path.isdir(self.pkgdir) and not > getbinpkgs): return 0 > > @@ -832,6 +840,9 @@ class binarytree(object): > url = base_url.rstrip("/") + > "/Packages" f = None > > + if not getbinpkg_refresh and > local_timestamp: > + raise > UseCachedCopyOfRemoteIndex() + > try: > ttl = > float(pkgindex.header.get("TTL", 0)) except ValueError: looks good. Thanks for migrating that 0 for False -- Brian Dolbec <dolsen>