diff --git a/src/config.d b/src/config.d index a8cc1d66..f3af8308 100644 --- a/src/config.d +++ b/src/config.d @@ -6,9 +6,14 @@ struct Config this(string[] filenames...) { + bool found = false; foreach (filename; filenames) { - load(filename); + if (exists(filename)) { + found = true; + load(filename); + } } + if (!found) throw new Exception("No config file found"); } string get(string key) @@ -23,19 +28,17 @@ struct Config private void load(string filename) { - if (exists(filename)) { - auto file = File(filename, "r"); - auto r = regex("(?:^\\s*)(\\w+)(?:\\s*=\\s*\")(.*)(?:\"\\s*$)"); - foreach (line; file.byLine()) { - auto c = line.matchFirst(r); - if (!c.empty) { - c.popFront(); // skip the whole match - string key = c.front.dup; - c.popFront(); - values[key] = c.front.dup; - } else { - writeln("Malformed config line: ", line); - } + auto file = File(filename, "r"); + auto r = regex("(?:^\\s*)(\\w+)(?:\\s*=\\s*\")(.*)(?:\"\\s*$)"); + foreach (line; file.byLine()) { + auto c = line.matchFirst(r); + if (!c.empty) { + c.popFront(); // skip the whole match + string key = c.front.dup; + c.popFront(); + values[key] = c.front.dup; + } else { + writeln("Malformed config line: ", line); } } } @@ -46,3 +49,12 @@ unittest auto cfg = Config("empty", "onedrive.conf"); assert(cfg.get("sync_dir") == "~/OneDrive"); } + +unittest +{ + try { + auto cfg = Config("empty"); + assert(0); + } catch (Exception e) { + } +}