Show More
@@ -38,6 +38,7 b' import tempfile' | |||
|
38 | 38 | import textwrap |
|
39 | 39 | import time |
|
40 | 40 | import traceback |
|
41 | import warnings | |
|
41 | 42 | import zlib |
|
42 | 43 | |
|
43 | 44 | from . import ( |
@@ -156,6 +157,31 b' def bitsfrom(container):' | |||
|
156 | 157 | bits |= bit |
|
157 | 158 | return bits |
|
158 | 159 | |
|
160 | # python 2.6 still have deprecation warning enabled by default. We do not want | |
|
161 | # to display anything to standard user so detect if we are running test and | |
|
162 | # only use python deprecation warning in this case. | |
|
163 | _dowarn = bool(encoding.environ.get('HGEMITWARNINGS')) | |
|
164 | if _dowarn: | |
|
165 | # explicitly unfilter our warning for python 2.7 | |
|
166 | # | |
|
167 | # The option of setting PYTHONWARNINGS in the test runner was investigated. | |
|
168 | # However, module name set through PYTHONWARNINGS was exactly matched, so | |
|
169 | # we cannot set 'mercurial' and have it match eg: 'mercurial.scmutil'. This | |
|
170 | # makes the whole PYTHONWARNINGS thing useless for our usecase. | |
|
171 | warnings.filterwarnings('default', '', DeprecationWarning, 'mercurial') | |
|
172 | warnings.filterwarnings('default', '', DeprecationWarning, 'hgext') | |
|
173 | warnings.filterwarnings('default', '', DeprecationWarning, 'hgext3rd') | |
|
174 | ||
|
175 | def nouideprecwarn(msg, version, stacklevel=1): | |
|
176 | """Issue an python native deprecation warning | |
|
177 | ||
|
178 | This is a noop outside of tests, use 'ui.deprecwarn' when possible. | |
|
179 | """ | |
|
180 | if _dowarn: | |
|
181 | msg += ("\n(compatibility will be dropped after Mercurial-%s," | |
|
182 | " update your code.)") % version | |
|
183 | warnings.warn(msg, DeprecationWarning, stacklevel + 1) | |
|
184 | ||
|
159 | 185 | DIGESTS = { |
|
160 | 186 | 'md5': hashlib.md5, |
|
161 | 187 | 'sha1': hashlib.sha1, |
@@ -884,6 +884,7 b' class Test(unittest.TestCase):' | |||
|
884 | 884 | env = os.environ.copy() |
|
885 | 885 | if sysconfig is not None: |
|
886 | 886 | env['PYTHONUSERBASE'] = sysconfig.get_config_var('userbase') |
|
887 | env['HGEMITWARNINGS'] = '1' | |
|
887 | 888 | env['TESTTMP'] = self._testtmp |
|
888 | 889 | env['HOME'] = self._testtmp |
|
889 | 890 | # This number should match portneeded in _getport |
@@ -3,7 +3,7 b'' | |||
|
3 | 3 | > """A small extension that tests our developer warnings |
|
4 | 4 | > """ |
|
5 | 5 | > |
|
6 | > from mercurial import cmdutil, repair | |
|
6 | > from mercurial import cmdutil, repair, util | |
|
7 | 7 | > |
|
8 | 8 | > cmdtable = {} |
|
9 | 9 | > command = cmdutil.command(cmdtable) |
@@ -58,6 +58,9 b'' | |||
|
58 | 58 | > def foobar(ui): |
|
59 | 59 | > ui.deprecwarn('foorbar is deprecated, go shopping', '42.1337') |
|
60 | 60 | > foobar(ui) |
|
61 | > @command('nouiwarning', [], '') | |
|
62 | > def nouiwarning(ui, repo): | |
|
63 | > util.nouideprecwarn('this is a test', '13.37') | |
|
61 | 64 | > EOF |
|
62 | 65 | |
|
63 | 66 | $ cat << EOF >> $HGRCPATH |
@@ -163,4 +166,15 b' Test programming error failure:' | |||
|
163 | 166 | Traceback (most recent call last): |
|
164 | 167 | mercurial.error.ProgrammingError: transaction requires locking |
|
165 | 168 | |
|
169 | Old style deprecation warning | |
|
170 | ||
|
171 | $ hg nouiwarning | |
|
172 | $TESTTMP/buggylocking.py:61: DeprecationWarning: this is a test | |
|
173 | (compatibility will be dropped after Mercurial-13.37, update your code.) | |
|
174 | util.nouideprecwarn('this is a test', '13.37') | |
|
175 | ||
|
176 | (disabled outside of test run) | |
|
177 | ||
|
178 | $ HGEMITWARNINGS= hg nouiwarning | |
|
179 | ||
|
166 | 180 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now