diff --git a/build_extra/rust/get_version_hash.py b/build_extra/rust/get_version_hash.py deleted file mode 100644 index 7d37cbf9b3..0000000000 --- a/build_extra/rust/get_version_hash.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright 2018 the Deno authors. All rights reserved. MIT license. - -# This script computes the sha256sum of the first command line argument, and -# writes a few hex digits of it to stdout. It is used by rust.gni to derive a -# unique string (without dots/special characters) from a crate version number. - -from hashlib import sha256 -import sys - -if len(sys.argv) != 2: - raise Exception('Expected exactly one argument.') - -hash = sha256(sys.argv[1]).hexdigest() -sys.stdout.write(hash[0:8]) diff --git a/build_extra/rust/rust.gni b/build_extra/rust/rust.gni index 5869539176..1600602e08 100644 --- a/build_extra/rust/rust.gni +++ b/build_extra/rust/rust.gni @@ -120,8 +120,14 @@ template("run_rustc") { if (defined(crate_version)) { # Compute the sha256sum of the version number. See comments below. # Note that we do this only if there are multiple versions of this crate. - hash = - exec_script("get_version_hash.py", [ crate_version ], "trim string") + hash = exec_script("//tools/sha256sum.py", + [ + "--input", + crate_version, + "--format", + "%.8s", + ], + "trim string") args += [ # In our build setup, all crates are built in the same directory. The diff --git a/tools/sha256sum.py b/tools/sha256sum.py new file mode 100644 index 0000000000..d3273d5ba9 --- /dev/null +++ b/tools/sha256sum.py @@ -0,0 +1,70 @@ +# Copyright 2018 the Deno authors. All rights reserved. MIT license. +""" +Computes the SHA256 hash and formats the result. +""" + +import argparse +from hashlib import sha256 +import os +import sys + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + + # Arguments specifying where input comes from. + # If multiple sources are specified, they are all concatenated together. + parser.add_argument( + "--input", + action="append", + dest="input", + type=str, + metavar="TEXT", + help="Hash literal text specified on the command line.") + parser.add_argument( + "--infile", + action="append", + dest="input", + type=read_file, + metavar="FILE", + help="Hash the contents of a file.") + + # Arguments dealing with output. + parser.add_argument( + "--format", + type=str, + dest="format", + default="%s", + metavar="TEMPLATE", + help="Format output using Python template (default = '%%s').") + parser.add_argument( + "--outfile", + dest="outfile", + type=argparse.FileType("wb"), + default=sys.stdout, + metavar="FILE", + help="Write the formatted hash to a file (default = stdout).") + + # Parse arguments. Print usage and exit if given no input. + args = parser.parse_args() + if (not args.input): + parser.print_usage() + return 1 + + # Compute the hash of all inputs concatenated together. + hasher = sha256() + for data in args.input: + hasher.update(data) + hash = hasher.hexdigest() + + # Format and write to specified out file (or the default, stdout). + args.outfile.write(args.format % hash) + + +def read_file(filename): + with open(filename, "rb") as file: + return file.read() + + +if __name__ == '__main__': + sys.exit(main())