diff --git a/src/repo_registry/web_ui/views.py b/src/repo_registry/web_ui/views.py index 21275ec..c2cdaa1 100644 --- a/src/repo_registry/web_ui/views.py +++ b/src/repo_registry/web_ui/views.py @@ -3,7 +3,7 @@ from __future__ import annotations from dataclasses import asdict from html import escape from pathlib import Path -from urllib.parse import quote_plus +from urllib.parse import quote_plus, urlparse from fastapi import APIRouter, Depends, Form, HTTPException, Query from fastapi.responses import HTMLResponse, PlainTextResponse, RedirectResponse @@ -17,6 +17,25 @@ router = APIRouter(include_in_schema=False) APP_NAME = "Repository Scoping" +def repository_directory_name(url: str, fallback: str) -> str: + parsed = urlparse(url) + path = parsed.path if parsed.scheme or parsed.netloc else url + normalized = path.replace("\\", "/").rstrip("/") + name = normalized.rsplit("/", 1)[-1] if normalized else "" + if name.endswith(".git"): + name = name[:-4] + return name or fallback + + +def repository_display_name(repository) -> str: + return repository_directory_name(repository.url, repository.name) + + +def repository_dict_display_name(repository: dict) -> str: + fallback = str(repository.get("name") or repository.get("repository_name") or "") + return repository_directory_name(str(repository.get("url") or ""), fallback) + + def page( title: str, body: str, @@ -238,7 +257,7 @@ def render_repository_index( rows = "\n".join( f"""
| Name | Status | Branch | Source |
|---|---|---|---|
| No repositories yet. | |||
| Name | Status | Branch | Source |
|---|---|---|---|
| No repositories yet. | |||
Canonical scope summary for the {escape(repository.name)} repository.
+Canonical scope summary for the {escape(display_name)} repository.
{rendered}