diff options
-rw-r--r-- | CMakeLists.txt | 7 | ||||
-rw-r--r-- | cmake/GetGitRevisionDescription.cmake | 29 | ||||
-rw-r--r-- | config/config.h.in | 1 | ||||
-rw-r--r-- | src/nvim/version.c | 6 | ||||
-rw-r--r-- | src/nvim/version_defs.h | 4 |
5 files changed, 41 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index fa79c9f91c..8fab8d52e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,14 +12,17 @@ set(DEPS_BIN_DIR "${DEPS_INSTALL_DIR}/bin") list(APPEND CMAKE_PREFIX_PATH ${DEPS_INSTALL_DIR}) +# Version tokens include(GetGitRevisionDescription) -get_git_head_revision(GIT_REFSPEC GIT_SHA1) +get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT) set(NVIM_VERSION_MAJOR 0) set(NVIM_VERSION_MINOR 0) set(NVIM_VERSION_PATCH 0) set(NVIM_VERSION_PRERELEASE "-alpha") +# TODO(justinmk): UTC time would be nice here #1071 +git_timestamp(GIT_TIMESTAMP) # TODO(justinmk): do not set this for "release" builds #1071 -set(NVIM_VERSION_BUILD "+${GIT_SHA1}") +set(NVIM_VERSION_BUILD "+${GIT_TIMESTAMP}") set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake index d77c89eda9..42775057f1 100644 --- a/cmake/GetGitRevisionDescription.cmake +++ b/cmake/GetGitRevisionDescription.cmake @@ -126,6 +126,35 @@ function(git_describe _var) set(${_var} "${out}" PARENT_SCOPE) endfunction() +function(git_timestamp _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + get_git_head_revision(refspec hash) + if(NOT GIT_FOUND) + set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) + return() + endif() + if(NOT hash) + set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) + return() + endif() + + execute_process(COMMAND "${GIT_EXECUTABLE}" log -1 --format="%ci" ${hash} ${ARGN} + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE res + OUTPUT_VARIABLE out + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT res EQUAL 0) + set(out "${out}-${res}-NOTFOUND") + endif() + string(REGEX REPLACE "[-\" :]" "" out ${out}) + string(SUBSTRING ${out} 0 12 out) + + set(${_var} ${out} PARENT_SCOPE) +endfunction() + function(git_get_exact_tag _var) git_describe(out --exact-match ${ARGN}) set(${_var} "${out}" PARENT_SCOPE) diff --git a/config/config.h.in b/config/config.h.in index 95d5326ad6..7a04837c92 100644 --- a/config/config.h.in +++ b/config/config.h.in @@ -3,6 +3,7 @@ #define NVIM_VERSION_PATCH @NVIM_VERSION_PATCH@ #define NVIM_VERSION_PRERELEASE "@NVIM_VERSION_PRERELEASE@" #define NVIM_VERSION_BUILD "@NVIM_VERSION_BUILD@" +#define NVIM_VERSION_COMMIT "@NVIM_VERSION_COMMIT@" #cmakedefine DEBUG diff --git a/src/nvim/version.c b/src/nvim/version.c index 0af28fcdca..a79ef47e7e 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -18,9 +18,8 @@ #include "nvim/version_defs.h" char *Version = VIM_VERSION_SHORT; - -char *longVersion = NVIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")"; - +char *longVersion = NVIM_VERSION_LONG " (compiled " __DATE__ " " __TIME__ ")"; +char *version_commit = "Commit: " NVIM_VERSION_COMMIT; #ifdef INCLUDE_GENERATED_DECLARATIONS # include "version.c.generated.h" @@ -747,6 +746,7 @@ void list_version(void) // When adding features here, don't forget to update the list of // internal variables in eval.c! MSG(longVersion); + MSG(version_commit); // Print the list of extra patch descriptions if there is at least one. char *s = ""; diff --git a/src/nvim/version_defs.h b/src/nvim/version_defs.h index 9257580dac..d8e1b4ea82 100644 --- a/src/nvim/version_defs.h +++ b/src/nvim/version_defs.h @@ -27,11 +27,13 @@ #ifndef NVIM_VERSION_BUILD #define NVIM_VERSION_BUILD #endif +#ifndef NVIM_VERSION_COMMIT +#define NVIM_VERSION_COMMIT +#endif // for the startup-screen #define NVIM_VERSION_MEDIUM STR(NVIM_VERSION_MAJOR) "." STR(NVIM_VERSION_MINOR) // for the ":version" command and "nvim -h" #define NVIM_VERSION_LONG "NVIM " NVIM_VERSION_MEDIUM "." STR(NVIM_VERSION_PATCH) NVIM_VERSION_PRERELEASE NVIM_VERSION_BUILD -#define NVIM_VERSION_LONG_DATE NVIM_VERSION_LONG " (compiled " // // Vim version number, name, etc. Patchlevel is defined in version.c. |