Line data Source code
1 : /*! 2 : * \file esys/repo/manifest/directories_manifest.cpp 3 : * \brief 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2023 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/directories.h" 20 : 21 : namespace esys::repo::manifest 22 : { 23 : 24 60 : Directories::Item::Item() = default; 25 : 26 62 : Directories::Item::~Item() = default; 27 : 28 2 : void Directories::Item::set_directory(std::shared_ptr<Directory> directory) 29 : { 30 2 : m_directory = directory; 31 2 : } 32 : 33 0 : std::shared_ptr<Directory> Directories::Item::get_directory() const 34 : { 35 0 : return m_directory; 36 : } 37 : 38 0 : bool Directories::Item::operator==(const Item &other) const 39 : { 40 0 : if (Directory::Item::operator!=(other)) return false; 41 0 : if ((get_directory() == nullptr) && (other.get_directory() == nullptr)) return true; 42 0 : if ((get_directory() != nullptr) && (other.get_directory() != nullptr)) 43 : { 44 0 : return *get_directory() == *other.get_directory(); 45 : } 46 : return false; 47 : } 48 : 49 0 : bool Directories::Item::operator!=(const Item &other) const 50 : { 51 0 : return !operator==(other); 52 : } 53 : 54 54 : Directories::Directories() = default; 55 : 56 54 : Directories::~Directories() = default; 57 : 58 60 : void Directories::add_item(const std::string &name, std::shared_ptr<Item> item) 59 : { 60 60 : m_items.push_back(item); 61 60 : m_map_items[name] = item; 62 60 : } 63 : 64 0 : Result Directories::del_item(const std::string &name) 65 : { 66 0 : auto it = m_map_items.find(name); 67 0 : if (it == m_map_items.end()) return ESYSREPO_RESULT(ResultCode::GENERIC_ERROR); 68 : 69 0 : m_map_items.erase(name); 70 0 : for (auto it = m_items.begin(); it != m_items.end(); ++it) 71 : { 72 0 : if ((*it)->get_name() == name) 73 : { 74 0 : m_items.erase(it); 75 0 : return ESYSREPO_RESULT(ResultCode::OK); 76 : } 77 : } 78 0 : return ESYSREPO_RESULT(ResultCode::GENERIC_ERROR); 79 : } 80 : 81 2 : const std::vector<std::shared_ptr<Directories::Item>> &Directories::get_items() const 82 : { 83 2 : return m_items; 84 : } 85 : 86 1 : std::shared_ptr<Directories::Item> Directories::find_item(const std::string &name) const 87 : { 88 1 : auto it = m_map_items.find(name); 89 1 : if (it == m_map_items.end()) return nullptr; 90 0 : return it->second; 91 : } 92 : 93 2 : std::shared_ptr<Directory::Item> Directories::find_project(const std::string &name) const 94 : { 95 2 : auto it = m_map_projects.find(name); 96 2 : if (it == m_map_projects.end()) return nullptr; 97 2 : return it->second; 98 : } 99 : 100 2 : void Directories::add_projects(std::shared_ptr<Directory> directory) 101 : { 102 14 : for (auto project : directory->get_items()) 103 : { 104 12 : m_map_projects[project->get_name()] = project; 105 12 : } 106 2 : } 107 : 108 6 : void Directories::clear() 109 : { 110 6 : m_items.clear(); 111 6 : m_map_items.clear(); 112 6 : m_map_projects.clear(); 113 6 : } 114 : 115 1 : void Directories::add_default_libesys() 116 : { 117 1 : if (find_item("libesys") != nullptr) return; 118 : 119 1 : auto item = std::make_shared<manifest::Directories::Item>(); 120 1 : item->set_name("libesys"); 121 1 : item->set_url_ssh("ssh://git@gitlab.com/libesys/esysrepo/directory"); 122 1 : item->set_url_https("https://gitlab.com/libesys/esysrepo/directory"); 123 4 : add_item("libesys", item); 124 1 : } 125 : 126 0 : bool Directories::operator==(const Directories &other) const 127 : { 128 0 : if (get_items().size() != other.get_items().size()) return false; 129 : 130 0 : for (auto idx = 0; idx < get_items().size(); ++idx) 131 : { 132 0 : if (*get_items()[idx] != *other.get_items()[idx]) return false; 133 : } 134 : return true; 135 : } 136 : 137 0 : bool Directories::operator!=(const Directories &other) const 138 : { 139 0 : return !operator==(other); 140 : } 141 : 142 : } // namespace esys::repo::manifest