diff options
Diffstat (limited to 'pkgs/build-support/rust')
-rwxr-xr-x | pkgs/build-support/rust/cargo-vendor-normalise.py | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/pkgs/build-support/rust/cargo-vendor-normalise.py b/pkgs/build-support/rust/cargo-vendor-normalise.py index 19463696856..2d7a1895718 100755 --- a/pkgs/build-support/rust/cargo-vendor-normalise.py +++ b/pkgs/build-support/rust/cargo-vendor-normalise.py @@ -1,32 +1,41 @@ #!/usr/bin/env python -import toml import sys -def escape(s): - return '"'+s.replace('"', r'\"').replace("\n", r"\n").replace("\\", "\\\\")+'"' +import toml + + +def quote(s: str) -> str: + escaped = s.replace('"', r"\"").replace("\n", r"\n").replace("\\", "\\\\") + return '"{}"'.format(escaped) + -data = toml.load(sys.stdin) +def main() -> None: + data = toml.load(sys.stdin) -assert list(data.keys()) == [ "source" ] + assert list(data.keys()) == ["source"] -# this value is non deterministic -data["source"]["vendored-sources"]["directory"] = "@vendor@" + # 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" + 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("") -real = toml.loads(result) -assert real == data, "output = {} while input = {}".format(real, data) + result = "\n".join(lines) + real = toml.loads(result) + assert real == data, "output = {} while input = {}".format(real, data) -print(result) + print(result) +if __name__ == "__main__": + main() |