download patch
commit 86563671ff102c6e5da28219a6cd2d144eeb2ebf
Author: tri <tri@thac.loan>
Date: Tue Sep 30 19:30:14 2025 +0700
show repo size
diff --git a/README.md b/README.md
index bf07dee..9f8c49b 100644
--- a/README.md
+++ b/README.md
zig build -Doptimize=ReleaseSafe
Runtime dependencies (khoe shells out to these commands at runtime):
- git
-- cmark
+- [cmark][7]
+- [du][6]
## Use
You should have received a copy of the GNU Affero General Public License along w
[3]: https://github.com/theZiz/aha
[4]: https://manpages.debian.org/trixie/util-linux/flock.1.en.html
[5]: https://www.chiark.greenend.org.uk/~sgtatham/quasiblog/git-no-forge/#submissions
+[6]: https://manpages.debian.org/trixie/coreutils/du.1.en.html
+[7]: https://github.com/commonmark/cmark
diff --git a/src/git.zig b/src/git.zig
index a91299e..331f39f 100644
--- a/src/git.zig
+++ b/src/git.zig
pub fn readFileAlloc(arena: mem.Allocator, dir: fs.Dir, file_name: []const u8) !
return proc.stdout;
}
+
+pub fn repoSize(arena: mem.Allocator, git_dir: fs.Dir) ![]const u8 {
+ var proc = try std.process.Child.run(.{
+ .allocator = arena,
+ .cwd_dir = git_dir,
+ .argv = &.{ "du", "-h", "-d0", "." },
+ });
+ return proc.stdout[0..std.mem.indexOfAny(u8, proc.stdout, " \t").?];
+}
diff --git a/src/main.zig b/src/main.zig
index 2b631de..4a085b9 100644
--- a/src/main.zig
+++ b/src/main.zig
pub fn main() !u8 {
.in_repo_dir = repo_dir,
.commits = commits,
.git_dir_path = git_dir_path,
+ .git_dir = git_dir,
});
// TODO: write repo's commits
const RepoArgs = struct {
in_repo_dir: fs.Dir,
commits: []git.Commit,
git_dir_path: []const u8,
+ git_dir: fs.Dir,
};
pub fn writeRepoPage(args: RepoArgs) !void {
pub fn writeRepoPage(args: RepoArgs) !void {
const target_dir = args.target_dir;
const in_repo_dir = args.in_repo_dir;
const commits = args.commits;
- const git_dir_path = args.git_dir_path;
var buf: [1024]u8 = undefined;
var out_repo_dir = try target_dir.makeOpenPath(
pub fn writeRepoPage(args: RepoArgs) !void {
);
defer out_repo_dir.close();
- const git_dir = try git.findGitDir(arena, in_repo_dir);
- _ = git_dir;
-
var file = try out_repo_dir.createFile("index.html", .{});
defer file.close();
pub fn writeRepoPage(args: RepoArgs) !void {
\\
\\ <p>
\\ clone: <code>git clone {2s}/{3s}</code><br>
- \\ commits: <b>{1d}</b><br>
+ \\ size: {5s}<br>
+ \\ commits: {1d}<br>
\\ </p>
\\
, .{
repo_name,
commits.len,
site_url,
- if (mem.eql(u8, git_dir_path, "."))
+ if (mem.eql(u8, args.git_dir_path, "."))
repo_name
else
- try std.fmt.bufPrint(&buf, "{s}/{s}", .{ repo_name, git_dir_path }),
+ try std.fmt.bufPrint(&buf, "{s}/{s}", .{ repo_name, args.git_dir_path }),
try html.escapeAlloc(arena, description),
+ try git.repoSize(arena, args.git_dir),
});
// If there's a readme file, include it in repo index: