From cb85bd79502d8e06232eacee70932188d8e2995c Mon Sep 17 00:00:00 2001 From: Adam Greig Date: Wed, 7 Jan 2015 22:00:27 +0000 Subject: [PATCH] check based on all old git IDs instead --- update_server/app.py | 52 +++++++++++++++++++++++----------------- update_server/config.yml | 7 +----- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/update_server/app.py b/update_server/app.py index 1087dffc..16049777 100644 --- a/update_server/app.py +++ b/update_server/app.py @@ -1,46 +1,54 @@ #!/usr/bin/env python # Copyright 2012 Daniel Richman +# Copyright 2015 Adam Greig # DL-Fldigi update check server -import os.path +import os import yaml +import os.path +import subprocess from flask import Flask, abort, request, jsonify -app_dir = os.path.dirname(__file__) -config_file = os.path.join(app_dir, "config.yml") -config = {} - app = Flask(__name__) -def load_config(): - global config +# Load config from file +app_dir = os.path.abspath(os.path.dirname(__file__)) +config_file = os.path.join(app_dir, "config.yml") +config = yaml.load(open(config_file)) + +# Swap to directory containing this script, to ensure we're inside +# the git repository. +os.chdir(app_dir) + + +def git_rev_parse(name): + arg = name + "^{}" + commit = subprocess.check_output(["git", "rev-parse", "--verify", arg]) + return commit.strip() + + +def git_rev_list(commit): + commits = subprocess.check_output(["git", "rev-list", commit]) + return set(commits.split("\n")[1:]) + +# Store commits considered old +old_commits = git_rev_list(git_rev_parse(config['latest_release'])) - mtime = os.stat(config_file).st_mtime - if mtime != config.get("_mtime", None): - with open(config_file) as f: - config = yaml.load(f) - config["_mtime"] = mtime @app.route("/") def check(): - load_config() - try: - platform = request.args["platform"] commit = request.args["commit"] - expect = config["expect"][platform] - if isinstance(expect, list) and commit in expect: - return "" - elif isinstance(expect, basestring) and expect == commit: - return "" - else: + if commit in old_commits: return jsonify(config["update"]) + else: + return "" except KeyError: # bad platform or missing arg abort(400) if __name__ == "__main__": - app.run() + app.run(debug=True) diff --git a/update_server/config.yml b/update_server/config.yml index 3f2da72c..0c666a1e 100644 --- a/update_server/config.yml +++ b/update_server/config.yml @@ -1,9 +1,4 @@ update: url: "http://ukhas.org.uk/projects:dl-fldigi" text: "There is a new version of dl-fldigi available!" -expect: - win32: "that would be self description" - linux: "which is unfortunately not possible" - macosx: - - "well, technically it is," - - "but I don't have a super computer" +latest_release: "DL3.1"