check-keyalias-collision.py: codequality JSON output
This commit is contained in:
parent
0b3aaec700
commit
c1e19979da
@ -3,7 +3,9 @@
|
||||
import glob
|
||||
import hashlib
|
||||
import inspect
|
||||
import json
|
||||
import os
|
||||
import urllib.request
|
||||
import sys
|
||||
|
||||
|
||||
@ -13,22 +15,48 @@ def generate_keyalias(s):
|
||||
return m.hexdigest()[:8]
|
||||
|
||||
|
||||
base = os.path.realpath(
|
||||
os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..')
|
||||
)
|
||||
metadata_files = sorted(
|
||||
glob.glob(base + '/metadata/*.txt') + glob.glob(base + '/metadata/*.yml')
|
||||
)
|
||||
metadata_files = glob.glob("metadata/*.yml")
|
||||
|
||||
CODEQUALITY_REPORT = list()
|
||||
CHECK_NAME = os.path.basename(__file__)
|
||||
|
||||
if not metadata_files:
|
||||
print('No metadata files found!')
|
||||
print("No metadata files found!")
|
||||
sys.exit(1)
|
||||
|
||||
errors = 0
|
||||
keyaliases = dict()
|
||||
for f in metadata_files:
|
||||
appid = os.path.basename(f)[:-4]
|
||||
keyalias = generate_keyalias(appid)
|
||||
if keyalias in keyaliases:
|
||||
print(appid, "keyalias conflicts with", keyaliases[keyalias])
|
||||
sys.exit(1)
|
||||
errors += 1
|
||||
original = appid
|
||||
conflicting = keyaliases[keyalias]
|
||||
try:
|
||||
url = f'https://f-droid.org/api/v1/packages/{appid}'
|
||||
r = urllib.request.Request(url, method='HEAD')
|
||||
with urllib.request.urlopen(r) as response:
|
||||
if response.status == 200:
|
||||
original = keyaliases[keyalias]
|
||||
conflicting = appid
|
||||
except urllib.error.URLError:
|
||||
pass
|
||||
msg = f"{conflicting} keyalias conflicts with {original}"
|
||||
path = f'metadata/{conflicting}.yml'
|
||||
print(msg)
|
||||
CODEQUALITY_REPORT.append(
|
||||
{
|
||||
"description": msg,
|
||||
"check_name": CHECK_NAME,
|
||||
"fingerprint": CHECK_NAME + keyalias + f + path,
|
||||
"severity": "blocker",
|
||||
"location": {"path": path, "lines": {"begin": 0}},
|
||||
}
|
||||
)
|
||||
keyaliases[keyalias] = appid
|
||||
|
||||
with open(f"{CHECK_NAME}.json", "w") as fp:
|
||||
json.dump(CODEQUALITY_REPORT, fp)
|
||||
|
||||
sys.exit(errors)
|
||||
|
Loading…
x
Reference in New Issue
Block a user