From fe17f276dd52838cc6a283dc2b06f57c1fd5076f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Tue, 27 Mar 2018 01:35:53 +0200 Subject: [PATCH] Seems finally to have fixed git info --- cmake/GetPastisGitRevision.cmake | 47 ++++++++++++++++++++++++++++---- utils/RevisionInfo.cpp | 26 ++++++++++++++++++ utils/RevisionInfo.hpp | 2 ++ utils/pastis_git_revision.hpp.in | 2 ++ 4 files changed, 71 insertions(+), 6 deletions(-) diff --git a/cmake/GetPastisGitRevision.cmake b/cmake/GetPastisGitRevision.cmake index 6fe87b3eb..39396dca1 100644 --- a/cmake/GetPastisGitRevision.cmake +++ b/cmake/GetPastisGitRevision.cmake @@ -3,14 +3,49 @@ list(APPEND CMAKE_MODULE_PATH "${PASTIS_SOURCE_DIR}/cmake/cmake-modules") include(GetGitRevisionDescription) -git_describe(PASTIS_GIT_TAG "--abbrev=0") -get_git_head_revision(PASTIS_GIT_HEAD PASTIS_GIT_HASH) -git_local_changes(PASTIS_GIT_HAS_LOCAL_CHANGES) +set(HAS_PASTIS_GIT_INFO "TRUE") -if(${PASTIS_GIT_HAS_LOCAL_CHANGES} STREQUAL "CLEAN") - set(PASTIS_GIT_IS_CLEAN true) +find_package(Git QUIET) + +if(GIT_FOUND) + execute_process( + COMMAND "${GIT_EXECUTABLE}" describe "--abbrev=0" + WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}" + OUTPUT_VARIABLE PASTIS_GIT_TAG + RESULT_VARIABLE FOUND_PASTIS_GIT_INFO + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(FOUND_PASTIS_GIT_INFO EQUAL 0) + execute_process( + COMMAND "${GIT_EXECUTABLE}" reflog -1 "--format=%H" + WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}" + OUTPUT_VARIABLE PASTIS_GIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process( + COMMAND "${GIT_EXECUTABLE}" symbolic-ref HEAD + WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}" + OUTPUT_VARIABLE PASTIS_GIT_HEAD + OUTPUT_STRIP_TRAILING_WHITESPACE) + + execute_process( + COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD + WORKING_DIRECTORY "${PASTIS_SOURCE_DIR}" + RESULT_VARIABLE STATE + OUTPUT_STRIP_TRAILING_WHITESPACE) + + if(STATE EQUAL 0) + set(PASTIS_GIT_HAS_LOCAL_CHANGES "CLEAN") + set(PASTIS_GIT_IS_CLEAN true) + else() + set(PASTIS_GIT_IS_CLEAN false) + set(PASTIS_GIT_HAS_LOCAL_CHANGES "DIRTY") + endif() + else() + unset(HAS_PASTIS_GIT_INFO) + endif() else() - set(PASTIS_GIT_IS_CLEAN false) + unset(HAS_PASTIS_GIT_INFO) endif() string(FIND "${PASTIS_GIT_TAG}" "${CMAKE_PASTIS_VERSION}" FOUND_VERSION_SUBSTR) diff --git a/utils/RevisionInfo.cpp b/utils/RevisionInfo.cpp index fd1bbc59f..f508dec33 100644 --- a/utils/RevisionInfo.cpp +++ b/utils/RevisionInfo.cpp @@ -7,22 +7,48 @@ std::string RevisionInfo::version() return PASTIS_VERSION; } +bool RevisionInfo::hasGitInfo() +{ +#ifdef HAS_PASTIS_GIT_INFO + return true; +#else + return false; +#endif +} + std::string RevisionInfo::gitTag() { +#ifdef HAS_PASTIS_GIT_INFO return PASTIS_GIT_TAG; +#else + return "unknown tag"; +#endif } std::string RevisionInfo::gitHead() { +#ifdef HAS_PASTIS_GIT_INFO return PASTIS_GIT_HEAD; +#else + return "unknown head"; +#endif } std::string RevisionInfo::gitHash() { +#ifdef HAS_PASTIS_GIT_INFO return PASTIS_GIT_HASH; +#else + return "unknown hash"; +#endif } bool RevisionInfo::gitIsClean() { +#ifdef HAS_PASTIS_GIT_INFO return PASTIS_GIT_IS_CLEAN; +#else + return false; +#endif } + diff --git a/utils/RevisionInfo.hpp b/utils/RevisionInfo.hpp index b0d547bd6..bff12f201 100644 --- a/utils/RevisionInfo.hpp +++ b/utils/RevisionInfo.hpp @@ -6,6 +6,8 @@ struct RevisionInfo { static std::string version(); + + static bool hasGitInfo(); static std::string gitTag(); static std::string gitHead(); static std::string gitHash(); diff --git a/utils/pastis_git_revision.hpp.in b/utils/pastis_git_revision.hpp.in index fe0b3e6df..89f7c62f0 100644 --- a/utils/pastis_git_revision.hpp.in +++ b/utils/pastis_git_revision.hpp.in @@ -1,6 +1,8 @@ #ifndef PASTIS_GIT_REVISION_HPP #define PASTIS_GIT_REVISION_HPP +#cmakedefine HAS_PASTIS_GIT_INFO + #define PASTIS_GIT_TAG "@PASTIS_GIT_TAG@" #define PASTIS_GIT_HEAD "@PASTIS_GIT_HEAD@" #define PASTIS_GIT_HASH "@PASTIS_GIT_HASH@" -- GitLab