- Add mock-specific build artifacts (chroot/, mock-*, mockroot/) - Include package build files (*.deb, *.changes, *.buildinfo) - Add development tools (.coverage, .pytest_cache, .tox) - Include system files (.DS_Store, Thumbs.db, ._*) - Add temporary and backup files (*.tmp, *.bak, *.backup) - Include local configuration overrides (config.local.yaml, .env.local) - Add test artifacts and documentation builds - Comprehensive coverage for Python build system project This ensures build artifacts, chroot environments, and development tools are properly ignored in version control.
96 lines
3.2 KiB
Python
96 lines
3.2 KiB
Python
#!/usr/bin/python3 -tt
|
|
#
|
|
# Script to check validity of mock config URLs
|
|
#
|
|
|
|
import glob
|
|
import os
|
|
import os.path
|
|
import urllib
|
|
|
|
|
|
class Config(object):
|
|
def __init__(self, file):
|
|
self.path = file
|
|
self.cfg = os.path.basename(self.path)[0:-4]
|
|
self.stanzas = []
|
|
self.map = {}
|
|
current_key = ''
|
|
with open(self.path) as f:
|
|
for l in f:
|
|
l = l.strip()
|
|
if l.startswith('#'):
|
|
continue
|
|
if l.startswith('['):
|
|
key = l[1:l.rindex(']')]
|
|
current_key = key
|
|
if key == 'main' or key == 'local':
|
|
continue
|
|
self.stanzas.append(current_key)
|
|
self.map[current_key] = {}
|
|
continue
|
|
if 'http://' in l or 'https://' in l:
|
|
if current_key == 'main' or current_key == 'local':
|
|
continue
|
|
key, url = l.split('=', 1)
|
|
self.map[current_key][key.strip()] = url.strip()
|
|
continue
|
|
|
|
def __str__(self):
|
|
return self.cfg
|
|
|
|
def check_urls(self):
|
|
print(self.cfg)
|
|
total_sites = 0
|
|
for s in self.stanzas:
|
|
for k in list(self.map[s].keys()):
|
|
if k == 'mirrorlist':
|
|
num = self.check_mirrorlist(self.map[s][k])
|
|
if num == 0:
|
|
print("\t[%s] Error: no mirror sites\t<-------" % s)
|
|
else:
|
|
print("\t[%s] Ok (%d sites)" % (s, num))
|
|
total_sites += num
|
|
elif k == 'baseurl':
|
|
if self.check_baseurl(self.map[s][k]) == 0:
|
|
print("\t[%s] Error: no files for baseurl\t<-------" % s)
|
|
else:
|
|
print("\t[%s] baseurl Ok" % s)
|
|
total_sites += 1
|
|
elif k == 'metalink':
|
|
print("\t[%s] Warning: metalink check not implemented yet" % s)
|
|
else:
|
|
raise RuntimeError("Unknown URL type in %s: %s" % (s, k))
|
|
if total_sites == 0:
|
|
print(" %s has no valid URLs" % self.cfg)
|
|
|
|
def check_mirrorlist(self, url):
|
|
# print("checking mirrorlist at %s" % url)
|
|
try:
|
|
lines = [l for l in urllib.request.urlopen(url).readlines()
|
|
if not l.startswith(b'#') and len(l.strip()) != 0]
|
|
if len(lines) == 1 and lines[0].startswith(b'Bad arch'):
|
|
return 0
|
|
return len(lines)
|
|
except urllib.error.URLError:
|
|
pass
|
|
return 0
|
|
|
|
def check_baseurl(self, url):
|
|
# print("checking baseurl at %s" % url)
|
|
try:
|
|
data = urllib.request.urlopen(url).readlines()
|
|
except urllib.error.HTTPError:
|
|
return 0
|
|
except urllib.error.URLError:
|
|
return 0
|
|
return len(data)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
configs = glob.glob('etc/mock/*.cfg')
|
|
configs.sort()
|
|
for c in configs:
|
|
if os.path.basename(c).startswith('site-defaults'):
|
|
continue
|
|
Config(c).check_urls()
|