summary refs log tree commit diff
path: root/pkgs/build-support/rust
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@thalheim.io>2018-09-11 21:49:16 +0100
committerSymphorien Gibol <symphorien+git@xlumurb.eu>2018-09-11 23:44:14 +0200
commit7bfa20198afce7830ff2daccb4400f03c9f40e0c (patch)
tree6a1c7cb5e77afe44d55c5f9c67687bb2a1978b5c /pkgs/build-support/rust
parentf20b229aa19e92914aba7fe990201be730c07a10 (diff)
downloadnixpkgs-7bfa20198afce7830ff2daccb4400f03c9f40e0c.tar
nixpkgs-7bfa20198afce7830ff2daccb4400f03c9f40e0c.tar.gz
nixpkgs-7bfa20198afce7830ff2daccb4400f03c9f40e0c.tar.bz2
nixpkgs-7bfa20198afce7830ff2daccb4400f03c9f40e0c.tar.lz
nixpkgs-7bfa20198afce7830ff2daccb4400f03c9f40e0c.tar.xz
nixpkgs-7bfa20198afce7830ff2daccb4400f03c9f40e0c.tar.zst
nixpkgs-7bfa20198afce7830ff2daccb4400f03c9f40e0c.zip
fetchcargo: add type checking to cargo-vendor-normalise.py
Diffstat (limited to 'pkgs/build-support/rust')
-rwxr-xr-xpkgs/build-support/rust/cargo-vendor-normalise.py49
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()