diff --git a/.gitignore b/.gitignore index b92cbda..9d00dec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,62 +1,63 @@ .vagrant packer/packer_cache packer/builds /camptocamp-systemd/ /claranet-varnish/ /covermymeds-pgbouncer/ /deric-zookeeper/ /elastic-elastic_stack/ /elastic-elasticsearch/ /icinga-icinga2/ /icinga-icingaweb2/ /inkblot-bind/ /mosen-cups/ /openstack-ceph/ /private/swh-private-data/ /private/swh-private-data-censored/ /puppet-archive/ /puppet-cassandra/ /puppet-extlib/ /puppet-grafana/ /puppet-kafka/ /puppet-letsencrypt/ /puppet-nginx/ /puppet-php/ /puppet-rabbitmq/ /puppet-redis/ /puppet-unattended_upgrades/ /puppetlabs-apache/ /puppetlabs-apt/ /puppetlabs-concat/ /puppetlabs-docker/ /puppetlabs-inifile/ /puppetlabs-java/ /puppetlabs-java_ks/ /puppetlabs-mysql/ /puppetlabs-ntp/ /puppetlabs-postgresql/ /puppetlabs-puppetdb/ /puppetlabs-stdlib/ /puppetlabs-vcsrepo/ /puppetlabs-zfs_core/ /richardc-datacat/ /ripienaar-module_data/ /rlenglet-debconf_package/ /saz-locales/ /saz-memcached/ /saz-resolv_conf/ /saz-ssh/ /saz-sudo/ /saz-timezone/ /ssm-hitch/ /stm-debconf/ /swh-dar/ /swh-gunicorn/ /swh-mediawiki/ /swh-postfix/ /swh-site/ /swh-systemd/ /swh-uwsgi/ /theforeman-puppet/ /trepasi-debnet/ /treydock-keycloak/ +__pycache__ diff --git a/bin/mirror-upstream-repo b/bin/mirror-upstream-repo new file mode 100644 index 0000000..037ecda --- /dev/null +++ b/bin/mirror-upstream-repo @@ -0,0 +1,63 @@ +#!/usr/bin/python3 + +# Copyright (C) 2022 The Software Heritage developers +# See the AUTHORS file at the top-level directory of this distribution +# License: GNU General Public License version 3, or any later version +# See top-level LICENSE file for more information + +# Mirror an upstream repository to the Software Heritage Phabricator instance + +from os.path import basename +import click +from phabricator import Phabricator +from common import ( + PHABRICATOR_REPO_URL, + create_phab_repo, + wait_phab_repo, + clone_and_push_repo, +) + + +@click.command() +@click.option( + "--default-branch", + default="master", + help="Repository's default branch name: e.g. main)", +) +@click.option( + "-i", + "--repo-id", + type=click.INT, + help="When a repository already exists, skip creation and use it.", +) +@click.option( + "--clone/--no-clone", + "clone", + type=click.BOOL, + help="To clone a repository locally prior to push, inhibit when already cloned.", +) +@click.argument("upstream_repo") +def main(upstream_repo, repo_id, default_branch, clone): + """Mirror upstream repository within the swh forge""" + module_name = basename(upstream_repo.rstrip('/')) + phabricator_repo = f"{PHABRICATOR_REPO_URL}{module_name}.git" + phabricator = Phabricator() + phabricator.connect() + phabricator.update_interfaces() + + if not repo_id: + repo = create_phab_repo(phabricator, module_name, upstream_forge_url=upstream_repo) + repo_id = repo["object"]["id"] + + wait_phab_repo(phabricator, repo_id) + clone_and_push_repo( + module_name, + phabricator_repo, + upstream_repo, + default_branch=default_branch, + skip_clone=not clone, + ) + + +if __name__ == "__main__": + main()