Skip to content

Commit

Permalink
Ensure we use the right _resolve(). (#233)
Browse files Browse the repository at this point in the history
We weren't properly resetting _resolve when switching between files. So if the default manifest came first in a "combined" manifest, any includes or benchmarks after that would erroneously use the default resolve_default_benchmark().
  • Loading branch information
ericsnowcurrently committed Aug 19, 2022
1 parent 4622a0b commit d1cb311
Showing 1 changed file with 30 additions and 37 deletions.
67 changes: 30 additions & 37 deletions pyperformance/_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,44 +105,37 @@ def filename(self):
return self._raw_filename

def _add_sections(self, sections, resolve):
filename = self._raw_filename
_resolve = resolve
if resolve is None and filename == DEFAULT_MANIFEST:
_resolve = default_resolve = resolve_default_benchmark
sections_seen = {filename: set()}
lastfile = None
seen_by_file = {}
for filename, section, data in sections:
if filename != lastfile:
_resolve = resolve
if _resolve is None and filename == DEFAULT_MANIFEST:
_resolve = resolve_default_benchmark
lastfile = filename

section_key = section
if section == "group":
section_key = (section, data[0])

if filename not in sections_seen:
sections_seen[filename] = {section_key}
elif section_key in sections_seen[filename]:
# For now each section_key can only show up once.
raise NotImplementedError((section_key, data))
else:
sections_seen[filename].add(section_key)

if section == 'includes':
pass
elif section == 'benchmarks':
entries = ((s, m, filename) for s, m in data)
self._add_benchmarks(entries, _resolve)
elif section == 'groups':
for name in data:
self._add_group(name, None)
elif section == 'group':
name, entries = data
self._add_group(name, entries)
else:
raise NotImplementedError((section, data))
try:
seen = seen_by_file[filename]
except KeyError:
seen = seen_by_file[filename] = set()
self._add_section_for_file(filename, section, data, resolve, seen)

def _add_section_for_file(self, filename, section, data, resolve, seen):
if resolve is None and filename == DEFAULT_MANIFEST:
resolve = resolve_default_benchmark

seen_key = (section, data[0]) if section == "group" else section
if seen_key in seen:
# For now each section_key can only show up once.
raise NotImplementedError((seen_key, data))
seen.add(seen_key)

if section == 'includes':
pass
elif section == 'benchmarks':
entries = ((s, m, filename) for s, m in data)
self._add_benchmarks(entries, resolve)
elif section == 'groups':
for name in data:
self._add_group(name, None)
elif section == 'group':
name, entries = data
self._add_group(name, entries)
else:
raise NotImplementedError((section, data))

def _add_benchmarks(self, entries, resolve):
for spec, metafile, filename in entries:
Expand Down

0 comments on commit d1cb311

Please sign in to comment.