/src/etc/get-snapshot.py
http://github.com/jruderman/rust · Python · 81 lines · 60 code · 16 blank · 5 comment · 14 complexity · a60edf7ef8d764ce98972cf80d84d59b MD5 · raw file
- #!/usr/bin/env python
- import os, tarfile, re, shutil, sys
- from snapshot import *
- def unpack_snapshot(triple, dl_path):
- print("opening snapshot " + dl_path)
- tar = tarfile.open(dl_path)
- kernel = get_kernel(triple)
- for p in tar.getnames():
- name = p.replace("rust-stage0/", "", 1);
- stagep = os.path.join(triple, "stage0")
- fp = os.path.join(stagep, name)
- print("extracting " + p)
- tar.extract(p, download_unpack_base)
- tp = os.path.join(download_unpack_base, p)
- shutil.move(tp, fp)
- tar.close()
- shutil.rmtree(download_unpack_base)
- def determine_curr_snapshot(triple):
- i = 0
- platform = get_platform(triple)
- found_file = False
- found_snap = False
- hsh = None
- date = None
- rev = None
- f = open(snapshotfile)
- for line in f.readlines():
- i += 1
- parsed = parse_line(i, line)
- if (not parsed): continue
- if found_snap and parsed["type"] == "file":
- if parsed["platform"] == platform:
- hsh = parsed["hash"]
- found_file = True
- break;
- elif parsed["type"] == "snapshot":
- date = parsed["date"]
- rev = parsed["rev"]
- found_snap = True
- if not found_snap:
- raise Exception("no snapshot entries in file")
- if not found_file:
- raise Exception("no snapshot file found for platform %s, rev %s" %
- (platform, rev))
- return full_snapshot_name(date, rev, platform, hsh)
- # Main
- # this gets called with one or two arguments:
- # The first is the O/S triple.
- # The second is an optional path to the snapshot to use.
- triple = sys.argv[1]
- if len(sys.argv) == 3:
- dl_path = sys.argv[2]
- else:
- snap = determine_curr_snapshot(triple)
- dl = os.path.join(download_dir_base, snap)
- url = download_url_base + "/" + snap
- print("determined most recent snapshot: " + snap)
- if (not os.path.exists(dl)):
- get_url_to_file(url, dl)
- if (snap_filename_hash_part(snap) == hash_file(dl)):
- print("got download with ok hash")
- else:
- raise Exception("bad hash on download")
- dl_path = os.path.join(download_dir_base, snap)
- unpack_snapshot(triple, dl_path)