Exemple #1
0
void BenchmarkSet::parseDirectory(const fs::path& dir)
{
	try {
		// does p actually exist?
		if(fs::exists(dir))
		{
			if (fs::is_directory(dir)) {
				// If it is a directory, we add all the contents
				BENCHMAX_LOG_DEBUG("benchmax", dir << " is a directory.");
				for (auto it = fs::directory_iterator(dir); it != fs::directory_iterator(); it++) {
					parseDirectory(*it);
				}
			} else if (fs::is_symlink(dir)) {
				// A symlink. Resolve symlink and call recursively.
				fs::path r = fs::read_symlink(dir);
				BENCHMAX_LOG_DEBUG("benchmax", dir << " is a symlink to " << r);
				parseDirectory(r);
			} else {
				// Not a directory, so (we assume?) it is a file.
				mFilesList.push_back(dir);
			}
		}
		else BENCHMAX_LOG_WARN("benchmax", dir << " does not exist.");
	} catch(const fs::filesystem_error& ex) {
		BENCHMAX_LOG_ERROR("benchmax", "Filesystem error: " << ex.what());
	}
}
Exemple #2
0
void createTools(const std::vector<std::filesystem::path>& arguments, Tools& tools) {
	std::regex r("([^ ]+) *(.*)");
	for (const auto& arg: arguments) {
		std::smatch matches;
		if (std::regex_match(arg.native(), matches, r)) {
			fs::path path = std::filesystem::canonical(fs::path(matches[1]));
			if (!fs::is_regular_file(path)) {
				BENCHMAX_LOG_WARN("benchmax", "The tool " << path << " does not seem to be a file. We skip it.");
				continue;
			}
			const fs::perms executable = fs::perms::others_exec | fs::perms::group_exec | fs::perms::owner_exec;
			if ((fs::status(path).permissions() & executable) == fs::perms::none) {
				BENCHMAX_LOG_WARN("benchmax", "The tool " << path << " does not seem to be executable. We skip it.");
				continue;
			}
			BENCHMAX_LOG_DEBUG("benchmax.tools", "Adding tool " << path << " with arguments \"" << matches[2] << "\".");
			tools.emplace_back(std::make_unique<T>(path, matches[2]));
		}
	}
}