diff options
Diffstat (limited to 'lib/thandy/ClientCLI.py')
-rw-r--r-- | lib/thandy/ClientCLI.py | 63 |
1 files changed, 52 insertions, 11 deletions
diff --git a/lib/thandy/ClientCLI.py b/lib/thandy/ClientCLI.py index 7d29de7..7818c6d 100644 --- a/lib/thandy/ClientCLI.py +++ b/lib/thandy/ClientCLI.py @@ -4,32 +4,78 @@ import getopt import logging import os import sys +import time +import thandy.formats import thandy.util import thandy.repository import thandy.download import thandy.master_keys +import thandy.packagesys.PackageSystem def update(args): repoRoot = thandy.util.userFilename("cache") - options, args = getopt.getopt(args, "", [ "repo=", "no-download" ]) + options, args = getopt.getopt(args, "", [ "repo=", "no-download", + "loop", "no-packagesys", + "install"]) download = True + keep_looping = False + use_packagesys = True + install = False for o, v in options: if o == '--repo': repoRoot = v elif o == "--no-download": download = False + elif o == '--loop': + keep_looping = True + elif o == '--no-packagesys': + use_packagesys = False + elif o == '--install': + install = True repo = thandy.repository.LocalRepository(repoRoot) + packagesys = None + if use_packagesys: + packagesys = thandy.packagesys.PackageSystem.PackageMetasystem.create(repo) while True: hashes = {} + installable = {} logging.info("Checking for files to update.") - files = repo.getFilesToUpdate(trackingBundles=args, hashDict=hashes) + files = repo.getFilesToUpdate(trackingBundles=args, hashDict=hashes, + pkgSystems=packagesys, + installableDict=installable) + + if installable and not files: + logging.notice("Ready to install files: %s", + ", ".join(sorted(installable.keys()))) + if install: + # XXXX handle ordering + for h in installable.values(): + h.install() + return + + elif not files: + logging.info("No files to download") + if not keep_looping: + return + + ts = repo.getTimestampFile().get() + age = time.time() - thandy.formats.parseTime(ts['at']) + delay = thandy.repository.MAX_TIMESTAMP_AGE - age + if delay > 3600: + delay = 3600 + elif delay < 0: + delay = 300 + logging.info("Will check again in %s seconds", delay) + time.sleep(delay) + continue + logging.info("Files to download are: %s", ", ".join(sorted(files))) - if not download or not files: + if not download: return mirrorlist = repo.getMirrorlistFile().get() @@ -59,18 +105,13 @@ def update(args): logging.info("All downloads finished.") -# Check my repository - -# Tell me what I need to download - -# Download stuff - # Tell me what to install. def usage(): print "Known commands:" - print " update [--repo=repository] [--no-download]" + print " update [--repo=repository] [--no-download] [--loop]" + print " [--no-packagesys] [--install]" sys.exit(1) def main(): @@ -81,7 +122,7 @@ def main(): usage() cmd = sys.argv[1] args = sys.argv[2:] - if cmd in [ "update", "geturls" ]: + if cmd in [ "update" ]: globals()[cmd](args) else: usage() |