From 9b3c940da94a65897f96ebe1519ba8879ae1a2db Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Thu, 9 Nov 2023 18:03:12 +0100 Subject: just-import-git: Add --mirror option This allows to specify upfront alternative locations from where the imported repository may be fetched. No action is taken in the import, instead the argument gets passed intot he resulting just-mr configuration. --- bin/just-import-git.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'bin/just-import-git.py') diff --git a/bin/just-import-git.py b/bin/just-import-git.py index 3be9b0ef..7fb059b1 100755 --- a/bin/just-import-git.py +++ b/bin/just-import-git.py @@ -125,7 +125,8 @@ def get_base_config(repository_config: Optional[str]) -> Optional[Json]: fail('Could not get base config') -def clone(url: str, branch: str) -> Tuple[str, Dict[str, str], str]: +def clone(url: str, branch: str, + mirrors: List[str]) -> Tuple[str, Dict[str, Any], str]: # clone the given git repository, checkout the specified # branch, and return the checkout location workdir: str = tempfile.mkdtemp() @@ -136,12 +137,14 @@ def clone(url: str, branch: str) -> Tuple[str, Dict[str, str], str]: cwd=srcdir, stdout=subprocess.PIPE).decode('utf-8').strip() log("Importing commit %s" % (commit, )) - repo: Dict[str, str] = { + repo: Dict[str, Any] = { "type": "git", "repository": url, "branch": branch, "commit": commit, } + if mirrors: + repo = dict(repo, **{"mirrors": mirrors}) return srcdir, repo, workdir @@ -220,7 +223,7 @@ def name_imports(to_import: List[str], return assign -def rewrite_repo(repo_spec: Json, *, remote: Dict[str, str], +def rewrite_repo(repo_spec: Json, *, remote: Dict[str, Any], assign: Json) -> Json: new_spec: Json = {} repo = repo_spec.get("repository", {}) @@ -255,7 +258,7 @@ def rewrite_repo(repo_spec: Json, *, remote: Dict[str, str], def handle_import(args: Namespace) -> Json: base_config: Json = cast(Json, get_base_config(args.repository_config)) base_repos: Json = base_config.get("repositories", {}) - srcdir, remote, to_cleanup = clone(args.URL, args.branch) + srcdir, remote, to_cleanup = clone(args.URL, args.branch, args.mirrors) if args.foreign_repository_config: foreign_config_file = args.foreign_repository_config else: @@ -355,6 +358,12 @@ def main(): "Map the specified foreign repository to the specified existing repository", action="append", default=[]) + parser.add_argument("--mirror", + dest="mirrors", + help="Alternative fetch locations for the repository", + action="append", + default=[], + metavar="URL") parser.add_argument('URL') parser.add_argument('foreign_repository_name', nargs='?') args = parser.parse_args() -- cgit v1.2.3