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