From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([69.77.167.62] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Kyc75-0008LG-Tq for garchives@archives.gentoo.org; Sat, 08 Nov 2008 00:55:44 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id D2447E031D; Sat, 8 Nov 2008 00:55:43 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 8647FE0343 for ; Sat, 8 Nov 2008 00:55:43 +0000 (UTC) Received: from stork.gentoo.org (stork.gentoo.org [64.127.104.133]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTP id A883764F9F for ; Sat, 8 Nov 2008 00:55:41 +0000 (UTC) Received: from zmedico by stork.gentoo.org with local (Exim 4.69) (envelope-from ) id 1Kyc73-00022R-D2 for gentoo-commits@lists.gentoo.org; Sat, 08 Nov 2008 00:55:41 +0000 To: gentoo-commits@lists.gentoo.org From: "Zac Medico (zmedico)" Subject: [gentoo-commits] portage r11827 - in main/trunk/pym: _emerge portage/dbapi X-VCS-Repository: portage X-VCS-Revision: 11827 X-VCS-Files: main/trunk/pym/_emerge/__init__.py main/trunk/pym/portage/dbapi/vartree.py X-VCS-Directories: _emerge portage/dbapi X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico Content-Type: text/plain; charset=UTF-8 Message-Id: Sender: Zac Medico Date: Sat, 08 Nov 2008 00:55:41 +0000 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: cc6a9efe-e156-43d5-a9ef-c6d802e135ef X-Archives-Hash: eaa68b46ce2d959dc48f59c68c3d3d42 Author: zmedico Date: 2008-11-08 00:55:40 +0000 (Sat, 08 Nov 2008) New Revision: 11827 Modified: main/trunk/pym/_emerge/__init__.py main/trunk/pym/portage/dbapi/vartree.py Log: Handle CommandNotFound exceptions if the scanelf binary happens to be mis= sing, and disable preserve-libs code in that case. Modified: main/trunk/pym/_emerge/__init__.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- main/trunk/pym/_emerge/__init__.py 2008-11-07 22:18:33 UTC (rev 11826= ) +++ main/trunk/pym/_emerge/__init__.py 2008-11-08 00:55:40 UTC (rev 11827= ) @@ -11084,20 +11084,30 @@ print colorize("WARN", "!!!") + " existing preserved libs:" plibdata =3D vardbapi.plib_registry.getPreservedLibs() linkmap =3D vardbapi.linkmap - consumer_map =3D {} - search_for_owners =3D set() - for cpv in plibdata: - for f in plibdata[cpv]: - if f in consumer_map: - continue - consumers =3D list(linkmap.findConsumers(f)) - consumers.sort() - consumer_map[f] =3D consumers - search_for_owners.update(consumers[:MAX_DISPLAY+1]) + owners =3D {} + linkmap_broken =3D False =20 - owners =3D vardbapi._owners.getFileOwnerMap(search_for_owners) + try: + linkmap.rebuild() + except portage.exception.CommandNotFound, e: + writemsg_level("!!! Command Not Found: %s\n" % (e,), + level=3Dlogging.ERROR, noiselevel=3D-1) + del e + linkmap_broken =3D True + else: + search_for_owners =3D set() + for cpv in plibdata: + for f in plibdata[cpv]: + if f in consumer_map: + continue + consumers =3D list(linkmap.findConsumers(f)) + consumers.sort() + consumer_map[f] =3D consumers + search_for_owners.update(consumers[:MAX_DISPLAY+1]) =20 + owners =3D vardbapi._owners.getFileOwnerMap(search_for_owners) + for cpv in plibdata: print colorize("WARN", ">>>") + " package: %s" % cpv samefile_map =3D {} @@ -11114,7 +11124,7 @@ for p in alt_paths: print colorize("WARN", " * ") + " - %s" % (p,) f =3D alt_paths[0] - consumers =3D consumer_map[f] + consumers =3D consumer_map.get(f, []) for c in consumers[:MAX_DISPLAY]: print colorize("WARN", " * ") + " used by %s (%s)" % \ (c, ", ".join(x.mycpv for x in owners.get(c, []))) Modified: main/trunk/pym/portage/dbapi/vartree.py =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- main/trunk/pym/portage/dbapi/vartree.py 2008-11-07 22:18:33 UTC (rev = 11826) +++ main/trunk/pym/portage/dbapi/vartree.py 2008-11-08 00:55:40 UTC (rev = 11827) @@ -249,6 +249,10 @@ return str(sorted(self.alt_paths)) =20 def rebuild(self, exclude_pkgs=3DNone, include_file=3DNone): + """ + Raises CommandNotFound if there are preserved libs + and the scanelf binary is not available. + """ root =3D self._root root_len =3D len(root) - 1 self._clear_cache() @@ -1734,6 +1738,7 @@ self.contentscache =3D None self._contents_inodes =3D None self._contents_basenames =3D None + self._linkmap_broken =3D False =20 def lockdb(self): if self._lock_vdb: @@ -2022,7 +2027,7 @@ # already called LinkageMap.rebuild() and passed it's NEEDED file # in as an argument. if not others_in_slot: - self.vartree.dbapi.linkmap.rebuild(exclude_pkgs=3D(self.mycpv,)) + self._linkmap_rebuild(exclude_pkgs=3D(self.mycpv,)) =20 # remove preserved libraries that don't have any consumers left cpv_lib_map =3D self._find_unused_preserved_libs() @@ -2467,12 +2472,26 @@ =20 return False =20 + def _linkmap_rebuild(self, **kwargs): + if self._linkmap_broken: + return + try: + self.vartree.dbapi.linkmap.rebuild(**kwargs) + except CommandNotFound, e: + self._linkmap_broken =3D True + self._display_merge("!!! Disabling preserve-libs " + \ + "due to error: Command Not Found: %s\n" % (e,), + level=3Dlogging.ERROR, noiselevel=3D-1) + def _preserve_libs(self, srcroot, destroot, mycontents, counter, inforo= ot): - showMessage =3D self._display_merge - # read global reverse NEEDED map + linkmap =3D self.vartree.dbapi.linkmap - linkmap.rebuild(include_file=3Dos.path.join(inforoot, + self._linkmap_rebuild(include_file=3Dos.path.join(inforoot, linkmap._needed_aux_key)) + if self._linkmap_broken: + return + + showMessage =3D self._display_merge liblist =3D linkmap.listLibraryObjects() =20 # get list of libraries from old package instance @@ -2616,6 +2635,9 @@ Find preserved libraries that don't have any consumers left. """ =20 + if self._linkmap_broken: + return {} + # Since preserved libraries can be consumers of other preserved # libraries, use a graph to track consumer relationships. plib_dict =3D self.vartree.dbapi.plib_registry.getPreservedLibs() @@ -3357,7 +3379,7 @@ =20 exclude_pkgs =3D set(dblnk.mycpv for dblnk in others_in_slot) linkmap =3D self.vartree.dbapi.linkmap - linkmap.rebuild(exclude_pkgs=3Dexclude_pkgs, + self._linkmap_rebuild(exclude_pkgs=3Dexclude_pkgs, include_file=3Dos.path.join(inforoot, linkmap._needed_aux_key)) =20 # These caches are populated during collision-protect and the data @@ -3385,6 +3407,7 @@ continue showMessage(">>> Safely unmerging already-installed instance...\n") others_in_slot.remove(dblnk) # dblnk will unmerge itself now + dblnk._linkmap_broken =3D self._linkmap_broken dblnk.unmerge(trimworld=3D0, ldpath_mtimes=3Dprev_mtimes, others_in_slot=3Dothers_in_slot) # TODO: Check status and abort if necessary. @@ -3434,9 +3457,6 @@ self.vartree.dbapi._add(self) contents =3D self.getcontents() =20 - # regenerate reverse NEEDED map - self.vartree.dbapi.linkmap.rebuild() - #do postinst script self.settings["PORTAGE_UPDATE_ENV"] =3D \ os.path.join(self.dbpkgdir, "environment.bz2") @@ -3473,7 +3493,7 @@ =20 # For gcc upgrades, preserved libs have to be removed after the # the library path has been updated. - self.vartree.dbapi.linkmap.rebuild() + self._linkmap_rebuild() cpv_lib_map =3D self._find_unused_preserved_libs() if cpv_lib_map: self._remove_preserved_libs(cpv_lib_map)