import argparse import json import os import re def json_minify(string, strip_space=True): ''' Based on JSON.minify.js: https://github.com/getify/JSON.minify Contributers: - Pradyun S. Gedam (conditions and variable names changed) ''' tokenizer = re.compile(r'"|(/\*)|(\*/)|(//)|\n|\r') in_string = False in_multi = False in_single = False new_str = [] index = 0 for match in re.finditer(tokenizer, string): if not (in_multi or in_single): tmp = string[index:match.start()] if not in_string and strip_space: # replace white space as defined in standard tmp = re.sub('[ \t\n\r]+', '', tmp) new_str.append(tmp) index = match.end() val = match.group() if val == '"' and not (in_multi or in_single): escaped = re.search(r'(\\)*$', string[:match.start()]) # start of string or unescaped quote character to end string if not in_string or (escaped is None or len(escaped.group()) % 2 == 0): in_string = not in_string index -= 1 # include " character in next catch elif not (in_string or in_multi or in_single): if val == '/*': in_multi = True elif val == '//': in_single = True elif val == '*/' and in_multi and not (in_string or in_single): in_multi = False elif val in '\r\n' and not (in_multi or in_string) and in_single: in_single = False elif not ((in_multi or in_single) or (val in ' \r\n\t' and strip_space)): new_str.append(val) new_str.append(string[index:]) content = ''.join(new_str) content = content.replace(",]", "]") content = content.replace(",}", "}") return content def add_prefix(branch_name): if '/' not in branch_name: return "origin/"+branch_name else: return branch_name def change_branch(branch_str: str): branches = [add_prefix(b) for b in branch_str.split(",")] with open("../asv.conf.json", "r") as f: ss = f.read() config_json = json.loads(json_minify(ss)) config_json["branches"] = branches with open("../asv.conf.json", "w") as f: json.dump(config_json, f) if __name__ == "__main__": if "BRANCH_STR" in os.environ: change_branch(os.environ["BRANCH_STR"])