Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
08cd531bbThis file is pinned to the selected release. Download the original to open it in your design tool.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Script which searches for unused code or files in the repository and
reports them on stdout.
"""
import glob
import os
import sys
from subprocess import CalledProcessError, check_output as run
REPO_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
WHITELIST = [
'img/app/librepcb.svg',
'img/norm/iec_60617.svg',
'img/norm/ieee_315.svg',
'libs/librepcb/core/serialization/fileformatmigrationv1.h',
'libs/librepcb/core/workspace/workspacesettingsitem_genericvalue.h',
'libs/librepcb/editor/editorcommandcategory.h',
'libs/librepcb/editor/editorcommandsetupdater.h',
'libs/librepcb/editor/utils/deriveduiobjectlist.h',
'tests/unittests/core/serialization/serializableobjectmock.h',
'tests/unittests/editor/widgets/editabletablewidgetreceiver.h',
]
if __name__ == '__main__':
warnings = 0
# Entries in .reuse/dep5 which don't exist anymore.
print("Check for stale entries in .reuse/dep5...")
with open(os.path.join(REPO_DIR, '.reuse/dep5'), 'r') as f:
for line in f.readlines():
if line.startswith('Files: '):
pattern = line.replace('Files: ', '').strip()
elif line.startswith(' ') and not line.startswith(' '):
pattern = line.strip()
else:
continue
entries = glob.glob(pattern, root_dir=REPO_DIR)
if len(entries) == 0:
print(' - ' + pattern)
warnings += 1
# Images which are not used anywhere.
print("Check for unused images...")
files = run(['git', 'ls-files',
'--cached', '--others', '--exclude-standard',
'--', ':/img/**.png', ':/img/**.svg', ':/img/**.jpg',
':/img/**.jpeg'],
cwd=REPO_DIR).decode("utf-8").splitlines()
for file in files:
if file in WHITELIST:
continue
if not os.path.isfile(os.path.join(REPO_DIR, file)):
continue
try:
references = run(['git', 'grep', '-IlF', file,
'--', '*.cpp', '*.h', '*.ui', '*.slint'],
cwd=REPO_DIR).decode("utf-8").splitlines()
except CalledProcessError:
print(' - ' + file)
warnings += 1
# Headed files not included anywhere.
print("Check for unused header files...")
files = run(['git', 'ls-files', '--cached', '--others',
'--exclude-standard', '--', '*.h'],
cwd=REPO_DIR).decode("utf-8").splitlines()
for file in files:
if file in WHITELIST:
continue
if not os.path.isfile(os.path.join(REPO_DIR, file)):
continue
try:
references = run(['git', 'grep', '-IlP',
r'(?<!\w)' + os.path.basename(file),
'--', '*.cpp', '*.h', '*.ui'],
cwd=REPO_DIR).decode("utf-8").splitlines()
if len(references) < 2:
print(' - ' + file + ' (only 1 usage)')
warnings += 1
except CalledProcessError:
print(' - ' + file)
warnings += 1
# Report result.
if warnings > 0:
print("Failed with {} warnings".format(warnings))
sys.exit(1)
else:
print("Done, no warnings")