def __cmp__(self, other):
return cmp(self.requires, other.requires)
+ def __hash__(self):
+ return hash(self.requires)
+
@property
def type(self):
if self.requires.startswith("/"):
def __str__(self):
return self.conflicts
+ def __hash__(self):
+ return hash(self.conflicts)
+
class Obsoletes(object):
def __init__(self, pkg, obsoletes):
def __str__(self):
return self.obsoletes
+ def __hash__(self):
+ return hash(self.obsoletes)
+
class DependencySet(object):
def __init__(self, pakfire):
self.repos = pakfire.repos #repository.Repositories()
# List of packages in this set
- self.__packages = []
+ self.__packages = set()
# Helper lists
- self.__conflicts = []
- self.__requires = []
- self.__obsoletes = []
+ self.__conflicts = set()
+ self.__requires = set()
+ self.__obsoletes = set()
# Create a new transaction set.
self.ts = transaction.TransactionSet()
return
#logging.debug("Adding requires: %s" % requires)
- self.__requires.append(requires)
+ self.__requires.add(requires)
def add_obsoletes(self, obsoletes, pkg=None):
obsoletes = Obsoletes(pkg, obsoletes)
- self.__obsoletes.append(obsoletes)
+ self.__obsoletes.add(obsoletes)
def add_package(self, pkg, dep=False, transaction=True):
#print pkg, sorted(self.__packages)
#if not isinstance(pkg, packages.DatabasePackage):
# logging.info(" --> Adding package to dependency set: %s" % pkg.friendly_name)
- self.__packages.append(pkg)
+ self.__packages.add(pkg)
# Add the requirements of the newly added package.
for req in pkg.requires:
unresolveable_reqs = []
while self.__requires:
- requires = self.__requires.pop(0)
+ requires = self.__requires.pop()
logging.debug("Resolving requirement \"%s\"" % requires)
# Fetch all candidates from the repositories and save the
return ret
+ def __hash__(self):
+ hashstr = ["%s" % s for s in (self.name, self.epoch, self.version,
+ self.release, self.arch,)]
+
+ return hash("-".join(hashstr))
+
def dump(self, short=False, long=False):
if short:
return "%s.%s : %s" % (self.name, self.arch, self.summary)
if ret:
break
- return ret.split()
+ return set(ret.split())
@property
def _provides(self):
"%s=%s:%s-%s" % (self.name, self.epoch, self.version, self.release),
]
- return provides
+ return set(provides)
### methods ###
# Add other provides
for prov in self.metadata.get("PKG_PROVIDES", "").split():
- if not prov in provides:
- provides.append(prov)
+ provides.add(prov)
self.__provides = provides
@property
def conflicts(self):
- return self.metadata.get("PKG_CONFLICTS", "").split()
+ conflicts = self.metadata.get("PKG_CONFLICTS", "").split()
+
+ return set(conflicts)
@property
def obsoletes(self):
- return self.metadata.get("PKG_OBSOLETES", "").split()
+ obsoletes = self.metadata.get("PKG_OBSOLETES", "").split()
+
+ return set(obsoletes)