1
0

pkgs/git-show-link: Specify URL format using --remote-type

This commit is contained in:
2025-05-23 14:51:20 +02:00
parent 4e56adef58
commit 46d23fb98a

View File

@@ -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<username>[\w\.-]+)/(?P<project>[\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<gituser>[\w\.-]+)@(?P<host>[\w\.-]+):(?P<username>[\w\.-]+)/(?P<project>[\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()