Add support to config.setcpv() for caching USE settings from built
authorZac Medico <zmedico@gentoo.org>
Wed, 1 Sep 2010 17:27:14 +0000 (10:27 -0700)
committerZac Medico <zmedico@gentoo.org>
Wed, 1 Sep 2010 17:27:14 +0000 (10:27 -0700)
commit01eee0348d959672a3326858c0710bf8006dd9fa
treeacd1fe3b1afa583ae6592bbe19d5eaf6235ffdbe
parent338dc567385c5dd247c80f60b663bb6c6894adae
Add support to config.setcpv() for caching USE settings from built
packages, and use it for evaluating conditional USE deps in atoms
passed via IPC to helpers like has_version and best_version.

Since the pickled object that contains the IPC command will no longer
contain USE, it should solve cases that have been reported in which
large USE strings trigger poor handling of non-blocking read in
pickle.load():

Traceback (most recent call last):
  File "/usr/bin/emerge", line 43, in <module>
    retval = emerge_main()
  File "/usr/lib64/portage/pym/_emerge/main.py", line 1649, in emerge_main
    myopts, myaction, myfiles, spinner)
  File "/usr/lib64/portage/pym/_emerge/actions.py", line 437, in action_build
    retval = mergetask.merge()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1033, in merge
    rval = self._merge()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1349, in _merge
    self._main_loop()
  File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1498, in _main_loop
    self._poll_loop()
  File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 139, in _poll_loop
    handler(f, event)
  File "/usr/lib64/portage/pym/_emerge/EbuildIpcDaemon.py", line 36, in _input_handler
    obj = pickle.load(self._files.pipe_in)
  File "/usr/lib64/python2.6/pickle.py", line 1370, in load
    return Unpickler(file).load()
  File "/usr/lib64/python2.6/pickle.py", line 858, in load
    dispatch[key](self)
  File "/usr/lib64/python2.6/pickle.py", line 1195, in load_setitem
    value = stack.pop()
IndexError: pop from empty list
bin/ebuild.sh
pym/portage/package/ebuild/_config/special_env_vars.py
pym/portage/package/ebuild/_ipc/QueryCommand.py
pym/portage/package/ebuild/config.py