summary refs log tree commit diff
path: root/pkgs/build-support/rust/cargo-vendor-normalise.py
blob: 2d7a1895718406e0bc9d9a0a20f6b80b7e906997 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python

import sys

import toml


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()