summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/models.py4
-rw-r--r--packages/models.py20
2 files changed, 10 insertions, 14 deletions
diff --git a/main/models.py b/main/models.py
index 46fd3a6..da9d8b6 100644
--- a/main/models.py
+++ b/main/models.py
@@ -277,10 +277,10 @@ class Package(models.Model):
# TODO: we can use list comprehension and an 'in' query to make this
# more effective
for dep in self.depends.all():
- pkg = dep.get_best_satisfier(self)
+ pkg = dep.get_best_satisfier()
providers = None
if not pkg:
- providers = dep.get_providers(self)
+ providers = dep.get_providers()
deps.append({'dep': dep, 'pkg': pkg, 'providers': providers})
# sort the list; deptype sorting makes this tricker than expected
sort_order = {'D': 0, 'O': 1, 'M': 2, 'C': 3}
diff --git a/packages/models.py b/packages/models.py
index ff67788..7bcdc00 100644
--- a/packages/models.py
+++ b/packages/models.py
@@ -357,16 +357,14 @@ class RelatedToBase(models.Model):
name = models.CharField(max_length=255, db_index=True)
version = models.CharField(max_length=255, default='')
- def get_best_satisfier(self, main_pkg=None):
+ def get_best_satisfier(self):
'''Find a satisfier for this related package that best matches the
given criteria. It will not search provisions, but will find packages
named and matching repo characteristics if possible.'''
- if main_pkg is None:
- main_pkg = self.pkg
pkgs = Package.objects.normal().filter(pkgname=self.name)
- if not main_pkg.arch.agnostic:
+ if not self.pkg.arch.agnostic:
# make sure we match architectures if possible
- arches = main_pkg.applicable_arches()
+ arches = self.pkg.applicable_arches()
pkgs = pkgs.filter(arch__in=arches)
# if we have a comparison operation, make sure the packages we grab
# actually satisfy the requirements
@@ -386,27 +384,25 @@ class RelatedToBase(models.Model):
pkg = pkgs[0]
# prevents yet more DB queries, these lists should be short;
# after each grab the best available in case we remove all entries
- pkgs = [p for p in pkgs if p.repo.staging == main_pkg.repo.staging]
+ pkgs = [p for p in pkgs if p.repo.staging == self.pkg.repo.staging]
if len(pkgs) > 0:
pkg = pkgs[0]
- pkgs = [p for p in pkgs if p.repo.testing == main_pkg.repo.testing]
+ pkgs = [p for p in pkgs if p.repo.testing == self.pkg.repo.testing]
if len(pkgs) > 0:
pkg = pkgs[0]
return pkg
- def get_providers(self, main_pkg=None):
+ def get_providers(self):
'''Return providers of this related package. Does *not* include exact
matches as it checks the Provision names only, use get_best_satisfier()
instead for exact matches.'''
- if main_pkg is None:
- main_pkg = self.pkg
pkgs = Package.objects.normal().filter(
provides__name=self.name).order_by().distinct()
- if not main_pkg.arch.agnostic:
+ if not self.pkg.arch.agnostic:
# make sure we match architectures if possible
- arches = main_pkg.applicable_arches()
+ arches = self.pkg.applicable_arches()
pkgs = pkgs.filter(arch__in=arches)
# If we have a comparison operation, make sure the packages we grab