Clean-up get_version_string (#11468)
This commit is contained in:
parent
153194c771
commit
7b62791e00
|
@ -0,0 +1 @@
|
||||||
|
Refactor `get_version_string` to fix-up types and duplicated code.
|
|
@ -1,4 +1,5 @@
|
||||||
# Copyright 2016 OpenMarket Ltd
|
# Copyright 2016 OpenMarket Ltd
|
||||||
|
# Copyright 2021 The Matrix.org Foundation C.I.C.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
|
@ -29,10 +30,11 @@ def get_version_string(module: ModuleType) -> str:
|
||||||
If called on a module not in a git checkout will return `__version__`.
|
If called on a module not in a git checkout will return `__version__`.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
module (module)
|
module: The module to check the version of. Must declare a __version__
|
||||||
|
attribute.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str
|
The module version (as a string).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
cached_version = version_cache.get(module)
|
cached_version = version_cache.get(module)
|
||||||
|
@ -44,71 +46,37 @@ def get_version_string(module: ModuleType) -> str:
|
||||||
version_string = module.__version__ # type: ignore[attr-defined]
|
version_string = module.__version__ # type: ignore[attr-defined]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
null = open(os.devnull, "w")
|
|
||||||
cwd = os.path.dirname(os.path.abspath(module.__file__))
|
cwd = os.path.dirname(os.path.abspath(module.__file__))
|
||||||
|
|
||||||
try:
|
def _run_git_command(prefix: str, *params: str) -> str:
|
||||||
git_branch = (
|
try:
|
||||||
subprocess.check_output(
|
result = (
|
||||||
["git", "rev-parse", "--abbrev-ref", "HEAD"], stderr=null, cwd=cwd
|
subprocess.check_output(
|
||||||
|
["git", *params], stderr=subprocess.DEVNULL, cwd=cwd
|
||||||
|
)
|
||||||
|
.strip()
|
||||||
|
.decode("ascii")
|
||||||
)
|
)
|
||||||
.strip()
|
return prefix + result
|
||||||
.decode("ascii")
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
||||||
)
|
return ""
|
||||||
git_branch = "b=" + git_branch
|
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
||||||
# FileNotFoundError can arise when git is not installed
|
|
||||||
git_branch = ""
|
|
||||||
|
|
||||||
try:
|
git_branch = _run_git_command("b=", "rev-parse", "--abbrev-ref", "HEAD")
|
||||||
git_tag = (
|
git_tag = _run_git_command("t=", "describe", "--exact-match")
|
||||||
subprocess.check_output(
|
git_commit = _run_git_command("", "rev-parse", "--short", "HEAD")
|
||||||
["git", "describe", "--exact-match"], stderr=null, cwd=cwd
|
|
||||||
)
|
|
||||||
.strip()
|
|
||||||
.decode("ascii")
|
|
||||||
)
|
|
||||||
git_tag = "t=" + git_tag
|
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
||||||
git_tag = ""
|
|
||||||
|
|
||||||
try:
|
dirty_string = "-this_is_a_dirty_checkout"
|
||||||
git_commit = (
|
is_dirty = _run_git_command("", "describe", "--dirty=" + dirty_string).endswith(
|
||||||
subprocess.check_output(
|
dirty_string
|
||||||
["git", "rev-parse", "--short", "HEAD"], stderr=null, cwd=cwd
|
)
|
||||||
)
|
git_dirty = "dirty" if is_dirty else ""
|
||||||
.strip()
|
|
||||||
.decode("ascii")
|
|
||||||
)
|
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
||||||
git_commit = ""
|
|
||||||
|
|
||||||
try:
|
|
||||||
dirty_string = "-this_is_a_dirty_checkout"
|
|
||||||
is_dirty = (
|
|
||||||
subprocess.check_output(
|
|
||||||
["git", "describe", "--dirty=" + dirty_string], stderr=null, cwd=cwd
|
|
||||||
)
|
|
||||||
.strip()
|
|
||||||
.decode("ascii")
|
|
||||||
.endswith(dirty_string)
|
|
||||||
)
|
|
||||||
|
|
||||||
git_dirty = "dirty" if is_dirty else ""
|
|
||||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
||||||
git_dirty = ""
|
|
||||||
|
|
||||||
if git_branch or git_tag or git_commit or git_dirty:
|
if git_branch or git_tag or git_commit or git_dirty:
|
||||||
git_version = ",".join(
|
git_version = ",".join(
|
||||||
s for s in (git_branch, git_tag, git_commit, git_dirty) if s
|
s for s in (git_branch, git_tag, git_commit, git_dirty) if s
|
||||||
)
|
)
|
||||||
|
|
||||||
version_string = "%s (%s)" % (
|
version_string = f"{version_string} ({git_version})"
|
||||||
# If the __version__ attribute doesn't exist, we'll have failed
|
|
||||||
# loudly above.
|
|
||||||
module.__version__, # type: ignore[attr-defined]
|
|
||||||
git_version,
|
|
||||||
)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.info("Failed to check for git repository: %s", e)
|
logger.info("Failed to check for git repository: %s", e)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue