diff --git a/pkgs/git-show-link/git-show-link.py b/pkgs/git-show-link/git-show-link.py index aeb8c94..e7e78e6 100755 --- a/pkgs/git-show-link/git-show-link.py +++ b/pkgs/git-show-link/git-show-link.py @@ -5,20 +5,18 @@ from dataclasses import dataclass import re import subprocess -REMOTE_TYPES = [ - { - # github +REMOTE_TYPES = { + "github": { "match": re.compile(r'git@github.com:(?P[\w\.-]+)/(?P[\w\.-]+).git'), "format-branch": lambda g: f"https://github.com/{g.username}/{g.project}/tree/{g.branch}/", "format-commit": lambda g: f"https://github.com/{g.username}/{g.project}/commit/{g.commit}/", }, - { - # gitea + "gitea": { "match": re.compile(r'(?P[\w\.-]+)@(?P[\w\.-]+):(?P[\w\.-]+)/(?P[\w\.-]+).git'), "format-branch": lambda g: f"https://{g.host}/{g.username}/{g.project}/src/branch/{g.branch}/", "format-commit": lambda g: f"https://{g.host}/{g.username}/{g.project}/commit/{g.commit}/", }, -] +} @dataclass class FormatArgs: @@ -73,6 +71,7 @@ def main(): ) parser.add_argument("--branch", dest="display_branch", action='store_true', help="Display link to branch, instead to commit") + parser.add_argument("--remote-type", dest="remote_type", choices=REMOTE_TYPES.keys(), help="Specify remote type") args = parser.parse_args() @@ -85,12 +84,23 @@ def main(): remote_url = get_remote_url(r["remote"]) - for remote_type in REMOTE_TYPES: + selected_remote_types = REMOTE_TYPES + + if args.remote_type is not None: + selected_remote_types = { + args.remote_type: REMOTE_TYPES[args.remote_type], + } + + remote_type_found = False + + for remote_type_name, remote_type in selected_remote_types.items(): m = remote_type["match"].match(remote_url) if m is None: continue + remote_type_found = True + g = FormatArgs(**m.groupdict()) if args.display_branch: @@ -102,6 +112,10 @@ def main(): print(remote_type["format-commit"](g)) break + if not remote_type_found: + print("No remote type matched") + exit(1) + if __name__ == "__main__": main()