Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

144 строки
4.0 KiB

  1. # Execute git command and return the output
  2. Function ( GitExecute GIT_ROOT COMMAND FORCE OUT_RESULT OUT_SUCCESS )
  3. Set ( ${OUT_SUCCESS} 1 PARENT_SCOPE )
  4. Execute_Process ( COMMAND
  5. bash -c "${COMMAND}"
  6. WORKING_DIRECTORY
  7. "${GIT_ROOT}"
  8. RESULT_VARIABLE
  9. GIT_RET
  10. OUTPUT_VARIABLE
  11. GIT_REV
  12. ERROR_VARIABLE
  13. GIT_ERR )
  14. If ( NOT ${GIT_RET} EQUAL 0
  15. OR NOT "${GIT_ERR}" STREQUAL "" )
  16. If ( FORCE )
  17. Message ( FATAL_ERROR "Unable to execute git command (command=${COMMAND} out=${GIT_REV}; err=${GIT_ERR}; ret=${GIT_RET})" )
  18. Else ( )
  19. Set ( ${OUT_SUCCESS} 0 PARENT_SCOPE )
  20. EndIf ( )
  21. EndIf ( )
  22. Set ( ${OUT_RESULT} "${GIT_REV}" PARENT_SCOPE )
  23. EndFunction ( )
  24. # Get the version by reading the git tag
  25. Function ( GitGetVersion GIT_ROOT OUT_MAJOR OUT_MINOR OUT_PATCH OUT_BUILD OUT_HASH OUT_BEHIND OUT_DIRTY )
  26. If ( NOT EXISTS "${GIT_ROOT}/.git" )
  27. Message ( FATAL_ERROR "${GIT_ROOT} is not a git directory" )
  28. EndIf ( )
  29. # Hash
  30. GitExecute ( "${GIT_ROOT}" "git rev-parse HEAD" True HASH SUCCESS )
  31. If ( NOT ${SUCCESS} )
  32. Return ( )
  33. EndIf ( )
  34. String ( STRIP "${HASH}" HASH )
  35. Set ( ${OUT_HASH} ${HASH} PARENT_SCOPE )
  36. # Dirty
  37. GitExecute ( "${GIT_ROOT}" "git status -s -uall" True DIRTY SUCCESS )
  38. If ( NOT ${SUCCESS} )
  39. Return ( )
  40. EndIf ( )
  41. If ( DIRTY )
  42. Set ( ${OUT_DIRTY} 1 PARENT_SCOPE )
  43. Else ( )
  44. Set ( ${OUT_DIRTY} 0 PARENT_SCOPE )
  45. EndIf ( )
  46. # Version
  47. GitExecute ( "${GIT_ROOT}" "git describe --tags --abbrev=1 --match v[0-9].[0-9]* HEAD" False TAG SUCCESS )
  48. If ( NOT ${SUCCESS} )
  49. Return ( )
  50. EndIf ( )
  51. # Split the git revision string
  52. String ( REGEX REPLACE "^v" "" TAG "${TAG}" )
  53. String ( REPLACE "-" ";" SPLIT "${TAG}" )
  54. List ( LENGTH SPLIT COUNT )
  55. If ( ${COUNT} LESS 1 )
  56. Message ( FATAL_ERROR "Unable to split git tag into it's sub components: ${TAG}!" )
  57. EndIf ( )
  58. List ( GET SPLIT 0 VERSION )
  59. If ( ${COUNT} GREATER 1 )
  60. List ( GET SPLIT 1 BEHIND )
  61. Else ( )
  62. Set ( BEHIND 0 )
  63. EndIf ( )
  64. # Split the version
  65. String ( STRIP "${VERSION}" SPLIT )
  66. String ( REPLACE "." ";" SPLIT "${SPLIT}" )
  67. List ( LENGTH SPLIT COUNT )
  68. If ( ${COUNT} LESS 2 )
  69. Message ( FATAL_ERROR "Unable to split version string: ${VERSION}!" )
  70. EndIf ( )
  71. # major
  72. List ( GET SPLIT 0 TMP )
  73. Set ( ${OUT_MAJOR} ${TMP} PARENT_SCOPE )
  74. # minor
  75. List ( GET SPLIT 1 TMP )
  76. Set ( ${OUT_MINOR} ${TMP} PARENT_SCOPE )
  77. # patch
  78. If ( ${COUNT} GREATER 2 )
  79. List ( GET SPLIT 2 TMP )
  80. Set ( ${OUT_PATCH} ${TMP} PARENT_SCOPE )
  81. EndIf ( )
  82. # build
  83. If ( ${COUNT} GREATER 3 )
  84. List ( GET SPLIT 3 TMP )
  85. Set ( ${OUT_BUILD} ${TMP} PARENT_SCOPE )
  86. EndIf ( )
  87. # behind
  88. Set ( ${OUT_BEHIND} ${BEHIND} PARENT_SCOPE )
  89. EndFunction ( )
  90. # Get the git hash og the current commit
  91. Function ( GitGetHash GIT_ROOT OUT_HASH )
  92. If ( NOT EXISTS "${GIT_ROOT}/.git" )
  93. Message ( FATAL_ERROR "${GIT_ROOT} is not a git directory" )
  94. EndIf ( )
  95. GitExecute ( "${GIT_ROOT}" "git rev-parse HEAD" True HASH SUCCESS )
  96. If ( NOT ${SUCCESS} )
  97. Return ( )
  98. EndIf ( )
  99. # hash
  100. String ( STRIP "${HASH}" HASH )
  101. Set ( ${OUT_HASH} ${HASH} PARENT_SCOPE )
  102. EndFunction ( )
  103. # Checks if the given git repository has uncommitted changes
  104. Function ( GitGetIsDirty GIT_ROOT OUT_DIRTY )
  105. If ( NOT EXISTS "${GIT_ROOT}/.git" )
  106. Message ( FATAL_ERROR "${GIT_ROOT} is not a git directory" )
  107. EndIf ( )
  108. GitExecute ( "${GIT_ROOT}" "git status -s -uall" True DIRTY SUCCESS )
  109. If ( NOT ${SUCCESS} )
  110. Return ( )
  111. EndIf ( )
  112. # dirty
  113. If ( DIRTY )
  114. Set ( ${OUT_DIRTY} 1 PARENT_SCOPE )
  115. Else ( )
  116. Set ( ${OUT_DIRTY} 0 PARENT_SCOPE )
  117. EndIf ( )
  118. EndFunction ( )