summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Franke <me@nathan.sh>2022-07-24 21:09:54 -0500
committerNathan Franke <me@nathan.sh>2022-07-24 21:09:54 -0500
commit77cf65804c732431574a99063f2132567d54a6be (patch)
treed753976031f3b43c6d8d510411daeafd28fe638e
parent3f39625399d8a5ef118341e47500f31f21b11581 (diff)
support git packed refs in version generator
-rw-r--r--methods.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/methods.py b/methods.py
index 1db3a8aa01..571b134c8a 100644
--- a/methods.py
+++ b/methods.py
@@ -125,9 +125,21 @@ def update_version(module_version_string=""):
if os.path.isfile(os.path.join(gitfolder, "HEAD")):
head = open(os.path.join(gitfolder, "HEAD"), "r", encoding="utf8").readline().strip()
if head.startswith("ref: "):
- head = os.path.join(gitfolder, head[5:])
+ ref = head[5:]
+ head = os.path.join(gitfolder, ref)
+ packedrefs = os.path.join(gitfolder, "packed-refs")
if os.path.isfile(head):
githash = open(head, "r").readline().strip()
+ elif os.path.isfile(packedrefs):
+ # Git may pack refs into a single file. This code searches .git/packed-refs file for the current ref's hash.
+ # https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-pack-refs.html
+ for line in open(packedrefs, "r").read().splitlines():
+ if line.startswith("#"):
+ continue
+ (line_hash, line_ref) = line.split(" ")
+ if ref == line_ref:
+ githash = line_hash
+ break
else:
githash = head