mirror of
https://github.com/systemd/systemd.git
synced 2024-12-23 21:35:11 +03:00
7e343b530e
The lists of directives for fuzzer tests are maintained manually in the repo. There is a tools/check-directives.sh script that runs during test phase and reports stale directive lists. Let's rework the script into a generator so that these directive files are created on-the-flight and needn't be updated whenever a unit file directives change. The scripts is rewritten in Python to get rid of gawk dependency and each generated file is a separate meson target so that incremental builds refresh what is just necessary (and parallelize (negligible)). Note: test/fuzz/fuzz-unit-file/directives-all.slice is kept since there is not automated way to generate it (it is not covered by the check script neither).
27 lines
622 B
Python
27 lines
622 B
Python
#!/usr/bin/env python3
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
import sys
|
|
import collections, re
|
|
|
|
d = collections.defaultdict(list)
|
|
for line in open(sys.argv[1]):
|
|
m = re.match(r'^([a-zA-Z0-9-]+)\.([a-zA-Z0-9-]+),', line)
|
|
if m:
|
|
d[m.group(1)] += [m.group(2)]
|
|
|
|
sec_rx = sys.argv[2] if len(sys.argv) > 2 else '.'
|
|
sec_rx = re.compile(sec_rx)
|
|
unit_type = sys.argv[3] if len(sys.argv) > 3 else None
|
|
|
|
if unit_type:
|
|
print(unit_type)
|
|
|
|
for section, items in d.items():
|
|
if not sec_rx.match(section):
|
|
continue
|
|
print(f'[{section}]')
|
|
for item in items:
|
|
print(f'{item}=')
|
|
print()
|