--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/packaging/packaging.py Wed Oct 23 18:37:36 2019 -0700
@@ -0,0 +1,74 @@
+#!/usr/bin/env python3
+#
+# packaging.py - Mercurial packaging functionality
+#
+# Copyright 2019 Gregory Szorc <gregory.szorc@gmail.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+import os
+import pathlib
+import subprocess
+import sys
+import venv
+
+
+HERE = pathlib.Path(os.path.abspath(__file__)).parent
+REQUIREMENTS_TXT = HERE / "requirements.txt"
+SOURCE_DIR = HERE.parent.parent
+VENV = SOURCE_DIR / "build" / "venv-packaging"
+
+
+def bootstrap():
+ venv_created = not VENV.exists()
+
+ VENV.parent.mkdir(exist_ok=True)
+
+ venv.create(VENV, with_pip=True)
+
+ if os.name == "nt":
+ venv_bin = VENV / "Scripts"
+ pip = venv_bin / "pip.exe"
+ python = venv_bin / "python.exe"
+ else:
+ venv_bin = VENV / "bin"
+ pip = venv_bin / "pip"
+ python = venv_bin / "python"
+
+ args = [
+ str(pip),
+ "install",
+ "-r",
+ str(REQUIREMENTS_TXT),
+ "--disable-pip-version-check",
+ ]
+
+ if not venv_created:
+ args.append("-q")
+
+ subprocess.run(args, check=True)
+
+ os.environ["HGPACKAGING_BOOTSTRAPPED"] = "1"
+ os.environ["PATH"] = "%s%s%s" % (venv_bin, os.pathsep, os.environ["PATH"])
+
+ subprocess.run([str(python), __file__] + sys.argv[1:], check=True)
+
+
+def run():
+ import hgpackaging.cli as cli
+
+ # Need to strip off main Python executable.
+ cli.main()
+
+
+if __name__ == "__main__":
+ try:
+ if "HGPACKAGING_BOOTSTRAPPED" not in os.environ:
+ bootstrap()
+ else:
+ run()
+ except subprocess.CalledProcessError as e:
+ sys.exit(e.returncode)
+ except KeyboardInterrupt:
+ sys.exit(1)