in lib/ramble/spack/cmd/url.py [0:0]
def url_summary(args):
# Collect statistics on how many URLs were correctly parsed
total_urls = 0
correct_names = 0
correct_versions = 0
# Collect statistics on which regexes were matched and how often
name_regex_dict = dict()
right_name_count = defaultdict(int)
wrong_name_count = defaultdict(int)
version_regex_dict = dict()
right_version_count = defaultdict(int)
wrong_version_count = defaultdict(int)
tty.msg('Generating a summary of URL parsing in Spack...')
# Loop through all packages
for pkg in spack.repo.path.all_packages():
urls = set()
url = getattr(pkg, 'url', None)
if url:
urls.add(url)
for params in pkg.versions.values():
url = params.get('url', None)
if url:
urls.add(url)
# Calculate statistics
for url in urls:
total_urls += 1
# Parse versions
version = None
try:
version, vs, vl, vi, vregex = parse_version_offset(url)
version_regex_dict[vi] = vregex
if version_parsed_correctly(pkg, version):
correct_versions += 1
right_version_count[vi] += 1
else:
wrong_version_count[vi] += 1
except UndetectableVersionError:
pass
# Parse names
try:
name, ns, nl, ni, nregex = parse_name_offset(url, version)
name_regex_dict[ni] = nregex
if name_parsed_correctly(pkg, name):
correct_names += 1
right_name_count[ni] += 1
else:
wrong_name_count[ni] += 1
except UndetectableNameError:
pass
print()
print(' Total URLs found: {0}'.format(total_urls))
print(' Names correctly parsed: {0:>4}/{1:>4} ({2:>6.2%})'.format(
correct_names, total_urls, correct_names / total_urls))
print(' Versions correctly parsed: {0:>4}/{1:>4} ({2:>6.2%})'.format(
correct_versions, total_urls, correct_versions / total_urls))
print()
tty.msg('Statistics on name regular expressions:')
print()
print(' Index Right Wrong Total Regular Expression')
for ni in sorted(name_regex_dict.keys()):
print(' {0:>5} {1:>5} {2:>5} {3:>5} r{4!r}'.format(
ni,
right_name_count[ni],
wrong_name_count[ni],
right_name_count[ni] + wrong_name_count[ni],
name_regex_dict[ni])
)
print()
tty.msg('Statistics on version regular expressions:')
print()
print(' Index Right Wrong Total Regular Expression')
for vi in sorted(version_regex_dict.keys()):
print(' {0:>5} {1:>5} {2:>5} {3:>5} r{4!r}'.format(
vi,
right_version_count[vi],
wrong_version_count[vi],
right_version_count[vi] + wrong_version_count[vi],
version_regex_dict[vi])
)
print()
# Return statistics, only for testing purposes
return (total_urls, correct_names, correct_versions,
right_name_count, right_version_count)