[or-cvs] r17293: {updater} Make client downloading work. Testing still needed. Glue sti (updater/trunk/lib/thandy)
nickm at seul.org
nickm at seul.org
Sun Nov 16 21:10:45 UTC 2008
Author: nickm
Date: 2008-11-16 16:10:45 -0500 (Sun, 16 Nov 2008)
New Revision: 17293
Modified:
updater/trunk/lib/thandy/ClientCLI.py
updater/trunk/lib/thandy/repository.py
Log:
Make client downloading work. Testing still needed. Glue still needed for installation.
Modified: updater/trunk/lib/thandy/ClientCLI.py
===================================================================
--- updater/trunk/lib/thandy/ClientCLI.py 2008-11-16 21:09:48 UTC (rev 17292)
+++ updater/trunk/lib/thandy/ClientCLI.py 2008-11-16 21:10:45 UTC (rev 17293)
@@ -1,12 +1,14 @@
# Copyright 2008 The Tor Project, Inc. See LICENSE for licensing information.
+import getopt
+import logging
import os
import sys
-import getopt
import thandy.util
import thandy.repository
import thandy.download
+import thandy.master_keys
def update(args):
repoRoot = thandy.util.userFilename("cache")
@@ -21,25 +23,42 @@
repo = thandy.repository.LocalRepository(repoRoot)
- files = repo.getFilesToUpdate(trackingBundles=args)
+ while True:
+ hashes = {}
+ logging.info("Checking for files to update.")
+ files = repo.getFilesToUpdate(trackingBundles=args, hashDict=hashes)
+ logging.info("Files to download are: %s", ", ".join(sorted(files)))
- if not download:
- return
+ if not download or not files:
+ return
- mirrorlist = repo.getMirrorlistFile().get()
+ mirrorlist = repo.getMirrorlistFile().get()
+ if not mirrorlist:
+ mirrorlist = thandy.master_keys.DEFAULT_MIRRORLIST
- downloader = thandy.download.Downloads()
- downloader.start()
+ downloader = thandy.download.DownloadManager()
- for f in files:
- # XXXX Use hash.
- dj = thandy.download.ThandyDownloadJob(f, repo.getFilename(f),
- mirrorlist)
- downloader.addDownloadJob(dj)
- # XXXX replace file in repository if ok; reload; see what changed.
+ for f in files:
+ dj = thandy.download.ThandyDownloadJob(f, repo.getFilename(f),
+ mirrorlist,
+ wantHash=hashes.get(f))
- # Wait for in-progress jobs
+ def successCb(rp=f):
+ rf = repo.getRequestedFile(rp)
+ if rf != None:
+ rf.clear()
+ rf.load()
+ downloader.addDownloadJob(dj)
+
+ logging.info("Launching downloads")
+ downloader.start()
+
+ logging.info("Waiting for downloads to finish.")
+ downloader.wait()
+ logging.info("All downloads finished.")
+
+
# Check my repository
# Tell me what I need to download
@@ -55,6 +74,9 @@
sys.exit(1)
def main():
+ #XXXX make this an option.
+ logging.basicConfig(level=logging.DEBUG)
+
if len(sys.argv) < 2:
usage()
cmd = sys.argv[1]
Modified: updater/trunk/lib/thandy/repository.py
===================================================================
--- updater/trunk/lib/thandy/repository.py 2008-11-16 21:09:48 UTC (rev 17292)
+++ updater/trunk/lib/thandy/repository.py 2008-11-16 21:10:45 UTC (rev 17293)
@@ -174,6 +174,9 @@
def clear(self):
self._mtime = None
+ def load(self):
+ pass
+
def getRelativePath(self):
return self._relativePath
@@ -258,7 +261,7 @@
return pkg
def getRequestedFile(self, relPath):
- """ """
+ """DOCDOC"""
for f in self._metafiles:
if f.getRelativePath() == relPath:
return f
@@ -274,6 +277,8 @@
if rp == relPath:
return PkgFile(self, rp, thandy.formats.parseHash(h))
+ return None
+
def getFilesToUpdate(self, now=None, trackingBundles=(), hashDict=None):
"""Return a set of relative paths for all files that we need
to fetch. Assumes that we care about the bundles
More information about the tor-commits
mailing list