summaryrefslogtreecommitdiff
path: root/lib/thandy/ClientCLI.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/thandy/ClientCLI.py')
-rw-r--r--lib/thandy/ClientCLI.py63
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()