annotate tests/test-merge6.t @ 20742:3681de20b0a7

parsers: fail fast if Python has wrong minor version (issue4110) This change causes an informative ImportError to be raised when importing the parsers extension module if the minor version of the currently-running Python interpreter doesn't match that of the Python used when compiling the extension module. This change also exposes a parsers.versionerrortext constant in the C implementation of the module. Its presence can be used to determine whether this behavior is present in a version of the module. The value of the constant is the leading text of the ImportError raised and is set to "Python minor version mismatch". Here is an example of what the new error looks like: Traceback (most recent call last): File "test.py", line 1, in <module> import mercurial.parsers ImportError: Python minor version mismatch: The Mercurial extension modules were compiled with Python 2.7.6, but Mercurial is currently using Python with sys.hexversion=33883888: Python 2.5.6 (r256:88840, Nov 18 2012, 05:37:10) [GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] at: /opt/local/Library/Frameworks/Python.framework/Versions/2.5/Resources/ Python.app/Contents/MacOS/Python The reason for raising an error in this scenario is that Python's C API is known not to be compatible from minor version to minor version, even if sys.api_version is the same. See for example this Python bug report about incompatibilities between 2.5 and 2.6+: http://bugs.python.org/issue8118 These incompatibilities can cause Mercurial to break in mysterious, unforeseen ways. For example, when Mercurial compiled with Python 2.7 was run with 2.5, the following crash occurred when running "hg status": http://bz.selenic.com/show_bug.cgi?id=4110 After this crash was fixed, running with Python 2.5 no longer crashes, but the following puzzling behavior still occurs: $ hg status ... File ".../mercurial/changelog.py", line 123, in __init__ revlog.revlog.__init__(self, opener, "00changelog.i") File ".../mercurial/revlog.py", line 251, in __init__ d = self._io.parseindex(i, self._inline) File ".../mercurial/revlog.py", line 158, in parseindex index, cache = parsers.parse_index2(data, inline) TypeError: data is not a string which can be reproduced more simply with: import mercurial.parsers as parsers parsers.parse_index2("", True) Both the crash and the TypeError occurred because the Python C API's PyString_Check() returns the wrong value when the C header files from Python 2.7 are run with Python 2.5. This is an example of an incompatibility of the sort mentioned in the Python bug report above. Failing fast with an informative error message results in a better user experience in cases like the above. The information in the ImportError also simplifies troubleshooting for those on Mercurial mailing lists, the bug tracker, etc. This patch only adds the version check to parsers.c, which is sufficient to affect command-line commands like "hg status" and "hg summary". An idea for a future improvement is to move the version-checking C code to a more central location, and have it run when importing all Mercurial extension modules and not just parsers.c.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Wed, 04 Dec 2013 20:38:27 -0800
parents f2719b387380
children 2428e8ec0793
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
1 $ cat <<EOF > merge
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
2 > import sys, os
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
3 > print "merging for", os.path.basename(sys.argv[1])
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
4 > EOF
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
5 $ HGMERGE="python ../merge"; export HGMERGE
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
6
13956
ffb5c09ba822 tests: remove redundant mkdir
Martin Geisler <mg@lazybytes.net>
parents: 12156
diff changeset
7 $ hg init A1
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
8 $ cd A1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
9 $ echo This is file foo1 > foo
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
10 $ echo This is file bar1 > bar
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
11 $ hg add foo bar
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
12 $ hg commit -m "commit text"
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
13
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
14 $ cd ..
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
15 $ hg clone A1 B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
16 updating to branch default
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
17 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
18
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
19 $ cd A1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
20 $ rm bar
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
21 $ hg remove bar
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
22 $ hg commit -m "commit test"
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
23
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
24 $ cd ../B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
25 $ echo This is file foo22 > foo
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
26 $ hg commit -m "commit test"
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
27
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
28 $ cd ..
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
29 $ hg clone A1 A2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
30 updating to branch default
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
31 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
32 $ hg clone B1 B2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
33 updating to branch default
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
34 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
35
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
36 $ cd A1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
37 $ hg pull ../B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
38 pulling from ../B1
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
39 searching for changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
40 adding changesets
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
41 adding manifests
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
42 adding file changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
43 added 1 changesets with 1 changes to 1 files (+1 heads)
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
44 (run 'hg heads' to see heads, 'hg merge' to merge)
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
45 $ hg merge
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
46 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
47 (branch merge, don't forget to commit)
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
48 $ hg commit -m "commit test"
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
49 bar should remain deleted.
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
50 $ hg manifest --debug
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
51 f9b0e817f6a48de3564c6b2957687c5e7297c5a0 644 foo
616
d45d1c90032e Fix zombie files in merge
maf46@burn.cl.cam.ac.uk
parents:
diff changeset
52
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
53 $ cd ../B2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
54 $ hg pull ../A2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
55 pulling from ../A2
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
56 searching for changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
57 adding changesets
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
58 adding manifests
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
59 adding file changes
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
60 added 1 changesets with 0 changes to 0 files (+1 heads)
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
61 (run 'hg heads' to see heads, 'hg merge' to merge)
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
62 $ hg merge
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
63 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
64 (branch merge, don't forget to commit)
12156
4c94b6d0fb1c tests: remove unneeded -d flags
Martin Geisler <mg@lazybytes.net>
parents: 11979
diff changeset
65 $ hg commit -m "commit test"
11979
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
66 bar should remain deleted.
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
67 $ hg manifest --debug
39fb1e4c079f tests: unify test-merge6
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 4295
diff changeset
68 f9b0e817f6a48de3564c6b2957687c5e7297c5a0 644 foo
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 13956
diff changeset
69
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 13956
diff changeset
70 $ cd ..