r328 - branches/rewrite/src

Marco Presi partial-mirror-devel@lists.alioth.debian.org
Wed, 17 Nov 2004 01:53:13 -0700


Author: zufus
Date: Wed Nov 17 01:53:12 2004
New Revision: 328

Modified:
   branches/rewrite/src/Pool.py
Log:
Some clean in binUpates and various _get methods

Modified: branches/rewrite/src/Pool.py
==============================================================================
--- branches/rewrite/src/Pool.py	(original)
+++ branches/rewrite/src/Pool.py	Wed Nov 17 01:53:12 2004
@@ -23,6 +23,8 @@
 import Config
 import apt_pkg
 
+#TODO: (Zufus) add method sourceUpdates
+
 class Pool:
     """
     This class provides methods to manage pool dirs into the
@@ -34,106 +36,53 @@
         #self._backendBinList = backend._bin
         #self._backendSourceList = backend._source
         self._gotFiles = ()
+        self._plist = {}
         self._dir = FileSystem(backend["mirror_dir"],
                                os.path.join(backend["name"], 'pool'))
-        self._server = "%s/pool/" % (self._backend["server"])
+        self._server = "%s/" % (self._backend["server"])
         #self._local = "%s/pool/" % (self._backend["mirror_dir"])
         self._local = self._dir._dir
-
-    def BinUpdates (self):
+        
+    def binUpdates (self):
         """
         Scan into a Backend PackageList (_bin) and look for
         packages that have newer version on remote (or local)
         repository.  Return a PackageList of packages to be downloaded.
         """
+        
         for (pkgName, pkg) in backend.__bin.items():
-            localName = pkg['Filename'].split('pool/')[1]
+            localName = pkg['Filename']
 
             if not os.path.exists (os.path.join (self._local,localName)):
-                self._get (pkg, localName)
+                self._plist[pkgName] = pkg
 
             elif self._dir.md5_on (localName) == pkg['md5sum']:
-                    self._gotFiles.add(pkg)
+                    self._gotFiles.append(localName)
             else:
-                self._get (pkg, localName)
-
-    def _get (self, pkg, filename):
-        """
-        Get the a PackageList
-        """
-        pass
-
-########################################################################w
-# OLD STUFF (to be removed)
-########################################################################
+                self._plist[pkgName] = pkg
 
-    def find_updates (self, backendList):
-        """
-        Scan into a Backend PackageList (_bin) and look for
-        packages that have newer version on remote (or local)
-        repository.  Return a PackageList of packages to be downloaded.
-        """
-        for (pkgName, pkg) in backend.__bin.items():
-            if not self._plist.has_key(pkgName):
-                self._needUpdate.add(pkg)
-            else:
-                if self._plist[pkgName] != pkg['md5sum'] or
-                self._plist[pkgName] == -1:
-                    self._needUpdate.add(pkg)
-        return len(self._needUpdate.items)
+        #Print some output.. maybe a list of packages to download and
+        #total size..
+        print "This packages need to be downloaded:"
+        for p in self._plist.keys():
+            print "%s \n" % (pkg['Filename'])
 
-    def update (self):
+    def upgrade (self):
         """
         Get from remote (or local) repository new version of packages
         that were previously downloaded.
         """
-        for (pkg_name, pkg) in self._needUpdate.items():
-            filename = self._local + pkg['Section'] + '/' + pkg['Filename'] 
-            self._dir.create(os.path.dirname(filename))
-            self._get(pkg, filename)
-            self.__needUpdate.remove(pkg)
-            
-    def buildDownloadedList (self):
-        """
-        Walk into the pool dir and build a dictionary of packages stored
-        in the Backend. For each item we record package name and
-        md5sum. This dictionary can be used to determine which
-        packages are to be upgraded. Return the number of downloaded
-        packages.
-        """
-        for root, dirs, files in os.walk(self._dir):
-            for f in files:
-                self._plist[f.split('_')[0]]=self._dir.md5_on (f)
-        return self._plist.__len__
+        for (p, pkg) in self._plist.items():
+            self._dir.create(os.path.dirname(pkg['Filename']))
+            self._get(pkg)
+            self.gotFiles.append(pkg['Filename'])
 
-
-    def createPackages (self):
-        """
-        Run dpkg-scanpackages into the pool.
-        """
-        scan_command = "dpkg-scanpackages -a%s ./ ./override > Packages 2> /dev/null" % (self.backend["architectures"])
-        os.system(scan_command)
-        
-    def createBinList (self):
+    def _get (self, pkg):
         """
-        Create a PackageList object with the list of Packages already
-        downloaed into this pool. 
+        Get the a PackageList
         """
-        
-        pkgfile = os.join(self._dir, "Packages")
-        if not os.path.exists(pkgfile)
-            self.createPackages
-
-        parse = apt_pkg.ParseTagFile(open(pkgfile, "r"))
-        self._bin = PackageList()
-        while parse.Step() == 1:
-            try:
-                p = Package(parse.Section)
-                self._bin.add(p)
-            except PackageAlreadyExists, pkg_name:
-                print "Package %s seems duplicated..\n" % (pkg_name)
+        pass
 
-#####################################################################
 
 class RemotePool (Pool):
     """
@@ -142,9 +91,13 @@
     def __init__(self, backend):
         Pool.__init__(self, backend)
 
-    def _get (self, pkg, filename):
-        Download (self._server + pkg['Filename'],
-                  self.local + filename)
+    def _get (self, p):
+        """
+        Download the Package p in 
+        """
+        f = p.['Filename']
+        Download (self._server + f,
+                  self.local + f)
 
 class LocalPool (Pool):
     """
@@ -154,8 +107,13 @@
         Pool.__init__(self, backend)
         self._server = self._server.split ('file://')[1]
         
-    def _get (self, pkg, filename):
-            os.link (self._server + pkg['Filename'],
-                     self._local + filename)
+    def _get (self, p):
+        """
+        Link the Package p in the pool
+        """
+
+        f = p.['Filename']
+        os.link (self._server + f,
+                 self._local + f)