#!/usr/bin/env python3 from srht.config import cfg from srht.database import DbSession db = DbSession(cfg("git.sr.ht", "connection-string")) from gitsrht.types import Repository, RepoVisibility db.init() from configparser import ConfigParser from datetime import datetime, timedelta from gitsrht.submit import do_post_update from scmsrht.redis import redis import os import sys op = sys.argv[0] origin = cfg("git.sr.ht", "origin") if op == "hooks/update": # Stash updated refs for later processing refname = sys.argv[1] old = sys.argv[2] new = sys.argv[3] push_uuid = os.environ.get("SRHT_PUSH") if not push_uuid: sys.exit(0) redis.setex(f"update.{push_uuid}.{refname}", timedelta(minutes=10), f"{old}:{new}") if op == "hooks/post-update": refs = sys.argv[1:] config = ConfigParser() with open("config") as f: config.read_file(f) repo_id = config.get("srht", "repo-id") if not repo_id: sys.exit(0) repo_id = int(repo_id) repo = Repository.query.get(repo_id) if not repo: sys.exit(0) if repo.visibility == RepoVisibility.autocreated: print("\n\t\033[93mNOTICE\033[0m") print("\tWe saved your changes, but this repository does not exist.") print("\tClick here to create it:") print("\t{}/create?name={}".format(origin, repo.name)) print("\tYour changes will be discarded in 20 minutes.\n") repo.updated = datetime.utcnow() db.session.commit() do_post_update(repo, refs)