summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/Package.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-05-22 11:53:41 -0700
committerZac Medico <zmedico@gentoo.org>2011-05-22 11:53:41 -0700
commitd0a8b0bdfeeb406f459ee460f0df3b1b3360ddf1 (patch)
tree428301ec445b9116dffb8fa6f9880225b394fd45 /pym/_emerge/Package.py
parent9f4e7fa99017888ffed7414a6238961165b6d4e6 (diff)
downloadportage-d0a8b0bdfeeb406f459ee460f0df3b1b3360ddf1.tar.gz
portage-d0a8b0bdfeeb406f459ee460f0df3b1b3360ddf1.tar.bz2
portage-d0a8b0bdfeeb406f459ee460f0df3b1b3360ddf1.zip
Package: add new _gen_hash_key method
Diffstat (limited to 'pym/_emerge/Package.py')
-rw-r--r--pym/_emerge/Package.py45
1 files changed, 39 insertions, 6 deletions
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py
index 6847a3240..cb476d68e 100644
--- a/pym/_emerge/Package.py
+++ b/pym/_emerge/Package.py
@@ -81,15 +81,48 @@ class Package(Task):
else:
self.operation = "merge"
+ self._hash_key = Package._gen_hash_key(cpv=self.cpv,
+ installed=self.installed, onlydeps=self.onlydeps,
+ operation=self.operation, repo_name=repo,
+ root_config=self.root_config,
+ type_name=self.type_name)
+ self._hash_value = hash(self._hash_key)
+
+ @classmethod
+ def _gen_hash_key(cls, cpv=None, installed=None, onlydeps=None,
+ operation=None, repo_name=None, root_config=None,
+ type_name=None, **kwargs):
+
+ if operation is None:
+ if installed or onlydeps:
+ operation = "nomerge"
+ else:
+ operation = "merge"
+
+ root = None
+ if root_config is not None:
+ root = 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 = self.metadata.get('repository')
- if self.type_name != 'ebuild':
- repo_key = self.type_name
- self._hash_key = \
- (self.type_name, self.root, self.cpv, self.operation, repo_key)
- self._hash_value = hash(self._hash_key)
+ if type_name is None:
+ raise TypeError("type_name argument is required")
+ elif type_name == "ebuild":
+ if repo_name is None:
+ raise AssertionError(
+ "Package._gen_hash_key() " + \
+ "called without 'repo_name' argument")
+ repo_key = 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 = type_name
+
+ return (type_name, root, cpv, operation, repo_key)
def _validate_deps(self):
"""