diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-05-22 11:53:41 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-05-22 11:53:41 -0700 |
commit | d0a8b0bdfeeb406f459ee460f0df3b1b3360ddf1 (patch) | |
tree | 428301ec445b9116dffb8fa6f9880225b394fd45 /pym/_emerge/Package.py | |
parent | 9f4e7fa99017888ffed7414a6238961165b6d4e6 (diff) | |
download | portage-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.py | 45 |
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): """ |