[Demi-commits] r79 - lib

John Morrissey jwm-guest at costa.debian.org
Mon Apr 24 18:23:25 UTC 2006


Author: jwm-guest
Date: 2006-04-24 18:23:24 +0000 (Mon, 24 Apr 2006)
New Revision: 79

Modified:
   lib/machine.py
Log:
- don't need apt_pkg here
- oops, don't keep *all* packages in each ideal machine, just iterate
  through all of the ideal machine's dependencies (= machines which consider
  the ideal machine *their* ideal machine) and store only the packages that
  are installed. page loads are *much* faster. :-)
- update ideal machines each time now, not just once a day; it's fast enough
  to do every time
- gracefully handle the corner case where a machine's ideal machine is None


Modified: lib/machine.py
===================================================================
--- lib/machine.py	2006-04-24 18:21:15 UTC (rev 78)
+++ lib/machine.py	2006-04-24 18:23:24 UTC (rev 79)
@@ -16,7 +16,7 @@
 #
 # $Id$
 
-import apt_pkg, md5, re
+import md5, re
 from datetime import datetime, timedelta
 # FIXME: this should be database-agnostic
 from MySQLdb  import IntegrityError
@@ -94,8 +94,6 @@
 
 	# Consider machines inactive after this many days.
 	INACTIVE_AFTER = 7
-	# Update ideal machines after this many days.
-	IDEAL_UPDATE_AFTER = 1
 
 	def __cmp__(self, other):
 		if other == None:
@@ -180,16 +178,23 @@
 			# We don't need to update anything else (aptPrefs, sources.list,
 			# etc.) since this is a fake machine.
 
-			if datetime.now(demi.tz()) - self.lastCheckin < \
-			   timedelta(days = self.IDEAL_UPDATE_AFTER):
-				return
-
 			if demi.aptCache == None:
 				demi.initApt()
 
+			depPkgs = []
+			for m in getAllMachines():
+				if m.ideal.hostname == self.hostname and \
+				   m.hostname != self.hostname:
+					for pkgName in m.pkgVersions.keys():
+						depPkgs.append(pkgName)
+
 			idealPkgs = {}
 			idealRelationships = {}
-			for package in demi.aptCache.Packages:
+			for pkgName in depPkgs:
+				try:
+					package = demi.aptCache[pkgName]
+				except:
+					continue
 				if not package.VersionList:
 					continue
 
@@ -484,6 +489,10 @@
 	def isPackageOutdated(self, pkgName):
 		"""Determine whether a given package is outdated."""
 
+		if self.ideal == None:
+			# No ideal machine? Consider the package up-to-date. Not ideal,
+			# but better than considering everything out-of-date.
+			return False
 		if demi.versionCompare(self.getPackageVersion(pkgName), self.ideal.getPackageVersion(pkgName)) < 0:
 			return True
 		return False
@@ -526,6 +535,9 @@
 		installation status.
 		"""
 
+		if self.ideal == None:
+			return {}
+
 		affected = self.binaryPackagesFor(dsa.package)
 		if affected == None:
 			# The DSA might not be for the source package, but for a
@@ -541,6 +553,8 @@
 
 	def sourcePackageFor(self, pkgName):
 		if self.hostname[-11:] != ".ideal.demi":
+			if not self.ideal:
+				return None
 			return self.ideal.sourcePackageFor(pkgName)
 		for source, binaries in self._srcToBinPkg.iteritems():
 			if pkgName in binaries:
@@ -549,6 +563,8 @@
 
 	def binaryPackagesFor(self, pkgName):
 		if self.hostname[-11:] != ".ideal.demi":
+			if not self.ideal:
+				return None
 			return self.ideal.binaryPackagesFor(pkgName)
 		if self._srcToBinPkg.has_key(pkgName):
 			return self._srcToBinPkg[pkgName]




More information about the Demi-commits mailing list