|
@@ -107,9 +107,21 @@ def update_version(module_version_string=""):
|
|
|
if os.path.isfile(os.path.join(gitfolder, "HEAD")):
|
|
|
head = open_utf8(os.path.join(gitfolder, "HEAD"), "r").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
|
|
|
|