Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-env-virtual (push) Has been cancelled
Mark stable commit / test-env-nix (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / lint-shell (push) Has been cancelled
Mark stable commit / lint-python (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
* Add mirror visibility subcommand and provision --public flag * Implement core visibility API with provider support (GitHub, Gitea) * Extend provider interface and EnsureStatus * Add unit, integration and e2e tests for visibility handling https://chatgpt.com/share/6946a44e-4f48-800f-8124-9c0b9b2b6b04
87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
|
|
from .common import add_identifier_arguments
|
|
|
|
|
|
def add_mirror_subparsers(subparsers: argparse._SubParsersAction) -> None:
|
|
mirror_parser = subparsers.add_parser(
|
|
"mirror",
|
|
help="Mirror-related utilities (list, diff, merge, setup, check, provision, visibility)",
|
|
)
|
|
mirror_subparsers = mirror_parser.add_subparsers(
|
|
dest="subcommand",
|
|
metavar="SUBCOMMAND",
|
|
required=True,
|
|
)
|
|
|
|
mirror_list = mirror_subparsers.add_parser(
|
|
"list", help="List configured mirrors for repositories"
|
|
)
|
|
add_identifier_arguments(mirror_list)
|
|
mirror_list.add_argument(
|
|
"--source",
|
|
choices=["config", "file", "all"],
|
|
default="all",
|
|
help="Which mirror source to show.",
|
|
)
|
|
|
|
mirror_diff = mirror_subparsers.add_parser(
|
|
"diff", help="Show differences between config mirrors and MIRRORS file"
|
|
)
|
|
add_identifier_arguments(mirror_diff)
|
|
|
|
mirror_merge = mirror_subparsers.add_parser(
|
|
"merge",
|
|
help="Merge mirrors between config and MIRRORS file (example: pkgmgr mirror merge config file --all)",
|
|
)
|
|
mirror_merge.add_argument(
|
|
"source", choices=["config", "file"], help="Source of mirrors."
|
|
)
|
|
mirror_merge.add_argument(
|
|
"target", choices=["config", "file"], help="Target of mirrors."
|
|
)
|
|
add_identifier_arguments(mirror_merge)
|
|
mirror_merge.add_argument(
|
|
"--config-path",
|
|
help="Path to the user config file to update. If omitted, the global config path is used.",
|
|
)
|
|
|
|
mirror_setup = mirror_subparsers.add_parser(
|
|
"setup",
|
|
help="Configure local Git remotes and push URLs (origin, pushurl list).",
|
|
)
|
|
add_identifier_arguments(mirror_setup)
|
|
|
|
mirror_check = mirror_subparsers.add_parser(
|
|
"check",
|
|
help="Check remote mirror reachability (git ls-remote). Read-only.",
|
|
)
|
|
add_identifier_arguments(mirror_check)
|
|
|
|
mirror_provision = mirror_subparsers.add_parser(
|
|
"provision",
|
|
help="Provision remote repositories via provider APIs (create missing repos).",
|
|
)
|
|
mirror_provision.add_argument(
|
|
"--public",
|
|
action="store_true",
|
|
help="After ensuring repos exist, enforce public visibility on the remote provider.",
|
|
)
|
|
add_identifier_arguments(mirror_provision)
|
|
|
|
mirror_visibility = mirror_subparsers.add_parser(
|
|
"visibility",
|
|
help="Set visibility (public/private) for all remote git mirrors via provider APIs.",
|
|
)
|
|
mirror_visibility.add_argument(
|
|
"visibility",
|
|
choices=["private", "public"],
|
|
help="Target visibility for all git mirrors.",
|
|
)
|
|
add_identifier_arguments(mirror_visibility)
|