]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cmake/modules/GetGitRevisionDescription: update to work with git-worktree 30772/head
authorSage Weil <sage@redhat.com>
Mon, 7 Oct 2019 19:20:45 +0000 (14:20 -0500)
committerSage Weil <sage@redhat.com>
Mon, 7 Oct 2019 19:26:07 +0000 (14:26 -0500)
Found this here: https://phabricator.kde.org/D9172

Signed-off-by: Sage Weil <sage@redhat.com>
cmake/modules/GetGitRevisionDescription.cmake
cmake/modules/GetGitRevisionDescription.cmake.in

index 85eae1562fe2011e9800787819b21f30a8898eb4..40a42015a7d3e4cb66424abe039646e778439a90 100644 (file)
@@ -53,12 +53,16 @@ function(get_git_head_revision _refspecvar _hashvar)
                endif()
                set(GIT_DIR "${GIT_PARENT_DIR}/.git")
        endwhile()
-       # check if this is a submodule
+       # check if this is a submodule or git-worktree
        if(NOT IS_DIRECTORY ${GIT_DIR})
-               file(READ ${GIT_DIR} submodule)
-               string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
-               get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
-               get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
+               file(READ ${GIT_DIR} gitdirfile)
+               string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_PATH ${gitdirfile})
+               if(IS_ABSOLUTE ${GIT_DIR_PATH})
+                       get_filename_component(GIT_DIR ${GIT_DIR_PATH} ABSOLUTE)
+               else()
+                       get_filename_component(LINKED_DIR ${GIT_DIR} PATH)
+                       get_filename_component(GIT_DIR ${LINKED_DIR}/${GIT_DIR_PATH} ABSOLUTE)
+               endif()
        endif()
        set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
        if(NOT EXISTS "${GIT_DATA}")
index 6d8b708efe56a66852752a7a30ec5c16b51cdc9e..41cf7ed5fa9a6899bbcb5ae7c2977e661bdad68d 100644 (file)
@@ -18,21 +18,30 @@ set(HEAD_HASH)
 file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
 
 string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
+set(GIT_DIR "@GIT_DIR@")
+# handle git-worktree
+if(EXISTS "${GIT_DIR}/commondir")
+       file(READ "${GIT_DIR}/commondir" GIT_DIR_NEW LIMIT 1024)
+       string(STRIP "${GIT_DIR_NEW}" GIT_DIR_NEW)
+       if(NOT IS_ABSOLUTE "${GIT_DIR_NEW}")
+               get_filename_component(GIT_DIR_NEW ${GIT_DIR}/${GIT_DIR_NEW} ABSOLUTE)
+       endif()
+       if(EXISTS "${GIT_DIR_NEW}")
+               set(GIT_DIR "${GIT_DIR_NEW}")
+       endif()
+endif()
 if(HEAD_CONTENTS MATCHES "ref")
        # named branch
        string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
-       if(EXISTS "@GIT_DIR@/${HEAD_REF}")
-               configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
-       else()
-               configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
-               file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
-               if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
-                       set(HEAD_HASH "${CMAKE_MATCH_1}")
-               endif()
+       if(EXISTS "${GIT_DIR}/${HEAD_REF}")
+               configure_file("${GIT_DIR}/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+       elseif(EXISTS "${GIT_DIR}/logs/${HEAD_REF}")
+               configure_file("${GIT_DIR}/logs/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+               set(HEAD_HASH "${HEAD_REF}")
        endif()
 else()
        # detached HEAD
-       configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
+       configure_file("${GIT_DIR}/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
 endif()
 
 if(NOT HEAD_HASH)