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:
@@ -24,18 +24,14 @@ def main() -> None:
|
|||||||
if not args.quiet:
|
if not args.quiet:
|
||||||
print('Processing {}... '.format(filename), end='', flush=True)
|
print('Processing {}... '.format(filename), end='', flush=True)
|
||||||
|
|
||||||
xml = et.parse(filename)
|
genxml = intel_genxml.GenXml(filename)
|
||||||
original = copy.deepcopy(xml) if args.validate else xml
|
|
||||||
intel_genxml.sort_xml(xml)
|
|
||||||
|
|
||||||
if args.validate:
|
if args.validate:
|
||||||
for old, new in zip(original.getroot(), xml.getroot()):
|
assert genxml.is_equivalent_xml(genxml.sorted_copy()), \
|
||||||
assert intel_genxml.node_validator(old, new), f'{filename} is invalid, run gen_sort_tags.py and commit that'
|
f'{filename} is invalid, run gen_sort_tags.py and commit that'
|
||||||
else:
|
else:
|
||||||
tmp = filename.with_suffix(f'{filename.suffix}.tmp')
|
genxml.sort()
|
||||||
et.indent(xml, space=' ')
|
genxml.write_file()
|
||||||
xml.write(tmp, encoding="utf-8", xml_declaration=True)
|
|
||||||
tmp.replace(filename)
|
|
||||||
|
|
||||||
if not args.quiet:
|
if not args.quiet:
|
||||||
print('done.')
|
print('done.')
|
||||||
|
|||||||
@@ -168,7 +168,8 @@ def sort_xml(xml: et.ElementTree) -> None:
|
|||||||
|
|
||||||
class GenXml(object):
|
class GenXml(object):
|
||||||
def __init__(self, filename):
|
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):
|
def filter_engines(self, engines):
|
||||||
changed = False
|
changed = False
|
||||||
@@ -187,3 +188,21 @@ class GenXml(object):
|
|||||||
items.append(item)
|
items.append(item)
|
||||||
if changed:
|
if changed:
|
||||||
self.et.getroot()[:] = items
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user