I found a few references to bits and pieces of this in various places, but this snippet ties all three bits of information together in a single string, and accounts for calling the path to the git repo from anywhere (which tends to work “magically” on localhost but breaks on servers).
If you don’t use git tags, season to taste.
@register.simple_tag
def git_ver():
'''
Retrieve and return the latest git commit hash ID and tag as a dict.
'''
git_dir = os.path.dirname(settings.BASE_DIR)
try:
# Date and hash ID
head = subprocess.Popen(
"git -C {dir} log -1 --pretty=format:\"%h on %cd\" --date=short".format(dir=git_dir),
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
version = head.stdout.readline().strip().decode('utf-8')
# Latest tag
head = subprocess.Popen(
"git -C {dir} describe --tags $(git -C {dir} rev-list --tags --max-count=1)".format(dir=git_dir),
shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
latest_tag = head.stdout.readline().strip().decode('utf-8')
git_string = "{v}, {t}".format(v=version, t=latest_tag)
except:
git_string = u'unknown'
return git_string
Then, in your template, you can simply:
{% if user.is_superuser %}{% git_ver %}{% endif %}



