Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Cache get_version_string.
Browse files Browse the repository at this point in the history
The version of a module isn't going to change over the lifetime of the
process (assuming no funky hot reloading is going on, which it isn't),
so let's just cache the result to avoid spawning lots of git
subprocesses.

Fixes #5672.
  • Loading branch information
erikjohnston committed Jul 22, 2019
1 parent f337d2f commit 5ea773c
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions synapse/util/versionstring.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,23 @@


def get_version_string(module):
"""Given a module calculate a git-aware version string for it.
If called on a module not in a git checkout will return `__verison__`.
Args:
module (module)
Returns:
str
"""

cached_version = getattr(module, "_synapse_version_string_cache", None)
if cached_version:
return cached_version

version_string = module.__version__

try:
null = open(os.devnull, "w")
cwd = os.path.dirname(os.path.abspath(module.__file__))
Expand Down Expand Up @@ -80,8 +97,10 @@ def get_version_string(module):
s for s in (git_branch, git_tag, git_commit, git_dirty) if s
)

return "%s (%s)" % (module.__version__, git_version)
version_string = "%s (%s)" % (module.__version__, git_version)
except Exception as e:
logger.info("Failed to check for git repository: %s", e)

return module.__version__
module._synapse_version_string_cache = version_string

return version_string

0 comments on commit 5ea773c

Please sign in to comment.