mirror of
https://github.com/facebook/sapling.git
synced 2024-10-05 14:28:17 +03:00
4ab483da0e
Summary: Lately we have experienced some issues with the cargo version of our build due to some curl issues. D50680070 fixes the curl issues, but only on the buck side of things. Since our Buck build on Windows is now mature enough and can solve our curl issue, let's switch to it. Reviewed By: quark-zju Differential Revision: D50704305 fbshipit-source-id: 9de86162fdbc6b97eeae074f1c0fbb2bab7ce1d6
77 lines
2.4 KiB
Python
Executable File
77 lines
2.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
#
|
|
# This software may be used and distributed according to the terms of the
|
|
# GNU General Public License version 2.
|
|
|
|
import argparse
|
|
import errno
|
|
import hashlib
|
|
import os
|
|
import struct
|
|
|
|
|
|
MAIN_VERSION = "4.4.2"
|
|
|
|
|
|
def main() -> None:
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument("--version", required=True)
|
|
ap.add_argument("--release", required=True)
|
|
ap.add_argument("--revision", required=True)
|
|
ap.add_argument("output_path")
|
|
args = ap.parse_args()
|
|
|
|
# On POSIX single quotes are interpreted as empty strings, but on Windows
|
|
# they are interpreted as literal single quotes so we have to get rid of
|
|
# them. It's not possible to just use double quotes instead.
|
|
# On Buck this script is called with arguments like
|
|
# --version '%s' --release '%s' --revision '%s' <OUTPUT_PATH>
|
|
# It's not possible to change the single quotes with double ones, because
|
|
# otherwise buck interprets it as if we were empty and <OUTPUT_PATH> gets
|
|
# parsed as a value for revision
|
|
args.version = args.version.replace("'", "")
|
|
args.release = args.release.replace("'", "")
|
|
args.revision = args.revision.replace("'", "")
|
|
|
|
if args.version and args.release:
|
|
sub_version = "%s_%s_%s" % (args.version, args.release, args.revision[:8])
|
|
elif args.revision:
|
|
sub_version = args.revision[:8]
|
|
else:
|
|
# Buck does not pass in any build data info in dev builds
|
|
sub_version = "dev"
|
|
|
|
version = "%s_%s" % (MAIN_VERSION, sub_version)
|
|
versionb = version.encode("ascii")
|
|
versionhash = struct.unpack(">Q", hashlib.sha1(versionb).digest()[:8])[0]
|
|
|
|
if args.output_path.endswith("py"):
|
|
contents = (
|
|
"# auto-generated by the build\n" 'version = "%s"\n' "versionhash = %s\n"
|
|
) % (version, versionhash)
|
|
elif args.output_path.endswith("rs"):
|
|
contents = (
|
|
(
|
|
r"""// auto-generated by the build
|
|
pub static VERSION: &'static str = "%s";
|
|
pub static VERSION_HASH: &'static str = "%s";
|
|
"""
|
|
)
|
|
% (version, versionhash)
|
|
)
|
|
|
|
try:
|
|
output_dir = os.path.dirname(args.output_path)
|
|
os.makedirs(output_dir)
|
|
except OSError as ex:
|
|
if ex.errno != errno.EEXIST:
|
|
raise
|
|
|
|
with open(args.output_path, "w") as f:
|
|
# pyre-fixme[61]: `contents` is undefined, or not always defined.
|
|
f.write(contents)
|
|
|
|
|
|
main()
|