annotate contrib/tcsh_completion_build.sh @ 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 2616325766e3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
1 #!/bin/sh
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
2
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
3 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
4 # tcsh_completion_build.sh - script to generate tcsh completion
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
5 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
6 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
7 # Copyright (C) 2005 TK Soh.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
8 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
9 # This is free software; you can redistribute it and/or modify it under
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
10 # the terms of the GNU General Public License as published by the Free
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
11 # Software Foundation; either version 2 of the License, or (at your
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1157
diff changeset
12 # option) any later version.
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
13 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
14 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
15 # Description
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
16 # -----------
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
17 # This script generates a tcsh source file to support completion
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
18 # of Mercurial commands and options.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
19 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
20 # Instruction:
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
21 # -----------
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
22 # Run this script to generate the tcsh source file, and source
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
23 # the file to add command completion support for Mercurial.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
24 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
25 # tcsh% tcsh_completion.sh FILE
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
26 # tcsh% source FILE
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
27 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
28 # If FILE is not specified, tcsh_completion will be generated.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
29 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
30 # Bugs:
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
31 # ----
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
32 # 1. command specific options are not supported
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
33 # 2. hg commands must be specified immediately after 'hg'.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
34 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
35
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
36 tcsh_file=${1-tcsh_completion}
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
37
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
38 hg_commands=`hg --debug help | \
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
39 sed -e '1,/^list of commands:/d' \
7766
2b2548342265 Update tcsh completion scripts with new commands and for new help output.
Gilles Moris <gilles.moris@free.fr>
parents: 1308
diff changeset
40 -e '/^enabled extensions:/,$d' \
13515
2616325766e3 contrib: update tcsh_completion for Mercurial 1.8
Gilles Moris <gilles.moris@free.fr>
parents: 7766
diff changeset
41 -e '/^additional help topics:/,$d' \
1157
6e66235084d9 tcsh_completion_build.sh: fixed error caused by xargs on Linux
TK Soh <tksoh@freescale.com>
parents: 1155
diff changeset
42 -e '/^ [^ ]/!d; s/[,:]//g;' | \
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
43 xargs -n5 | \
1157
6e66235084d9 tcsh_completion_build.sh: fixed error caused by xargs on Linux
TK Soh <tksoh@freescale.com>
parents: 1155
diff changeset
44 sed -e '$!s/$/ \\\\/g; 2,$s/^ */ /g'`
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
45
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
46 hg_global_options=`hg -v help | \
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
47 sed -e '1,/global/d;/^ *-/!d; s/ [^- ].*//' | \
1157
6e66235084d9 tcsh_completion_build.sh: fixed error caused by xargs on Linux
TK Soh <tksoh@freescale.com>
parents: 1155
diff changeset
48 sed -e 's/ *$//; $!s/$/ \\\\/g; 2,$s/^ */ /g'`
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
49
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
50 hg_version=`hg version | sed -e '1q'`
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
51
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
52 script_name=`basename $0`
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
53
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
54 cat > $tcsh_file <<END
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
55 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
56 # tcsh completion for Mercurial
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
57 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
58 # This file has been auto-generated by $script_name for
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1157
diff changeset
59 # $hg_version
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
60 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
61 # Copyright (C) 2005 TK Soh.
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
62 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
63 # This is free software; you can redistribute it and/or modify it under
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
64 # the terms of the GNU General Public License as published by the Free
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
65 # Software Foundation; either version 2 of the License, or (at your
1308
2073e5a71008 Cleanup of tabs and trailing spaces.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1157
diff changeset
66 # option) any later version.
1155
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
67 #
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
68
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
69 complete hg \\
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
70 'n/--cwd/d/' 'n/-R/d/' 'n/--repository/d/' \\
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
71 'C/-/($hg_global_options)/' \\
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
72 'p/1/($hg_commands)/'
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
73
92697ad28f08 Add contrib script for generating tcsh completion source
TK Soh <teekaysoh@yahoo.com>
parents:
diff changeset
74 END