##// END OF EJS Templates
run-tests: introduce a --pyoxidized option...
marmoute -
r48634:83235fb5 stable
parent child Browse files
Show More
@@ -594,6 +594,11 b' def getparser():'
594 594 action="store_true",
595 595 help="install and use rhg Rust implementation in place of hg",
596 596 )
597 hgconf.add_argument(
598 "--pyoxidized",
599 action="store_true",
600 help="build the hg binary using pyoxidizer",
601 )
597 602 hgconf.add_argument("--compiler", help="compiler to build with")
598 603 hgconf.add_argument(
599 604 '--extra-config-opt',
@@ -731,6 +736,8 b' def parseargs(args, parser):'
731 736 parser.error(
732 737 '--local cannot be used with --with-hg or --with-rhg or --with-chg'
733 738 )
739 if options.pyoxidized:
740 parser.error('--pyoxidized does not work with --local (yet)')
734 741 testdir = os.path.dirname(_sys2bytes(canonpath(sys.argv[0])))
735 742 reporootdir = os.path.dirname(testdir)
736 743 pathandattrs = [(b'hg', 'with_hg')]
@@ -764,6 +771,8 b' def parseargs(args, parser):'
764 771 parser.error('chg does not work on %s' % os.name)
765 772 if (options.rhg or options.with_rhg) and WINDOWS:
766 773 parser.error('rhg does not work on %s' % os.name)
774 if options.pyoxidized and not WINDOWS:
775 parser.error('--pyoxidized is currently Windows only')
767 776 if options.with_chg:
768 777 options.chg = False # no installation to temporary location
769 778 options.with_chg = canonpath(_sys2bytes(options.with_chg))
@@ -3223,6 +3232,16 b' class TestRunner(object):'
3223 3232 rhgbindir = os.path.dirname(os.path.realpath(self.options.with_rhg))
3224 3233 self._hgcommand = os.path.basename(self.options.with_rhg)
3225 3234
3235 if self.options.pyoxidized:
3236 testdir = os.path.dirname(_sys2bytes(canonpath(sys.argv[0])))
3237 reporootdir = os.path.dirname(testdir)
3238 # XXX we should ideally install stuff instead of using the local build
3239 bin_path = (
3240 b'build/pyoxidizer/x86_64-pc-windows-msvc/release/app/hg.exe'
3241 )
3242 full_path = os.path.join(reporootdir, bin_path)
3243 self._hgcommand = full_path
3244
3226 3245 osenvironb[b"BINDIR"] = self._bindir
3227 3246 osenvironb[b"PYTHON"] = PYTHON
3228 3247
@@ -3463,6 +3482,8 b' class TestRunner(object):'
3463 3482 if self.options.rhg:
3464 3483 assert self._installdir
3465 3484 self._installrhg()
3485 elif self.options.pyoxidized:
3486 self._build_pyoxidized()
3466 3487 self._use_correct_mercurial()
3467 3488
3468 3489 log(
@@ -3875,6 +3896,37 b' class TestRunner(object):'
3875 3896 sys.stdout.write(out)
3876 3897 sys.exit(1)
3877 3898
3899 def _build_pyoxidized(self):
3900 """build a pyoxidized version of mercurial into the test environment
3901
3902 Ideally this function would be `install_pyoxidier` and would both build
3903 and install pyoxidier. However we are starting small to get pyoxidizer
3904 build binary to testing quickly.
3905 """
3906 vlog('# build a pyoxidized version of Mercurial')
3907 assert os.path.dirname(self._bindir) == self._installdir
3908 assert self._hgroot, 'must be called after _installhg()'
3909 cmd = b'"%(make)s" pyoxidizer' % {
3910 b'make': b'make',
3911 }
3912 cwd = self._hgroot
3913 vlog("# Running", cmd)
3914 proc = subprocess.Popen(
3915 _bytes2sys(cmd),
3916 shell=True,
3917 cwd=_bytes2sys(cwd),
3918 stdin=subprocess.PIPE,
3919 stdout=subprocess.PIPE,
3920 stderr=subprocess.STDOUT,
3921 )
3922 out, _err = proc.communicate()
3923 if proc.returncode != 0:
3924 if PYTHON3:
3925 sys.stdout.buffer.write(out)
3926 else:
3927 sys.stdout.write(out)
3928 sys.exit(1)
3929
3878 3930 def _outputcoverage(self):
3879 3931 """Produce code coverage output."""
3880 3932 import coverage
General Comments 0
You need to be logged in to leave comments. Login now