From: Florent Kermarrec Date: Wed, 20 May 2020 07:04:13 +0000 (+0200) Subject: litex_setup: add automatic update of litex_setup (because it also changes) and be... X-Git-Tag: 24jan2021_ls180~321 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d3890055507cb3f99e909da17a863412b9b5c0b8;p=litex.git litex_setup: add automatic update of litex_setup (because it also changes) and be sure we are on master branch before update. --- diff --git a/litex_setup.py b/litex_setup.py index 85a6d590..6438aa9b 100755 --- a/litex_setup.py +++ b/litex_setup.py @@ -4,13 +4,14 @@ import os import sys import subprocess import shutil +import hashlib from collections import OrderedDict +import requests import urllib.request current_path = os.path.abspath(os.curdir) - # Repositories ------------------------------------------------------------------------------------- # name, (url, recursive clone, develop, sha1) @@ -96,8 +97,27 @@ if len(sys.argv) < 2: print("- update") print("- install (add --user to install to user directory)") print("- gcc") + print("- dev (dev mode, disable automatic litex_setup.py update)") exit() +# Check/Update litex_setup.py + +litex_setup_url = "https://raw.githubusercontent.com/enjoy-digital/litex/master/litex_setup.py" +current_sha1 = hashlib.sha1(open(os.path.realpath(__file__)).read().encode("utf-8")).hexdigest() +print("[checking litex_setup.py]...") +try: + r = requests.get(litex_setup_url) + if r.status_code != 404: + upstream_sha1 = hashlib.sha1(r.content).hexdigest() + if current_sha1 != upstream_sha1: + if "dev" not in sys.argv[1:]: + print("[updating litex_setup.py]...") + with open(os.path.realpath(__file__), "wb") as f: + f.write(r.content) + os.execl(sys.executable, sys.executable, *sys.argv) +except: + pass + # Repositories cloning if "init" in sys.argv[1:]: for name in repos.keys(): @@ -124,6 +144,7 @@ if "update" in sys.argv[1:]: # update print("[updating " + name + "]...") os.chdir(os.path.join(current_path, name)) + subprocess.check_call("git checkout master", shell=True) subprocess.check_call("git pull --ff-only", shell=True) if sha1 is not None: os.chdir(os.path.join(current_path, name))