Pi66

git.pi66.xyz
A web interface for the pi66.xyz Git server
git clone https://git.pi66.xyz/git.pi66.xyz

← back to log

feat: expose repositories through global storage

author: pi66
date: 2026-07-23 18:08
hash: ddf9b908720682e29bdff7d42c11401c397d92db

Diffstat:

M

md/index.md
4 +-

M

src/plugins/main.py
53 +++++++-----------------------
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
diff --git a/md/index.md b/md/index.md
index 2257b99..b500bbf 100644
--- a/md/index.md
+++ b/md/index.md
@@ -14,12 +14,12 @@
 </thead>
 <tbody>

-{% for repo in repos %}
+{% for repo in storage.get("repos") %}
 <tr>
     <td> <a href="/{{repo.name|lower}}/log.html"><strong>{{ repo.name }}</strong></a> </td>
     <td class="!text-gray-400"> {{ repo.desc }}</td>
     <td class="!text-gray-400"> {{ repo.author }}</td>
-    <td class="!text-gray-400"> {{ repo.last_commit_date }}</td>
+    <td class="!text-gray-400 time-ago"> {{ repo.last_commit_date }}</td>
 </tr>

 {% endfor%}
diff --git a/src/plugins/main.py b/src/plugins/main.py
index 1663b37..9098633 100644
--- a/src/plugins/main.py
+++ b/src/plugins/main.py
@@ -1,6 +1,4 @@
 import os
-import re
-import subprocess
 from git import load_repos
 from log_builder import create_log_pages
 from file_builder import create_file_pages
@@ -8,52 +6,27 @@ from ref_builder import create_ref_pages
 from readme_builder import create_readme_pages
 from license_builder import create_license_pages

-GIT_DIR = "/srv/git/"
+storage = api.globals

-if api.mode == "draft":
-    GIT_DIR = "/home/pixel/docs/projects/coding/websites/cache/git.pi66.xyz/tmp"
-
-
-repos = []
+storage.set("git_dirs",{
+    "release":"/srv/git/",
+    "draft":"/home/pixel/docs/projects/coding/websites/cache/git.pi66.xyz/tmp"}
+)
+GIT_DIR = storage.get("git_dirs")[api.mode]

 def ensure_repos():
-    global repos
-    if not repos:
-        repos.extend(load_repos(
-            api,
-            os.path.expanduser(GIT_DIR)
-        ))
+    return load_repos(
+        api,
+        os.path.expanduser(GIT_DIR)
+    )

 @hook("on_build_start")
-def load_repos_hook(_):
-    ensure_repos()
-
-@hook("on_page_read")
-def inject_repos(md_file, md_content):
-    if "index.md" not in md_file:
-        return
-    ensure_repos()
-    rows = []
-    for repo in repos:
-        rows.append(
-            f'<tr>\n'
-            f'    <td> <a href="/{repo.name.lower()}/log.html"><strong>{repo.name}</strong></a> </td>\n'
-            f'    <td class="!text-gray-400"> {repo.desc}</td>\n'
-            f'    <td class="!text-gray-400"> {repo.author}</td>\n'
-            f'    <td class="!text-gray-400 time-ago"> {repo.last_commit_date}</td>\n'
-            f'</tr>'
-        )
-    table = "\n\n".join(rows)
-    return re.sub(
-        r"\{%\s*for repo in repos\s*%\}.*?\{%\s*endfor\s*%\}",
-        table,
-        md_content,
-        flags=re.DOTALL,
-    )
+def on_start_(_):
+    storage.set("repos", ensure_repos())

 @hook("on_build_end")
 def build_pages(_):
-    global repos
+    repos = storage.get("repos")
     ensure_repos()
     create_log_pages(api, repos)
     create_file_pages(api, repos, os.path.expanduser(GIT_DIR))