r324 - branches/rewrite/src

Marco Presi partial-mirror-devel@lists.alioth.debian.org
Tue, 16 Nov 2004 15:34:37 -0700


Author: zufus
Date: Tue Nov 16 15:34:36 2004
New Revision: 324

Modified:
   branches/rewrite/src/Dists.py
   branches/rewrite/src/Pool.py
Log:
Dists.py : fixed an improper use of string.lstrip.

Pool.py: implemented a new (maybe definitive) way to determine paclages
to be downloaded.



Modified: branches/rewrite/src/Dists.py
==============================================================================
--- branches/rewrite/src/Dists.py	(original)
+++ branches/rewrite/src/Dists.py	Tue Nov 16 15:34:36 2004
@@ -109,5 +109,5 @@
             server, filename = f
             orig, filename = file
             self._dir.create(os.path.dirname(filename))
-            os.link (orig.lstrip('file://'), filename)
+            os.link (orig.split('file://')[1], filename)
 

Modified: branches/rewrite/src/Pool.py
==============================================================================
--- branches/rewrite/src/Pool.py	(original)
+++ branches/rewrite/src/Pool.py	Tue Nov 16 15:34:36 2004
@@ -33,46 +33,47 @@
         self._backend = backend
         #self._backendBinList = backend._bin
         #self._backendSourceList = backend._source
-        self._plist = {}
-        self._needUpdate = PackageList()
+        self._gotFiles = ()
         self._dir = FileSystem(backend["mirror_dir"],
                                os.path.join(backend["name"], 'pool'))
         self._server = "%s/pool/" % (self._backend["server"])
-        self._local = "%/pool/" % (self._backend["mirror_dir"])
+        #self._local = "%s/pool/" % (self._backend["mirror_dir"])
+        self._local = self._dir._dir
 
+    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]
 
-    # The following two methods can be used to deterine which packages
-    # in the pool need to be upgraded because a new version is present
-    # in repository we are mirroring.  Those methods work in a way
-    # similar to the trunk debpartial-mirror, but I think there are
-    # some drawbacks.
+            if not os.path.exists (os.path.join (self._local,localName)):
+                self._get (pkg, localName)
 
+            elif self._dir.md5_on (localName) == pkg['md5sum']:
+                    self._gotFiles.add(pkg)
+            else:
+                self._get (pkg, localName)
 
-    def buildDownloadedList (self):
+    def _get (self, pkg, filename):
         """
-        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.
+        Get the a PackageList
         """
-        #Warning: this method can fail if the pool contains more
-        #versions of the same package... Every time the package is
-        #found (no matter of the version or if is a binary or a source
-        #package) his md5dum is replaced.
-        
-        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__
+        pass
+
+########################################################################w
+# OLD STUFF (to be removed)
+########################################################################
 
     def find_updates (self, backendList):
         """
-        Scan into a Backend PackageList (_bin or _source) and look for
+        Scan into a Backend PackageList (_bin) and look for
         packages that have newer version on remote (or local)
-        repository.  Return number of packages to be downloaded.
+        repository.  Return a PackageList of packages to be downloaded.
         """
-        for (pkgName, pkg) in backendList.items():
+        for (pkgName, pkg) in backend.__bin.items():
             if not self._plist.has_key(pkgName):
                 self._needUpdate.add(pkg)
             else:
@@ -81,16 +82,30 @@
                     self._needUpdate.add(pkg)
         return len(self._needUpdate.items)
 
-########################################################################
-
-    # The following methods are used to find wich packages need to be
-    # upgraded.  Those methods use a new way: Create a local packages
-    # and Source lists that are used in a way similar to a local
-    # cache. In this way the problem of multiple version of the same
-    # package should be solved.
+    def update (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__
 
-    # The metohds apply only for binary packages, but their extension
-    # to Sources packages is (should be) trivial.
 
     def createPackages (self):
         """
@@ -120,23 +135,6 @@
 
 #####################################################################
 
-    def update (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 _get (self, pkg, filename):
-        """
-        Get the a PackageList
-        """
-        pass
-
 class RemotePool (Pool):
     """
     This class provides methods to fill pool dir downloading remote files
@@ -145,8 +143,8 @@
         Pool.__init__(self, backend)
 
     def _get (self, pkg, filename):
-        Download (self._server + pkg['Section'] + '/' + pkg['Filename'],
-                  filename)
+        Download (self._server + pkg['Filename'],
+                  self.local + filename)
 
 class LocalPool (Pool):
     """
@@ -154,10 +152,10 @@
     """
     def __init__(self, backend):
         Pool.__init__(self, backend)
-        self._server = self._server.lstrip ('file://')
+        self._server = self._server.split ('file://')[1]
         
     def _get (self, pkg, filename):
-            os.link (self._server + pkg['Section'] + '/' + pkg['Filename'],
-                     filename)
+            os.link (self._server + pkg['Filename'],
+                     self._local + filename)