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)