From 322a191d5db4463aa468f172cadef61b6dfa2d96 Mon Sep 17 00:00:00 2001 From: "Ianis G. Vasilev" Date: Fri, 20 May 2016 01:36:02 +0300 Subject: [PATCH] Added a mechanism for searching for dscanner.ini upwards through the file hierarchy --- src/main.d | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main.d b/src/main.d index f2d080d..c48cecb 100644 --- a/src/main.d +++ b/src/main.d @@ -429,9 +429,9 @@ version (FreeBSD) version = useXDG; version (OSX) version = useXDG; /** - * Locates the configuration file + * Locates the default configuration file */ -string getConfigurationLocation() +string getDefaultConfigurationLocation() { version (useXDG) { @@ -452,3 +452,40 @@ string getConfigurationLocation() else version (Windows) return CONFIG_FILE_NAME; } + +/** + * Searches upwards from the CWD through the directory hierarchy + */ +string tryFindConfigurationLocation() +{ + auto path = pathSplitter(getcwd()); + string result; + + while (!path.empty) + { + result = buildPath(buildPath(path), CONFIG_FILE_NAME); + + if (exists(result)) + break; + + path.popBack(); + } + + if (path.empty) + return null; + + return result; +} + +/** + * Tries to find a config file and returns the default one on failure + */ +string getConfigurationLocation() +{ + immutable config = tryFindConfigurationLocation(); + + if (config !is null) + return config; + + return getDefaultConfigurationLocation(); +}