LCOV - code coverage report
Current view: top level - src/esys/repo/manifest - directories_manifest.cpp (source / functions) Hit Total Coverage
Test: esysrepo_coverage.info Lines: 38 63 60.3 %
Date: 2026-08-01 10:43:40 Functions: 12 18 66.7 %

          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

Generated by: LCOV version 1.14