diff options
Diffstat (limited to 'compare_mandata.py')
-rw-r--r-- | compare_mandata.py | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/compare_mandata.py b/compare_mandata.py new file mode 100644 index 0000000..08d4c6b --- /dev/null +++ b/compare_mandata.py @@ -0,0 +1,83 @@ +'''Check whether the manpage extensions and directories list hardcoded in brp-compress +are the same as the lists stored in pyproject_save_files.py. +There is an open issue for RPM to provide them both as macros: +https://github.com/rpm-software-management/rpm/issues/1865 +Once that happens, this script can be removed. +''' + +import argparse +import re +import sys + +from pathlib import PosixPath + +from pyproject_buildrequires import print_err +from pyproject_save_files import prepend_mandirs, MANPAGE_EXTENSIONS + + + +def read_brp_compress(filename): + + contents = filename.read_text() + # To avoid duplicity of the manpage extensions which are listed a few times + # in the source file, they are stored in set and then retyped to a sorted list + manpage_exts = sorted( + set(re.findall(r'\(?(\w+)\\+\)?\$?', contents)) + ) + + # Get rid of ${PREFIX} when extracting the manpage directories + mandirs = [ + entry.replace('.${PREFIX}', '/PREFIX') + for entry in contents.split() + if entry.startswith('.${PREFIX}') + ] + + return manpage_exts, sorted(mandirs) + + +def compare_mandirs(brp_compress_mandirs): + ''' + Check whether each of brp-compress mandirs entry is present in the list + stored in pyproject_save_files.py + ''' + + pyp_save_files_mandirs = sorted(prepend_mandirs(prefix='/PREFIX')) + if brp_compress_mandirs == pyp_save_files_mandirs: + return True + else: + print_err('Mandir lists don\'t match, update the list in pyproject_save_files.py') + print_err('brp-compress list:', brp_compress_mandirs) + print_err('pyproject_save_files list:', pyp_save_files_mandirs) + return False + + +def compare_manpage_extensions(brp_compress_manpage_exts): + ''' + Check whether each of brp-compress manpage extension is present in the list + stored in pyproject_save_files.py + ''' + + if brp_compress_manpage_exts == sorted(MANPAGE_EXTENSIONS): + return True + else: + print_err('Manpage extension lists don\'t match, update the list in pyproject_save_files.py') + print_err('brp-compress list:', brp_compress_manpage_exts) + print_err('pyproject_save_files list:', sorted(MANPAGE_EXTENSIONS)) + return False + + +def main(args): + src_manpage_exts, src_mandirs = read_brp_compress(args.filename) + extension_check_successful = compare_manpage_extensions(src_manpage_exts) + mandir_check_successful = compare_mandirs(src_mandirs) + if extension_check_successful and mandir_check_successful: + sys.exit(0) + else: + sys.exit(1) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-f', '--filename', type=PosixPath, required=True, + help='Provide location of brp-compress file') + main(parser.parse_args()) |