Line data Source code
1 : /*! 2 : * \file esys/repo/resultcode.cpp 3 : * \brief 4 : * 5 : * \cond 6 : * __legal_b__ 7 : * 8 : * Copyright (c) 2022 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/resultcode.h" 20 : 21 : #include <cassert> 22 : 23 : namespace esys::repo 24 : { 25 : 26 : int ResultCode::s_cur_id = -1; 27 : std::map<int, std::string> ResultCode::s_map; 28 : std::vector<int> ResultCode::s_ints; 29 : 30 0 : int ResultCode::s_get_cur_id() 31 : { 32 0 : return s_cur_id; 33 : } 34 : 35 152 : std::string ResultCode::s_find_name(int id) 36 : { 37 152 : auto it = s_map.find(id); 38 152 : if (it == s_map.end()) return ""; 39 : 40 152 : return it->second; 41 : } 42 : 43 0 : bool ResultCode::s_is_id(int id) 44 : { 45 0 : return s_map.find(id) != s_map.end(); 46 : } 47 : 48 2 : const std::vector<int> &ResultCode::s_get_ints() 49 : { 50 2 : return s_ints; 51 : } 52 : 53 90 : ResultCode::ResultCode(const std::string &name) 54 : { 55 90 : assert(s_is_id(s_cur_id) == false); 56 : 57 90 : m_id = s_cur_id--; 58 : 59 90 : s_map[m_id] = name; 60 90 : s_ints.push_back(m_id); 61 90 : } 62 : 63 13 : ResultCode::ResultCode(const std::string &name, int id) 64 13 : : m_id(id) 65 : { 66 13 : assert(s_is_id(id) == false); 67 : 68 13 : s_cur_id = id - 1; 69 : 70 13 : s_map[m_id] = name; 71 13 : s_ints.push_back(m_id); 72 13 : } 73 : 74 43187 : ResultCode::~ResultCode() = default; 75 : 76 0 : std::string ResultCode::get_name() const 77 : { 78 0 : return s_find_name(get_id()); 79 : } 80 : 81 0 : void ResultCode::set_id(int id) 82 : { 83 0 : m_id = id; 84 0 : } 85 : 86 24578 : int ResultCode::get_id() const 87 : { 88 24578 : return m_id; 89 : } 90 : 91 232 : ResultCode::operator int() const 92 : { 93 232 : return m_id; 94 : } 95 : 96 11064 : ResultCode &ResultCode::operator=(const ResultCode &other) 97 : { 98 11064 : if (&other == this) return *this; 99 : 100 11064 : m_id = other.get_id(); 101 11064 : return *this; 102 : } 103 : 104 1459 : bool ResultCode::operator==(const ResultCode &result_code) const 105 : { 106 1459 : return m_id == result_code.get_id(); 107 : } 108 : 109 12055 : bool ResultCode::operator!=(const ResultCode &result_code) const 110 : { 111 12055 : return m_id != result_code.get_id(); 112 : } 113 : 114 : DEFINE_RESULT_CODE(OK, 0); 115 : DEFINE_RESULT_CODE(GENERIC_ERROR); 116 : DEFINE_RESULT_CODE(ERROR_OPENING_FILE); 117 : DEFINE_RESULT_CODE(PATH_NOT_EXISTING); 118 : DEFINE_RESULT_CODE(EMPTY_PATH); 119 : DEFINE_RESULT_CODE(FILE_NOT_EXISTING); 120 : DEFINE_RESULT_CODE(INTERNAL_ERROR); 121 : DEFINE_RESULT_CODE(NOT_IMPLEMENTED); 122 : DEFINE_RESULT_CODE(FOLDER_CREATION_ERROR); 123 : DEFINE_RESULT_CODE(FAILED_TO_COPY); 124 : DEFINE_RESULT_CODE(FAILED_TO_REMOVE_ALL); 125 : DEFINE_RESULT_CODE(RAW_INT_ERROR); 126 : DEFINE_RESULT_CODE(FOLDER_ALREADY_EXISTS); 127 : DEFINE_RESULT_CODE(MANIFEST_IS_NULLPTR); 128 : DEFINE_RESULT_CODE(CONFIG_FOLDER_IS_NULLPTR); 129 : DEFINE_RESULT_CODE(GIT_IS_NULLPTR); 130 : DEFINE_RESULT_CODE(JOB_COUNT_NEGATIVE); 131 : DEFINE_RESULT_CODE(ERROR_VECTOR); 132 : DEFINE_RESULT_CODE(NO_AUTHOR_GIVEN); 133 : 134 : DEFINE_RESULT_CODE(CFGFILE_ERROR_PARSING_FILE, -100); 135 : DEFINE_RESULT_CODE(CFGFILE_NO_MANIFEST_TYPE); 136 : DEFINE_RESULT_CODE(CFGFILE_UNKNOWN_MANIFEST_TYPE); 137 : DEFINE_RESULT_CODE(CFGFILE_NO_MANIFEST_URL); 138 : DEFINE_RESULT_CODE(CFGFILE_UNKNOWN_MANIFEST_KIND); 139 : DEFINE_RESULT_CODE(CFGFILE_UNKNOWN_MANIFEST_FORMAT); 140 : 141 : DEFINE_RESULT_CODE(MANIFEST_ERROR_PARSING_FILE, -200); 142 : DEFINE_RESULT_CODE(MANIFEST_NO_LOCATIONS_DEFINED); 143 : DEFINE_RESULT_CODE(MANIFEST_ELEMENT_UNKNOWN); 144 : DEFINE_RESULT_CODE(MANIFEST_ATTRIBUTE_UNKNOWN); 145 : DEFINE_RESULT_CODE(MANIFEST_INCORRECT_ATTRIBUTE_VALUE); 146 : DEFINE_RESULT_CODE(MANIFEST_NO_DEFAULT_LOCATION); 147 : DEFINE_RESULT_CODE(MANIFEST_TYPE_UNKNOWN); 148 : DEFINE_RESULT_CODE(MANIFEST_KIND_UNKNOWN); 149 : DEFINE_RESULT_CODE(MANIFEST_FORMAT_UNKNOWN); 150 : DEFINE_RESULT_CODE(MANIFEST_LOCATION_WITHOUT_NAME); 151 : DEFINE_RESULT_CODE(MANIFEST_LOCATION_WITHOUT_ADDRESS); 152 : DEFINE_RESULT_CODE(MANIFEST_REPOSITORY_WITHOUT_NAME); 153 : DEFINE_RESULT_CODE(MANIFEST_REPOSITORY_WITHOUT_PATH); 154 : DEFINE_RESULT_CODE(MANIFEST_GROUP_WITHOUT_NAME); 155 : DEFINE_RESULT_CODE(MANIFEST_GROUP_REPO_WITHOUT_NAME); 156 : DEFINE_RESULT_CODE(MANIFEST_GROUP_REPO_WITHOUT_PATH); 157 : DEFINE_RESULT_CODE(MANIFEST_REPO_UNKNOWN); 158 : DEFINE_RESULT_CODE(MANIFEST_FILE_EXT_UNKNOWN); 159 : DEFINE_RESULT_CODE(MANIFEST_FAILED_TO_DETECT); 160 : DEFINE_RESULT_CODE(MANIFEST_XML_DATA_NULLPTR); 161 : DEFINE_RESULT_CODE(MANIFEST_REPOSITORY_WITHOUT_LOCATION); 162 : DEFINE_RESULT_CODE(MANIFEST_FORMAT_NOT_SET); 163 : DEFINE_RESULT_CODE(MANIFEST_REVISION_SET_UNKNOWN); 164 : 165 : DEFINE_RESULT_CODE(GREPO_FOLDER_NO_INCLUDE, -300); 166 : 167 : DEFINE_RESULT_CODE(CMDINIT_NO_URL, -400); 168 : DEFINE_RESULT_CODE(CMDINIT_FAILED_FETCH_UNKNOWN_MANIFEST); 169 : 170 : DEFINE_RESULT_CODE(GIT_GENERIC_ERROR, -500); 171 : DEFINE_RESULT_CODE(GIT_UNKNOWN_PROTOCOL); 172 : DEFINE_RESULT_CODE(GIT_RAW_INT_ERROR); 173 : DEFINE_RESULT_CODE(GIT_ERROR_OPENING_REPO); 174 : DEFINE_RESULT_CODE(GIT_RESET_TYPE_NOT_SET); 175 : DEFINE_RESULT_CODE(GIT_RESET_TYPE_UNKNOWN); 176 : DEFINE_RESULT_CODE(GIT_NO_BRANCH_FOUND); 177 : DEFINE_RESULT_CODE(GIT_REPO_NOT_OPEN); 178 : DEFINE_RESULT_CODE(GIT_FIND_REF_FAILED); 179 : DEFINE_RESULT_CODE(GIT_GET_HASH_FAILED); 180 : DEFINE_RESULT_CODE(GIT_NO_PARENT); 181 : DEFINE_RESULT_CODE(GIT_ALREADY_OPENED); 182 : DEFINE_RESULT_CODE(GIT_SSH_BACKEND_NOT_SUPPORTED); 183 : 184 : DEFINE_RESULT_CODE(CMD_INCORRECT_PARAMETERS_IN_CONTEXT, -600); 185 : DEFINE_RESULT_CODE(CMD_INCORRECT_PARAMETERS_COMBINATION); 186 : DEFINE_RESULT_CODE(CMD_MISSING_PARAMETERS); 187 : DEFINE_RESULT_CODE(CMD_GENERIC_RAW_ERROR); 188 : DEFINE_RESULT_CODE(CMD_NO_ESYSREPO_FOLDER_FOUND); 189 : DEFINE_RESULT_CODE(CMD_CONFIG_FOLDER_NULLPTR); 190 : DEFINE_RESULT_CODE(CMD_GIT_IS_NULLPTR); 191 : DEFINE_RESULT_CODE(CMD_GIT_IS_NOT_OPENED); 192 : DEFINE_RESULT_CODE(CMD_GIT_OPEN_FAILED); 193 : DEFINE_RESULT_CODE(CMD_GIT_IS_DIRTY_FAILED); 194 : DEFINE_RESULT_CODE(CMD_GIT_FETCH_FAILED); 195 : DEFINE_RESULT_CODE(CMD_GIT_GET_HEAD_FAILED); 196 : DEFINE_RESULT_CODE(CMD_GIT_MORE_THAN_ONE_COMMIT); 197 : DEFINE_RESULT_CODE(CMD_WORKSPACE_PATH_IS_EMPTY); 198 : 199 : DEFINE_RESULT_CODE(CMDSYNC_ABORTED_FOUND_CHANGES, -700); 200 : DEFINE_RESULT_CODE(CMDSYNC_GIT_CAN_NOT_BE_FAST_FORWARDED); 201 : 202 : DEFINE_RESULT_CODE(RUNTASKS_NO_TASK, -800); 203 : 204 : DEFINE_RESULT_CODE(DIRECTORY_XML_DATA_NULLPTR, -900); 205 : DEFINE_RESULT_CODE(DIRECTORY_XML_ERROR_PARSING_STREAM); 206 : DEFINE_RESULT_CODE(DIRECTORY_XML_ERROR_PARSING_FILE); 207 : DEFINE_RESULT_CODE(DIRECTORY_XML_ELEMENT_UNKNOWN); 208 : DEFINE_RESULT_CODE(DIRECTORY_XML_MISSING_ATTR); 209 : DEFINE_RESULT_CODE(DIRECTORY_XML_UNKNOWN_URL_TYPE); 210 : 211 : DEFINE_RESULT_CODE(MULTI_XML_CAPTURE_NULLPTR, -1000); 212 : DEFINE_RESULT_CODE(MULTI_ELEMENT_UNKNOWN); 213 : DEFINE_RESULT_CODE(MULTI_REPOSITORY_WITHOUT_PATH); 214 : DEFINE_RESULT_CODE(MULTI_REPOSITORY_WITHOUT_REV); 215 : DEFINE_RESULT_CODE(MULTI_ERROR_PARSING_FILE); 216 : DEFINE_RESULT_CODE(MULTI_ERROR_PARSING_STREAM); 217 : 218 : DEFINE_RESULT_CODE(USERCONFIG_XML_DATA_NULLPTR, -1100); 219 : DEFINE_RESULT_CODE(USERCONFIG_XML_ELEMENT_UNKNOWN); 220 : DEFINE_RESULT_CODE(USERCONFIG_XML_MISSING_ELEMENT); 221 : DEFINE_RESULT_CODE(USERCONFIG_XML_MISSING_ATTR); 222 : DEFINE_RESULT_CODE(USERCONFIG_XML_UNKNOWN_ATTR_VALUE); 223 : 224 : DEFINE_RESULT_CODE(CMDPIN_NO_MATCH, -1200); 225 : DEFINE_RESULT_CODE(CMDPIN_AMBIGUOUS_MATCH); 226 : DEFINE_RESULT_CODE(CMDPIN_CI_NOT_DETECTED); 227 : DEFINE_RESULT_CODE(CMDPIN_CI_UNSUPPORTED); 228 : DEFINE_RESULT_CODE(CMDPIN_PINS_FILE_PARSE_ERROR); 229 : 230 : } // namespace esys::repo 231 : 232 : namespace std 233 : { 234 : 235 0 : ESYSREPO_API ostream &operator<<(ostream &os, const esys::repo::ResultCode &result) 236 : { 237 0 : return os; 238 : } 239 : 240 : } // namespace std