intel/genxml: Move sorting & writing into GenXml class

Rework:
 * Use "all" in is_equivalent_xml() (Dylan)

Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Dylan Baker <dylan@pnwbakers>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24605>
This commit is contained in:
Jordan Justen 2023-08-10 00:13:51 -07:00 committed by Marge Bot
parent 3176abc0f2
commit e60a0b1616
2 changed files with 25 additions and 10 deletions

View file

@ -24,18 +24,14 @@ def main() -> None:
if not args.quiet:
print('Processing {}... '.format(filename), end='', flush=True)
xml = et.parse(filename)
original = copy.deepcopy(xml) if args.validate else xml
intel_genxml.sort_xml(xml)
genxml = intel_genxml.GenXml(filename)
if args.validate:
for old, new in zip(original.getroot(), xml.getroot()):
assert intel_genxml.node_validator(old, new), f'{filename} is invalid, run gen_sort_tags.py and commit that'
assert genxml.is_equivalent_xml(genxml.sorted_copy()), \
f'{filename} is invalid, run gen_sort_tags.py and commit that'
else:
tmp = filename.with_suffix(f'{filename.suffix}.tmp')
et.indent(xml, space=' ')
xml.write(tmp, encoding="utf-8", xml_declaration=True)
tmp.replace(filename)
genxml.sort()
genxml.write_file()
if not args.quiet:
print('done.')

View file

@ -168,7 +168,8 @@ def sort_xml(xml: et.ElementTree) -> None:
class GenXml(object):
def __init__(self, filename):
self.et = et.parse(filename)
self.filename = pathlib.Path(filename)
self.et = et.parse(self.filename)
def filter_engines(self, engines):
changed = False
@ -187,3 +188,21 @@ class GenXml(object):
items.append(item)
if changed:
self.et.getroot()[:] = items
def sort(self):
sort_xml(self.et)
def sorted_copy(self):
clone = copy.deepcopy(self)
clone.sort()
return clone
def is_equivalent_xml(self, other):
return all(node_validator(old, new)
for old, new in zip(self.et.getroot(), other.et.getroot()))
def write_file(self):
tmp = self.filename.with_suffix(f'{self.filename.suffix}.tmp')
et.indent(self.et, space=' ')
self.et.write(tmp, encoding="utf-8", xml_declaration=True)
tmp.replace(self.filename)