mirror of
https://github.com/iHaiDeeZ/OpenCE-PS4.git
synced 2026-10-26 20:02:51 +01:00
43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Adds the folders create-gp4 left out of a .gp4 project's <rootdir> tree.
|
|
|
|
create-gp4 drops a folder whose name another folder already used elsewhere (the game data has romfs/Model and
|
|
romfs/Bake/Model, romfs/Scene and romfs/Bake/Scene), and PkgTool's pkg_build then stops on the first file in one
|
|
("Sequence contains no elements" in PfsProperties.FindDir). Every file's folder chain is put back.
|
|
gp4-fix-dirs.py pkg.gp4
|
|
"""
|
|
import sys
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
def main():
|
|
path = sys.argv[1]
|
|
tree = ET.parse(path)
|
|
root = tree.getroot()
|
|
rootdir = root.find(".//rootdir")
|
|
if rootdir is None:
|
|
return
|
|
|
|
def child(parent, name):
|
|
for d in parent.findall("dir"):
|
|
if d.get("targ_name") == name:
|
|
return d
|
|
d = ET.SubElement(parent, "dir")
|
|
d.set("targ_name", name)
|
|
added.append(name)
|
|
return d
|
|
|
|
added = []
|
|
for f in root.iter("file"):
|
|
parts = f.get("targ_path", "").split("/")[:-1]
|
|
node = rootdir
|
|
for name in parts:
|
|
node = child(node, name)
|
|
if added:
|
|
tree.write(path, encoding="utf-8", xml_declaration=True)
|
|
print("gp4: added", len(added), "folders create-gp4 left out:", ", ".join(added[:6]))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|