From 5a5e81b9c39ed6cc04ae5edc696e521521e130cc Mon Sep 17 00:00:00 2001 From: nd <git@notandy.de> Date: Fri, 30 Jul 2021 20:56:48 +0200 Subject: [PATCH] removed version from footer as well as drop the git dependency --- README.md | 1 - uffd/template_helper.py | 10 ---------- uffd/templates/base.html | 3 +-- uffd/translations/de/LC_MESSAGES/messages.mo | Bin 30649 -> 30572 bytes uffd/translations/de/LC_MESSAGES/messages.po | 10 +++++----- 5 files changed, 6 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 4e1cec7e..a4ded7a1 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,6 @@ Development chat: [#uffd-development](https://rocket.events.ccc.de/channel/uffd- - python3-fido2 (version 0.5.0, optional) - python3-flask-oauthlib - python3-flask-babel -- git (cli utility, musst be in path) Some of the dependencies (especially fido2 and flask-oauthlib) changed their API in recent versions, so make sure to install the versions from Debian Buster. You can also use virtualenv with the supplied `requirements.txt`. diff --git a/uffd/template_helper.py b/uffd/template_helper.py index cc02d556..ba973fb7 100644 --- a/uffd/template_helper.py +++ b/uffd/template_helper.py @@ -1,5 +1,4 @@ import random -import subprocess import base64 from datetime import timedelta, datetime import io @@ -28,11 +27,6 @@ def register_template_helper(app): def datauri(data, mimetype='text/plain'): #pylint: disable=unused-variable return Markup('data:%s;base64,%s'%(mimetype, base64.b64encode(data.encode()).decode())) - @app.url_defaults - def static_version_inject(endpoint, values): #pylint: disable=unused-variable - if endpoint == 'static': - values['v'] = app.jinja_env.globals['gitversion']['longhash'] #pylint: disable=no-member - app.jinja_env.trim_blocks = True app.jinja_env.lstrip_blocks = True @@ -42,7 +36,3 @@ def register_template_helper(app): app.add_template_global(min, name='min') app.add_template_global(max, name='max') app.add_template_global(equalto, name='equalto') - - # get git commit - git_output = subprocess.check_output(['git', "log", "-g", "-1", "--pretty=%H#%h#%d#%s"]).decode('UTF-8').split('#', 3) - app.jinja_env.globals['gitversion'] = {'hash': git_output[1], 'longhash': git_output[0], 'branch': git_output[2], 'msg': git_output[3]} #pylint: disable=no-member diff --git a/uffd/templates/base.html b/uffd/templates/base.html index 63406e58..699a905d 100644 --- a/uffd/templates/base.html +++ b/uffd/templates/base.html @@ -130,8 +130,7 @@ <li class="list-inline-item"><a href="{{ link.url }}">{{ link.title }}</a></li> {% endfor %} <li class="list-inline-item float-right"> - <a href="https://git.cccv.de/uffd/uffd/">{{_("Sourcecode")}}</a> - <a target="_blank" href="https://git.cccv.de/uffd/uffd/-/commit/{{ gitversion.longhash }}"><span title="{{ gitversion.branch }} {{ gitversion.hash }}: {{ gitversion.msg }}" data-toggle="tooltip">Version: {{ gitversion.hash }}</span></a> + <a href="https://git.cccv.de/uffd/uffd/">{{_("About uffd")}}</a> </li> </ul> </div> diff --git a/uffd/translations/de/LC_MESSAGES/messages.mo b/uffd/translations/de/LC_MESSAGES/messages.mo index e275eb91a683da1156ad7f935e44542a327d4a36..3fb2252ba8b5eba1f3c47aa9ec52c6b5eef02364 100644 GIT binary patch delta 4891 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 delta 4960 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 VoeE{CMLCJZ#i@Cl4-~Co0RUFOXBz+j diff --git a/uffd/translations/de/LC_MESSAGES/messages.po b/uffd/translations/de/LC_MESSAGES/messages.po index 6fb606da..8860b6b4 100644 --- a/uffd/translations/de/LC_MESSAGES/messages.po +++ b/uffd/translations/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2021-07-30 19:49+0200\n" +"POT-Creation-Date: 2021-07-30 21:03+0200\n" "PO-Revision-Date: 2021-05-25 21:18+0200\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language: de\n" @@ -962,8 +962,8 @@ msgstr "Verlassen von Rollen ist deaktiviert" #: uffd/selfservice/views.py:147 #, python-format -msgid "You left role \"%(role_name)s\"" -msgstr "Rolle \"%(role_name)s\" verlassen" +msgid "You left role %(role_name)s" +msgstr "Rolle %(role_name)s verlassen" #: uffd/selfservice/views.py:211 #, python-format @@ -1408,8 +1408,8 @@ msgid "Change" msgstr "Ändern" #: uffd/templates/base.html:133 -msgid "Sourcecode" -msgstr "Quellcode" +msgid "About uffd" +msgstr "Über uffd" #: uffd/user/views_group.py:21 msgid "Groups" -- GitLab