import json import os import re import shutil import subprocess import sys def identifier(): try: svn_output = subprocess.check_output(["svn", "info", "--show-item", "url"], stderr=subprocess.STDOUT).rstrip() return svn_output except: pass try: git_remote_and_branch = subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"], stderr=subprocess.STDOUT).rstrip() git_remote = git_remote_and_branch.split("/")[0] git_branch = "/".join(git_remote_and_branch.split("/")[1:]) git_url = subprocess.check_output(["git", "remote", "get-url", git_remote]).rstrip() return git_url + ":" + git_branch except: pass return None def get_override(): dir = os.path.dirname(os.path.realpath(__file__)) repos_dir = os.path.join(dir, "repos") json_regex = re.compile(r"^.*.json$") override_path = os.path.join(repos_dir, "OVERRIDE") if os.path.isfile(override_path): override_set = json.load(open(override_path)) return override_set["repos"] else: return None def find(identifier): dir = os.path.dirname(os.path.realpath(__file__)) repos_dir = os.path.join(dir, "repos") json_regex = re.compile(r"^.*.json$") override_path = os.path.join(repos_dir, "OVERRIDE") if os.path.isfile(override_path): override_set = json.load(open(override_path)) return override_set["repos"] fallback_path = os.path.join(repos_dir, "FALLBACK") for path in [os.path.join(repos_dir, f) for f in filter(json_regex.match, os.listdir(repos_dir))]: fd = open(path) set = json.load(fd) fd.close() if any(re.match(set_regex, identifier) for set_regex in set["regexs"]): shutil.copyfile(path, fallback_path) return set["repos"] if os.path.isfile(fallback_path): fallback_set = json.load(open(fallback_path)) return fallback_set["repos"] sys.exit("Couldn't find a branch configuration for " + identifier + " and there was no " + fallback_path)