Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 905783 - app-portage/gentoolkit: eclean --changed-deps crashes when evaluating a binary package with a deprecated EAPI
Summary: app-portage/gentoolkit: eclean --changed-deps crashes when evaluating a binar...
Status: UNCONFIRMED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Portage Tools Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-05-05 17:20 UTC by Stuart Shelton
Modified: 2023-09-08 23:10 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Stuart Shelton 2023-05-05 17:20:30 UTC
For reasons, I have a `unifi` repo which maintains python2.7 packages and mongodb-4.0 for compatibility with Ubiquiti's Network Controller.

This repo is generally disabled with a `*/*::unifi` entry in /etc/portage/package.mask.

This is likely a very niche setup, but running `eclean` with `--changed-deps` results in these masked packages being sourced which causes a crash/stack-trace.

```
$ sudo eclean -p packages --changed-deps 
 * Building file list for packages cleaning...
 * ERROR: dev-libs/snowball-stemmer-0.20140325::unifi failed (depend phase):
 *   multilib: EAPI 5 not supported
 * 
 * Call stack:
 *                            ebuild.sh, line 628:  Called source '/var/db/repo/unifi/dev-libs/snowball-stemmer/snowball-stemmer-0.20140325.ebuild'
 *   snowball-stemmer-0.20140325.ebuild, line   6:  Called inherit 'epatch' 'toolchain-funcs' 'versionator'
 *                            ebuild.sh, line 308:  Called __qa_source '/var/db/repo/unifi/eclass/toolchain-funcs.eclass'
 *                            ebuild.sh, line 123:  Called source '/var/db/repo/unifi/eclass/toolchain-funcs.eclass'
 *               toolchain-funcs.eclass, line  25:  Called inherit 'multilib'
 *                            ebuild.sh, line 308:  Called __qa_source '/var/db/repo/srcshelton/eclass/multilib.eclass'
 *                            ebuild.sh, line 123:  Called source '/var/db/repo/srcshelton/eclass/multilib.eclass'
 *                      multilib.eclass, line  14:  Called die
 * The specific snippet of code:
 *      *) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
 * 
 * If you need support, post the output of `emerge --info '=dev-libs/snowball-stemmer-0.20140325::unifi'`,
 * the complete build log and the output of `emerge -pqv '=dev-libs/snowball-stemmer-0.20140325::unifi'`.
 * Working directory: '/usr/lib/python3.11/site-packages'
 * S: '/storage/system/var/tmp/portage/dev-libs/snowball-stemmer-0.20140325/work/snowball-stemmer-0.20140325'
Traceback (most recent call last):
  File "/usr/lib/python-exec/python3.11/eclean", line 41, in <module>
    main()
  File "/usr/lib/python3.11/site-packages/gentoolkit/eclean/cli.py", line 679, in main
    doAction(action, options, exclude=exclude, output=output)
  File "/usr/lib/python3.11/site-packages/gentoolkit/eclean/cli.py", line 530, in doAction
    clean_me = findPackages(
               ^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/gentoolkit/eclean/search.py", line 613, in findPackages
    ebuild_metadata = dict(zip(keys, port_dbapi.aux_get(cpv, keys)))
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/portage/dbapi/porttree.py", line 655, in aux_get
    return loop.run_until_complete(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
portage.exception.PortageKeyError: 'dev-libs/snowball-stemmer-0.20140325'
```

Perhaps `eclean` should either itself adhere to (and skip) package.mask entries, or should silently skip packages for which evaluation fails (without stopping/crashing)?
Comment 1 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2023-05-09 13:09:25 UTC
package.mask doesn't help if an ebuild is unsourcable because it occurs at a different layer from metadata generation.

But it's a fair point that eclean should try swallow such errors / not abort.
Comment 2 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2023-09-08 23:10:51 UTC
(In reply to Sam James from comment #1)
> package.mask doesn't help if an ebuild is unsourcable because it occurs at a
> different layer from metadata generation.
> 
> But it's a fair point that eclean should try swallow such errors / not abort.

FWIW, Portage itself does exactly that in the definition of ChangedDepsSet at https://github.com/gentoo/portage/blob/4ceb199aab8035fdf2ebd244e213ca63c29b4d5f/lib/portage/_sets/dbapi.py#L621.