From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1QODnV-0006xZ-Hc for garchives@archives.gentoo.org; Sun, 22 May 2011 18:54:41 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id A9169E00E6; Sun, 22 May 2011 18:54:31 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 57DD4E00E6 for ; Sun, 22 May 2011 18:54:31 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 9F82967980 for ; Sun, 22 May 2011 18:54:30 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 5BAA980506 for ; Sun, 22 May 2011 18:54:29 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/ X-VCS-Repository: proj/portage X-VCS-Files: pym/_emerge/FakeVartree.py pym/_emerge/Package.py pym/_emerge/Scheduler.py pym/_emerge/depgraph.py X-VCS-Directories: pym/_emerge/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: d0a8b0bdfeeb406f459ee460f0df3b1b3360ddf1 Date: Sun, 22 May 2011 18:54:29 +0000 (UTC) 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: X-Archives-Hash: 90c75bd79ea55c28ef19ecda0f3a3158 commit: d0a8b0bdfeeb406f459ee460f0df3b1b3360ddf1 Author: Zac Medico gentoo org> AuthorDate: Sun May 22 18:53:41 2011 +0000 Commit: Zac Medico gentoo org> CommitDate: Sun May 22 18:53:41 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3Dd0a8b0bd Package: add new _gen_hash_key method --- pym/_emerge/FakeVartree.py | 6 +++- pym/_emerge/Package.py | 45 ++++++++++++++++++++++++++++++++++++++= ----- pym/_emerge/Scheduler.py | 24 +++------------------- pym/_emerge/depgraph.py | 22 +++++--------------- 4 files changed, 53 insertions(+), 44 deletions(-) diff --git a/pym/_emerge/FakeVartree.py b/pym/_emerge/FakeVartree.py index ff092ad..3e81130 100644 --- a/pym/_emerge/FakeVartree.py +++ b/pym/_emerge/FakeVartree.py @@ -153,11 +153,13 @@ class FakeVartree(vartree): =20 # Validate counters and timestamps. slot_counters =3D {} - root =3D self.root + root_config =3D self._pkg_root_config validation_keys =3D ["COUNTER", "_mtime_"] for cpv in current_cpv_set: =20 - pkg_hash_key =3D ("installed", root, cpv, "nomerge", "installed") + pkg_hash_key =3D Package._gen_hash_key(cpv=3Dcpv, + installed=3DTrue, root_config=3Droot_config, + type_name=3D"installed") pkg =3D pkg_vardb.get(pkg_hash_key) if pkg is not None: counter, mtime =3D real_vardb.aux_get(cpv, validation_keys) diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py index 6847a32..cb476d6 100644 --- a/pym/_emerge/Package.py +++ b/pym/_emerge/Package.py @@ -81,15 +81,48 @@ class Package(Task): else: self.operation =3D "merge" =20 + self._hash_key =3D Package._gen_hash_key(cpv=3Dself.cpv, + installed=3Dself.installed, onlydeps=3Dself.onlydeps, + operation=3Dself.operation, repo_name=3Drepo, + root_config=3Dself.root_config, + type_name=3Dself.type_name) + self._hash_value =3D hash(self._hash_key) + + @classmethod + def _gen_hash_key(cls, cpv=3DNone, installed=3DNone, onlydeps=3DNone, + operation=3DNone, repo_name=3DNone, root_config=3DNone, + type_name=3DNone, **kwargs): + + if operation is None: + if installed or onlydeps: + operation =3D "nomerge" + else: + operation =3D "merge" + + root =3D None + if root_config is not None: + root =3D root_config.root + else: + raise TypeError("root_config argument is required") + # For installed (and binary) packages we don't care for the repo # when it comes to hashing, because there can only be one cpv. # So overwrite the repo_key with type_name. - repo_key =3D self.metadata.get('repository') - if self.type_name !=3D 'ebuild': - repo_key =3D self.type_name - self._hash_key =3D \ - (self.type_name, self.root, self.cpv, self.operation, repo_key) - self._hash_value =3D hash(self._hash_key) + if type_name is None: + raise TypeError("type_name argument is required") + elif type_name =3D=3D "ebuild": + if repo_name is None: + raise AssertionError( + "Package._gen_hash_key() " + \ + "called without 'repo_name' argument") + repo_key =3D repo_name + else: + # For installed (and binary) packages we don't care for the repo + # when it comes to hashing, because there can only be one cpv. + # So overwrite the repo_key with type_name. + repo_key =3D type_name + + return (type_name, root, cpv, operation, repo_key) =20 def _validate_deps(self): """ diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index 74d888a..b10439a 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -2016,27 +2016,11 @@ class Scheduler(PollScheduler): corrupt). """ =20 - if type_name !=3D "ebuild": - # For installed (and binary) packages we don't care for the repo - # when it comes to hashing, because there can only be one cpv. - # So overwrite the repo_key with type_name. - repo_key =3D type_name - myrepo =3D None - elif myrepo is None: - raise AssertionError( - "Scheduler._pkg() called without 'myrepo' argument") - else: - repo_key =3D myrepo - - if operation is None: - if installed: - operation =3D "nomerge" - else: - operation =3D "merge" - # Reuse existing instance when available. - pkg =3D self._pkg_cache.get( - (type_name, root_config.root, cpv, operation, repo_key)) + pkg =3D self._pkg_cache.get(Package._gen_hash_key(cpv=3Dcpv, + type_name=3Dtype_name, repo_name=3Dmyrepo, root_config=3Droot_config, + installed=3Dinstalled, operation=3Doperation)) + if pkg is not None: return pkg =20 diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index d09ee87..0bd3512 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -4130,30 +4130,20 @@ class depgraph(object): failures for some reason (package does not exist or is corrupt). """ - if type_name !=3D "ebuild": - # For installed (and binary) packages we don't care for the repo - # when it comes to hashing, because there can only be one cpv. - # So overwrite the repo_key with type_name. - repo_key =3D type_name - myrepo =3D None - elif myrepo is None: - raise AssertionError( - "depgraph._pkg() called without 'myrepo' argument") - else: - repo_key =3D myrepo =20 - operation =3D "merge" - if installed or onlydeps: - operation =3D "nomerge" # Ensure that we use the specially optimized RootConfig instance # that refers to FakeVartree instead of the real vartree. root_config =3D self._frozen_config.roots[root_config.root] pkg =3D self._frozen_config._pkg_cache.get( - (type_name, root_config.root, cpv, operation, repo_key)) + Package._gen_hash_key(cpv=3Dcpv, type_name=3Dtype_name, + repo_name=3Dmyrepo, root_config=3Droot_config, + installed=3Dinstalled, onlydeps=3Donlydeps)) if pkg is None and onlydeps and not installed: # Maybe it already got pulled in as a "merge" node. pkg =3D self._dynamic_config.mydbapi[root_config.root].get( - (type_name, root_config.root, cpv, 'merge', repo_key)) + Package._gen_hash_key(cpv=3Dcpv, type_name=3Dtype_name, + repo_name=3Dmyrepo, root_config=3Droot_config, + installed=3Dinstalled, onlydeps=3DFalse)) =20 if pkg is None: tree_type =3D self.pkg_tree_map[type_name]