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)