modocache updated this revision to Diff 105673.
modocache added a comment.

Use submodule's .git directory.


https://reviews.llvm.org/D34955

Files:
  lib/Basic/CMakeLists.txt


Index: lib/Basic/CMakeLists.txt
===================================================================
--- lib/Basic/CMakeLists.txt
+++ lib/Basic/CMakeLists.txt
@@ -15,8 +15,25 @@
 endfunction()
 
 macro(find_first_existing_vc_file out_var path)
+  set(git_path "${path}/.git")
+
+  # Normally '.git' is a directory that contains a 'logs/HEAD' file that
+  # is updated as modifications are made to the repository. In case the
+  # repository is a Git submodule, '.git' is a file that contains text that
+  # indicates where the repository's Git directory exists.
+  if (EXISTS "${git_path}" AND NOT IS_DIRECTORY "${git_path}")
+    FILE(READ "${git_path}" file_contents)
+    STRING(REGEX REPLACE "\n" "" file_contents "${file_contents}")
+    if ("${file_contents}" MATCHES "^gitdir:")
+      # '.git' is indeed a link to the submodule's Git directory.
+      # Use the path to that Git directory.
+      STRING(REGEX REPLACE "gitdir: " "" file_contents ${file_contents})
+      set(git_path "${git_path}${file_contents}")
+    endif()
+  endif()
+
   find_first_existing_file(${out_var}
-    "${path}/.git/logs/HEAD" # Git
+    "${git_path}/logs/HEAD"  # Git or Git submodule
     "${path}/.svn/wc.db"     # SVN 1.7
     "${path}/.svn/entries"   # SVN 1.6
     )


Index: lib/Basic/CMakeLists.txt
===================================================================
--- lib/Basic/CMakeLists.txt
+++ lib/Basic/CMakeLists.txt
@@ -15,8 +15,25 @@
 endfunction()
 
 macro(find_first_existing_vc_file out_var path)
+  set(git_path "${path}/.git")
+
+  # Normally '.git' is a directory that contains a 'logs/HEAD' file that
+  # is updated as modifications are made to the repository. In case the
+  # repository is a Git submodule, '.git' is a file that contains text that
+  # indicates where the repository's Git directory exists.
+  if (EXISTS "${git_path}" AND NOT IS_DIRECTORY "${git_path}")
+    FILE(READ "${git_path}" file_contents)
+    STRING(REGEX REPLACE "\n" "" file_contents "${file_contents}")
+    if ("${file_contents}" MATCHES "^gitdir:")
+      # '.git' is indeed a link to the submodule's Git directory.
+      # Use the path to that Git directory.
+      STRING(REGEX REPLACE "gitdir: " "" file_contents ${file_contents})
+      set(git_path "${git_path}${file_contents}")
+    endif()
+  endif()
+
   find_first_existing_file(${out_var}
-    "${path}/.git/logs/HEAD" # Git
+    "${git_path}/logs/HEAD"  # Git or Git submodule
     "${path}/.svn/wc.db"     # SVN 1.7
     "${path}/.svn/entries"   # SVN 1.6
     )
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to