# required by virtual/libudev-215-r1 # required by media-libs/mesa-10.3.4 # required by x11-libs/cairo-1.12.16-r4 # required by x11-libs/gtk+-2.24.25 # required by app-crypt/pinentry-0.9.0 # required by app-crypt/gnupg-2.0.26-r2 # required by app-crypt/gcr-3.12.2 # required by gnome-base/gnome-keyring-3.12.2-r1 # required by sys-auth/pambase-20140313 # required by net-misc/openssh-6.7_p1-r3 # required by virtual/ssh-0 # required by @system # required by @world (argument) =sys-apps/systemd-217-r3 abi_x86_32 # required by net-im/skype-4.3.0.37-r3[apulse] # required by skype[apulse,-pulseaudio] (argument) >=media-sound/apulse-0.1.4 abi_x86_32 # required by x11-libs/gtk+-2.24.25 # required by app-text/acroread-9.5.5-r2 # required by @selected # required by @world (argument) =x11-libs/cairo-1.12.18 abi_x86_32 # required by dev-qt/qtsql-4.8.6-r1[mysql] # required by qtsql (argument) >=virtual/mysql-5.6-r2 abi_x86_32 # required by media-sound/pulseaudio-5.0-r6 # required by media-plugins/alsa-plugins-1.0.28 =sys-apps/systemd-218 abi_x86_32 # required by virtual/libudev-215-r1 # required by dev-libs/libusb-1.0.19 # required by virtual/libusb-1-r1 # required by net-print/cups-2.0.1-r1 # required by app-emulation/wine-1.7.29 # required by @selected # required by @world (argument) =sys-apps/systemd-218-r1 abi_x86_32 [...] I have no clue why it chooses >= or =, but choosing = means one's going to be forced to re-enable the flag every single upgrade...
The code in depgraph.py looks like this: if is_latest: unstable_keyword_msg[root].append( ">=%s %s\n" % (pkg.cpv, keyword)) elif is_latest_in_slot: unstable_keyword_msg[root].append( ">=%s:%s %s\n" % (pkg.cpv, pkg.slot, keyword)) else: unstable_keyword_msg[root].append( "=%s %s\n" % (pkg.cpv, keyword)) else: unstable_keyword_msg[root].append( "=%s %s\n" % (pkg.cpv, keyword)) Your issue could be due to bugs in the check_if_latest function that is used to set the is_latest variable. It looks like this function doesn't account for masking, a masked -9999 ebuild could probably trigger the =atom behavior.
(In reply to Zac Medico from comment #1) > Your issue could be due to bugs in the check_if_latest function that is used > to set the is_latest variable. It looks like this function doesn't account > for masking, a masked -9999 ebuild could probably trigger the =atom behavior. Any chance the problem here is that the case of package.use.stable.mask isn't handled as priority over package.mask/'-*' ebuilds ?
(In reply to Rafał Mużyło from comment #2) > Any chance the problem here is that the case of package.use.stable.mask > isn't handled as priority over package.mask/'-*' ebuilds ? Well, the check_if_latest function accounts for neither use masking nor package masking/visibility.
(In reply to Zac Medico from comment #1) > Your issue could be due to bugs in the check_if_latest function that is used > to set the is_latest variable. It looks like this function doesn't account > for masking, a masked -9999 ebuild could probably trigger the =atom behavior. All three of the packages listed in comment #0 that have =foo atoms also have -9999 ebuilds, so that confirms my hypothesis. I think I'll add a boolean keyword argument to check_if_latest that causes it to ignore masked packages. Then I'll use the new argument to make the package.use code ignore masked packages. That will fix the package.use code, while leaving the package.mask/package.accept_keywords behavior unchanged.
I have a patch in the following branch: https://github.com/zmedico/portage/tree/bug_536392 I've posted it for review here: http://thread.gmane.org/gmane.linux.gentoo.portage.devel/5108
This is in the master branch now: https://github.com/gentoo/portage/commit/0b85e54ce3de54d8b1dfaf2c3f3b23b5326d4c44
Released in portage-2.2.16