4 #include "libaktualizr/packagemanagerfactory.h"
6 #include "logging/logging.h"
8 static std::map<std::string, PackageManagerBuilder> *registered_pkgms_;
10 bool PackageManagerFactory::registerPackageManager(
const char *name, PackageManagerBuilder builder) {
13 static std::map<std::string, PackageManagerBuilder> rpkgms;
15 if (registered_pkgms_ ==
nullptr) {
16 registered_pkgms_ = &rpkgms;
18 if (registered_pkgms_->find(name) != registered_pkgms_->end()) {
19 throw std::runtime_error(std::string(
"fatal: tried to register package manager \"") + name +
"\" twice");
21 (*registered_pkgms_)[name] = std::move(builder);
25 std::shared_ptr<PackageManagerInterface> PackageManagerFactory::makePackageManager(
27 const std::shared_ptr<HttpInterface> &http) {
28 for (
const auto &b : *registered_pkgms_) {
29 if (b.first == pconfig.type) {
31 return std::shared_ptr<PackageManagerInterface>(pkgm);
35 LOG_ERROR <<
"Package manager type \"" << pconfig.type <<
"\" does not exist";
36 LOG_ERROR <<
"Available options are: " << []() {
38 for (
const auto &b : *registered_pkgms_) {
39 ss <<
"\n" << b.first;
44 throw std::runtime_error(std::string(
"Unsupported package manager: ") + pconfig.type);