var maybe_index_file: ?std.fs.File = null;
- // Handle repos.
- 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_iter = git_dir.iterate();
-
- try temp_buffer_writer.writeAll("<code>git clone git://jxnshi.xyz/repo-name.git</code>");
- try temp_buffer_writer.writeAll("<ul id=\"repos-list\">\n");
-
- while (try git_iter.next()) |entry| {
- const repo_name = entry.name[0 .. entry.name.len - ".git".len];
-
- 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;
- }
- }
+ index_file: {
+ route_dir: {
+ var route_dir: std.fs.Dir = undefined;
+ var is_public: bool = undefined;
+
+ if (route.len == 0) {
+ route_dir = public_dir;
+ is_public = true;
+ } else {
+ route_dir = public_dir.openDir(route, .{}) catch break :route_dir;
+ is_public = false;
+ }
- 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});
+ defer {
+ if (!is_public) {
+ route_dir.close();
}
}
- try temp_buffer_writer.writeAll("</ul>\n");
- }
-
- // Show specific repo.
- else if (sub_route[0] == '/') {
- const repo_name = sub_route[1..];
+ maybe_index_file = route_dir.openFile("index.html", .{}) catch break :route_dir;
- var repo_dir = try git_dir.openDir(repo_name, .{ .iterate = true });
- defer repo_dir.close();
+ break :index_file;
+ }
- var read_me_file = try repo_dir.openFile("README.md", .{});
- defer read_me_file.close();
+ var path_ext = std.ArrayList(u8).init(allocator);
+ defer path_ext.deinit();
- const read_me_file_reader = read_me_file.reader();
+ try path_ext.appendSlice(route);
+ try path_ext.appendSlice(".html");
- try markdownToHtml(temp_buffer_writer.any(), read_me_file_reader.any());
+ if (public_dir.openFile(path_ext.items, .{})) |index_file| {
+ maybe_index_file = index_file;
+ } else |_| {
+ //
}
}
- // Handle file index.
- else {
- index_file: {
- route_dir: {
- var route_dir: std.fs.Dir = undefined;
- var is_public: bool = undefined;
-
- if (route.len == 0) {
- route_dir = public_dir;
- is_public = true;
- } else {
- route_dir = public_dir.openDir(route, .{}) catch break :route_dir;
- is_public = false;
- }
-
- defer {
- if (!is_public) {
- route_dir.close();
- }
- }
-
- maybe_index_file = route_dir.openFile("index.html", .{}) catch break :route_dir;
-
- break :index_file;
- }
+ if (maybe_index_file) |index_file| {
+ defer index_file.close();
+ const index_file_reader = index_file.reader();
+ try index_file_reader.readAllArrayList(&temp_buffer, std.math.maxInt(usize));
+ } else no_index_file: {
+ md_file: {
var path_ext = std.ArrayList(u8).init(allocator);
defer path_ext.deinit();
try path_ext.appendSlice(route);
- try path_ext.appendSlice(".html");
+ try path_ext.appendSlice(".md");
- if (public_dir.openFile(path_ext.items, .{})) |index_file| {
- maybe_index_file = index_file;
- } else |_| {
- //
- }
- }
-
- if (maybe_index_file) |index_file| {
- defer index_file.close();
-
- const index_file_reader = index_file.reader();
- try index_file_reader.readAllArrayList(&temp_buffer, std.math.maxInt(usize));
- } else no_index_file: {
- md_file: {
- var path_ext = std.ArrayList(u8).init(allocator);
- defer path_ext.deinit();
+ var md_file = public_dir.openFile(path_ext.items, .{}) catch break :md_file;
+ defer md_file.close();
- try path_ext.appendSlice(route);
- try path_ext.appendSlice(".md");
+ const md_file_reader = md_file.reader();
- var md_file = public_dir.openFile(path_ext.items, .{}) catch break :md_file;
- defer md_file.close();
+ try markdownToHtml(temp_buffer_writer.any(), md_file_reader.any());
- const md_file_reader = md_file.reader();
-
- try markdownToHtml(temp_buffer_writer.any(), md_file_reader.any());
-
- break :no_index_file;
- }
+ break :no_index_file;
}
}