From fa3a254124bae12567eeddb9fcd5c83e60a5a68d Mon Sep 17 00:00:00 2001 From: jxnshi Date: Mon, 6 Jan 2025 18:55:48 +0100 Subject: [PATCH] Add repo view --- src/main.zig | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/src/main.zig b/src/main.zig index aed04cd..e8ab2f7 100644 --- a/src/main.zig +++ b/src/main.zig @@ -101,14 +101,11 @@ fn handleClient(parent_allocator: std.mem.Allocator, connection: std.net.Server. if (std.mem.startsWith(u8, route, "repos")) { const sub_route = route["repos".len..]; + var git_dir = try std.fs.openDirAbsolute("/srv/git/", .{ .iterate = true }); + defer git_dir.close(); + // Show all repos. if (sub_route.len == 0) { - var git_dir = try std.fs.openDirAbsolute("/srv/git/", .{ - .iterate = true, - }); - - defer git_dir.close(); - var git_iter = git_dir.iterate(); try temp_buffer_writer.writeAll("git clone git://jxnshi.xyz/repo-name.git"); @@ -116,15 +113,44 @@ fn handleClient(parent_allocator: std.mem.Allocator, connection: std.net.Server. while (try git_iter.next()) |entry| { const repo_name = entry.name[0 .. entry.name.len - ".git".len]; - try std.fmt.format(temp_buffer_writer, "
  • {s}
  • \n", .{repo_name}); + + var repo_dir = try git_dir.openDir(entry.name, .{ .iterate = true }); + defer repo_dir.close(); + + var repo_dir_iter = repo_dir.iterate(); + + var has_read_me = false; + + while (try repo_dir_iter.next()) |repo_entry| { + if (std.mem.eql(u8, repo_entry.name, "README.md")) { + has_read_me = true; + break; + } + } + + if (has_read_me) { + try std.fmt.format(temp_buffer_writer, "
  • {s}
  • \n", .{ repo_name, repo_name }); + } else { + try std.fmt.format(temp_buffer_writer, "
  • {s}
  • \n", .{repo_name}); + } } try temp_buffer_writer.writeAll("\n"); } // Show specific repo. - else { - // + else if (sub_route[0] == '/') { + const repo_name = sub_route[1..]; + + var repo_dir = try git_dir.openDir(repo_name, .{ .iterate = true }); + defer repo_dir.close(); + + var read_me_file = try repo_dir.openFile("README.md", .{}); + defer read_me_file.close(); + + const read_me_file_reader = read_me_file.reader(); + + try markdownToHtml(temp_buffer_writer.any(), read_me_file_reader.any()); } } -- 2.49.0