[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Thu Apr 8 00:13:18 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit bdf3888884a509a6dbe2530ef0e041e6425b206b
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Dec 3 05:31:48 2009 +0000

    2009-12-02  Eric Seidel  <eric at webkit.org>
    
            Reviewed by Adam Barth.
    
            REGRESSION(51595): commit-queue is throwing exceptions
            https://bugs.webkit.org/show_bug.cgi?id=32083
    
            * Scripts/modules/commands/queues.py:
             - Don't use default value of [] as it ends up getting shared.
             - Make log_progress accept arrays of ints as well as strings.
             - Return an exit code from execute()
            * Scripts/modules/commands/queues_unittest.py: Added.
             - Test to make sure log_progress will accept ints.
             - Test to make sure run_bugzilla_tool will accept ints.
            * Scripts/modules/workqueue.py:
             - Print the stack trace on unexpected exceptions for easier debugging.
            * Scripts/run-webkit-unittests:
             - Add queues_unittest.
    
            * Scripts/modules/commands/queues.py:
            * Scripts/modules/commands/queues_unittest.py: Copied from WebKitTools/Scripts/modules/commands/commandtest.py.
            * Scripts/modules/mock_bugzillatool.py:
            * Scripts/modules/workqueue.py:
            * Scripts/run-webkit-unittests:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@51622 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 1e712c9..389a313 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,28 @@
+2009-12-02  Eric Seidel  <eric at webkit.org>
+
+        Reviewed by Adam Barth.
+
+        REGRESSION(51595): commit-queue is throwing exceptions
+        https://bugs.webkit.org/show_bug.cgi?id=32083
+
+        * Scripts/modules/commands/queues.py:
+         - Don't use default value of [] as it ends up getting shared.
+         - Make log_progress accept arrays of ints as well as strings.
+         - Return an exit code from execute()
+        * Scripts/modules/commands/queues_unittest.py: Added.
+         - Test to make sure log_progress will accept ints.
+         - Test to make sure run_bugzilla_tool will accept ints.
+        * Scripts/modules/workqueue.py:
+         - Print the stack trace on unexpected exceptions for easier debugging.
+        * Scripts/run-webkit-unittests:
+         - Add queues_unittest.
+
+        * Scripts/modules/commands/queues.py:
+        * Scripts/modules/commands/queues_unittest.py: Copied from WebKitTools/Scripts/modules/commands/commandtest.py.
+        * Scripts/modules/mock_bugzillatool.py:
+        * Scripts/modules/workqueue.py:
+        * Scripts/run-webkit-unittests:
+
 2009-12-02  David Levin  <levin at chromium.org>
 
         Reviewed by Adam Barth.
diff --git a/WebKitTools/Scripts/modules/commands/queues.py b/WebKitTools/Scripts/modules/commands/queues.py
index 5d2e481..b325444 100644
--- a/WebKitTools/Scripts/modules/commands/queues.py
+++ b/WebKitTools/Scripts/modules/commands/queues.py
@@ -46,12 +46,12 @@ from modules.workqueue import WorkQueue, WorkQueueDelegate
 
 class AbstractQueue(Command, WorkQueueDelegate):
     watchers = "webkit-bot-watchers at googlegroups.com"
-    def __init__(self, options=[]):
-        options += [
+    def __init__(self, options=None): # Default values should never be collections (like []) as default values are shared between invocations
+        options_list = (options or []) + [
             make_option("--no-confirm", action="store_false", dest="confirm", default=True, help="Do not ask the user for confirmation before running the queue.  Dangerous!"),
             make_option("--status-host", action="store", type="string", dest="status_host", default=StatusBot.default_host, help="Hostname (e.g. localhost or commit.webkit.org) where status updates should be posted."),
         ]
-        Command.__init__(self, "Run the %s" % self.name, options=options)
+        Command.__init__(self, "Run the %s" % self.name, options=options_list)
 
     def _cc_watchers(self, bug_id):
         try:
@@ -92,17 +92,17 @@ class AbstractQueue(Command, WorkQueueDelegate):
         raise NotImplementedError, "subclasses must implement"
 
     def run_bugzilla_tool(self, args):
-        bugzilla_tool_args = [self.tool.path()] + args
+        bugzilla_tool_args = [self.tool.path()] + map(str, args)
         run_and_throw_if_fail(bugzilla_tool_args)
 
     def log_progress(self, patch_ids):
-        log("%s in %s [%s]" % (pluralize("patch", len(patch_ids)), self.name, ", ".join(patch_ids)))
+        log("%s in %s [%s]" % (pluralize("patch", len(patch_ids)), self.name, ", ".join(map(str, patch_ids))))
 
     def execute(self, options, args, tool):
         self.options = options
         self.tool = tool
         work_queue = WorkQueue(self.name, self)
-        work_queue.run()
+        return work_queue.run()
 
 
 class CommitQueue(AbstractQueue, LandingSequenceErrorHandler):
@@ -146,7 +146,7 @@ class CommitQueue(AbstractQueue, LandingSequenceErrorHandler):
 
 
 class AbstractTryQueue(AbstractQueue, PersistentPatchCollectionDelegate, LandingSequenceErrorHandler):
-    def __init__(self, options=[]):
+    def __init__(self, options=None):
         AbstractQueue.__init__(self, options)
 
     # PersistentPatchCollectionDelegate methods
diff --git a/WebKitTools/Scripts/modules/commands/queues_unittest.py b/WebKitTools/Scripts/modules/commands/queues_unittest.py
new file mode 100644
index 0000000..c8699e9
--- /dev/null
+++ b/WebKitTools/Scripts/modules/commands/queues_unittest.py
@@ -0,0 +1,66 @@
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#    * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#    * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#    * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import unittest
+
+from modules.commands.commandtest import CommandsTest
+from modules.commands.queues import *
+from modules.mock_bugzillatool import MockBugzillaTool
+from modules.outputcapture import OutputCapture
+
+
+class TestQueue(AbstractQueue):
+    name = "test-queue"
+
+
+class AbstractQueueTest(CommandsTest):
+    def _assert_output(self, function, args, expected_stdout="", expected_stderr=""):
+        capture = OutputCapture()
+        capture.capture_output()
+        function(*args)
+        (stdout_string, stderr_string) = capture.restore_output()
+        self.assertEqual(stdout_string, expected_stdout)
+        self.assertEqual(stderr_string, expected_stderr)
+
+    def _assert_log_progress_output(self, patch_ids, progress_output):
+        self._assert_output(TestQueue().log_progress, [patch_ids], expected_stderr=progress_output)
+
+    def test_log_progress(self):
+        self._assert_log_progress_output([1,2,3], "3 patches in test-queue [1, 2, 3]\n")
+        self._assert_log_progress_output(["1","2","3"], "3 patches in test-queue [1, 2, 3]\n")
+        self._assert_log_progress_output([1], "1 patch in test-queue [1]\n")
+
+    def _assert_run_bugzilla_tool_output(self, run_args, tool_output):
+        queue = TestQueue()
+        queue.bind_to_tool(MockBugzillaTool())
+        # MockBugzillaTool.path() is "echo"
+        self._assert_output(queue.run_bugzilla_tool, [run_args], expected_stdout=tool_output)
+
+    def test_run_bugzilla_tool(self):
+        self._assert_run_bugzilla_tool_output([1], "1\n")
+        self._assert_run_bugzilla_tool_output(["one", 2], "one 2\n")
diff --git a/WebKitTools/Scripts/modules/mock_bugzillatool.py b/WebKitTools/Scripts/modules/mock_bugzillatool.py
index 541abc8..963a7d7 100644
--- a/WebKitTools/Scripts/modules/mock_bugzillatool.py
+++ b/WebKitTools/Scripts/modules/mock_bugzillatool.py
@@ -130,3 +130,6 @@ class MockBugzillaTool():
 
     def scm(self):
         return self._scm
+
+    def path(self):
+        return "echo"
diff --git a/WebKitTools/Scripts/modules/workqueue.py b/WebKitTools/Scripts/modules/workqueue.py
index c3761aa..8cd40bc 100644
--- a/WebKitTools/Scripts/modules/workqueue.py
+++ b/WebKitTools/Scripts/modules/workqueue.py
@@ -30,6 +30,7 @@
 
 import os
 import time
+import traceback
 
 from datetime import datetime, timedelta
 
@@ -104,7 +105,11 @@ class WorkQueue:
                     self._update_status_and_sleep(waiting_message)
                     continue
                 self.status_bot.update_status(self._name, waiting_message, patch)
+            except KeyboardInterrupt, e:
+                log("\nUser terminated queue.")
+                return 1
             except Exception, e:
+                traceback.print_exc()
                 # Don't try tell the status bot, in case telling it causes an exception.
                 self._sleep("Exception while preparing queue: %s." % e)
                 continue
diff --git a/WebKitTools/Scripts/run-webkit-unittests b/WebKitTools/Scripts/run-webkit-unittests
index 42bfe65..960c91c 100755
--- a/WebKitTools/Scripts/run-webkit-unittests
+++ b/WebKitTools/Scripts/run-webkit-unittests
@@ -35,6 +35,7 @@ from modules.changelogs_unittest import *
 from modules.commands.download_unittest import *
 from modules.commands.upload_unittest import *
 from modules.commands.queries_unittest import *
+from modules.commands.queues_unittest import *
 from modules.committers_unittest import *
 from modules.cpp_style_unittest import *
 from modules.diff_parser_unittest import *

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list