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 219 : std::string ResultCode::s_find_name(int id) 36 : { 37 219 : auto it = s_map.find(id); 38 219 : if (it == s_map.end()) return ""; 39 : 40 219 : 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 111 : ResultCode::ResultCode(const std::string &name) 54 : { 55 111 : assert(s_is_id(s_cur_id) == false); 56 : 57 111 : m_id = s_cur_id--; 58 : 59 111 : s_map[m_id] = name; 60 111 : s_ints.push_back(m_id); 61 111 : } 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 66680 : 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 37608 : int ResultCode::get_id() const 87 : { 88 37608 : return m_id; 89 : } 90 : 91 363 : ResultCode::operator int() const 92 : { 93 363 : return m_id; 94 : } 95 : 96 15843 : ResultCode &ResultCode::operator=(const ResultCode &other) 97 : { 98 15843 : if (&other == this) return *this; 99 : 100 15843 : m_id = other.get_id(); 101 15843 : return *this; 102 : } 103 : 104 1993 : bool ResultCode::operator==(const ResultCode &result_code) const 105 : { 106 1993 : return m_id == result_code.get_id(); 107 : } 108 : 109 19772 : bool ResultCode::operator!=(const ResultCode &result_code) const 110 : { 111 19772 : 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 : DEFINE_RESULT_CODE(MANIFEST_DEPENDS_WITHOUT_IDENTITY); 165 : DEFINE_RESULT_CODE(MANIFEST_DEPENDS_UNRESOLVED); 166 : DEFINE_RESULT_CODE(MANIFEST_DEPENDS_AMBIGUOUS); 167 : DEFINE_RESULT_CODE(MANIFEST_DEPENDS_CYCLE); 168 : DEFINE_RESULT_CODE(MANIFEST_MERGE_CONFLICT); 169 : DEFINE_RESULT_CODE(SHARING_IDENTITY_INVALID); 170 : DEFINE_RESULT_CODE(SHARING_IDENTITY_FILE_REMOTE); 171 : DEFINE_RESULT_CODE(SHARING_PATH_CONFLICT); 172 : DEFINE_RESULT_CODE(SHARING_UNKNOWN_POLICY); 173 : DEFINE_RESULT_CODE(SHARING_UNKNOWN_REVISION_MISMATCH); 174 : DEFINE_RESULT_CODE(SHARING_ROOT_PROVIDER); 175 : DEFINE_RESULT_CODE(SHARING_REQUIRES_SCHEMA_1_1); 176 : DEFINE_RESULT_CODE(SHARING_AMBIGUOUS_PROVIDER); 177 : DEFINE_RESULT_CODE(SHARING_UNSAFE_PATH); 178 : DEFINE_RESULT_CODE(SHARING_SUBMODULE_INITIALIZED); 179 : DEFINE_RESULT_CODE(SHARING_COMMIT_MISSING); 180 : DEFINE_RESULT_CODE(WORKSPACE_NESTED_INVALID); 181 : DEFINE_RESULT_CODE(WORKSPACE_NESTED_ROOT); 182 : DEFINE_RESULT_CODE(WORKSPACE_REQUIRES_SCHEMA_1_1); 183 : DEFINE_RESULT_CODE(WORKSPACE_NESTED_NO_LOCAL_MANIFEST); 184 : 185 : DEFINE_RESULT_CODE(GREPO_FOLDER_NO_INCLUDE, -300); 186 : 187 : DEFINE_RESULT_CODE(CMDINIT_NO_URL, -400); 188 : DEFINE_RESULT_CODE(CMDINIT_FAILED_FETCH_UNKNOWN_MANIFEST); 189 : DEFINE_RESULT_CODE(CMDINIT_NO_LOCAL_MANIFEST); 190 : 191 : DEFINE_RESULT_CODE(GIT_GENERIC_ERROR, -500); 192 : DEFINE_RESULT_CODE(GIT_UNKNOWN_PROTOCOL); 193 : DEFINE_RESULT_CODE(GIT_RAW_INT_ERROR); 194 : DEFINE_RESULT_CODE(GIT_ERROR_OPENING_REPO); 195 : DEFINE_RESULT_CODE(GIT_RESET_TYPE_NOT_SET); 196 : DEFINE_RESULT_CODE(GIT_RESET_TYPE_UNKNOWN); 197 : DEFINE_RESULT_CODE(GIT_NO_BRANCH_FOUND); 198 : DEFINE_RESULT_CODE(GIT_REPO_NOT_OPEN); 199 : DEFINE_RESULT_CODE(GIT_FIND_REF_FAILED); 200 : DEFINE_RESULT_CODE(GIT_GET_HASH_FAILED); 201 : DEFINE_RESULT_CODE(GIT_NO_PARENT); 202 : DEFINE_RESULT_CODE(GIT_ALREADY_OPENED); 203 : DEFINE_RESULT_CODE(GIT_SSH_BACKEND_NOT_SUPPORTED); 204 : 205 : DEFINE_RESULT_CODE(CMD_INCORRECT_PARAMETERS_IN_CONTEXT, -600); 206 : DEFINE_RESULT_CODE(CMD_INCORRECT_PARAMETERS_COMBINATION); 207 : DEFINE_RESULT_CODE(CMD_MISSING_PARAMETERS); 208 : DEFINE_RESULT_CODE(CMD_GENERIC_RAW_ERROR); 209 : DEFINE_RESULT_CODE(CMD_NO_ESYSREPO_FOLDER_FOUND); 210 : DEFINE_RESULT_CODE(CMD_CONFIG_FOLDER_NULLPTR); 211 : DEFINE_RESULT_CODE(CMD_GIT_IS_NULLPTR); 212 : DEFINE_RESULT_CODE(CMD_GIT_IS_NOT_OPENED); 213 : DEFINE_RESULT_CODE(CMD_GIT_OPEN_FAILED); 214 : DEFINE_RESULT_CODE(CMD_GIT_IS_DIRTY_FAILED); 215 : DEFINE_RESULT_CODE(CMD_GIT_FETCH_FAILED); 216 : DEFINE_RESULT_CODE(CMD_GIT_GET_HEAD_FAILED); 217 : DEFINE_RESULT_CODE(CMD_GIT_MORE_THAN_ONE_COMMIT); 218 : DEFINE_RESULT_CODE(CMD_WORKSPACE_PATH_IS_EMPTY); 219 : 220 : DEFINE_RESULT_CODE(CMDSYNC_ABORTED_FOUND_CHANGES, -700); 221 : DEFINE_RESULT_CODE(CMDSYNC_GIT_CAN_NOT_BE_FAST_FORWARDED); 222 : 223 : DEFINE_RESULT_CODE(RUNTASKS_NO_TASK, -800); 224 : 225 : DEFINE_RESULT_CODE(DIRECTORY_XML_DATA_NULLPTR, -900); 226 : DEFINE_RESULT_CODE(DIRECTORY_XML_ERROR_PARSING_STREAM); 227 : DEFINE_RESULT_CODE(DIRECTORY_XML_ERROR_PARSING_FILE); 228 : DEFINE_RESULT_CODE(DIRECTORY_XML_ELEMENT_UNKNOWN); 229 : DEFINE_RESULT_CODE(DIRECTORY_XML_MISSING_ATTR); 230 : DEFINE_RESULT_CODE(DIRECTORY_XML_UNKNOWN_URL_TYPE); 231 : 232 : DEFINE_RESULT_CODE(MULTI_XML_CAPTURE_NULLPTR, -1000); 233 : DEFINE_RESULT_CODE(MULTI_ELEMENT_UNKNOWN); 234 : DEFINE_RESULT_CODE(MULTI_REPOSITORY_WITHOUT_PATH); 235 : DEFINE_RESULT_CODE(MULTI_REPOSITORY_WITHOUT_REV); 236 : DEFINE_RESULT_CODE(MULTI_ERROR_PARSING_FILE); 237 : DEFINE_RESULT_CODE(MULTI_ERROR_PARSING_STREAM); 238 : 239 : DEFINE_RESULT_CODE(USERCONFIG_XML_DATA_NULLPTR, -1100); 240 : DEFINE_RESULT_CODE(USERCONFIG_XML_ELEMENT_UNKNOWN); 241 : DEFINE_RESULT_CODE(USERCONFIG_XML_MISSING_ELEMENT); 242 : DEFINE_RESULT_CODE(USERCONFIG_XML_MISSING_ATTR); 243 : DEFINE_RESULT_CODE(USERCONFIG_XML_UNKNOWN_ATTR_VALUE); 244 : 245 : DEFINE_RESULT_CODE(CMDPIN_NO_MATCH, -1200); 246 : DEFINE_RESULT_CODE(CMDPIN_AMBIGUOUS_MATCH); 247 : DEFINE_RESULT_CODE(CMDPIN_CI_NOT_DETECTED); 248 : DEFINE_RESULT_CODE(CMDPIN_CI_UNSUPPORTED); 249 : DEFINE_RESULT_CODE(CMDPIN_PINS_FILE_PARSE_ERROR); 250 : 251 : } // namespace esys::repo 252 : 253 : namespace std 254 : { 255 : 256 0 : ESYSREPO_API ostream &operator<<(ostream &os, const esys::repo::ResultCode &result) 257 : { 258 0 : return os; 259 : } 260 : 261 : } // namespace std