From 19123d07f93bff6833848774812de882e7be9960 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 22 Jun 2012 02:45:36 -0700 Subject: fakedbapi: use _pkg_str more --- pym/portage/dbapi/virtual.py | 51 +++++++++++++++++++++++-------- pym/portage/tests/dbapi/test_fakedbapi.py | 7 +++-- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/pym/portage/dbapi/virtual.py b/pym/portage/dbapi/virtual.py index da15983ee..213708c93 100644 --- a/pym/portage/dbapi/virtual.py +++ b/pym/portage/dbapi/virtual.py @@ -74,30 +74,55 @@ class fakedbapi(dbapi): @param metadata: dict """ self._clear_cache() - if not hasattr(mycpv, 'cp'): + + try: + mycp = mycpv.cp + except AttributeError: + mycp = None + try: + myslot = mycpv.slot + except AttributeError: + myslot = None + + if mycp is None or \ + (myslot is None and metadata is not None and metadata.get('SLOT')): if metadata is None: mycpv = _pkg_str(mycpv) else: mycpv = _pkg_str(mycpv, slot=metadata.get('SLOT'), - repo=metadata.get('repository')) - mycp = mycpv.cp + repo=metadata.get('repository'), eapi=metadata.get('EAPI')) + + mycp = mycpv.cp + try: + myslot = mycpv.slot + except AttributeError: + pass + self.cpvdict[mycpv] = metadata - myslot = None - if self._exclusive_slots and metadata: - myslot = metadata.get("SLOT", None) + if not self._exclusive_slots: + myslot = None if myslot and mycp in self.cpdict: # If necessary, remove another package in the same SLOT. for cpv in self.cpdict[mycp]: if mycpv != cpv: - other_metadata = self.cpvdict[cpv] - if other_metadata: - if myslot == other_metadata.get("SLOT", None): + try: + other_slot = cpv.slot + except AttributeError: + pass + else: + if myslot == other_slot: self.cpv_remove(cpv) break - if mycp not in self.cpdict: - self.cpdict[mycp] = [] - if not mycpv in self.cpdict[mycp]: - self.cpdict[mycp].append(mycpv) + + cp_list = self.cpdict.get(mycp) + if cp_list is None: + cp_list = [] + self.cpdict[mycp] = cp_list + try: + cp_list.remove(mycpv) + except ValueError: + pass + cp_list.append(mycpv) def cpv_remove(self,mycpv): """Removes a cpv from the list of available packages.""" diff --git a/pym/portage/tests/dbapi/test_fakedbapi.py b/pym/portage/tests/dbapi/test_fakedbapi.py index bce824530..e3843f0a4 100644 --- a/pym/portage/tests/dbapi/test_fakedbapi.py +++ b/pym/portage/tests/dbapi/test_fakedbapi.py @@ -1,4 +1,4 @@ -# Copyright 2011 Gentoo Foundation +# Copyright 2011-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import tempfile @@ -53,6 +53,9 @@ class TestFakedbapi(TestCase): fakedb.cpv_inject(cpv, metadata=metadata) for atom, expected_result in match_tests: - self.assertEqual( fakedb.match(atom), expected_result ) + result = fakedb.match(atom) + self.assertEqual(fakedb.match(atom), expected_result, + "fakedb.match('%s') = %s != %s" % + (atom, result, expected_result)) finally: shutil.rmtree(tempdir) -- cgit v1.2.3-1-g7c22