srctree

Gregory Mullen parent af9fb7ea 5500aa83
fix ini config loading & update thread

src/ini.zig added: 32, removed: 10, total 22
@@ -25,6 +25,10 @@ pub const Namespace = struct {
 
pub fn init(a: Allocator, name: []const u8, itr: *ScalarIter) !Namespace {
var list = std.ArrayList(Setting).init(a);
errdefer {
for (list.items) |itm| itm.raze(a);
list.deinit();
}
const ns_start = itr.index.?;
const ns_block = itr.buffer[ns_start..];
 
@@ -96,7 +100,11 @@ pub fn Config(Base: anytype) type {
inline for (@typeInfo(T).Struct.fields) |s| {
switch (s.type) {
bool => {
@field(namespace, s.name) = ns.getBool(s.name) orelse return error.SettingMissing;
@field(namespace, s.name) = ns.getBool(s.name) orelse brk: {
if (s.default_value) |dv| {
break :brk @as(*const s.type, @ptrCast(@alignCast(dv))).*;
} else return error.SettingMissing;
};
},
?bool => {
@field(namespace, s.name) = ns.getBool(s.name);
@@ -122,7 +130,7 @@ pub fn Config(Base: anytype) type {
@field(base, f.name) = try self.buildStruct(f.type, f.name) orelse return error.NamespaceMissing;
},
.Optional => {
@field(base, f.name) = try self.buildStruct(@typeInfo(f.type).Optional.child, f.name) orelse return error.NamespaceMissing;
@field(base, f.name) = self.buildStruct(@typeInfo(f.type).Optional.child, f.name) catch null;
},
else => @compileError("not implemented"),
}
@@ -172,6 +180,10 @@ pub fn Config(Base: anytype) type {
var itr = splitScalar(u8, data, '\n');
 
var list = std.ArrayList(Namespace).init(a);
errdefer {
for (list.items) |itm| itm.raze(a);
list.deinit();
}
 
while (itr.next()) |wide| {
const line = trim(u8, wide, " \n\t");
 
src/main.zig added: 32, removed: 10, total 22
@@ -69,8 +69,12 @@ pub const SrcConfig = struct {
tz: ?[]const u8,
},
agent: ?struct {
enabled: bool = false,
push_upstream: bool = false,
},
server: ?struct {
sock: ?[]const u8,
},
};
 
// No, I don't like this
@@ -132,8 +136,7 @@ pub fn main() !void {
var cwd = std.fs.cwd();
var cfg_file: ?std.fs.File = null;
if (findConfig("./config.ini")) |cfg| {
std.debug.print("config not implemented\n", .{});
std.debug.print("should read '{s}'\n", .{cfg});
std.debug.print("reading from '{s}'\n", .{cfg});
cfg_file = try cwd.openFile("./config.ini", .{});
}
 
@@ -141,13 +144,12 @@ pub fn main() !void {
//error.FileNotFound => Ini.Config.empty(),
else => return e,
};
defer config.raze();
root_ini = config;
 
const src_conf = try config.config();
global_config = src_conf;
 
defer config.raze();
 
if (config.get("owner")) |ns| {
if (ns.get("email")) |email| {
log.debug("{s}", .{email});
@@ -164,14 +166,22 @@ pub fn main() !void {
.g_config = &src_conf,
};
 
const thread = try Thread.spawn(.{}, Repos.updateThread, .{&agent_config});
defer thread.join();
if (src_conf.agent.?.enabled) {
const thread = try Thread.spawn(.{}, Repos.updateThread, .{&agent_config});
defer thread.join();
}
 
var auth = Auth{ .alloc = a };
var mtls = verse.auth.MTLS{
.base = auth.provider(),
};
 
if (src_conf.server) |srvcfg| {
if (srvcfg.sock) |sock| {
std.debug.print("sock: {s}\n", .{sock});
}
}
 
var endpoints = Srctree.endpoints.init(a);
endpoints.serve(.{
.mode = .{ .zwsgi = .{ .file = "./srctree.sock", .chmod = 0o777 } },