Show More
@@ -1,62 +1,70 b'' | |||||
1 | # configitems.py - centralized declaration of configuration option |
|
1 | # configitems.py - centralized declaration of configuration option | |
2 | # |
|
2 | # | |
3 | # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net> |
|
3 | # Copyright 2017 Pierre-Yves David <pierre-yves.david@octobus.net> | |
4 | # |
|
4 | # | |
5 | # This software may be used and distributed according to the terms of the |
|
5 | # This software may be used and distributed according to the terms of the | |
6 | # GNU General Public License version 2 or any later version. |
|
6 | # GNU General Public License version 2 or any later version. | |
7 |
|
7 | |||
8 | from __future__ import absolute_import |
|
8 | from __future__ import absolute_import | |
9 |
|
9 | |||
10 | import functools |
|
10 | import functools | |
11 |
|
11 | |||
12 | from . import ( |
|
12 | from . import ( | |
13 | error, |
|
13 | error, | |
14 | ) |
|
14 | ) | |
15 |
|
15 | |||
16 | def loadconfigtable(ui, extname, configtable): |
|
16 | def loadconfigtable(ui, extname, configtable): | |
17 | """update config item known to the ui with the extension ones""" |
|
17 | """update config item known to the ui with the extension ones""" | |
18 | for section, items in configtable.items(): |
|
18 | for section, items in configtable.items(): | |
19 |
ui._knownconfig.setdefault(section, {}) |
|
19 | knownitems = ui._knownconfig.setdefault(section, {}) | |
|
20 | knownkeys = set(knownitems) | |||
|
21 | newkeys = set(items) | |||
|
22 | for key in sorted(knownkeys & newkeys): | |||
|
23 | msg = "extension '%s' overwrite config item '%s.%s'" | |||
|
24 | msg %= (extname, section, key) | |||
|
25 | ui.develwarn(msg, config='warn-config') | |||
|
26 | ||||
|
27 | knownitems.update(items) | |||
20 |
|
28 | |||
21 | class configitem(object): |
|
29 | class configitem(object): | |
22 | """represent a known config item |
|
30 | """represent a known config item | |
23 |
|
31 | |||
24 | :section: the official config section where to find this item, |
|
32 | :section: the official config section where to find this item, | |
25 | :name: the official name within the section, |
|
33 | :name: the official name within the section, | |
26 | :default: default value for this item, |
|
34 | :default: default value for this item, | |
27 | """ |
|
35 | """ | |
28 |
|
36 | |||
29 | def __init__(self, section, name, default=None): |
|
37 | def __init__(self, section, name, default=None): | |
30 | self.section = section |
|
38 | self.section = section | |
31 | self.name = name |
|
39 | self.name = name | |
32 | self.default = default |
|
40 | self.default = default | |
33 |
|
41 | |||
34 | coreitems = {} |
|
42 | coreitems = {} | |
35 |
|
43 | |||
36 | def _register(configtable, *args, **kwargs): |
|
44 | def _register(configtable, *args, **kwargs): | |
37 | item = configitem(*args, **kwargs) |
|
45 | item = configitem(*args, **kwargs) | |
38 | section = configtable.setdefault(item.section, {}) |
|
46 | section = configtable.setdefault(item.section, {}) | |
39 | if item.name in section: |
|
47 | if item.name in section: | |
40 | msg = "duplicated config item registration for '%s.%s'" |
|
48 | msg = "duplicated config item registration for '%s.%s'" | |
41 | raise error.ProgrammingError(msg % (item.section, item.name)) |
|
49 | raise error.ProgrammingError(msg % (item.section, item.name)) | |
42 | section[item.name] = item |
|
50 | section[item.name] = item | |
43 |
|
51 | |||
44 | # Registering actual config items |
|
52 | # Registering actual config items | |
45 |
|
53 | |||
46 | def getitemregister(configtable): |
|
54 | def getitemregister(configtable): | |
47 | return functools.partial(_register, configtable) |
|
55 | return functools.partial(_register, configtable) | |
48 |
|
56 | |||
49 | coreconfigitem = getitemregister(coreitems) |
|
57 | coreconfigitem = getitemregister(coreitems) | |
50 |
|
58 | |||
51 | coreconfigitem('patch', 'fuzz', |
|
59 | coreconfigitem('patch', 'fuzz', | |
52 | default=2, |
|
60 | default=2, | |
53 | ) |
|
61 | ) | |
54 | coreconfigitem('ui', 'clonebundleprefers', |
|
62 | coreconfigitem('ui', 'clonebundleprefers', | |
55 | default=[], |
|
63 | default=[], | |
56 | ) |
|
64 | ) | |
57 | coreconfigitem('ui', 'interactive', |
|
65 | coreconfigitem('ui', 'interactive', | |
58 | default=None, |
|
66 | default=None, | |
59 | ) |
|
67 | ) | |
60 | coreconfigitem('ui', 'quiet', |
|
68 | coreconfigitem('ui', 'quiet', | |
61 | default=False, |
|
69 | default=False, | |
62 | ) |
|
70 | ) |
@@ -1,216 +1,228 b'' | |||||
1 |
|
1 | |||
2 | $ cat << EOF > buggylocking.py |
|
2 | $ cat << EOF > buggylocking.py | |
3 | > """A small extension that tests our developer warnings |
|
3 | > """A small extension that tests our developer warnings | |
4 | > """ |
|
4 | > """ | |
5 | > |
|
5 | > | |
6 | > from mercurial import error, registrar, repair, util |
|
6 | > from mercurial import error, registrar, repair, util | |
7 | > |
|
7 | > | |
8 | > cmdtable = {} |
|
8 | > cmdtable = {} | |
9 | > command = registrar.command(cmdtable) |
|
9 | > command = registrar.command(cmdtable) | |
10 | > |
|
10 | > | |
11 | > @command(b'buggylocking', [], '') |
|
11 | > @command(b'buggylocking', [], '') | |
12 | > def buggylocking(ui, repo): |
|
12 | > def buggylocking(ui, repo): | |
13 | > lo = repo.lock() |
|
13 | > lo = repo.lock() | |
14 | > wl = repo.wlock() |
|
14 | > wl = repo.wlock() | |
15 | > wl.release() |
|
15 | > wl.release() | |
16 | > lo.release() |
|
16 | > lo.release() | |
17 | > |
|
17 | > | |
18 | > @command(b'buggytransaction', [], '') |
|
18 | > @command(b'buggytransaction', [], '') | |
19 | > def buggylocking(ui, repo): |
|
19 | > def buggylocking(ui, repo): | |
20 | > tr = repo.transaction('buggy') |
|
20 | > tr = repo.transaction('buggy') | |
21 | > # make sure we rollback the transaction as we don't want to rely on the__del__ |
|
21 | > # make sure we rollback the transaction as we don't want to rely on the__del__ | |
22 | > tr.release() |
|
22 | > tr.release() | |
23 | > |
|
23 | > | |
24 | > @command(b'properlocking', [], '') |
|
24 | > @command(b'properlocking', [], '') | |
25 | > def properlocking(ui, repo): |
|
25 | > def properlocking(ui, repo): | |
26 | > """check that reentrance is fine""" |
|
26 | > """check that reentrance is fine""" | |
27 | > wl = repo.wlock() |
|
27 | > wl = repo.wlock() | |
28 | > lo = repo.lock() |
|
28 | > lo = repo.lock() | |
29 | > tr = repo.transaction('proper') |
|
29 | > tr = repo.transaction('proper') | |
30 | > tr2 = repo.transaction('proper') |
|
30 | > tr2 = repo.transaction('proper') | |
31 | > lo2 = repo.lock() |
|
31 | > lo2 = repo.lock() | |
32 | > wl2 = repo.wlock() |
|
32 | > wl2 = repo.wlock() | |
33 | > wl2.release() |
|
33 | > wl2.release() | |
34 | > lo2.release() |
|
34 | > lo2.release() | |
35 | > tr2.close() |
|
35 | > tr2.close() | |
36 | > tr.close() |
|
36 | > tr.close() | |
37 | > lo.release() |
|
37 | > lo.release() | |
38 | > wl.release() |
|
38 | > wl.release() | |
39 | > |
|
39 | > | |
40 | > @command(b'nowaitlocking', [], '') |
|
40 | > @command(b'nowaitlocking', [], '') | |
41 | > def nowaitlocking(ui, repo): |
|
41 | > def nowaitlocking(ui, repo): | |
42 | > lo = repo.lock() |
|
42 | > lo = repo.lock() | |
43 | > wl = repo.wlock(wait=False) |
|
43 | > wl = repo.wlock(wait=False) | |
44 | > wl.release() |
|
44 | > wl.release() | |
45 | > lo.release() |
|
45 | > lo.release() | |
46 | > |
|
46 | > | |
47 | > @command(b'stripintr', [], '') |
|
47 | > @command(b'stripintr', [], '') | |
48 | > def stripintr(ui, repo): |
|
48 | > def stripintr(ui, repo): | |
49 | > lo = repo.lock() |
|
49 | > lo = repo.lock() | |
50 | > tr = repo.transaction('foobar') |
|
50 | > tr = repo.transaction('foobar') | |
51 | > try: |
|
51 | > try: | |
52 | > repair.strip(repo.ui, repo, [repo['.'].node()]) |
|
52 | > repair.strip(repo.ui, repo, [repo['.'].node()]) | |
53 | > finally: |
|
53 | > finally: | |
54 | > lo.release() |
|
54 | > lo.release() | |
55 | > @command(b'oldanddeprecated', [], '') |
|
55 | > @command(b'oldanddeprecated', [], '') | |
56 | > def oldanddeprecated(ui, repo): |
|
56 | > def oldanddeprecated(ui, repo): | |
57 | > """test deprecation warning API""" |
|
57 | > """test deprecation warning API""" | |
58 | > def foobar(ui): |
|
58 | > def foobar(ui): | |
59 | > ui.deprecwarn('foorbar is deprecated, go shopping', '42.1337') |
|
59 | > ui.deprecwarn('foorbar is deprecated, go shopping', '42.1337') | |
60 | > foobar(ui) |
|
60 | > foobar(ui) | |
61 | > @command(b'nouiwarning', [], '') |
|
61 | > @command(b'nouiwarning', [], '') | |
62 | > def nouiwarning(ui, repo): |
|
62 | > def nouiwarning(ui, repo): | |
63 | > util.nouideprecwarn('this is a test', '13.37') |
|
63 | > util.nouideprecwarn('this is a test', '13.37') | |
64 | > @command(b'programmingerror', [], '') |
|
64 | > @command(b'programmingerror', [], '') | |
65 | > def programmingerror(ui, repo): |
|
65 | > def programmingerror(ui, repo): | |
66 | > raise error.ProgrammingError('something went wrong', hint='try again') |
|
66 | > raise error.ProgrammingError('something went wrong', hint='try again') | |
67 | > EOF |
|
67 | > EOF | |
68 |
|
68 | |||
69 | $ cat << EOF >> $HGRCPATH |
|
69 | $ cat << EOF >> $HGRCPATH | |
70 | > [extensions] |
|
70 | > [extensions] | |
71 | > buggylocking=$TESTTMP/buggylocking.py |
|
71 | > buggylocking=$TESTTMP/buggylocking.py | |
72 | > mock=$TESTDIR/mockblackbox.py |
|
72 | > mock=$TESTDIR/mockblackbox.py | |
73 | > blackbox= |
|
73 | > blackbox= | |
74 | > [devel] |
|
74 | > [devel] | |
75 | > all-warnings=1 |
|
75 | > all-warnings=1 | |
76 | > EOF |
|
76 | > EOF | |
77 |
|
77 | |||
78 | $ hg init lock-checker |
|
78 | $ hg init lock-checker | |
79 | $ cd lock-checker |
|
79 | $ cd lock-checker | |
80 | $ hg buggylocking |
|
80 | $ hg buggylocking | |
81 | devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob) |
|
81 | devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob) | |
82 | $ cat << EOF >> $HGRCPATH |
|
82 | $ cat << EOF >> $HGRCPATH | |
83 | > [devel] |
|
83 | > [devel] | |
84 | > all=0 |
|
84 | > all=0 | |
85 | > check-locks=1 |
|
85 | > check-locks=1 | |
86 | > EOF |
|
86 | > EOF | |
87 | $ hg buggylocking |
|
87 | $ hg buggylocking | |
88 | devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob) |
|
88 | devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob) | |
89 | $ hg buggylocking --traceback |
|
89 | $ hg buggylocking --traceback | |
90 | devel-warn: "wlock" acquired after "lock" at: |
|
90 | devel-warn: "wlock" acquired after "lock" at: | |
91 | */hg:* in * (glob) |
|
91 | */hg:* in * (glob) | |
92 | */mercurial/dispatch.py:* in run (glob) |
|
92 | */mercurial/dispatch.py:* in run (glob) | |
93 | */mercurial/dispatch.py:* in dispatch (glob) |
|
93 | */mercurial/dispatch.py:* in dispatch (glob) | |
94 | */mercurial/dispatch.py:* in _runcatch (glob) |
|
94 | */mercurial/dispatch.py:* in _runcatch (glob) | |
95 | */mercurial/dispatch.py:* in _callcatch (glob) |
|
95 | */mercurial/dispatch.py:* in _callcatch (glob) | |
96 | */mercurial/scmutil.py* in callcatch (glob) |
|
96 | */mercurial/scmutil.py* in callcatch (glob) | |
97 | */mercurial/dispatch.py:* in _runcatchfunc (glob) |
|
97 | */mercurial/dispatch.py:* in _runcatchfunc (glob) | |
98 | */mercurial/dispatch.py:* in _dispatch (glob) |
|
98 | */mercurial/dispatch.py:* in _dispatch (glob) | |
99 | */mercurial/dispatch.py:* in runcommand (glob) |
|
99 | */mercurial/dispatch.py:* in runcommand (glob) | |
100 | */mercurial/dispatch.py:* in _runcommand (glob) |
|
100 | */mercurial/dispatch.py:* in _runcommand (glob) | |
101 | */mercurial/dispatch.py:* in <lambda> (glob) |
|
101 | */mercurial/dispatch.py:* in <lambda> (glob) | |
102 | */mercurial/util.py:* in check (glob) |
|
102 | */mercurial/util.py:* in check (glob) | |
103 | $TESTTMP/buggylocking.py:* in buggylocking (glob) |
|
103 | $TESTTMP/buggylocking.py:* in buggylocking (glob) | |
104 | $ hg properlocking |
|
104 | $ hg properlocking | |
105 | $ hg nowaitlocking |
|
105 | $ hg nowaitlocking | |
106 |
|
106 | |||
107 | $ echo a > a |
|
107 | $ echo a > a | |
108 | $ hg add a |
|
108 | $ hg add a | |
109 | $ hg commit -m a |
|
109 | $ hg commit -m a | |
110 | $ hg stripintr 2>&1 | egrep -v '^(\*\*| )' |
|
110 | $ hg stripintr 2>&1 | egrep -v '^(\*\*| )' | |
111 | Traceback (most recent call last): |
|
111 | Traceback (most recent call last): | |
112 | mercurial.error.ProgrammingError: cannot strip from inside a transaction |
|
112 | mercurial.error.ProgrammingError: cannot strip from inside a transaction | |
113 |
|
113 | |||
114 | $ hg oldanddeprecated |
|
114 | $ hg oldanddeprecated | |
115 | devel-warn: foorbar is deprecated, go shopping |
|
115 | devel-warn: foorbar is deprecated, go shopping | |
116 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob) |
|
116 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob) | |
117 |
|
117 | |||
118 | $ hg oldanddeprecated --traceback |
|
118 | $ hg oldanddeprecated --traceback | |
119 | devel-warn: foorbar is deprecated, go shopping |
|
119 | devel-warn: foorbar is deprecated, go shopping | |
120 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: |
|
120 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: | |
121 | */hg:* in <module> (glob) |
|
121 | */hg:* in <module> (glob) | |
122 | */mercurial/dispatch.py:* in run (glob) |
|
122 | */mercurial/dispatch.py:* in run (glob) | |
123 | */mercurial/dispatch.py:* in dispatch (glob) |
|
123 | */mercurial/dispatch.py:* in dispatch (glob) | |
124 | */mercurial/dispatch.py:* in _runcatch (glob) |
|
124 | */mercurial/dispatch.py:* in _runcatch (glob) | |
125 | */mercurial/dispatch.py:* in _callcatch (glob) |
|
125 | */mercurial/dispatch.py:* in _callcatch (glob) | |
126 | */mercurial/scmutil.py* in callcatch (glob) |
|
126 | */mercurial/scmutil.py* in callcatch (glob) | |
127 | */mercurial/dispatch.py:* in _runcatchfunc (glob) |
|
127 | */mercurial/dispatch.py:* in _runcatchfunc (glob) | |
128 | */mercurial/dispatch.py:* in _dispatch (glob) |
|
128 | */mercurial/dispatch.py:* in _dispatch (glob) | |
129 | */mercurial/dispatch.py:* in runcommand (glob) |
|
129 | */mercurial/dispatch.py:* in runcommand (glob) | |
130 | */mercurial/dispatch.py:* in _runcommand (glob) |
|
130 | */mercurial/dispatch.py:* in _runcommand (glob) | |
131 | */mercurial/dispatch.py:* in <lambda> (glob) |
|
131 | */mercurial/dispatch.py:* in <lambda> (glob) | |
132 | */mercurial/util.py:* in check (glob) |
|
132 | */mercurial/util.py:* in check (glob) | |
133 | $TESTTMP/buggylocking.py:* in oldanddeprecated (glob) |
|
133 | $TESTTMP/buggylocking.py:* in oldanddeprecated (glob) | |
134 | $ hg blackbox -l 7 |
|
134 | $ hg blackbox -l 7 | |
135 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated |
|
135 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated | |
136 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping |
|
136 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping | |
137 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob) |
|
137 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob) | |
138 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated exited 0 after * seconds (glob) |
|
138 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated exited 0 after * seconds (glob) | |
139 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback |
|
139 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback | |
140 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping |
|
140 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping | |
141 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: |
|
141 | (compatibility will be dropped after Mercurial-42.1337, update your code.) at: | |
142 | */hg:* in <module> (glob) |
|
142 | */hg:* in <module> (glob) | |
143 | */mercurial/dispatch.py:* in run (glob) |
|
143 | */mercurial/dispatch.py:* in run (glob) | |
144 | */mercurial/dispatch.py:* in dispatch (glob) |
|
144 | */mercurial/dispatch.py:* in dispatch (glob) | |
145 | */mercurial/dispatch.py:* in _runcatch (glob) |
|
145 | */mercurial/dispatch.py:* in _runcatch (glob) | |
146 | */mercurial/dispatch.py:* in _callcatch (glob) |
|
146 | */mercurial/dispatch.py:* in _callcatch (glob) | |
147 | */mercurial/scmutil.py* in callcatch (glob) |
|
147 | */mercurial/scmutil.py* in callcatch (glob) | |
148 | */mercurial/dispatch.py:* in _runcatchfunc (glob) |
|
148 | */mercurial/dispatch.py:* in _runcatchfunc (glob) | |
149 | */mercurial/dispatch.py:* in _dispatch (glob) |
|
149 | */mercurial/dispatch.py:* in _dispatch (glob) | |
150 | */mercurial/dispatch.py:* in runcommand (glob) |
|
150 | */mercurial/dispatch.py:* in runcommand (glob) | |
151 | */mercurial/dispatch.py:* in _runcommand (glob) |
|
151 | */mercurial/dispatch.py:* in _runcommand (glob) | |
152 | */mercurial/dispatch.py:* in <lambda> (glob) |
|
152 | */mercurial/dispatch.py:* in <lambda> (glob) | |
153 | */mercurial/util.py:* in check (glob) |
|
153 | */mercurial/util.py:* in check (glob) | |
154 | $TESTTMP/buggylocking.py:* in oldanddeprecated (glob) |
|
154 | $TESTTMP/buggylocking.py:* in oldanddeprecated (glob) | |
155 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback exited 0 after * seconds (glob) |
|
155 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback exited 0 after * seconds (glob) | |
156 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> blackbox -l 7 |
|
156 | 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> blackbox -l 7 | |
157 |
|
157 | |||
158 | Test programming error failure: |
|
158 | Test programming error failure: | |
159 |
|
159 | |||
160 | $ hg buggytransaction 2>&1 | egrep -v '^ ' |
|
160 | $ hg buggytransaction 2>&1 | egrep -v '^ ' | |
161 | ** Unknown exception encountered with possibly-broken third-party extension buggylocking |
|
161 | ** Unknown exception encountered with possibly-broken third-party extension buggylocking | |
162 | ** which supports versions unknown of Mercurial. |
|
162 | ** which supports versions unknown of Mercurial. | |
163 | ** Please disable buggylocking and try your action again. |
|
163 | ** Please disable buggylocking and try your action again. | |
164 | ** If that fixes the bug please report it to the extension author. |
|
164 | ** If that fixes the bug please report it to the extension author. | |
165 | ** Python * (glob) |
|
165 | ** Python * (glob) | |
166 | ** Mercurial Distributed SCM (*) (glob) |
|
166 | ** Mercurial Distributed SCM (*) (glob) | |
167 | ** Extensions loaded: * (glob) |
|
167 | ** Extensions loaded: * (glob) | |
168 | ** ProgrammingError: transaction requires locking |
|
168 | ** ProgrammingError: transaction requires locking | |
169 | Traceback (most recent call last): |
|
169 | Traceback (most recent call last): | |
170 | mercurial.error.ProgrammingError: transaction requires locking |
|
170 | mercurial.error.ProgrammingError: transaction requires locking | |
171 |
|
171 | |||
172 | $ hg programmingerror 2>&1 | egrep -v '^ ' |
|
172 | $ hg programmingerror 2>&1 | egrep -v '^ ' | |
173 | ** Unknown exception encountered with possibly-broken third-party extension buggylocking |
|
173 | ** Unknown exception encountered with possibly-broken third-party extension buggylocking | |
174 | ** which supports versions unknown of Mercurial. |
|
174 | ** which supports versions unknown of Mercurial. | |
175 | ** Please disable buggylocking and try your action again. |
|
175 | ** Please disable buggylocking and try your action again. | |
176 | ** If that fixes the bug please report it to the extension author. |
|
176 | ** If that fixes the bug please report it to the extension author. | |
177 | ** Python * (glob) |
|
177 | ** Python * (glob) | |
178 | ** Mercurial Distributed SCM (*) (glob) |
|
178 | ** Mercurial Distributed SCM (*) (glob) | |
179 | ** Extensions loaded: * (glob) |
|
179 | ** Extensions loaded: * (glob) | |
180 | ** ProgrammingError: something went wrong |
|
180 | ** ProgrammingError: something went wrong | |
181 | ** (try again) |
|
181 | ** (try again) | |
182 | Traceback (most recent call last): |
|
182 | Traceback (most recent call last): | |
183 | mercurial.error.ProgrammingError: something went wrong |
|
183 | mercurial.error.ProgrammingError: something went wrong | |
184 |
|
184 | |||
185 | Old style deprecation warning |
|
185 | Old style deprecation warning | |
186 |
|
186 | |||
187 | $ hg nouiwarning |
|
187 | $ hg nouiwarning | |
188 | $TESTTMP/buggylocking.py:61: DeprecationWarning: this is a test |
|
188 | $TESTTMP/buggylocking.py:61: DeprecationWarning: this is a test | |
189 | (compatibility will be dropped after Mercurial-13.37, update your code.) |
|
189 | (compatibility will be dropped after Mercurial-13.37, update your code.) | |
190 | util.nouideprecwarn('this is a test', '13.37') |
|
190 | util.nouideprecwarn('this is a test', '13.37') | |
191 |
|
191 | |||
192 | (disabled outside of test run) |
|
192 | (disabled outside of test run) | |
193 |
|
193 | |||
194 | $ HGEMITWARNINGS= hg nouiwarning |
|
194 | $ HGEMITWARNINGS= hg nouiwarning | |
195 |
|
195 | |||
196 | Test warning on config option access and registration |
|
196 | Test warning on config option access and registration | |
197 |
|
197 | |||
198 | $ cat << EOF > ${TESTTMP}/buggyconfig.py |
|
198 | $ cat << EOF > ${TESTTMP}/buggyconfig.py | |
199 | > """A small extension that tests our developer warnings for config""" |
|
199 | > """A small extension that tests our developer warnings for config""" | |
200 | > |
|
200 | > | |
201 | > from mercurial import registrar |
|
201 | > from mercurial import registrar | |
202 | > |
|
202 | > | |
203 | > cmdtable = {} |
|
203 | > cmdtable = {} | |
204 | > command = registrar.command(cmdtable) |
|
204 | > command = registrar.command(cmdtable) | |
205 | > |
|
205 | > | |
|
206 | > configtable = {} | |||
|
207 | > configitem = registrar.configitem(configtable) | |||
|
208 | > | |||
|
209 | > configitem('test', 'some', default='foo') | |||
|
210 | > # overwrite a core config | |||
|
211 | > configitem('ui', 'quiet', default=False) | |||
|
212 | > configitem('ui', 'interactive', default=None) | |||
|
213 | > | |||
206 | > @command(b'buggyconfig') |
|
214 | > @command(b'buggyconfig') | |
207 | > def cmdbuggyconfig(ui, repo): |
|
215 | > def cmdbuggyconfig(ui, repo): | |
208 | > repo.ui.config('ui', 'quiet', False) |
|
216 | > repo.ui.config('ui', 'quiet', False) | |
209 | > repo.ui.config('ui', 'interactive', None) |
|
217 | > repo.ui.config('ui', 'interactive', None) | |
|
218 | > repo.ui.config('test', 'some', 'foo') | |||
210 | > EOF |
|
219 | > EOF | |
211 |
|
220 | |||
212 | $ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig |
|
221 | $ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig | |
|
222 | devel-warn: extension 'buggyconfig' overwrite config item 'ui.interactive' at: */mercurial/extensions.py:* (loadall) (glob) | |||
|
223 | devel-warn: extension 'buggyconfig' overwrite config item 'ui.quiet' at: */mercurial/extensions.py:* (loadall) (glob) | |||
213 | devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) |
|
224 | devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) | |
214 | devel-warn: specifying a default value for a registered config item: 'ui.interactive' 'None' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) |
|
225 | devel-warn: specifying a default value for a registered config item: 'ui.interactive' 'None' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) | |
|
226 | devel-warn: specifying a default value for a registered config item: 'test.some' 'foo' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) | |||
215 |
|
227 | |||
216 | $ cd .. |
|
228 | $ cd .. |
General Comments 0
You need to be logged in to leave comments.
Login now