Scenario: one cvs checkout shared between multiple chroots, long merge running in one, fixing stuff in the other, commit affects a to-be-merged package Alternate scenario: emerge --sync while doing an update The traceback is rather uninformative: 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 2030, in emerge_main myopts, myaction, myfiles, spinner) File "/usr/lib64/portage/pym/_emerge/actions.py", line 442, in action_build retval = mergetask.merge() File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1002, in merge rval = self._merge() File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1352, in _merge self._main_loop() File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 148, in _main_loop self.sched_iface.iteration() File "/usr/lib64/portage/pym/portage/util/_eventloop/EventLoop.py", line 166, in iteration if not x.callback(f, event, *x.args): File "/usr/lib64/portage/pym/_emerge/SpawnProcess.py", line 215, in _output_handler self._unregister_if_appropriate(event) File "/usr/lib64/portage/pym/_emerge/AbstractPollTask.py", line 129, in _unregister_if_appropriate self.wait() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 53, in wait self._wait_hook() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 146, in _wait_hook self._exit_listener_stack.pop()(self) File "/usr/lib64/portage/pym/_emerge/EbuildMerge.py", line 58, in _merge_exit self.wait() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 53, in wait self._wait_hook() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 146, in _wait_hook self._exit_listener_stack.pop()(self) File "/usr/lib64/portage/pym/_emerge/CompositeTask.py", line 134, in _default_final_exit return self.wait() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 53, in wait self._wait_hook() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 146, in _wait_hook self._exit_listener_stack.pop()(self) File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1244, in _merge_exit self._schedule() File "/usr/lib64/portage/pym/_emerge/PollScheduler.py", line 134, in _schedule self._schedule_tasks() File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1516, in _schedule_tasks if self._schedule_tasks_imp(): File "/usr/lib64/portage/pym/_emerge/Scheduler.py", line 1604, in _schedule_tasks_imp self._task_queues.jobs.add(task) File "/usr/lib64/portage/pym/_emerge/SequentialTaskQueue.py", line 23, in add self.schedule() File "/usr/lib64/portage/pym/_emerge/SequentialTaskQueue.py", line 45, in schedule task.start() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 26, in start self._start() File "/usr/lib64/portage/pym/_emerge/MergeListItem.py", line 91, in _start self._start_task(build, self._default_final_exit) File "/usr/lib64/portage/pym/_emerge/CompositeTask.py", line 147, in _start_task task.start() File "/usr/lib64/portage/pym/_emerge/AsynchronousTask.py", line 26, in start self._start() File "/usr/lib64/portage/pym/_emerge/EbuildBuild.py", line 56, in _start settings=self.settings, db=portdb) File "/usr/lib64/portage/pym/portage/package/ebuild/doebuild.py", line 358, in doebuild_environment ["SRC_URI"], mytree=mytree) File "/usr/lib64/portage/pym/portage/dbapi/porttree.py", line 517, in aux_get raise KeyError(mycpv) KeyError: u'app-accessibility/sphinxbase-0.7'
I guess we could handle this similarly to how EACCES is currently handled, and just bail out with a short error message showing the path of the missing ebuild.