Line data Source code
1 : /*! 2 : * \file esys/repo/manifest/loader_manifest.cpp 3 : * \brief 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2020 Michel Gillet 9 : * Distributed under the MIT License. 10 : * (See accompanying file LICENSE.txt or 11 : * copy at https://opensource.org/licenses/MIT) 12 : * 13 : * __legal_e__ 14 : * \endcond 15 : * 16 : */ 17 : 18 : #include "esys/repo/esysrepo_prec.h" 19 : #include "esys/repo/manifest/loader.h" 20 : #include "esys/repo/manifest/loadergrepo.h" 21 : #include "esys/repo/manifest/loaderesysrepo.h" 22 : #include "esys/repo/manifest/loadergitsuper.h" 23 : 24 : namespace esys::repo::manifest 25 : { 26 : 27 74 : Loader::Loader() = default; 28 : 29 158 : Loader::~Loader() = default; 30 : 31 80 : Result Loader::run() 32 : { 33 80 : manifest::Type manifest_type = manifest::Type::NOT_SET; 34 80 : std::shared_ptr<Config> config; 35 : 36 160 : config = get_config(); 37 80 : if (config != nullptr) 38 : { 39 1 : manifest_type = config->get_manifest_type(); 40 : } 41 158 : else if (get_config_folder() != nullptr) 42 : { 43 158 : config = get_config_folder()->get_config(); 44 79 : if (config == nullptr) return ESYSREPO_RESULT(ResultCode::INTERNAL_ERROR); 45 79 : manifest_type = config->get_manifest_type(); 46 : } 47 : else 48 0 : return ESYSREPO_RESULT(ResultCode::INTERNAL_ERROR); 49 : 50 80 : switch (manifest_type) 51 : { 52 64 : case manifest::Type::ESYSREPO_MANIFEST: set_loader(std::make_shared<LoaderESysRepo>()); break; 53 0 : case manifest::Type::GIT_SUPER_PROJECT: set_loader(std::make_shared<LoaderGitSuper>()); break; 54 48 : case manifest::Type::GOOGLE_MANIFEST: 55 96 : case manifest::Type::RAW_GOOGLE_MANIFEST: set_loader(std::make_shared<LoaderGRepo>()); break; 56 0 : default: return ESYSREPO_RESULT(ResultCode::MANIFEST_TYPE_UNKNOWN); 57 : } 58 : 59 240 : get_loader()->set_config(config); 60 160 : get_loader()->set_config_folder(get_config_folder()); 61 160 : get_loader()->set_manifest(LoaderBase::get_manifest()); 62 160 : get_loader()->set_logger_if(get_logger_if()); 63 80 : Result result = get_loader()->run(); 64 160 : return ESYSREPO_RESULT(result); 65 80 : } 66 : 67 80 : void Loader::set_loader(std::shared_ptr<LoaderBase> loader) 68 : { 69 80 : m_loader = loader; 70 80 : } 71 : 72 420 : std::shared_ptr<LoaderBase> Loader::get_loader() const 73 : { 74 420 : return m_loader; 75 : } 76 : 77 10 : std::shared_ptr<Manifest> Loader::get_manifest() const 78 : { 79 30 : if (get_loader() == nullptr) return nullptr; 80 20 : return get_loader()->get_manifest(); 81 : } 82 : 83 : } // namespace esys::repo::manifest