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 29 : Loader::Loader() = default; 28 : 29 60 : Loader::~Loader() = default; 30 : 31 34 : Result Loader::run() 32 : { 33 34 : manifest::Type manifest_type = manifest::Type::NOT_SET; 34 34 : std::shared_ptr<Config> config; 35 : 36 68 : config = get_config(); 37 34 : if (config != nullptr) 38 : { 39 1 : manifest_type = config->get_manifest_type(); 40 : } 41 66 : else if (get_config_folder() != nullptr) 42 : { 43 66 : config = get_config_folder()->get_config(); 44 33 : if (config == nullptr) return ESYSREPO_RESULT(ResultCode::INTERNAL_ERROR); 45 33 : manifest_type = config->get_manifest_type(); 46 : } 47 : else 48 0 : return ESYSREPO_RESULT(ResultCode::INTERNAL_ERROR); 49 : 50 34 : switch (manifest_type) 51 : { 52 30 : 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 19 : case manifest::Type::GOOGLE_MANIFEST: 55 38 : 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 102 : get_loader()->set_config(config); 60 68 : get_loader()->set_config_folder(get_config_folder()); 61 68 : get_loader()->set_manifest(LoaderBase::get_manifest()); 62 68 : get_loader()->set_logger_if(get_logger_if()); 63 34 : Result result = get_loader()->run(); 64 68 : return ESYSREPO_RESULT(result); 65 34 : } 66 : 67 34 : void Loader::set_loader(std::shared_ptr<LoaderBase> loader) 68 : { 69 34 : m_loader = loader; 70 34 : } 71 : 72 174 : std::shared_ptr<LoaderBase> Loader::get_loader() const 73 : { 74 174 : return m_loader; 75 : } 76 : 77 2 : std::shared_ptr<Manifest> Loader::get_manifest() const 78 : { 79 6 : if (get_loader() == nullptr) return nullptr; 80 4 : return get_loader()->get_manifest(); 81 : } 82 : 83 : } // namespace esys::repo::manifest