fetchcargo: add type checking to cargo-vendor-normalise.py
This commit is contained in:
parent
f20b229aa1
commit
7bfa20198a
|
@ -1,32 +1,41 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
import toml
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
def escape(s):
|
import toml
|
||||||
return '"'+s.replace('"', r'\"').replace("\n", r"\n").replace("\\", "\\\\")+'"'
|
|
||||||
|
|
||||||
data = toml.load(sys.stdin)
|
|
||||||
|
|
||||||
assert list(data.keys()) == [ "source" ]
|
|
||||||
|
|
||||||
# this value is non deterministic
|
|
||||||
data["source"]["vendored-sources"]["directory"] = "@vendor@"
|
|
||||||
|
|
||||||
result = ""
|
|
||||||
inner = data["source"]
|
|
||||||
for source in sorted(inner.keys()):
|
|
||||||
result += '[source.{}]\n'.format(escape(source))
|
|
||||||
if source == "vendored-sources":
|
|
||||||
result += '"directory" = "@vendor@"\n'
|
|
||||||
else:
|
|
||||||
for key in sorted(inner[source].keys()):
|
|
||||||
result += '{} = {}\n'.format(escape(key), escape(inner[source][key]))
|
|
||||||
result += "\n"
|
|
||||||
|
|
||||||
real = toml.loads(result)
|
|
||||||
assert real == data, "output = {} while input = {}".format(real, data)
|
|
||||||
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
|
|
||||||
|
def quote(s: str) -> str:
|
||||||
|
escaped = s.replace('"', r"\"").replace("\n", r"\n").replace("\\", "\\\\")
|
||||||
|
return '"{}"'.format(escaped)
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
data = toml.load(sys.stdin)
|
||||||
|
|
||||||
|
assert list(data.keys()) == ["source"]
|
||||||
|
|
||||||
|
# this value is non deterministic
|
||||||
|
data["source"]["vendored-sources"]["directory"] = "@vendor@"
|
||||||
|
|
||||||
|
lines = []
|
||||||
|
inner = data["source"]
|
||||||
|
for source, attrs in sorted(inner.items()):
|
||||||
|
lines.append("[source.{}]".format(quote(source)))
|
||||||
|
if source == "vendored-sources":
|
||||||
|
lines.append('"directory" = "@vendor@"\n')
|
||||||
|
else:
|
||||||
|
for key, value in sorted(attrs.items()):
|
||||||
|
attr = "{} = {}".format(quote(key), quote(value))
|
||||||
|
lines.append(attr)
|
||||||
|
lines.append("")
|
||||||
|
|
||||||
|
result = "\n".join(lines)
|
||||||
|
real = toml.loads(result)
|
||||||
|
assert real == data, "output = {} while input = {}".format(real, data)
|
||||||
|
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
Loading…
Reference in a new issue