Skip to content

Commit 3160f4c

Browse files
committed
Fix build git version tags
Signed-off-by: Siddharth Chandrasekaran <sidcha.dev@gmail.com>
1 parent 653beac commit 3160f4c

2 files changed

Lines changed: 78 additions & 27 deletions

File tree

cmake/GitInfo.cmake

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,58 @@
44
# SPDX-License-Identifier: Apache-2.0
55
#
66

7+
set(GIT_REV "")
8+
set(GIT_DIFF "")
9+
set(GIT_TAG "")
10+
set(GIT_BRANCH "None")
11+
712
execute_process(
8-
COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} log --pretty=format:'%h' -n 1
9-
OUTPUT_VARIABLE GIT_REV
13+
COMMAND git -C ${CMAKE_SOURCE_DIR} rev-parse --is-inside-work-tree
14+
RESULT_VARIABLE _git_ok
15+
OUTPUT_QUIET
1016
ERROR_QUIET
11-
OUTPUT_STRIP_TRAILING_WHITESPACE
1217
)
1318

14-
if ("${GIT_REV}" STREQUAL "")
15-
set(GIT_REV "")
16-
set(GIT_DIFF "")
17-
set(GIT_TAG "")
18-
set(GIT_BRANCH "None")
19-
else()
19+
if(_git_ok EQUAL 0)
2020
execute_process(
21-
COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} diff --quiet --exit-code
22-
RESULT_VARIABLE RETURN_CODE
21+
COMMAND git -C ${CMAKE_SOURCE_DIR} describe --tags --long --always --abbrev=7
22+
OUTPUT_VARIABLE GIT_REV
23+
ERROR_QUIET
2324
OUTPUT_STRIP_TRAILING_WHITESPACE
25+
)
26+
27+
execute_process(
28+
COMMAND git -C ${CMAKE_SOURCE_DIR} describe --exact-match --tags HEAD
29+
RESULT_VARIABLE _tag_rc
30+
OUTPUT_VARIABLE GIT_TAG
2431
ERROR_QUIET
32+
OUTPUT_STRIP_TRAILING_WHITESPACE
2533
)
26-
if(RETURN_CODE AND NOT RETURN_CODE EQUAL 0)
27-
set(GIT_DIFF "+")
34+
if(NOT _tag_rc EQUAL 0)
35+
set(GIT_TAG "")
2836
endif()
37+
2938
execute_process(
30-
COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} describe --exact-match --tags
31-
OUTPUT_VARIABLE GIT_TAG ERROR_QUIET
39+
COMMAND git -C ${CMAKE_SOURCE_DIR} symbolic-ref --short -q HEAD
40+
RESULT_VARIABLE _branch_rc
41+
OUTPUT_VARIABLE GIT_BRANCH
42+
ERROR_QUIET
3243
OUTPUT_STRIP_TRAILING_WHITESPACE
3344
)
45+
if(NOT _branch_rc EQUAL 0 OR "${GIT_BRANCH}" STREQUAL "")
46+
set(GIT_BRANCH "detached")
47+
endif()
48+
3449
execute_process(
35-
COMMAND git -C ${CMAKE_CURRENT_LIST_DIR} rev-parse --abbrev-ref HEAD
36-
OUTPUT_VARIABLE GIT_BRANCH
50+
COMMAND git -C ${CMAKE_SOURCE_DIR} status --porcelain --untracked-files=normal
51+
OUTPUT_VARIABLE _git_status
52+
ERROR_QUIET
3753
OUTPUT_STRIP_TRAILING_WHITESPACE
3854
)
39-
string(SUBSTRING "${GIT_REV}" 1 7 GIT_REV)
55+
if(NOT "${_git_status}" STREQUAL "")
56+
set(GIT_DIFF "+")
57+
if(NOT "${GIT_TAG}" STREQUAL "")
58+
set(GIT_TAG "${GIT_TAG}+")
59+
endif()
60+
endif()
4061
endif()

python/setup.py

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,47 @@ def add_prefix_to_path(src_list, path, check_files=True):
2323
raise RuntimeError(f"Path '{path}' does not exist")
2424
return paths
2525

26-
def exec_cmd(cmd):
27-
r = subprocess.run(cmd, capture_output = True, text = True)
28-
return r.stdout.strip()
26+
def exec_cmd(cmd, cwd=None):
27+
r = subprocess.run(cmd, capture_output=True, text=True, cwd=cwd)
28+
return r.returncode, r.stdout.strip()
2929

3030
def get_git_info():
31-
d = {}
32-
d["branch"] = exec_cmd(["git", "rev-parse", "--abbrev-ref", "HEAD"])
33-
d["tag"] = exec_cmd([ "git", "describe", "--exact-match", "--tags" ])
34-
d["diff"] = exec_cmd([ "git", "diff", "--quiet", "--exit-code" ])
35-
d["rev"] = exec_cmd(["git", "log", "--pretty=format:%h", "-n", "1"])
36-
d["root"] = exec_cmd(["git", "rev-parse", "--show-toplevel"])
31+
d = {
32+
"branch": "None",
33+
"tag": "",
34+
"diff": "",
35+
"rev": "",
36+
"root": repo_root,
37+
}
38+
39+
rc, _ = exec_cmd(["git", "rev-parse", "--is-inside-work-tree"], cwd=repo_root)
40+
if rc != 0:
41+
return d
42+
43+
rc, root = exec_cmd(["git", "rev-parse", "--show-toplevel"], cwd=repo_root)
44+
if rc == 0 and root:
45+
d["root"] = root
46+
47+
rc, branch = exec_cmd(["git", "symbolic-ref", "--short", "-q", "HEAD"], cwd=repo_root)
48+
if rc == 0 and branch:
49+
d["branch"] = branch
50+
else:
51+
d["branch"] = "detached"
52+
53+
rc, rev = exec_cmd(["git", "describe", "--tags", "--long", "--always", "--abbrev=7"], cwd=repo_root)
54+
if rc == 0:
55+
d["rev"] = rev
56+
57+
rc, tag = exec_cmd(["git", "describe", "--exact-match", "--tags", "HEAD"], cwd=repo_root)
58+
if rc == 0 and tag:
59+
d["tag"] = tag
60+
61+
rc, status = exec_cmd(["git", "status", "--porcelain", "--untracked-files=normal"], cwd=repo_root)
62+
if rc == 0 and status:
63+
d["diff"] = "+"
64+
if d["tag"]:
65+
d["tag"] = d["tag"] + "+"
66+
3767
return d
3868

3969
def configure_file(file, replacements):

0 commit comments

Comments
 (0)