From 0f6176a3d8f7f09d8c8faa16e18197c69348821c Mon Sep 17 00:00:00 2001 From: Ken Matsui <26405363+ken-matsui@users.noreply.github.com> Date: Tue, 5 Jan 2021 05:22:36 +0900 Subject: [PATCH 1/6] Remove core::except completely --- .github/workflows/linux.yml | 1 + include/poac/config.hpp | 3 +- include/poac/core.hpp | 1 - include/poac/core/builder/standard.hpp | 188 ++++++++++++++----------- include/poac/core/except.hpp | 22 --- include/poac/core/resolver.hpp | 2 +- include/poac/util/misc.hpp | 15 +- include/poac/util/net.hpp | 60 ++++---- tests/CMakeLists.txt | 1 - tests/except.cpp | 16 --- tests/standard.cpp | 38 +++-- 11 files changed, 160 insertions(+), 187 deletions(-) delete mode 100644 include/poac/core/except.hpp delete mode 100644 tests/except.cpp diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index c09182b47..429b01516 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -65,6 +65,7 @@ jobs: sudo apt-get install -y -qq pkg-config cmake ${{ matrix.compiler.pacakge }} - name: Restore & Cache CMake build results + if: matrix.build_type != 'Coverage' uses: actions/cache@v2.1.3 with: path: build diff --git a/include/poac/config.hpp b/include/poac/config.hpp index 262ca1723..e554dd4cd 100644 --- a/include/poac/config.hpp +++ b/include/poac/config.hpp @@ -25,7 +25,8 @@ namespace poac { } // end namespace namespace poac::config::path { - inline const std::filesystem::path root(util::misc::expand_user() / std::filesystem::path(".poac")); + inline const std::filesystem::path user = util::misc::expand_user().unwrap(); + inline const std::filesystem::path root(user / ".poac"); inline const std::filesystem::path cache_dir(root / "cache"); inline const std::filesystem::path archive_dir(cache_dir / "archive"); inline const std::filesystem::path extract_dir(cache_dir / "extract"); diff --git a/include/poac/core.hpp b/include/poac/core.hpp index 51d311516..20cc5bec0 100644 --- a/include/poac/core.hpp +++ b/include/poac/core.hpp @@ -2,7 +2,6 @@ #define POAC_CORE_HPP #include -#include #include #include diff --git a/include/poac/core/builder/standard.hpp b/include/poac/core/builder/standard.hpp index 54d7b024e..f473f738e 100644 --- a/include/poac/core/builder/standard.hpp +++ b/include/poac/core/builder/standard.hpp @@ -11,9 +11,9 @@ // external #include +#include // internal -#include #include #include #include @@ -26,87 +26,93 @@ namespace poac::core::builder::standard { const std::string ANY = R"([\s\S]*)"; - std::string get_compiler_version(const std::string& compiler) { + [[nodiscard]] mitama::result + get_compiler_version(const std::string& compiler) { if (util::shell::has_command(compiler)) { if (const auto res = util::shell::cmd(compiler + " --version").stderr_to_stdout().exec()) { const std::regex SEARCH_VERSION("^" + ANY + "(" + semver::MAIN_VERSION + ")" + ANY + "$"); std::smatch match; if (std::regex_match(*res, match, SEARCH_VERSION)) { - return match[1]; + return mitama::success(match[1]); } } } - throw except::error( + return mitama::failure( fmt::format("Could not get {} version", compiler) ); } - std::string apple_llvm_convert(const std::uint_fast8_t& cpp_version, const bool& enable_gnu) { + [[nodiscard]] mitama::result + apple_llvm_convert(const std::uint_fast8_t& cpp_version, const bool& enable_gnu) noexcept { // Apple LLVMは,コンパイラバージョンによる差異がないものとする.(半ば強制的にupdateされるため) if (cpp_version == 98) { - return version_prefix(enable_gnu) + "98"; + return mitama::success(version_prefix(enable_gnu) + "98"); } else if (cpp_version == 3 || cpp_version == 11) { - return version_prefix(enable_gnu) + "11"; + return mitama::success(version_prefix(enable_gnu) + "11"); } else if (cpp_version == 14) { - return version_prefix(enable_gnu) + "14"; + return mitama::success(version_prefix(enable_gnu) + "14"); } else if (cpp_version == 17) { - return version_prefix(enable_gnu) + "17"; + return mitama::success(version_prefix(enable_gnu) + "17"); } else if (cpp_version == 20) { - throw except::error("Currently, Apple LLVM does not support C++20.\n" - "If this error is displayed in spite of C++20 is supported,\n" - " please report the issue to https://github.com/poacpm/poac/issues."); + return mitama::failure( + "Currently, Apple LLVM does not support C++20.\n" + "If this error is displayed in spite of C++20 is supported,\n" + " please report the issue to https://github.com/poacpm/poac/issues." + ); } else { - throw except::error( + return mitama::failure( fmt::format("Unknown C++ version: {}", cpp_version) ); } } - std::string gcc_convert( + [[nodiscard]] mitama::result + gcc_convert( const std::uint_fast8_t& cpp_version, const std::string& compiler_version, const bool& enable_gnu - ) { + ) noexcept { const semver::Version cv(compiler_version); if (cpp_version == 98) { - return ""; // unneeded version prefix + return mitama::success(""); // unneeded version prefix } else if (cpp_version == 3 || cpp_version == 11) { if (cv < "4.3") { - throw except::error("Invalid using C++11 less than gcc-4.3.0"); + return mitama::failure("Invalid using C++11 less than gcc-4.3.0"); } else if (cv >= "4.3" && cv < "4.7") { - return version_prefix(enable_gnu) + "0x"; + return mitama::success(version_prefix(enable_gnu) + "0x"); } else { - return version_prefix(enable_gnu) + "11"; + return mitama::success(version_prefix(enable_gnu) + "11"); } } else if (cpp_version == 14) { if (cv < "4.8") { - throw except::error("Invalid using C++14 less than gcc-4.8.0"); + return mitama::failure("Invalid using C++14 less than gcc-4.8.0"); } else if (cv >= "4.8" && cv < "4.9") { - return version_prefix(enable_gnu) + "1y"; + return mitama::success(version_prefix(enable_gnu) + "1y"); } else { - return version_prefix(enable_gnu) + "14"; + return mitama::success(version_prefix(enable_gnu) + "14"); } } else if (cpp_version == 17) { if (cv < "5") { - throw except::error("Invalid using C++17 less than gcc-5.0.0"); + return mitama::failure("Invalid using C++17 less than gcc-5.0.0"); } else { - return version_prefix(enable_gnu) + "17"; + return mitama::success(version_prefix(enable_gnu) + "17"); } } else if (cpp_version == 20) { if (cv < "8") { - throw except::error("Invalid using C++20 less than gcc-8.0.0"); + return mitama::failure("Invalid using C++20 less than gcc-8.0.0"); } else { - return version_prefix(enable_gnu) + "2a"; + return mitama::success(version_prefix(enable_gnu) + "2a"); } } else { - throw except::error( + return mitama::failure( fmt::format("Unknown C++ version: {}", cpp_version) ); } } - std::string clang_convert( + [[nodiscard]] mitama::result + clang_convert( const std::uint_fast8_t& cpp_version, const std::string& compiler_version, const bool& enable_gnu @@ -114,93 +120,99 @@ namespace poac::core::builder::standard { const semver::Version cv(compiler_version); if (cpp_version == 98) { - return ""; // unneeded version prefix + return mitama::success(""); // unneeded version prefix } else if (cpp_version == 3 || cpp_version == 11) { - return version_prefix(enable_gnu) + "11"; + return mitama::success(version_prefix(enable_gnu) + "11"); } else if (cpp_version == 14) { if (cv < "3.2") { - throw except::error("Invalid using C++14 less than clang-3.2"); + return mitama::failure("Invalid using C++14 less than clang-3.2"); } else if (cv >= "3.2" && cv < "3.5") { - return version_prefix(enable_gnu) + "1y"; + return mitama::success(version_prefix(enable_gnu) + "1y"); } else { - return version_prefix(enable_gnu) + "14"; + return mitama::success(version_prefix(enable_gnu) + "14"); } } else if (cpp_version == 17) { if (cv < "3.5.0") { - throw except::error("Invalid using C++17 less than clang-3.5.0"); + return mitama::failure("Invalid using C++17 less than clang-3.5.0"); } else if (cv >= "3.5.0" && cv < "5.0.0") { - return version_prefix(enable_gnu) + "1z"; + return mitama::success(version_prefix(enable_gnu) + "1z"); } else { - return version_prefix(enable_gnu) + "17"; + return mitama::success(version_prefix(enable_gnu) + "17"); } } else if (cpp_version == 20) { if (cv < "6.0.0") { - throw except::error("Invalid using C++20 less than clang-5.0.0"); + return mitama::failure("Invalid using C++20 less than clang-5.0.0"); } else { - return version_prefix(enable_gnu) + "2a"; + return mitama::success(version_prefix(enable_gnu) + "2a"); } } else { - throw except::error( + return mitama::failure( fmt::format("Unknown C++ version: {}", cpp_version) ); } } - std::string icc_convert(const std::uint_fast8_t& cpp_version) { + [[nodiscard]] mitama::result + icc_convert(const std::uint_fast8_t& cpp_version) noexcept { if (cpp_version == 98) { - return ""; // unneeded version prefix + return mitama::success(""); // unneeded version prefix } else if (cpp_version == 3 || cpp_version == 11) { #ifndef _WIN32 - return version_prefix(false) + "11"; + return mitama::success(version_prefix(false) + "11"); #else - return "/Qstd:c++11"; + return mitama::success("/Qstd:c++11"); #endif } else if (cpp_version == 14) { #ifndef _WIN32 - return version_prefix(false) + "14"; + return mitama::success(version_prefix(false) + "14"); #else - return "/Qstd:c++14"; + return mitama::success("/Qstd:c++14"); #endif } else if (cpp_version == 17) { #ifndef _WIN32 - return version_prefix(false) + "17"; + return mitama::success(version_prefix(false) + "17"); #else - return "/Qstd:c++17"; + return mitama::success("/Qstd:c++17"); #endif } else if (cpp_version == 20) { - throw except::error("Currently, Intel C++ Compiler does not support C++20.\n" - "If this error is displayed in spite of C++20 is supported,\n" - " please report the issue to https://github.com/poacpm/poac/issues."); + return mitama::failure( + "Currently, Intel C++ Compiler does not support C++20.\n" + "If this error is displayed in spite of C++20 is supported,\n" + " please report the issue to https://github.com/poacpm/poac/issues." + ); } else { - throw except::error( + return mitama::failure( fmt::format("Unknown C++ version: {}", cpp_version) ); } } - std::string msvc_convert(const std::uint_fast8_t& cpp_version) { + [[nodiscard]] mitama::result + msvc_convert(const std::uint_fast8_t& cpp_version) noexcept { if (cpp_version == 98 || cpp_version == 3 || cpp_version == 11) { - return ""; // unneeded version prefix + return mitama::success(""); // unneeded version prefix } else if (cpp_version == 14) { - return "/std:c++14"; + return mitama::success("/std:c++14"); } else if (cpp_version == 17) { - return "/std:c++17"; + return mitama::success("/std:c++17"); } else if (cpp_version == 20) { - throw except::error("Currently, MSVC does not support C++20.\n" - "If this error is displayed in spite of C++20 is supported,\n" - " please report the issue to https://github.com/poacpm/poac/issues."); + return mitama::failure( + "Currently, MSVC does not support C++20.\n" + "If this error is displayed in spite of C++20 is supported,\n" + " please report the issue to https://github.com/poacpm/poac/issues." + ); } else { - throw except::error( + return mitama::failure( fmt::format("Unknown C++ version: {}", cpp_version) ); } // TODO: latestを活用 } - util::cfg::compiler + [[nodiscard]] mitama::result command_to_name(std::string_view cmd) { if (cmd == "icpc") { - return util::cfg::compiler::icc; + return mitama::success(util::cfg::compiler::icc); } #ifndef _WIN32 else if (cmd == "g++" || cmd == "clang++") { @@ -210,38 +222,47 @@ namespace poac::core::builder::standard { const std::regex SEARCH("^" + ANY + "(Apple LLVM)" + ANY + "$"); std::smatch match; if (std::regex_match(*res, match, SEARCH)) { - return util::cfg::compiler::apple_clang; + return mitama::success(util::cfg::compiler::apple_clang); } } # endif if (cmd == "g++") { - return util::cfg::compiler::gcc; + return mitama::success(util::cfg::compiler::gcc); } else if (cmd == "clang++") { - return util::cfg::compiler::clang; + return mitama::success(util::cfg::compiler::clang); } } #else else if (cmd == "cl.exe") { - return util::cfg::compiler::msvc; + return mitama::success(util::cfg::compiler::msvc); } #endif - throw except::error( + return mitama::failure( fmt::format("Unknown compiler command: {}", cmd) ); } - std::string convert(const std::uint_fast8_t& cpp_version, const std::string& command, const bool& enable_gnu) { + [[nodiscard]] mitama::result + convert(const std::uint_fast8_t& cpp_version, const std::string& command, const bool& enable_gnu) { // Match a poac binary architecture and an architecture available to each compiler. - switch (command_to_name(command)) { + switch (MITAMA_TRY(command_to_name(command))) { // Support OS: macos, linux, mingw, cygwin, _WIN32 case util::cfg::compiler::icc: return icc_convert(cpp_version); // Support OS: macos, linux, mingw, cygwin (exclude _WIN32) case util::cfg::compiler::gcc: - return gcc_convert(cpp_version, get_compiler_version("g++"), enable_gnu); + return gcc_convert( + cpp_version, + MITAMA_TRY(get_compiler_version("g++")), + enable_gnu + ); // Support OS: macos, linux, mingw, cygwin (exclude _WIN32) case util::cfg::compiler::clang: - return clang_convert(cpp_version, get_compiler_version("clang++"), enable_gnu); + return clang_convert( + cpp_version, + MITAMA_TRY(get_compiler_version("clang++")), + enable_gnu + ); // Support OS: Only _WIN32 case util::cfg::compiler::msvc: return msvc_convert(cpp_version); @@ -249,33 +270,36 @@ namespace poac::core::builder::standard { case util::cfg::compiler::apple_clang: return apple_llvm_convert(cpp_version, enable_gnu); default: - throw std::logic_error( - "To access out of range of the " - "enumeration values is undefined behavior."); + return mitama::failure( + "To access out of range of the " + "enumeration values is undefined behavior." + ); } } - std::string detect_command() { + [[nodiscard]] mitama::result + detect_command() noexcept { if (const auto cxx = util::misc::dupenv("CXX")) { - return *cxx; + return mitama::success(*cxx); } else if (util::shell::has_command("icpc")) { - return "icpc"; + return mitama::success("icpc"); } #ifndef _WIN32 else if (util::shell::has_command("g++")) { - return "g++"; + return mitama::success("g++"); } else if (util::shell::has_command("clang++")) { - return "clang++"; + return mitama::success("clang++"); } #else else if (util::_shell::has_command("cl.exe")) { - return "cl.exe"; + return mitama::success("cl.exe"); } #endif else { - throw except::error( - "Environment variable \"CXX\" was not found.\n" - "Select the compiler and export it."); + return mitama::failure( + "Environment variable \"CXX\" was not found.\n" + "Select the compiler and export it." + ); } } } // end namespace diff --git a/include/poac/core/except.hpp b/include/poac/core/except.hpp deleted file mode 100644 index 3d872a281..000000000 --- a/include/poac/core/except.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef POAC_CORE_EXCEPT_HPP -#define POAC_CORE_EXCEPT_HPP - -#include -#include -#include - -namespace poac::core::except { - class error : public std::invalid_argument { - public: - explicit error(const std::string_view __s) - : invalid_argument(std::string(__s)) {} - - error() = delete; - error(const error&) = default; - error& operator=(const error&) = default; - error(error&&) = default; - error& operator=(error&&) = default; - ~error() noexcept override = default; - }; -} // end namespace -#endif // !POAC_CORE_EXCEPT_HPP diff --git a/include/poac/core/resolver.hpp b/include/poac/core/resolver.hpp index 902f9ff1c..ec47a6bfe 100644 --- a/include/poac/core/resolver.hpp +++ b/include/poac/core/resolver.hpp @@ -95,7 +95,7 @@ namespace poac::core::resolver { std::ofstream archive(archive_path); const auto [host, target] = util::net::parse_url(download_link); const util::net::requests requests{ host }; - requests.get(target, {}, std::move(archive)); + static_cast(requests.get(target, {}, std::move(archive))); return mitama::success(archive_path); } catch (...) { diff --git a/include/poac/util/misc.hpp b/include/poac/util/misc.hpp index 94c4766c4..ac2df591a 100644 --- a/include/poac/util/misc.hpp +++ b/include/poac/util/misc.hpp @@ -13,9 +13,7 @@ // external #include #include - -// internal -#include +#include namespace poac::util::misc { inline namespace path_literals { @@ -58,19 +56,18 @@ namespace poac::util::misc { // Inspired by https://stackoverflow.com/q/4891006 // Expand ~ to user home directory. - std::string expand_user() { + [[nodiscard]] mitama::result + expand_user() { auto home = dupenv("HOME"); if (home || (home = dupenv("USERPROFILE"))) { - return home.value(); + return mitama::success(home.value()); } else { const auto home_drive = dupenv("HOMEDRIVE"); const auto home_path = dupenv("HOMEPATH"); if (home_drive && home_path) { - return home_drive.value() + home_path.value(); + return mitama::success(home_drive.value() + home_path.value()); } - throw core::except::error( - "could not read environment variable" - ); + return mitama::failure("could not get home directory"); } } } // end namespace diff --git a/include/poac/util/net.hpp b/include/poac/util/net.hpp index bc21b86e7..7d1d8489a 100644 --- a/include/poac/util/net.hpp +++ b/include/poac/util/net.hpp @@ -37,7 +37,6 @@ // internal #include -#include #include #include #include @@ -268,7 +267,7 @@ namespace poac::util::net { typename ResponseBody, typename Request, typename Ofstream> - typename ResponseBody::value_type + [[nodiscard]] mitama::result request(Request&& req, Ofstream&& ofs) const { ssl_prepare(); write_request(req); @@ -288,7 +287,7 @@ namespace poac::util::net { std::ofstream>, http::vector_body, http::string_body>> - typename ResponseBody::value_type + [[nodiscard]] mitama::result get( const std::string_view target, const headers_t& headers={}, @@ -320,7 +319,7 @@ namespace poac::util::net { std::ofstream>, http::vector_body, http::string_body>> - typename ResponseBody::value_type + [[nodiscard]] mitama::result post( const std::string_view target, BodyType&& body, @@ -429,7 +428,7 @@ namespace poac::util::net { typename ResponseBody, typename Request, typename Ofstream> - typename ResponseBody::value_type + [[nodiscard]] mitama::result read_response(Request&& old_req, Ofstream&& ofs) const { // This buffer is used for reading and must be persisted boost::beast::flat_buffer buffer; @@ -439,9 +438,10 @@ namespace poac::util::net { http::read(*stream, buffer, res); // Handle HTTP status code return handle_status( - std::forward(old_req), - std::move(res), - std::forward(ofs)); + std::forward(old_req), + std::move(res), + std::forward(ofs) + ); } template < @@ -450,35 +450,33 @@ namespace poac::util::net { typename Response, typename Ofstream, typename ResponseBody = typename Response::body_type> - typename ResponseBody::value_type + [[nodiscard]] mitama::result handle_status(Request&& old_req, Response&& res, Ofstream&& ofs) const { close_stream(); switch (res.base().result_int() / 100) { case 2: - return parse_response( - std::forward(res), - std::forward(ofs)); + return mitama::success(parse_response( + std::forward(res), + std::forward(ofs) + )); case 3: return redirect( - std::forward(old_req), - std::forward(res), - std::forward(ofs)); + std::forward(old_req), + std::forward(res), + std::forward(ofs) + ); default: if constexpr (!std::is_same_v, std::ofstream>) { - throw core::except::error( - fmt::format( - "util::net received a bad response code: {}\n{}", - res.base().result_int(), res.body() - ) - ); + return mitama::failure(fmt::format( + "util::net received a bad response code: {}\n{}", + res.base().result_int(), res.body() + )); } else { - throw core::except::error( - fmt::format( - "util::net received a bad response code: {}", - res.base().result_int() - ) - ); + throw mitama::failure(fmt::format( + "util::net received a bad response code: {}", + res.base().result_int() + )); } } } @@ -524,7 +522,7 @@ namespace poac::util::net { typename Response, typename Ofstream, typename ResponseBody = typename Response::body_type> - typename ResponseBody::value_type + [[nodiscard]] mitama::result redirect(Request&& old_req, Response&& res, Ofstream&& ofs) const { const std::string new_location(res.base()["Location"]); const auto [new_host, new_target] = parse_url(new_location); @@ -537,7 +535,7 @@ namespace poac::util::net { } else if (method == http::verb::post) { return req.post(new_target, old_req.body(), {}, std::forward(ofs)); } else { // verb error - return {}; + return mitama::failure("[util::net::requests] unknown verb used"); } } @@ -593,15 +591,13 @@ namespace poac::util::net::api { headers.emplace("X-Algolia-API-Key", ALGOLIA_SEARCH_ONLY_KEY); headers.emplace("X-Algolia-Application-Id", ALGOLIA_APPLICATION_ID); - const auto response = request.post(ALGOLIA_SEARCH_INDEX_API, body, headers); + const auto response = MITAMA_TRY(request.post(ALGOLIA_SEARCH_INDEX_API, body, headers)); std::stringstream response_body; response_body << response.data(); boost::property_tree::ptree pt; boost::property_tree::json_parser::read_json(response_body, pt); return mitama::success(pt); - } catch (const core::except::error& e) { - return mitama::failure(e.what()); } catch (...) { return mitama::failure("unknown error caused when calling search api"); } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 86010985a..2b0d9e905 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,5 @@ set(TEST_NAMES cfg - except meta misc net diff --git a/tests/except.cpp b/tests/except.cpp deleted file mode 100644 index 2d711debc..000000000 --- a/tests/except.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#define BOOST_TEST_MAIN -#include -#include -#include - -BOOST_AUTO_TEST_CASE( poac_core_except_error_test ) -{ - using poac::core::except::error; - - const std::string msg = "hoge"; - try { - throw error(msg); - } catch (const error& e) { - BOOST_CHECK(e.what() == msg); - } -} diff --git a/tests/standard.cpp b/tests/standard.cpp index ba0e2fdaf..93d0a5369 100644 --- a/tests/standard.cpp +++ b/tests/standard.cpp @@ -1,7 +1,6 @@ #define BOOST_TEST_MAIN #include #include -#include // inline std::string version_prefix(const bool& enable_gnu) noexcept BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_version_prefix_test ) @@ -15,7 +14,6 @@ BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_version_prefix_test ) BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_apple_llvm_convert_test ) { using poac::core::builder::standard::apple_llvm_convert; - using poac::core::except::error; BOOST_CHECK( apple_llvm_convert(98, false) == "-std=c++98" ); BOOST_CHECK( apple_llvm_convert(98, true) == "-std=gnu++98" ); @@ -32,53 +30,51 @@ BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_apple_llvm_convert_test ) BOOST_CHECK( apple_llvm_convert(17, false) == "-std=c++17" ); BOOST_CHECK( apple_llvm_convert(17, true) == "-std=gnu++17" ); - BOOST_CHECK_THROW( apple_llvm_convert(20, false), error ); - BOOST_CHECK_THROW( apple_llvm_convert(6, true), error ); + BOOST_CHECK( apple_llvm_convert(20, false).is_err() ); + BOOST_CHECK( apple_llvm_convert(6, true).is_err() ); } // std::string gcc_convert(const std::uint_fast8_t& cpp_version, const std::string& compiler_version, const bool& enable_gnu) BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_gcc_convert_test ) { using poac::core::builder::standard::gcc_convert; - using poac::core::except::error; BOOST_CHECK( gcc_convert(98, "1.0.0", false) == "" ); BOOST_CHECK( gcc_convert(98, "1.0.0", true) == "" ); - BOOST_CHECK_THROW( gcc_convert(3, "4.2", false), error ); + BOOST_CHECK( gcc_convert(3, "4.2", false).is_err() ); BOOST_CHECK( gcc_convert(3, "4.3", false) == "-std=c++0x" ); BOOST_CHECK( gcc_convert(3, "4.5", true) == "-std=gnu++0x" ); BOOST_CHECK( gcc_convert(3, "4.7", false) == "-std=c++11" ); BOOST_CHECK( gcc_convert(3, "8.0", true) == "-std=gnu++11" ); - BOOST_CHECK_THROW( gcc_convert(11, "4.2", false), error ); + BOOST_CHECK( gcc_convert(11, "4.2", false).is_err() ); BOOST_CHECK( gcc_convert(11, "4.3", false) == "-std=c++0x" ); BOOST_CHECK( gcc_convert(11, "4.5", true) == "-std=gnu++0x" ); BOOST_CHECK( gcc_convert(11, "4.7", false) == "-std=c++11" ); BOOST_CHECK( gcc_convert(11, "8.0", true) == "-std=gnu++11" ); - BOOST_CHECK_THROW( gcc_convert(14, "4.7", false), error ); + BOOST_CHECK( gcc_convert(14, "4.7", false).is_err() ); BOOST_CHECK( gcc_convert(14, "4.8", false) == "-std=c++1y" ); BOOST_CHECK( gcc_convert(14, "4.8.3", true) == "-std=gnu++1y" ); BOOST_CHECK( gcc_convert(14, "4.9", false) == "-std=c++14" ); BOOST_CHECK( gcc_convert(14, "8.0", true) == "-std=gnu++14" ); - BOOST_CHECK_THROW( gcc_convert(17, "4.9", false), error ); + BOOST_CHECK( gcc_convert(17, "4.9", false).is_err() ); BOOST_CHECK( gcc_convert(17, "5.0", false) == "-std=c++17" ); BOOST_CHECK( gcc_convert(17, "8.0", true) == "-std=gnu++17" ); - BOOST_CHECK_THROW( gcc_convert(20, "7", false), error ); + BOOST_CHECK( gcc_convert(20, "7", false).is_err() ); BOOST_CHECK( gcc_convert(20, "8.0", false) == "-std=c++2a" ); BOOST_CHECK( gcc_convert(20, "10.0", true) == "-std=gnu++2a" ); - BOOST_CHECK_THROW( gcc_convert(9, "1.0.0", false), error ); + BOOST_CHECK( gcc_convert(9, "1.0.0", false).is_err() ); } // std::string clang_convert(const std::uint_fast8_t& cpp_version, const std::string& compiler_version, const bool& enable_gnu) BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_clang_convert_test ) { using poac::core::builder::standard::clang_convert; - using poac::core::except::error; BOOST_CHECK( clang_convert(98, "1.0.0", false) == "" ); BOOST_CHECK( clang_convert(98, "1.0.0", true) == "" ); @@ -93,30 +89,29 @@ BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_clang_convert_test ) BOOST_CHECK( clang_convert(11, "7.0", false) == "-std=c++11" ); BOOST_CHECK( clang_convert(11, "7.0", true) == "-std=gnu++11" ); - BOOST_CHECK_THROW( clang_convert(14, "3.1", false), error ); + BOOST_CHECK( clang_convert(14, "3.1", false).is_err() ); BOOST_CHECK( clang_convert(14, "3.2", false) == "-std=c++1y" ); BOOST_CHECK( clang_convert(14, "3.4", true) == "-std=gnu++1y" ); BOOST_CHECK( clang_convert(14, "3.5", false) == "-std=c++14" ); BOOST_CHECK( clang_convert(14, "7.0", true) == "-std=gnu++14" ); - BOOST_CHECK_THROW( clang_convert(17, "3.4.0", false), error ); + BOOST_CHECK( clang_convert(17, "3.4.0", false).is_err() ); BOOST_CHECK( clang_convert(17, "3.5.0", false) == "-std=c++1z" ); BOOST_CHECK( clang_convert(17, "4.9.0", true) == "-std=gnu++1z" ); BOOST_CHECK( clang_convert(17, "5.0", false) == "-std=c++17" ); BOOST_CHECK( clang_convert(17, "7.0", true) == "-std=gnu++17" ); - BOOST_CHECK_THROW( clang_convert(20, "5.9.0", false), error ); + BOOST_CHECK( clang_convert(20, "5.9.0", false).is_err() ); BOOST_CHECK( clang_convert(20, "6.0", false) == "-std=c++2a" ); BOOST_CHECK( clang_convert(20, "7.0", true) == "-std=gnu++2a" ); - BOOST_CHECK_THROW( clang_convert(12, "1.0.0", false), error ); + BOOST_CHECK( clang_convert(12, "1.0.0", false).is_err() ); } // std::string icc_convert(const std::uint_fast8_t& cpp_version) BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_icc_convert_test ) { using poac::core::builder::standard::icc_convert; - using poac::core::except::error; BOOST_CHECK( icc_convert(98) == "" ); #ifndef _WIN32 @@ -130,21 +125,20 @@ BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_icc_convert_test ) BOOST_CHECK( icc_convert(14) == "/Qstd:c++14" ); BOOST_CHECK( icc_convert(17) == "/Qstd:c++17" ); #endif - BOOST_CHECK_THROW( icc_convert(20), error ); - BOOST_CHECK_THROW( icc_convert(15), error ); + BOOST_CHECK( icc_convert(20).is_err() ); + BOOST_CHECK( icc_convert(15).is_err() ); } // std::string msvc_convert(const std::uint_fast8_t& cpp_version) BOOST_AUTO_TEST_CASE( poac_core_builder_field_standard_msvc_convert_test ) { using poac::core::builder::standard::msvc_convert; - using poac::core::except::error; BOOST_CHECK( msvc_convert(98) == "" ); BOOST_CHECK( msvc_convert(3) == "" ); BOOST_CHECK( msvc_convert(11) == "" ); BOOST_CHECK( msvc_convert(14) == "/std:c++14" ); BOOST_CHECK( msvc_convert(17) == "/std:c++17" ); - BOOST_CHECK_THROW( msvc_convert(20), error ); - BOOST_CHECK_THROW( msvc_convert(18), error ); + BOOST_CHECK( msvc_convert(20).is_err() ); + BOOST_CHECK( msvc_convert(18).is_err() ); } From e61169599153df5b17972999beadac84f862db52 Mon Sep 17 00:00:00 2001 From: Ken Matsui <26405363+ken-matsui@users.noreply.github.com> Date: Wed, 6 Jan 2021 20:35:26 +0900 Subject: [PATCH 2/6] Unify interface of new and init commands to Cargo --- include/poac/cmd/init.hpp | 4 ++-- include/poac/cmd/new.hpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/poac/cmd/init.hpp b/include/poac/cmd/init.hpp index fd9e7c990..62caad470 100644 --- a/include/poac/cmd/init.hpp +++ b/include/poac/cmd/init.hpp @@ -37,8 +37,8 @@ namespace poac::cmd::init { break; } PLOG_INFO << fmt::format( - "{}{} `{}` package", - "Created: "_green, + "{:>21}{} `{}` package", + "Created "_green, opts.type, package_name ); diff --git a/include/poac/cmd/new.hpp b/include/poac/cmd/new.hpp index c9537ecc6..1d9ae7fdb 100644 --- a/include/poac/cmd/new.hpp +++ b/include/poac/cmd/new.hpp @@ -145,8 +145,8 @@ namespace poac::cmd::_new { git2::repository().init(opts.package_name); PLOG_INFO << fmt::format( - "{}{} `{}` package", - "Created: "_green, + "{:>21}{} `{}` package", + "Created "_green, opts.type, opts.package_name ); From ac92aa02350c21d1e9e1b45ecea0ed287348c790 Mon Sep 17 00:00:00 2001 From: Ken Matsui <26405363+ken-matsui@users.noreply.github.com> Date: Wed, 6 Jan 2021 20:37:20 +0900 Subject: [PATCH 3/6] Refactor cmd::init and cmd::new --- include/poac/cmd/init.hpp | 4 ++-- include/poac/cmd/new.hpp | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/include/poac/cmd/init.hpp b/include/poac/cmd/init.hpp index 62caad470..3f5ef556c 100644 --- a/include/poac/cmd/init.hpp +++ b/include/poac/cmd/init.hpp @@ -24,8 +24,6 @@ namespace poac::cmd::init { [[nodiscard]] mitama::result init(std::string_view package_name, init::Options&& opts) { - using termcolor2::color_literals::operator""_green; - PLOG_VERBOSE << "Creating ./poac.toml"; std::ofstream ofs_config("poac.toml"); switch (opts.type) { @@ -36,6 +34,8 @@ namespace poac::cmd::init { ofs_config << _new::files::poac_toml(package_name); break; } + + using termcolor2::color_literals::operator""_green; PLOG_INFO << fmt::format( "{:>21}{} `{}` package", "Created "_green, diff --git a/include/poac/cmd/new.hpp b/include/poac/cmd/new.hpp index 1d9ae7fdb..cd0847ecb 100644 --- a/include/poac/cmd/new.hpp +++ b/include/poac/cmd/new.hpp @@ -130,8 +130,6 @@ namespace poac::cmd::_new { [[nodiscard]] mitama::result _new(_new::Options&& opts) { - using termcolor2::color_literals::operator""_green; - std::ofstream ofs; for (auto&& [name, text] : create_template_files(opts)) { const std::string& file_path = (opts.package_name / name).string(); @@ -144,6 +142,7 @@ namespace poac::cmd::_new { ); git2::repository().init(opts.package_name); + using termcolor2::color_literals::operator""_green; PLOG_INFO << fmt::format( "{:>21}{} `{}` package", "Created "_green, From c459260dfa56c843c2d654278332185315f35557 Mon Sep 17 00:00:00 2001 From: Ken Matsui <26405363+ken-matsui@users.noreply.github.com> Date: Wed, 6 Jan 2021 20:51:48 +0900 Subject: [PATCH 4/6] Create _bold_green user-defined literal --- include/poac/cmd/init.hpp | 7 ++-- include/poac/cmd/new.hpp | 7 ++-- include/poac/core/resolver.hpp | 9 ++--- .../poac/util/termcolor2/literals_extra.hpp | 35 +++++++++++++++++++ 4 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 include/poac/util/termcolor2/literals_extra.hpp diff --git a/include/poac/cmd/init.hpp b/include/poac/cmd/init.hpp index 3f5ef556c..db4e5361b 100644 --- a/include/poac/cmd/init.hpp +++ b/include/poac/cmd/init.hpp @@ -16,6 +16,7 @@ #include #include #include +#include namespace poac::cmd::init { struct Options { @@ -35,10 +36,10 @@ namespace poac::cmd::init { break; } - using termcolor2::color_literals::operator""_green; + using termcolor2::color_literals::operator""_bold_green; PLOG_INFO << fmt::format( - "{:>21}{} `{}` package", - "Created "_green, + "{:>30}{} `{}` package", + "Created "_bold_green, opts.type, package_name ); diff --git a/include/poac/cmd/new.hpp b/include/poac/cmd/new.hpp index cd0847ecb..6ed393c08 100644 --- a/include/poac/cmd/new.hpp +++ b/include/poac/cmd/new.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include namespace poac::cmd::_new { @@ -142,10 +143,10 @@ namespace poac::cmd::_new { ); git2::repository().init(opts.package_name); - using termcolor2::color_literals::operator""_green; + using termcolor2::color_literals::operator""_bold_green; PLOG_INFO << fmt::format( - "{:>21}{} `{}` package", - "Created "_green, + "{:>30}{} `{}` package", + "Created "_bold_green, opts.type, opts.package_name ); diff --git a/include/poac/core/resolver.hpp b/include/poac/core/resolver.hpp index 08267dff0..93c54175b 100644 --- a/include/poac/core/resolver.hpp +++ b/include/poac/core/resolver.hpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -111,9 +112,9 @@ namespace poac::core::resolver { MITAMA_TRY(util::archive::extract(installed_path, config::path::extract_dir)); MITAMA_TRY(rename_extracted_directory(package, extracted_directory_name)); - using termcolor2::color_literals::operator""_green; + using termcolor2::color_literals::operator""_bold_green; PLOG_INFO << fmt::format( - "{:>21} {} v{}", "Downloaded"_green, + "{:>30} {} v{}", "Downloaded"_bold_green, resolve::get_name(package), resolve::get_version(package) ); @@ -156,8 +157,8 @@ namespace poac::core::resolver { return mitama::success(); } - using termcolor2::color_literals::operator""_green; - PLOG_INFO << fmt::format("{:>21} packages ...", "Downloading"_green); + using termcolor2::color_literals::operator""_bold_green; + PLOG_INFO << fmt::format("{:>30} packages ...", "Downloading"_bold_green); try { std::filesystem::create_directories(config::path::cache_dir); } catch (...) { diff --git a/include/poac/util/termcolor2/literals_extra.hpp b/include/poac/util/termcolor2/literals_extra.hpp new file mode 100644 index 000000000..497d83e8e --- /dev/null +++ b/include/poac/util/termcolor2/literals_extra.hpp @@ -0,0 +1,35 @@ +#ifndef TERMCOLOR2_LITERALS_EXTRA_HPP +#define TERMCOLOR2_LITERALS_EXTRA_HPP + +#include // std::size_t +#include // std::basic_string +#include + +namespace termcolor2 { + inline namespace color_literals { + inline namespace foreground_literals { + inline std::basic_string + operator "" _bold_green(const char* str, std::size_t len) noexcept + { + return to_bold(to_green(str, len)); + } + inline std::basic_string + operator "" _bold_green(const wchar_t* str, std::size_t len) noexcept + { + return to_bold(to_green(str, len)); + } + inline std::basic_string + operator "" _bold_green(const char16_t* str, std::size_t len) noexcept + { + return to_bold(to_green(str, len)); + } + inline std::basic_string + operator "" _bold_green(const char32_t* str, std::size_t len) noexcept + { + return to_bold(to_green(str, len)); + } + } // end namespace foreground_literals + } // end namespace color_literals +} // end namespace termcolor2 + +#endif // !TERMCOLOR2_LITERALS_EXTRA_HPP From be16bf5bf1bdb4154b285fddb102ba8aaa6caa37 Mon Sep 17 00:00:00 2001 From: Ken Matsui <26405363+ken-matsui@users.noreply.github.com> Date: Wed, 6 Jan 2021 21:03:37 +0900 Subject: [PATCH 5/6] Refactor termcolor2/literals_extra.hpp --- include/poac/cmd/init.hpp | 4 ++-- include/poac/cmd/new.hpp | 4 ++-- include/poac/core/resolver.hpp | 4 ++-- .../poac/util/termcolor2/literals_extra.hpp | 22 ++++++++++++++----- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/include/poac/cmd/init.hpp b/include/poac/cmd/init.hpp index db4e5361b..0823c7565 100644 --- a/include/poac/cmd/init.hpp +++ b/include/poac/cmd/init.hpp @@ -38,8 +38,8 @@ namespace poac::cmd::init { using termcolor2::color_literals::operator""_bold_green; PLOG_INFO << fmt::format( - "{:>30}{} `{}` package", - "Created "_bold_green, + "{:>25} {} `{}` package", + "Created"_bold_green, opts.type, package_name ); diff --git a/include/poac/cmd/new.hpp b/include/poac/cmd/new.hpp index 6ed393c08..415997a3c 100644 --- a/include/poac/cmd/new.hpp +++ b/include/poac/cmd/new.hpp @@ -145,8 +145,8 @@ namespace poac::cmd::_new { using termcolor2::color_literals::operator""_bold_green; PLOG_INFO << fmt::format( - "{:>30}{} `{}` package", - "Created "_bold_green, + "{:>25} {} `{}` package", + "Created"_bold_green, opts.type, opts.package_name ); diff --git a/include/poac/core/resolver.hpp b/include/poac/core/resolver.hpp index 93c54175b..caca07e58 100644 --- a/include/poac/core/resolver.hpp +++ b/include/poac/core/resolver.hpp @@ -114,7 +114,7 @@ namespace poac::core::resolver { using termcolor2::color_literals::operator""_bold_green; PLOG_INFO << fmt::format( - "{:>30} {} v{}", "Downloaded"_bold_green, + "{:>25} {} v{}", "Downloaded"_bold_green, resolve::get_name(package), resolve::get_version(package) ); @@ -158,7 +158,7 @@ namespace poac::core::resolver { } using termcolor2::color_literals::operator""_bold_green; - PLOG_INFO << fmt::format("{:>30} packages ...", "Downloading"_bold_green); + PLOG_INFO << fmt::format("{:>25} packages ...", "Downloading"_bold_green); try { std::filesystem::create_directories(config::path::cache_dir); } catch (...) { diff --git a/include/poac/util/termcolor2/literals_extra.hpp b/include/poac/util/termcolor2/literals_extra.hpp index 497d83e8e..84351de6f 100644 --- a/include/poac/util/termcolor2/literals_extra.hpp +++ b/include/poac/util/termcolor2/literals_extra.hpp @@ -3,7 +3,7 @@ #include // std::size_t #include // std::basic_string -#include +#include namespace termcolor2 { inline namespace color_literals { @@ -11,22 +11,34 @@ namespace termcolor2 { inline std::basic_string operator "" _bold_green(const char* str, std::size_t len) noexcept { - return to_bold(to_green(str, len)); + return bold_v().to_string() + + green_v().to_string() + + std::basic_string(str, len) + + reset_v().to_string(); } inline std::basic_string operator "" _bold_green(const wchar_t* str, std::size_t len) noexcept { - return to_bold(to_green(str, len)); + return bold_v().to_string() + + green_v().to_string() + + std::basic_string(str, len) + + reset_v().to_string(); } inline std::basic_string operator "" _bold_green(const char16_t* str, std::size_t len) noexcept { - return to_bold(to_green(str, len)); + return bold_v().to_string() + + green_v().to_string() + + std::basic_string(str, len) + + reset_v().to_string(); } inline std::basic_string operator "" _bold_green(const char32_t* str, std::size_t len) noexcept { - return to_bold(to_green(str, len)); + return bold_v().to_string() + + green_v().to_string() + + std::basic_string(str, len) + + reset_v().to_string(); } } // end namespace foreground_literals } // end namespace color_literals From 337d32b4d3c1afc53027b8148c14b2e060203421 Mon Sep 17 00:00:00 2001 From: Ken Matsui <26405363+ken-matsui@users.noreply.github.com> Date: Wed, 6 Jan 2021 21:42:24 +0900 Subject: [PATCH 6/6] Remove macos-11.0 because it is broken frequently --- .github/workflows/macos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index d9c839479..83526e36a 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ macos-10.15, macos-11.0 ] + os: [ macos-10.15 ] # macos-11.0 build_type: [ Debug, Release ] env: CACHE_KEY_PREFIX: ${{ matrix.os }}-${{ matrix.build_type }}