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("<code>git clone git://jxnshi.xyz/repo-name.git</code>");
while (try git_iter.next()) |entry| {
const repo_name = entry.name[0 .. entry.name.len - ".git".len];
- try std.fmt.format(temp_buffer_writer, "<li>{s}</li>\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, "<li><a href=\"/repos/{s}\">{s}</a></li>\n", .{ repo_name, repo_name });
+ } else {
+ try std.fmt.format(temp_buffer_writer, "<li>{s}</li>\n", .{repo_name});
+ }
}
try temp_buffer_writer.writeAll("</ul>\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());
}
}