fix(config): Perform tilde expansion on include-file
#603
This commit is contained in:
parent
28431be67e
commit
d3b0670f30
@ -106,6 +106,7 @@ namespace file_util {
|
|||||||
string contents(const string& filename);
|
string contents(const string& filename);
|
||||||
bool is_fifo(const string& filename);
|
bool is_fifo(const string& filename);
|
||||||
vector<string> glob(string pattern);
|
vector<string> glob(string pattern);
|
||||||
|
const string expand(const string& path);
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
decltype(auto) make_file_descriptor(Args&&... args) {
|
decltype(auto) make_file_descriptor(Args&&... args) {
|
||||||
|
@ -100,15 +100,16 @@ void config::parse_file() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (key == "include-file") {
|
if (key == "include-file") {
|
||||||
if (value.empty() || !file_util::exists(value)) {
|
auto file_path = file_util::expand(value);
|
||||||
throw value_error("Invalid include file \"" + value + "\" defined on line " + to_string(lineno));
|
if (file_path.empty() || !file_util::exists(file_path)) {
|
||||||
|
throw value_error("Invalid include file \"" + file_path + "\" defined on line " + to_string(lineno));
|
||||||
}
|
}
|
||||||
if (std::find(files.begin(), files.end(), value) != files.end()) {
|
if (std::find(files.begin(), files.end(), file_path) != files.end()) {
|
||||||
throw value_error("Recursive include file \"" + value + "\"");
|
throw value_error("Recursive include file \"" + file_path + "\"");
|
||||||
}
|
}
|
||||||
files.push_back(value);
|
files.push_back(file_util::expand(file_path));
|
||||||
m_log.trace("config: Including file \"%s\"", value);
|
m_log.trace("config: Including file \"%s\"", file_path);
|
||||||
for (auto&& l : string_util::split(file_util::contents(value), '\n')) {
|
for (auto&& l : string_util::split(file_util::contents(file_path), '\n')) {
|
||||||
pushline(lineno, forward<string>(l));
|
pushline(lineno, forward<string>(l));
|
||||||
}
|
}
|
||||||
files.pop_back();
|
files.pop_back();
|
||||||
|
@ -231,6 +231,17 @@ namespace file_util {
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Path expansion
|
||||||
|
*/
|
||||||
|
const string expand(const string& path) {
|
||||||
|
string p{path};
|
||||||
|
if (p[0] == '~') {
|
||||||
|
p.replace(0, 1, env_util::get("HOME"));
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
POLYBAR_NS_END
|
POLYBAR_NS_END
|
||||||
|
@ -18,6 +18,7 @@ unit_test(utils/color)
|
|||||||
unit_test(utils/math)
|
unit_test(utils/math)
|
||||||
unit_test(utils/memory)
|
unit_test(utils/memory)
|
||||||
unit_test(utils/string)
|
unit_test(utils/string)
|
||||||
|
unit_test(utils/file)
|
||||||
unit_test(components/command_line)
|
unit_test(components/command_line)
|
||||||
|
|
||||||
# XXX: Requires mocked xcb connection
|
# XXX: Requires mocked xcb connection
|
||||||
|
21
tests/unit_tests/utils/file.cpp
Normal file
21
tests/unit_tests/utils/file.cpp
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#include <iomanip>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "components/logger.cpp"
|
||||||
|
#include "utils/command.cpp"
|
||||||
|
#include "utils/concurrency.cpp"
|
||||||
|
#include "utils/env.cpp"
|
||||||
|
#include "utils/file.cpp"
|
||||||
|
#include "utils/io.cpp"
|
||||||
|
#include "utils/process.cpp"
|
||||||
|
#include "utils/string.cpp"
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
using namespace polybar;
|
||||||
|
|
||||||
|
"expand"_test = [] {
|
||||||
|
auto cmd = command_util::make_command("echo $HOME");
|
||||||
|
cmd->exec();
|
||||||
|
cmd->tail([](string home) { expect(file_util::expand("~/test") == home + "/test"); });
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user