I added the following line to /etc/portage/package.keywords: >=sci-geosciences/grass-6.0.1 ~x86 Then "emerge -u world" upgrades GRASS to 6.0.1. Subsequent "emerge -u world" reverts GRASS to 6.0.0-r2. The versions switch back and forth on each "emerge -u world" but "emerge -pv grass" always shows that it wants to emerge 6.0.1 (if 6.0.0-r2 currently installed) or replace 6.0.1 (if 6.0.1 is currently installed). I had followed the exact same process with 6.0.0-r2 when it was marked ~x86 without this problem. Reproducible: Always Steps to Reproduce: 1. Add ">=sci-geosciences/grass-6.0.1 ~x86" to /etc/packages.keywords 2. emerge -u world --> grass-6.0.1 emerge'd 3. emerge -u world --> grass downgraded to 6.0.0-r2 4. goto 2 Actual Results: Portage switches back & forth between grass-6.0.1 and grass-6.0.0-r2 when "emerge -u world" requests are issued. Expected Results: Emerge'd grass-6.0.1 and left it in place on subsequent "emerge -u world" commands. emerge --info Portage 2.0.51.22-r2 (default-linux/x86/2005.0, gcc-3.3.6, glibc-2.3.5-r1, 2.6.1 2-gentoo-r10 i686) ================================================================= System uname: 2.6.12-gentoo-r10 i686 AMD Athlon(tm) processor Gentoo Base System version 1.6.13 dev-lang/python: 2.3.5-r2 sys-apps/sandbox: 1.2.12 sys-devel/autoconf: 2.13, 2.59-r6 sys-devel/automake: 1.4_p6, 1.5, 1.6.3, 1.7.9-r1, 1.8.5-r3, 1.9.6 sys-devel/binutils: 2.15.92.0.2-r10 sys-devel/libtool: 1.5.18-r1 virtual/os-headers: 2.6.11-r2 ACCEPT_KEYWORDS="x86" AUTOCLEAN="yes" CBUILD="i686-pc-linux-gnu" CFLAGS="-O3 -march=athlon -pipe -fomit-frame-pointer" CHOST="i686-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/kde/2/share/config /usr/kde/3.3/env /usr/kde/3.3/share /config /usr/kde/3.3/shutdown /usr/kde/3.4/env /usr/kde/3.4/share/config /usr/kd e/3.4/shutdown /usr/kde/3/share/config /usr/lib/X11/xkb /usr/share/config /var/q mail/control" CONFIG_PROTECT_MASK="/etc/gconf /etc/terminfo /etc/env.d" CXXFLAGS="-O3 -march=athlon -pipe -fomit-frame-pointer" DISTDIR="/usr/portage/distfiles" FEATURES="autoconfig distlocks sandbox sfperms strict" GENTOO_MIRRORS="http://distro.ibiblio.org/pub/linux/distributions/gentoo/ http:/ /gentoo.mirrors.easynews.com/linux/gentoo/ http://gentoo.chem.wisc.edu/gentoo/ h ttp://ftp.caliu.info/pub/gentoo/" MAKEOPTS="-j2" PKGDIR="/usr/portage/packages" PORTAGE_TMPDIR="/var/tmp" PORTDIR="/usr/portage" SYNC="rsync://rsync.gentoo.org/gentoo-portage" USE="x86 3dnow 3dnowext X acpi alsa apm arts avi berkdb bitmap-fonts blas blueto oth bzip2 cpudetection crypt cups curl dbase dio directfb dlloader eds emboss en code escreen esd exif fbcon fftw fits font-server fontconfig foomaticdb fortran gcj gdal gdbm gif gmp gpm grass gstreamer gtk gtk2 hardened imlib ipv6 java jpeg lapack libg++ libwww lm_sensors mad mikmod mmx mmxext motif mozcalendar mozilla mozsvg mp3 mpeg mpi ncurses netcdf nls ntfs nvidia objc ogdi ogg oggvorbis open gl oss pam pcre pdflib perl png postgres ppds python qt quicktime readline reise rfs sdl sensord slang spell ssl svga symlink sysfs tcltk tcpd tiff truetype true type-fonts type1-fonts unicode usb vorbis win32codecs xml2 xmms xprint xv zlib u serland_GNU kernel_linux elibc_glibc" Unset: ASFLAGS, CTARGET, LANG, LC_ALL, LDFLAGS, LINGUAS, PORTDIR_OVERLAY
You should have the following in /etc/portage/package.keywords: sci-geosciences/grass ~x86 You only want version specifiers in package.mask/unmask.
My bad...I apologize for giving wrong info, though I *swore* I had checked this when I first submitted the bug. The behavior occurs when doing a deep update, i.e., emerge -uD world, rather than just emerge -u world. Behavior still occurs after changing package.keywords as directed. It appears to be related to GDAL and USE flags. I have "grass" set in my USE flags and removing it stops the behavior of switching GRASS versions back & forth when doing a deep update, but wants to replace GDAL (w/o GRASS support of course) on doing emerge -uN world. Current workaround w/o changing my USE flags is to do emerge -uD world && emerge grass to perform a deep update (which I usually do when I update).
Grass and gdal have a circular dependency issue with the current portage design; even without the two versions of Grass 6 you would still have to rebuild one of them. There's not much you can do at this point other than your workaround.
Agreed on the circular depend, though grass definitely depends on gdal whereas grass is optional for gdal. Perhaps change the DEPEND in gdal-1.2.6-r3.ebuild and/or gdal-1.3.0.ebuild from grass? ( ~sci-geosciences/grass-6.0.0 ) to grass? ( =sci-geosciences/grass-6.0* ) which should stop the downgrade from 6.0.1 on a deep update if 6.0.1 is installed rather than 6.0.0-r2. Users would then have to know to re-emerge gdal once their choice of grass versions had been installed (or emerge gdal w/o grass USE flag, add the grass USE flag & re-emerge gdal which would then emerge GRASS & re-emerge gdal w/ grass support...true even before, correct?). Possible to make a new release of gdal-1.3.0 to test such a change to the DEPEND? Currently can't re-emerge GDAL w/ GRASS support w/o reverting to grass-6.0.0-r2.