4263
|
1 |
# HG changeset patch
|
|
2 |
# User Gregory Szorc <[email protected]>
|
|
3 |
# Date 1430931130 25200
|
|
4 |
# Wed May 06 09:52:10 2015 -0700
|
|
5 |
# Branch stable
|
|
6 |
# Node ID 44b054c3a46eac63d5fed06ffb8fffc38d5668f6
|
|
7 |
# Parent 41cd8171e58f991373dcd0b4897dc1e5978d42dd
|
|
8 |
extensions: clear aftercallbacks after execution (issue4646)
|
|
9 |
|
|
10 |
It was reported that enabling pager without color could cause a hang.
|
|
11 |
Inserting print statements revealed that the callbacks in
|
|
12 |
extensions._aftercallbacks were being invoked twice.
|
|
13 |
|
|
14 |
extensions.loadall can be called multiple times. If entries in
|
|
15 |
extensions._aftercallbacks linger between calls, this could result
|
|
16 |
in double execution of the callbacks. This can lead to unwanted
|
|
17 |
behavior.
|
|
18 |
|
|
19 |
The reproduce steps in the bug seem to only occur when the output of
|
|
20 |
a command is less than the size of the current screen. This is not
|
|
21 |
something that can easily be tested. I verified the test case works
|
|
22 |
with this patch and that pager and color interaction continues to
|
|
23 |
work. Since we have no existing automated tests for pager, this sadly
|
|
24 |
appears to be the best testing I can do.
|
|
25 |
|
|
26 |
diff --git a/mercurial/extensions.py b/mercurial/extensions.py
|
|
27 |
--- a/mercurial/extensions.py
|
|
28 |
+++ b/mercurial/extensions.py
|
|
29 |
@@ -133,8 +133,12 @@ def loadall(ui):
|
|
30 |
|
|
31 |
for fn in _aftercallbacks[shortname]:
|
|
32 |
fn(loaded=False)
|
|
33 |
|
|
34 |
+ # loadall() is called multiple times and lingering _aftercallbacks
|
|
35 |
+ # entries could result in double execution. See issue4646.
|
|
36 |
+ _aftercallbacks.clear()
|
|
37 |
+
|
|
38 |
def afterloaded(extension, callback):
|
|
39 |
'''Run the specified function after a named extension is loaded.
|
|
40 |
|
|
41 |
If the named extension is already loaded, the callback will be called
|
|
42 |
_______________________________________________
|
|
43 |
Mercurial-devel mailing list
|
|
44 |
[email protected]
|
|
45 |
http://selenic.com/mailman/listinfo/mercurial-devel
|