Here is what happen if one try to fetch a package that blocks another package when using the buildsyspkg FEATURE flag: root % emerge -p broken These are the packages that I would merge, in order: Calculating dependencies ...done! [blocks B ] =port-test/pkgA-2* (from pkg port-test/broken-1.0) [ebuild N ] port-test/broken-1.0 root % emerge -f broken Calculating dependencies ...done! >>> emerge (1 of 2) port-test/broken-1.0 to / Traceback (most recent call last): File "/usr/bin/emerge", line 2880, in ? mydepgraph.merge(mydepgraph.altlist()) File "/usr/bin/emerge", line 1709, in merge issyspkg = ("buildsyspkg" in myfeat) \ File "/usr/lib/portage/pym/portage.py", line 3263, in cpv_getkey return myslash[0]+"/"+mysplit[0] TypeError: unsubscriptable object I've only experienced this bug with .51-rc1, but I'm sure it also affects .50 (i know this part of the code since i wrote that ugly "buildsyspkg" hack). I will attach a fix.
Created attachment 39954 [details, diff] emerge--buildsyspkg_fix.patch
Instead of: issyspkg = ("buildsyspkg" in myfeat) \ + and x[0] == "ebuild" \ and mysysdict.has_key(portage.cpv_getkey(x[2])) \ I used: issyspkg = ("buildsyspkg" in myfeat) \ + and x[0] != "blocks" \ and mysysdict.has_key(portage.cpv_getkey(x[2])) \ Presently, issyspkg is only used for checking if a binary should be built, but it may be used for other things in the future. This way should leave it a little more open for other uses...
Bug has been fixed and released in stable portages on or before 2.0.51-r2