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 122 : std::string ResultCode::s_find_name(int id) 36 : { 37 122 : auto it = s_map.find(id); 38 122 : if (it == s_map.end()) return ""; 39 : 40 122 : 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 85 : ResultCode::ResultCode(const std::string &name) 54 : { 55 85 : assert(s_is_id(s_cur_id) == false); 56 : 57 85 : m_id = s_cur_id--; 58 : 59 85 : s_map[m_id] = name; 60 85 : s_ints.push_back(m_id); 61 85 : } 62 : 63 12 : ResultCode::ResultCode(const std::string &name, int id) 64 12 : : m_id(id) 65 : { 66 12 : assert(s_is_id(id) == false); 67 : 68 12 : s_cur_id = id - 1; 69 : 70 12 : s_map[m_id] = name; 71 12 : s_ints.push_back(m_id); 72 12 : } 73 : 74 42668 : 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 24452 : int ResultCode::get_id() const 87 : { 88 24452 : return m_id; 89 : } 90 : 91 135 : ResultCode::operator int() const 92 : { 93 135 : return m_id; 94 : } 95 : 96 11484 : ResultCode &ResultCode::operator=(const ResultCode &other) 97 : { 98 11484 : if (&other == this) return *this; 99 : 100 11484 : m_id = other.get_id(); 101 11484 : return *this; 102 : } 103 : 104 1665 : bool ResultCode::operator==(const ResultCode &result_code) const 105 : { 106 1665 : return m_id == result_code.get_id(); 107 : } 108 : 109 11303 : bool ResultCode::operator!=(const ResultCode &result_code) const 110 : { 111 11303 : 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 : 164 : DEFINE_RESULT_CODE(GREPO_FOLDER_NO_INCLUDE, -300); 165 : 166 : DEFINE_RESULT_CODE(CMDINIT_NO_URL, -400); 167 : DEFINE_RESULT_CODE(CMDINIT_FAILED_FETCH_UNKNOWN_MANIFEST); 168 : 169 : DEFINE_RESULT_CODE(GIT_GENERIC_ERROR, -500); 170 : DEFINE_RESULT_CODE(GIT_UNKNOWN_PROTOCOL); 171 : DEFINE_RESULT_CODE(GIT_RAW_INT_ERROR); 172 : DEFINE_RESULT_CODE(GIT_ERROR_OPENING_REPO); 173 : DEFINE_RESULT_CODE(GIT_RESET_TYPE_NOT_SET); 174 : DEFINE_RESULT_CODE(GIT_RESET_TYPE_UNKNOWN); 175 : DEFINE_RESULT_CODE(GIT_NO_BRANCH_FOUND); 176 : DEFINE_RESULT_CODE(GIT_REPO_NOT_OPEN); 177 : DEFINE_RESULT_CODE(GIT_FIND_REF_FAILED); 178 : DEFINE_RESULT_CODE(GIT_GET_HASH_FAILED); 179 : DEFINE_RESULT_CODE(GIT_NO_PARENT); 180 : DEFINE_RESULT_CODE(GIT_ALREADY_OPENED); 181 : DEFINE_RESULT_CODE(GIT_SSH_BACKEND_NOT_SUPPORTED); 182 : 183 : DEFINE_RESULT_CODE(CMD_INCORRECT_PARAMETERS_IN_CONTEXT, -600); 184 : DEFINE_RESULT_CODE(CMD_INCORRECT_PARAMETERS_COMBINATION); 185 : DEFINE_RESULT_CODE(CMD_MISSING_PARAMETERS); 186 : DEFINE_RESULT_CODE(CMD_GENERIC_RAW_ERROR); 187 : DEFINE_RESULT_CODE(CMD_NO_ESYSREPO_FOLDER_FOUND); 188 : DEFINE_RESULT_CODE(CMD_CONFIG_FOLDER_NULLPTR); 189 : DEFINE_RESULT_CODE(CMD_GIT_IS_NULLPTR); 190 : DEFINE_RESULT_CODE(CMD_GIT_IS_NOT_OPENED); 191 : DEFINE_RESULT_CODE(CMD_GIT_OPEN_FAILED); 192 : DEFINE_RESULT_CODE(CMD_GIT_IS_DIRTY_FAILED); 193 : DEFINE_RESULT_CODE(CMD_GIT_FETCH_FAILED); 194 : DEFINE_RESULT_CODE(CMD_GIT_GET_HEAD_FAILED); 195 : DEFINE_RESULT_CODE(CMD_GIT_MORE_THAN_ONE_COMMIT); 196 : DEFINE_RESULT_CODE(CMD_WORKSPACE_PATH_IS_EMPTY); 197 : 198 : DEFINE_RESULT_CODE(CMDSYNC_ABORTED_FOUND_CHANGES, -700); 199 : DEFINE_RESULT_CODE(CMDSYNC_GIT_CAN_NOT_BE_FAST_FORWARDED); 200 : 201 : DEFINE_RESULT_CODE(RUNTASKS_NO_TASK, -800); 202 : 203 : DEFINE_RESULT_CODE(DIRECTORY_XML_DATA_NULLPTR, -900); 204 : DEFINE_RESULT_CODE(DIRECTORY_XML_ERROR_PARSING_STREAM); 205 : DEFINE_RESULT_CODE(DIRECTORY_XML_ERROR_PARSING_FILE); 206 : DEFINE_RESULT_CODE(DIRECTORY_XML_ELEMENT_UNKNOWN); 207 : DEFINE_RESULT_CODE(DIRECTORY_XML_MISSING_ATTR); 208 : DEFINE_RESULT_CODE(DIRECTORY_XML_UNKNOWN_URL_TYPE); 209 : 210 : DEFINE_RESULT_CODE(MULTI_XML_CAPTURE_NULLPTR, -1000); 211 : DEFINE_RESULT_CODE(MULTI_ELEMENT_UNKNOWN); 212 : DEFINE_RESULT_CODE(MULTI_REPOSITORY_WITHOUT_PATH); 213 : DEFINE_RESULT_CODE(MULTI_REPOSITORY_WITHOUT_REV); 214 : DEFINE_RESULT_CODE(MULTI_ERROR_PARSING_FILE); 215 : DEFINE_RESULT_CODE(MULTI_ERROR_PARSING_STREAM); 216 : 217 : DEFINE_RESULT_CODE(USERCONFIG_XML_DATA_NULLPTR, -1100); 218 : DEFINE_RESULT_CODE(USERCONFIG_XML_ELEMENT_UNKNOWN); 219 : DEFINE_RESULT_CODE(USERCONFIG_XML_MISSING_ELEMENT); 220 : DEFINE_RESULT_CODE(USERCONFIG_XML_MISSING_ATTR); 221 : DEFINE_RESULT_CODE(USERCONFIG_XML_UNKNOWN_ATTR_VALUE); 222 : 223 : } // namespace esys::repo 224 : 225 : namespace std 226 : { 227 : 228 0 : ESYSREPO_API ostream &operator<<(ostream &os, const esys::repo::ResultCode &result) 229 : { 230 0 : return os; 231 : } 232 : 233 : } // namespace std