annotate tests/test-1102.t @ 27142:060f83d219b9

extensions: refuse to load extensions if minimum hg version not met As the author of several 3rd party extensions, I frequently see bug reports from users attempting to run my extension with an old version of Mercurial that I no longer support in my extension. Oftentimes, the extension will import just fine. But as soon as we run extsetup(), reposetup(), or get into the guts of a wrapped function, we encounter an exception and abort. Today, Mercurial will print a message about extensions that don't have a "testedwith" declaring explicit compatibility with the current version. The existing mechanism is a good start. But it isn't as robust as I would like. Specifically, Mercurial assumes compatibility by default. This means extension authors must perform compatibility checking in their extsetup() or we wait and see if we encounter an abort at runtime. And, compatibility checking can involve a lot of code and lots of error checking. It's a lot of effort for extension authors. Oftentimes, extension authors know which versions of Mercurial there extension works on and more importantly where it is broken. This patch introduces a magic "minimumhgversion" attribute in extensions. When found, the extension loading mechanism will compare the declared version against the current Mercurial version. If the extension explicitly states we require a newer Mercurial version, a warning is printed and the extension isn't loaded beyond importing the Python module. This causes a graceful failure while alerting the user of the compatibility issue. I would be receptive to the idea of making the failure more fatal. However, care would need to be taken to not criple every hg command. e.g. the user may use `hg config` to fix the hgrc and if we aborted trying to run that, the user would effectively be locked out of `hg`! A potential future improvement to this functionality would be to catch ImportError for the extension/module and parse the source code for "minimumhgversion = 'XXX'" and do similar checking. This way we could give more information about why the extension failed to load.
author Gregory Szorc <gregory.szorc@gmail.com>
date Tue, 24 Nov 2015 15:16:25 -0800
parents f2719b387380
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11847
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
1 $ rm -rf a
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
2 $ hg init a
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
3 $ cd a
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
4 $ echo a > a
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
5 $ hg ci -Am0
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
6 adding a
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
7 $ hg tag t1 # 1
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
8 $ hg tag --remove t1 # 2
6671
938eddd76237 tag: record tag we're superseding, if any (issue 1102)
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
9
11847
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
10 $ hg co 1
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
11 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
13135
1c1ca9d393f4 tag: abort if not at a branch head (issue2552)
Kevin Bullock <kbullock@ringworld.org>
parents: 11847
diff changeset
12 $ hg tag -f -r0 t1
11847
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
13 $ hg tags
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
14 tip 3:a49829c4fc11
1eb77c1a281f tests: unify test-1102
Martin Geisler <mg@lazybytes.net>
parents: 6671
diff changeset
15 t1 0:f7b1eb17ad24
6671
938eddd76237 tag: record tag we're superseding, if any (issue 1102)
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
16
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 13135
diff changeset
17 $ cd ..