def setup_mirror(repo_clone_url, mirror_remote_url, token_file, pr_hook_url): directory = os.path.dirname(os.path.abspath(__file__)) with open(directory+"/conf.yaml", "r") as f: config = yaml.load(f) config["workspace"] = os.path.expanduser(config["workspace"]) pr_hook_url = config["pr_hook_url"] mirror_user_repo_name = get_user_repo_from_github_url(mirror_remote_url) clone_user_repo_name = get_user_repo_from_github_url(repo_clone_url) repository_folder = "{}/{}_{}".format(config["workspace"], mirror_user_repo_name['user'], mirror_user_repo_name['repo']) g = GithubMirrorUtils(token_file) if not os.path.exists(repository_folder): g.create_update_mirror_repo(mirror_user_repo_name['user'], mirror_user_repo_name['repo'], repo_clone_url, pr_hook_url) os.makedirs(repository_folder) if not ("source_repo_urls" in config): config["source_repo_urls"] = {} config["source_repo_urls"][repo_clone_url] = {"mirror_remote_url": mirror_remote_url} with open(directory+"/conf.yaml", "w") as f: yaml.dump(config, f, default_flow_style=False) call(["git", "clone", "--mirror", repo_clone_url, repository_folder]) with cd(repository_folder): call(["git", "remote", "set-url", "--push", "origin", mirror_remote_url]) call(["git", "fetch", "-p", "origin"]) call(["git", "push", "--mirror"]) g.recreate_releases(clone_user_repo_name['user'], clone_user_repo_name['repo'], mirror_user_repo_name['user'], mirror_user_repo_name['repo'])
def deny_pull_requests(payload_or_payload_file, token_file): try: body = json.loads(payload_or_payload_file) except ValueError as error: with open(payload_or_payload_file, "r") as f: body = json.load(f) directory = os.path.dirname(os.path.abspath(__file__)) with open(directory+"/conf.yaml", "r") as f: config = yaml.load(f) config["workspace"] = os.path.expanduser(config["workspace"]) mirror_remote_url_from_body = body['repository']['ssh_url'] mirror_user_repo_name = None for repo_clone_url in config['source_repo_urls']: mirror_remote_url =\ config['source_repo_urls'][repo_clone_url]["mirror_remote_url"] if mirror_remote_url == mirror_remote_url_from_body: src_url = repo_clone_url mirror_user_repo_name =\ get_user_repo_from_github_url(mirror_remote_url) print mirror_user_repo_name break if mirror_user_repo_name is None: print ("Entry {} not found in configuration " "file.").format(mirror_remote_url_from_body) return g = GithubMirrorUtils(tokenfile=token_file) org_name = mirror_user_repo_name['user'] repo_name = mirror_user_repo_name['repo'] pull_request_number = body['pull_request']['number'] print "org_name:", org_name print "repo_name:", repo_name print "pull_request_number:", pull_request_number print "src_url:", src_url g.close_pull_request(org_name, repo_name, pull_request_number, src_url)
def update_def_mirrors(token_file): directory = os.path.dirname(os.path.abspath(__file__)) with open(directory + "/conf.yaml", "r") as f: config = yaml.load(f) config["workspace"] = os.path.expanduser(config["workspace"]) pr_hook_url = config["pr_hook_url"] for repo_clone_url in config["source_repo_urls"]: mirror_remote_url = config["source_repo_urls"][repo_clone_url]["mirror_remote_url"] mirror_user_repo_name = get_user_repo_from_github_url(mirror_remote_url) print mirror_user_repo_name g = GithubMirrorUtils(tokenfile=token_file) g.create_update_mirror_repo( mirror_user_repo_name["user"], mirror_user_repo_name["repo"], repo_clone_url, pr_hook_url )
def update_mirror(event, payload_or_payload_file, token_file): try: body = json.loads(payload_or_payload_file) except ValueError as error: with open(payload_or_payload_file, "r") as f: body = json.load(f) directory = os.path.dirname(os.path.abspath(__file__)) with open(directory+"/conf.yaml", "r") as f: config = yaml.load(f) config["workspace"] = os.path.expanduser(config["workspace"]) repo_clone_url = body['repository']['clone_url'] mirror_remote_url =\ config["source_repo_urls"][repo_clone_url]["mirror_remote_url"] user_repo_name = get_user_repo_from_github_url(mirror_remote_url) repository_folder = "{}/{}_{}".format(config["workspace"], user_repo_name['user'], user_repo_name['repo']) if not os.path.exists(repository_folder): os.makedirs(repository_folder) call(["git", "clone", "--mirror", repo_clone_url, repository_folder]) with cd(repository_folder): call(["git", "remote", "set-url", "--push", "origin", mirror_remote_url]) call(["git", "fetch", "-p", "origin"]) call(["git", "push", "--mirror"]) if event == "release": g = GithubMirrorUtils(tokenfile=token_file) g.create_release(user_repo_name['user'], user_repo_name['repo'], body["release"]["tag_name"], body["release"]["name"], body["release"]["body"], body["release"]["draft"], body["release"]["prerelease"], body["release"]["assets"])
def recreate_releases(token_file): directory = os.path.dirname(os.path.abspath(__file__)) with open(directory+"/conf.yaml", "r") as f: config = yaml.load(f) config["workspace"] = os.path.expanduser(config["workspace"]) for repo_clone_url in config['source_repo_urls']: mirror_remote_url =\ config['source_repo_urls'][repo_clone_url]["mirror_remote_url"] mirror_user_repo_name =\ get_user_repo_from_github_url(mirror_remote_url) clone_user_repo_name = get_user_repo_from_github_url(repo_clone_url) g = GithubMirrorUtils(tokenfile=token_file) g.recreate_releases(clone_user_repo_name['user'], clone_user_repo_name['repo'], mirror_user_repo_name['user'], mirror_user_repo_name['repo'])