From: Oto Šťáva Date: Thu, 8 Dec 2022 09:13:49 +0000 (+0100) Subject: scripts, doc: generate vcs info for archives, use for copyright year X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f16cb63ad99b011ed0fb1fe34efd430e731c651;p=thirdparty%2Fknot-resolver.git scripts, doc: generate vcs info for archives, use for copyright year --- diff --git a/.gitignore b/.gitignore index d4522a87b..1e35155cb 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ .dirstamp .libs .pytest_cache +.kr-vcs-info /.build-depend /.cache /aclocal.m4 diff --git a/doc/conf.py b/doc/conf.py index ab7e6db2e..d26383d5f 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -1,6 +1,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later # -*- coding: utf-8 -*- +import errno +import json import os import re import subprocess @@ -25,16 +27,37 @@ breathe_domain_by_extension = {"h": "c"} source_suffix = '.rst' master_doc = 'index' -# Get current year (preferably from Git commit) +# Get current year in the order of preference (fallback to system time) commit_year = date.today().year - -try: - commit_date_str = subprocess.check_output(['git', 'show', '--no-patch', '--format=%cs'])\ - .decode().strip() - commit_date = date.fromisoformat(commit_date_str) - commit_year = commit_date.year -except BaseException as e: - print('Could not get current commit, using system time for copyright:', e) +commit_year_src = 'system time' +commit_year_got = False + +if not commit_year_got: + try: + commit_date_str = subprocess.check_output(['git', 'show', '--no-patch', '--format=%cs'])\ + .decode().strip() + commit_date = date.fromisoformat(commit_date_str) + commit_year = commit_date.year + commit_year_src = 'Git' + commit_year_got = True + except subprocess.CalledProcessError as e: + pass # Kind of expected, just silently fall back to '.kr-vcs-info' + +if not commit_year_got: + try: + with open('../.kr-vcs-info', 'rb') as vcs_info_fp: + vcs_info = json.load(vcs_info_fp) + + commit_date = date.fromisoformat(vcs_info['commitDate']) + commit_year = commit_date.year + commit_year_src = '.kr-vcs-info' + commit_year_got = True + except OSError as e: + if e.errno != errno.ENOENT: + raise e + +print('Using copyright year ({year}) from {year_src}'.format( + year=commit_year, year_src=commit_year_src)) # General information about the project. project = u'Knot Resolver' diff --git a/meson.build b/meson.build index 6a1b65b2a..79ce45096 100644 --- a/meson.build +++ b/meson.build @@ -43,6 +43,9 @@ if host_machine.system() == 'darwin' libext = '.dylib' endif +# VCS info +meson.add_dist_script('scripts/dist-copy-vcs-info.sh') + ## Paths prefix = get_option('prefix') data_dir = prefix / get_option('datadir') / 'knot-resolver' diff --git a/scripts/dist-copy-vcs-info.sh b/scripts/dist-copy-vcs-info.sh new file mode 100644 index 000000000..502e81214 --- /dev/null +++ b/scripts/dist-copy-vcs-info.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0-or-later +# Run on 'meson dist' to copy VCS information (e.g. to generate documentation +# with correct copyright year) +set -o errexit -o nounset -o xtrace + +if [ -z "$MESON_DIST_ROOT" ]; then + echo "MESON_DIST_ROOT is not set! Must be run from 'meson dist'!" >&2 + exit 1 +fi +if [ -z "$MESON_SOURCE_ROOT" ]; then + echo "MESON_SOURCE_ROOT is not set! Must be run from 'meson dist'!" >&2 + exit 1 +fi + +cp "$MESON_SOURCE_ROOT/.kr-vcs-info" "$MESON_DIST_ROOT" diff --git a/scripts/gen-vcs-info.sh b/scripts/gen-vcs-info.sh new file mode 100755 index 000000000..e70ac6f7b --- /dev/null +++ b/scripts/gen-vcs-info.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-3.0-or-later +# Make a `.kr-vcs-info` file for archive purposes +set -o errexit -o nounset -o xtrace + +cd "$(dirname ${0})/.." + +vcs_info_name='.kr-vcs-info' + +# make sure we don't accidentally add / overwrite forgotten changes in git +#(git diff-index --quiet HEAD && git diff-index --cached --quiet HEAD) || \ +# (echo 'git index has uncommitted changes!'; exit 1) + +rm -f "$vcs_info_name" + +commit_date="$(git show --no-patch --format=%cs)" +commit_hash="$(git show --no-patch --format=%H)" +tag="$(git describe --tags --exact-match || echo '')" + +cat > "$vcs_info_name" <