Line data Source code
1 : /*! 2 : * \file esys/repo/manifest/workspaceroot_manifest.cpp 3 : * \brief 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2020-2026 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/workspaceroot.h" 20 : 21 : #include <algorithm> 22 : #include <cctype> 23 : 24 : namespace esys::repo::manifest 25 : { 26 : 27 : namespace 28 : { 29 : 30 2 : std::string to_lower(std::string text) 31 : { 32 2 : std::transform(text.begin(), text.end(), text.begin(), 33 19 : [](unsigned char c) { return static_cast<char>(std::tolower(c)); }); 34 2 : return text; 35 : } 36 : 37 : } // namespace 38 : 39 0 : bool parse_workspace_root_order(const std::string &text, WorkspaceRootOrder &order) 40 : { 41 0 : const std::string lower = to_lower(text); 42 0 : if (lower == "first") 43 : { 44 0 : order = WorkspaceRootOrder::First; 45 0 : return true; 46 : } 47 0 : if (lower == "last") 48 : { 49 0 : order = WorkspaceRootOrder::Last; 50 0 : return true; 51 : } 52 : return false; 53 0 : } 54 : 55 2 : bool parse_workspace_root_clone_method(const std::string &text, WorkspaceRootCloneMethod &method) 56 : { 57 2 : const std::string lower = to_lower(text); 58 4 : if (lower == "temp-move" || lower == "tempmove" || lower == "move") 59 : { 60 1 : method = WorkspaceRootCloneMethod::TempMove; 61 1 : return true; 62 : } 63 1 : if (lower == "init-fetch" || lower == "initfetch" || lower == "init") 64 : { 65 1 : method = WorkspaceRootCloneMethod::InitFetch; 66 1 : return true; 67 : } 68 : return false; 69 2 : } 70 : 71 : } // namespace esys::repo::manifest 72 : 73 : namespace std 74 : { 75 : 76 0 : ostream &operator<<(ostream &os, esys::repo::manifest::WorkspaceRootOrder order) 77 : { 78 0 : switch (order) 79 : { 80 0 : case esys::repo::manifest::WorkspaceRootOrder::First: os << "first"; break; 81 0 : case esys::repo::manifest::WorkspaceRootOrder::Last: os << "last"; break; 82 0 : default: os << "unknown"; break; 83 : } 84 0 : return os; 85 : } 86 : 87 2 : ostream &operator<<(ostream &os, esys::repo::manifest::WorkspaceRootCloneMethod method) 88 : { 89 2 : switch (method) 90 : { 91 1 : case esys::repo::manifest::WorkspaceRootCloneMethod::TempMove: os << "temp-move"; break; 92 1 : case esys::repo::manifest::WorkspaceRootCloneMethod::InitFetch: os << "init-fetch"; break; 93 0 : default: os << "unknown"; break; 94 : } 95 2 : return os; 96 : } 97 : 98 : } // namespace std