From 29c23946165b851dc308dbf08b82987edaa34e16 Mon Sep 17 00:00:00 2001 From: Luka Hietala Date: Tue, 9 Dec 2025 17:57:39 +0200 Subject: [PATCH] simplify index page and refactor repository stuff --- README | 4 ++- app.py | 2 +- git/repo.py | 34 -------------------- git/repository.py | 57 ++++++++++++++++++++++++++++++++++ static/styles.css | 34 -------------------- templates/index.html | 74 +++++++++++++++++++++++--------------------- 6 files changed, 99 insertions(+), 106 deletions(-) delete mode 100644 git/repo.py create mode 100644 git/repository.py diff --git a/README b/README index 708219a..6daad1c 100644 --- a/README +++ b/README @@ -1 +1,3 @@ -Fast and simple git webview. Using Libgit2 as the backend. \ No newline at end of file +Fast, minimal git webview. Using Libgit2 as git backend + +- Browse bare repos with commit history, refs, trees, blobs, diffs, patches, and blame views \ No newline at end of file diff --git a/app.py b/app.py index 6391784..5ecebc9 100644 --- a/app.py +++ b/app.py @@ -3,7 +3,7 @@ import subprocess from flask import Flask, render_template, request, abort from dotenv import load_dotenv -from git.repo import get_bare_repos +from git.repository import get_bare_repos from git.commit import get_commits, get_commit from git.ref import get_refs from git.tree import get_tree_items diff --git a/git/repo.py b/git/repo.py deleted file mode 100644 index 87d3be1..0000000 --- a/git/repo.py +++ /dev/null @@ -1,34 +0,0 @@ -from pathlib import Path -import pygit2 as git - -from .config import get_repo_owner - -# scans given path for bare git repos and list their names and paths -def get_bare_repos(path): - repos = [] - - repo_path = Path(path) - - for item in repo_path.iterdir(): - if item.is_dir(): - try: - repo = git.Repository(str(item)) - if repo.is_bare: - description = "" - desc_file = item / "description" - if desc_file.exists(): - try: - description = desc_file.read_text().strip() - except: - pass - owner = get_repo_owner(item) - repo_info = { - "name": item.name, - "path": str(item.resolve()), - "description": description, - "owner": owner - } - repos.append(repo_info) - except git.GitError: - continue - return repos diff --git a/git/repository.py b/git/repository.py new file mode 100644 index 0000000..2224e99 --- /dev/null +++ b/git/repository.py @@ -0,0 +1,57 @@ +from pathlib import Path +import pygit2 as git + +from .config import get_repo_owner + + +# scans given path for bare git repos and list their names and paths +def get_bare_repos(path): + if not path: + return [] + + repo_path = Path(path) + if not repo_path.exists() or not repo_path.is_dir(): + return [] + + repos = [] + + for item in repo_path.iterdir(): + if not item.is_dir(): + continue + + repo = _safe_repository(item) + if not repo or not repo.is_bare: + continue + + description = _read_description(item / "description") + owner = get_repo_owner(item) + repos.append( + { + "name": item.name, + "path": str(item.resolve()), + "description": description, + "owner": owner, + } + ) + + return repos + + +def _safe_repository(path): + try: + return git.Repository(str(path)) + except git.GitError: + return None + + +def _read_description(desc_file): + if not desc_file.exists(): + return "" + try: + desc_buf = desc_file.read_text().strip() + # if no description, git writes "Unnamed repository; edit this file 'description' to name the repository." + if desc_buf.startswith("Unnamed repository;"): + return "" + return desc_buf + except Exception: + return "" diff --git a/static/styles.css b/static/styles.css index 1b417eb..ffcb683 100644 --- a/static/styles.css +++ b/static/styles.css @@ -150,37 +150,3 @@ table.commits-table .message-col { .commit-message { margin: 1em 0; } - -/* index */ -.main-layout { - display: grid; - grid-template-columns: 1fr 2fr; - gap: 2em; -} - -.repos-grid { - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: 8px; -} - -.repo-card { - padding: 16px; - background-color: #f9f9f9; -} - -.repo-card h4 { - margin: 0 0 8px 0; -} - -.repo-card h4 a { - font-weight: normal; -} - -.repo-card p { - margin: 0; - color: gray; - font-size: 14px; -} - - diff --git a/templates/index.html b/templates/index.html index bb411b0..5ef7141 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,43 +4,45 @@ Lipasto - - -
-
-

- Lipasto -

-

- A git web interface for repositories. Currently supports viewing commits, trees, blobs, diffs, and references. -

- - Libgit2 - {{ version }} git - -
-
-

Repositories

-
- {% for repo in repos %} -
-

{{ repo.name }}

- {% if repo.owner %} -

{{ repo.owner }}

- {% else %} -

-

- {% endif %} -
- {% endfor %} -
-
-
+

Repositories

+ + + + + + + + + + {% for repo in repos %} + + + + + + {% endfor %} + +
RepositoryOwnerDescription
+ + {{ repo.name }} + + + {% if repo.owner %} + {{ repo.owner }} + {% else %} + - + {% endif %} + + {% if repo.description %} + {{ repo.description }} + {% else %} + - + {% endif %} +
+ + libgit2 - {{ version }} + \ No newline at end of file -- 2.47.3