From e8d66ef9832c2dbbd7d52a161b8461015118824d Mon Sep 17 00:00:00 2001 From: Lion Kortlepel Date: Sat, 5 Nov 2022 21:49:21 +0100 Subject: [PATCH] add git hash to version print on startup this helps us debug issues --- CMakeLists.txt | 20 +++++++++++++++++++- src/ArgsParser.cpp | 12 ++++++------ src/TConsole.cpp | 1 - src/TServer.cpp | 2 +- src/main.cpp | 7 ++++--- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c1fa34..7769e0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,24 @@ cmake_minimum_required(VERSION 3.4 FATAL_ERROR) message(STATUS "You can find build instructions and a list of dependencies in the README at \ https://github.com/BeamMP/BeamMP-Server") +include(FetchContent) +FetchContent_Declare( + cmake-tools + GIT_REPOSITORY https://github.com/brobeson/cmake-tools.git + GIT_TAG main +) +FetchContent_MakeAvailable(cmake-tools) +list(APPEND CMAKE_MODULE_PATH "${cmake-tools_SOURCE_DIR}") + +include(CMakeToolsVersionFromGit) + +execute_process( + COMMAND git log -1 --format=%h + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} + OUTPUT_VARIABLE GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + project(BeamMP-Server DESCRIPTION "Server for BeamMP - The Multiplayer Mod for BeamNG.drive" HOMEPAGE_URL https://beammp.com @@ -25,7 +43,6 @@ if(GIT_SUBMODULE) endif() endif() - set(HTTPLIB_REQUIRE_OPENSSL ON) set(SENTRY_BUILD_SHARED_LIBS OFF) @@ -139,6 +156,7 @@ set(BeamMP_Includes set(BeamMP_Definitions SECRET_SENTRY_URL="${BEAMMP_SECRET_SENTRY_URL}" + BEAMMP_GIT_HASH="${GIT_HASH}" ) if (WIN32) diff --git a/src/ArgsParser.cpp b/src/ArgsParser.cpp index f0d6257..c5e19d7 100644 --- a/src/ArgsParser.cpp +++ b/src/ArgsParser.cpp @@ -13,7 +13,7 @@ void ArgsParser::Parse(const std::vector& ArgList) { ConsumeLongFlag(std::string(Arg)); } } else { - beammp_errorf("Error parsing commandline arguments: Supplied argument '{}' is not a valid argument and was ignored.", Arg); + fmt::print(stderr, "Error parsing commandline arguments: Supplied argument '{}' is not a valid argument and was ignored.", Arg); } } } @@ -22,17 +22,17 @@ bool ArgsParser::Verify() { bool Ok = true; for (const auto& RegisteredArg : mRegisteredArguments) { if (RegisteredArg.Flags & Flags::REQUIRED && !FoundArgument(RegisteredArg.Names)) { - beammp_errorf("Error in commandline arguments: Argument '{}' is required but wasn't found.", RegisteredArg.Names.at(0)); + fmt::print(stderr, "Error in commandline arguments: Argument '{}' is required but wasn't found.", RegisteredArg.Names.at(0)); Ok = false; continue; } else if (FoundArgument(RegisteredArg.Names)) { if (RegisteredArg.Flags & Flags::HAS_VALUE) { if (!GetValueOfArgument(RegisteredArg.Names).has_value()) { - beammp_error("Error in commandline arguments: Argument '" + std::string(RegisteredArg.Names.at(0)) + "' expects a value, but no value was given."); + fmt::print(stderr, "Error in commandline arguments: Argument '" + std::string(RegisteredArg.Names.at(0)) + "' expects a value, but no value was given."); Ok = false; } } else if (GetValueOfArgument(RegisteredArg.Names).has_value()) { - beammp_error("Error in commandline arguments: Argument '" + std::string(RegisteredArg.Names.at(0)) + "' does not expect a value, but one was given."); + fmt::print(stderr, "Error in commandline arguments: Argument '" + std::string(RegisteredArg.Names.at(0)) + "' does not expect a value, but one was given."); Ok = false; } } @@ -81,7 +81,7 @@ void ArgsParser::ConsumeLongAssignment(const std::string& Arg) { auto Value = Arg.substr(Arg.rfind("=") + 1); auto Name = Arg.substr(2, Arg.rfind("=") - 2); if (!IsRegistered(Name)) { - beammp_warn("Argument '" + Name + "' was supplied but isn't a known argument, so it is likely being ignored."); + fmt::print(stdout, "Argument '" + Name + "' was supplied but isn't a known argument, so it is likely being ignored."); } mFoundArgs.push_back({ Name, Value }); } @@ -90,7 +90,7 @@ void ArgsParser::ConsumeLongFlag(const std::string& Arg) { auto Name = Arg.substr(2, Arg.rfind("=") - 2); mFoundArgs.push_back({ Name, std::nullopt }); if (!IsRegistered(Name)) { - beammp_warn("Argument '" + Name + "' was supplied but isn't a known argument, so it is likely being ignored."); + fmt::print(stdout, "Argument '" + Name + "' was supplied but isn't a known argument, so it is likely being ignored."); } } diff --git a/src/TConsole.cpp b/src/TConsole.cpp index 6affb24..c41a635 100644 --- a/src/TConsole.cpp +++ b/src/TConsole.cpp @@ -751,7 +751,6 @@ Commands TConsole::TConsole() { mCommandline.enable_history(); mCommandline.set_history_limit(20); - mCommandline.set_prompt("> "); BackupOldLog(); mCommandline.on_command = [this](Commandline& c) { try { diff --git a/src/TServer.cpp b/src/TServer.cpp index 90e19ca..655eeb8 100644 --- a/src/TServer.cpp +++ b/src/TServer.cpp @@ -78,7 +78,7 @@ TEST_CASE("GetPidVid") { } TServer::TServer(const std::vector& Arguments) { - beammp_info("BeamMP Server v" + Application::ServerVersionString()); + beammp_infof("BeamMP Server v{} ({})", Application::ServerVersionString(), BEAMMP_GIT_HASH); Application::SetSubsystemStatus("Server", Application::Status::Starting); if (Arguments.size() > 1) { Application::SetSetting(StrCustomIP, std::string(Arguments[0])); diff --git a/src/main.cpp b/src/main.cpp index d6cf93e..bd6c55a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -73,6 +73,7 @@ int main(int argc, char** argv) { int BeamMPServerMain(MainArguments Arguments) { setlocale(LC_ALL, "C"); Application::InitializeConsole(); + Application::Console().Internal().set_prompt(""); ArgsParser Parser; Parser.RegisterArgument({ "help" }, ArgsParser::NONE); Parser.RegisterArgument({ "version" }, ArgsParser::NONE); @@ -83,13 +84,11 @@ int BeamMPServerMain(MainArguments Arguments) { return 1; } if (Parser.FoundArgument({ "help" })) { - Application::Console().Internal().set_prompt(""); Application::Console().WriteRaw(sCommandlineArguments); return 0; } if (Parser.FoundArgument({ "version" })) { - Application::Console().Internal().set_prompt(""); - Application::Console().WriteRaw("BeamMP-Server v" + Application::ServerVersionString()); + Application::Console().WriteRaw(fmt::format("BeamMP Server v{} ({})", Application::ServerVersionString(), BEAMMP_GIT_HASH)); return 0; } @@ -112,6 +111,8 @@ int BeamMPServerMain(MainArguments Arguments) { } } } + + Application::Console().Internal().set_prompt("> "); Application::SetSubsystemStatus("Main", Application::Status::Starting);