1954 """Install hg into the test environment. |
1954 """Install hg into the test environment. |
1955 |
1955 |
1956 This will also configure hg with the appropriate testing settings. |
1956 This will also configure hg with the appropriate testing settings. |
1957 """ |
1957 """ |
1958 vlog("# Performing temporary installation of HG") |
1958 vlog("# Performing temporary installation of HG") |
1959 installerrs = os.path.join("tests", "install.err") |
1959 installerrs = os.path.join(b"tests", b"install.err") |
1960 compiler = '' |
1960 compiler = '' |
1961 if self.options.compiler: |
1961 if self.options.compiler: |
1962 compiler = '--compiler ' + self.options.compiler |
1962 compiler = '--compiler ' + self.options.compiler |
1963 if self.options.pure: |
1963 if self.options.pure: |
1964 pure = "--pure" |
1964 pure = b"--pure" |
1965 else: |
1965 else: |
1966 pure = "" |
1966 pure = b"" |
1967 py3 = '' |
1967 py3 = '' |
1968 if sys.version_info[0] == 3: |
|
1969 py3 = '--c2to3' |
|
1970 |
1968 |
1971 # Run installer in hg root |
1969 # Run installer in hg root |
1972 script = os.path.realpath(sys.argv[0]) |
1970 script = os.path.realpath(sys.argv[0]) |
|
1971 exe = sys.executable |
|
1972 if sys.version_info[0] == 3: |
|
1973 py3 = b'--c2to3' |
|
1974 compiler = compiler.encode('utf-8') |
|
1975 script = script.encode('utf-8') |
|
1976 exe = exe.encode('utf-8') |
1973 hgroot = os.path.dirname(os.path.dirname(script)) |
1977 hgroot = os.path.dirname(os.path.dirname(script)) |
1974 self._hgroot = hgroot |
1978 self._hgroot = hgroot |
1975 os.chdir(hgroot) |
1979 os.chdir(hgroot) |
1976 nohome = '--home=""' |
1980 nohome = b'--home=""' |
1977 if os.name == 'nt': |
1981 if os.name == 'nt': |
1978 # The --home="" trick works only on OS where os.sep == '/' |
1982 # The --home="" trick works only on OS where os.sep == '/' |
1979 # because of a distutils convert_path() fast-path. Avoid it at |
1983 # because of a distutils convert_path() fast-path. Avoid it at |
1980 # least on Windows for now, deal with .pydistutils.cfg bugs |
1984 # least on Windows for now, deal with .pydistutils.cfg bugs |
1981 # when they happen. |
1985 # when they happen. |
1982 nohome = '' |
1986 nohome = b'' |
1983 cmd = ('%(exe)s setup.py %(py3)s %(pure)s clean --all' |
1987 cmd = (b'%(exe)s setup.py %(py3)s %(pure)s clean --all' |
1984 ' build %(compiler)s --build-base="%(base)s"' |
1988 b' build %(compiler)s --build-base="%(base)s"' |
1985 ' install --force --prefix="%(prefix)s"' |
1989 b' install --force --prefix="%(prefix)s"' |
1986 ' --install-lib="%(libdir)s"' |
1990 b' --install-lib="%(libdir)s"' |
1987 ' --install-scripts="%(bindir)s" %(nohome)s >%(logfile)s 2>&1' |
1991 b' --install-scripts="%(bindir)s" %(nohome)s >%(logfile)s 2>&1' |
1988 % {'exe': sys.executable, 'py3': py3, 'pure': pure, |
1992 % {b'exe': exe, b'py3': py3, b'pure': pure, |
1989 'compiler': compiler, |
1993 b'compiler': compiler, |
1990 'base': os.path.join(self._hgtmp, b"build"), |
1994 b'base': os.path.join(self._hgtmp, b"build"), |
1991 'prefix': self._installdir, 'libdir': self._pythondir, |
1995 b'prefix': self._installdir, b'libdir': self._pythondir, |
1992 'bindir': self._bindir, |
1996 b'bindir': self._bindir, |
1993 'nohome': nohome, 'logfile': installerrs}) |
1997 b'nohome': nohome, b'logfile': installerrs}) |
1994 |
1998 |
1995 # setuptools requires install directories to exist. |
1999 # setuptools requires install directories to exist. |
1996 def makedirs(p): |
2000 def makedirs(p): |
1997 try: |
2001 try: |
1998 os.makedirs(p) |
2002 os.makedirs(p) |
2028 f = open(os.path.join(self._bindir, 'hg'), 'wb') |
2032 f = open(os.path.join(self._bindir, 'hg'), 'wb') |
2029 for line in lines: |
2033 for line in lines: |
2030 f.write(line + '\n') |
2034 f.write(line + '\n') |
2031 f.close() |
2035 f.close() |
2032 |
2036 |
2033 hgbat = os.path.join(self._bindir, 'hg.bat') |
2037 hgbat = os.path.join(self._bindir, b'hg.bat') |
2034 if os.path.isfile(hgbat): |
2038 if os.path.isfile(hgbat): |
2035 # hg.bat expects to be put in bin/scripts while run-tests.py |
2039 # hg.bat expects to be put in bin/scripts while run-tests.py |
2036 # installation layout put it in bin/ directly. Fix it |
2040 # installation layout put it in bin/ directly. Fix it |
2037 f = open(hgbat, 'rb') |
2041 f = open(hgbat, 'rb') |
2038 data = f.read() |
2042 data = f.read() |
2039 f.close() |
2043 f.close() |
2040 if '"%~dp0..\python" "%~dp0hg" %*' in data: |
2044 if b'"%~dp0..\python" "%~dp0hg" %*' in data: |
2041 data = data.replace('"%~dp0..\python" "%~dp0hg" %*', |
2045 data = data.replace(b'"%~dp0..\python" "%~dp0hg" %*', |
2042 '"%~dp0python" "%~dp0hg" %*') |
2046 b'"%~dp0python" "%~dp0hg" %*') |
2043 f = open(hgbat, 'wb') |
2047 f = open(hgbat, 'wb') |
2044 f.write(data) |
2048 f.write(data) |
2045 f.close() |
2049 f.close() |
2046 else: |
2050 else: |
2047 print('WARNING: cannot fix hg.bat reference to python.exe') |
2051 print('WARNING: cannot fix hg.bat reference to python.exe') |
2069 if ((self._bindir == self._pythondir) and |
2073 if ((self._bindir == self._pythondir) and |
2070 (self._bindir != self._tmpbindir)): |
2074 (self._bindir != self._tmpbindir)): |
2071 # The pythondir has been inferred from --with-hg flag. |
2075 # The pythondir has been inferred from --with-hg flag. |
2072 # We cannot expect anything sensible here. |
2076 # We cannot expect anything sensible here. |
2073 return |
2077 return |
2074 expecthg = os.path.join(self._pythondir, 'mercurial') |
2078 expecthg = os.path.join(self._pythondir, b'mercurial') |
2075 actualhg = self._gethgpath() |
2079 actualhg = self._gethgpath() |
2076 if os.path.abspath(actualhg) != os.path.abspath(expecthg): |
2080 if os.path.abspath(actualhg) != os.path.abspath(expecthg): |
2077 sys.stderr.write('warning: %s with unexpected mercurial lib: %s\n' |
2081 sys.stderr.write('warning: %s with unexpected mercurial lib: %s\n' |
2078 ' (expected %s)\n' |
2082 ' (expected %s)\n' |
2079 % (verb, actualhg, expecthg)) |
2083 % (verb, actualhg, expecthg)) |