Differences between revisions 4 and 5
Revision 4 as of 2012-01-02 00:21:30
Size: 4903
Comment: Describe MSYS testing
Revision 5 as of 2012-01-10 13:02:08
Size: 5523
Editor: 217
Comment:
Deletions are marked like this. Additions are marked like this.
Line 82: Line 82:

=== Run tests involving Git ===
If you have Git installed on your Windows box, `hg-winhack` will incorrectly detect that git command is available, and will try to run Git-related tests. It will fail to do so, because it cannot run "git.cmd" from shell.
 * If you don't want to run Git tests, edit `hghave` file to `return False` instead of `return matchoutput('git --version 2>&1', r'^git version')`
 * If you prefer Git tests to be executed, find your Git installation folder, enter `cmd` folder and create `git` file (no extension) with the following contents:
{{{
#!/bin/sh
$COMSPEC //C git.cmd $*
}}}
Line 85: Line 95:

Hackable Mercurial for Windows

An approach to easily hack on the Mercurial source on Windows.

1. What is the Hackable package?

Compiling Mercurial is a significant barrier to testing and developing Mercurial on Windows. This package attempts to minimize that barrier by including:

  • a private copy of Python (32-bit)
  • complete Mercurial history
  • pre-compiled extensions (32-bit MinGW GCC)
  • an hg.exe wrapper to add to your path
  • in-place editable source checked out and ready to go

2. Downloading and using

The package can be found here. Simply download, unzip, and run the included hg.exe. This package will not interfere with your existing Mercurial or Python installation.

<!> There is usually no need to download new copies between releases, simply pull and update.

/!\ This package includes no global configuration, so if you're not already using Mercurial, you will need to configure your username and merge tools.

3. How it's built and how to build your own from scratch

Needed components:

  • Python MSI installer, versions 2.4 - 2.7
  • Mercurial source release, see [Downloads]
  • MinGW mingw-get tool

  • The exemaker launcher

Steps:

  • Download all the needed components
  • Install Python with msiexec /i python-2.6.6.msi /qb

  • Unpack the mingw-get tool into c:\MinGW and add c:\MinGW\bin to your path

  • Install the gcc compiler with mingw-get gcc

  • Unpack Mercurial source into c:\hg

  • Copy the Python install from c:\Python26 to c:\hg\hg-python26

  • Edit c:\hg\hg-python26\Lib\distutils\cygwinccompiler.py to remove all references to -mno-cygwin (thanks, GCC!)

  • Build Mercurial extensions in c:\hg with hg-python26\python setup.py build_ext -i --compiler=mingw32

  • Copy the c:\hg\hg to c:\hg.py and change the #! line to '#!hg-python/python.exe'

  • Unpack exemaker and copy exemaker.exe to c:\hg\hg.exe

4. Running the test suite under MSYS

Most of the test suite can be run on windows too (but only in the unreleased 2.1 which currently can be found in the ‘default’ branch). Writing tests and debugging failures might require both knowledge of the traditional unix environment and of the windows environment.

The tests that can’t be run on windows will automatically be skipped, so no test failures should be seen. It is not acceptable that so many tests are skipped - please improve that.

Creating a hg-winhack package and running the test suite requires almost the same environment. The following instructions will thus contain a lot of duplication of the instructions given above, and the instructions could perhaps be merged. (The 2.0.x “hackable” can’t be used in the default / pre-2.1 branch where testing on windows passes cleanly, so new binary modules will have to be built anyway.)

4.1. Install MinGW/MSYS environment

  • Download an MinGW/MSYS base installer from http://sourceforge.net/projects/mingw/files/latest/download , run it and select “MSYS Basic System” component (and “C Compiler”).

  • Launch a console/terminal with: C:\MinGW\msys\1.0\msys.bat --rxvt and enjoy having a decent shell and run the following commands in it

  • Install mandatory extra package (dd): mingw-get install msys-coreutils

  • Install optional extra packages: mingw-get install msys-rxvt msys-vim msys-wget msys-unzip msys-zip msys-openssh

4.2. Build hg-winhack

wget http://python.org/ftp/python/2.7.2/python-2.7.2.msi
cmd /c 'msiexec /i python-2.7.2.msi /qb'   # avoid MSYS magic mangling of '/i'
hg clone http://selenic.com/hg hg-winhack   # bootstrap somehow
cd hg-winhack
cp -ar c:/Python27 hg-python27   # python can now be uninstalled again
sed -i 's, -mno-cygwin , ,g' hg-python27/Lib/distutils/cygwinccompiler.py
hg-python27/python setup.py build_ext -i --compiler=mingw32
sed 's,^#!/usr/bin/env python,#!hg-python27/python27.dll,g' hg > hg.py
wget http://effbot.org/media/downloads/exemaker-1.2-20041012.zip -O exemaker.zip
unzip -j exemaker.zip '*/exemaker.exe'
rm exemaker.zip
mv exemaker.exe hg.exe
cd ..
zip -r hg-winhack-x.x.zip hg-winhack/

Note that this will leave you with both a hg.exe which can be used from windows, a hg.py which might be picked up if you have python installed, and a hg which might be picked up if you run in MSYS ... and will fail if it can't find python and the Mercurial modules.

4.3. Run the test suite

cd hg-winhack/tests
export TMPDIR=c:/tmp   # to avoid path that contains ~ which in general would require escaping
PATH="`pwd`/../hg-python27:$PATH" ./run-tests.py -l --shell=sh

4.4. Run tests involving Git

If you have Git installed on your Windows box, hg-winhack will incorrectly detect that git command is available, and will try to run Git-related tests. It will fail to do so, because it cannot run "git.cmd" from shell.

  • If you don't want to run Git tests, edit hghave file to return False instead of return matchoutput('git --version 2>&1', r'^git version')

  • If you prefer Git tests to be executed, find your Git installation folder, enter cmd folder and create git file (no extension) with the following contents:

$COMSPEC //C git.cmd $*

5. See also


CategoryDeveloper

HackableMercurial (last edited 2018-12-05 04:34:18 by MattHarbison)