[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-10851-g50815da

wsiegrist at apple.com wsiegrist at apple.com
Wed Dec 22 18:15:58 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 570769aeb5ac012073f579e1056aadc48678447f
Author: wsiegrist at apple.com <wsiegrist at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Dec 9 04:22:21 2010 +0000

    2010-12-08  William Siegrist <wsiegrist at apple.com>
    
            Reviewed by Eric Seidel.
    
            Migrate buildbot.py from xmlrpc to json.
            https://bugs.webkit.org/show_bug.cgi?id=50647
    
            * Scripts/webkitpy/common/net/buildbot.py:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73590 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index a1ccbe4..77fcaf3 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,12 @@
+2010-12-08  William Siegrist <wsiegrist at apple.com>
+
+        Reviewed by Eric Seidel.
+
+        Migrate buildbot.py from xmlrpc to json.
+        https://bugs.webkit.org/show_bug.cgi?id=50647
+
+        * Scripts/webkitpy/common/net/buildbot.py:
+
 2010-12-08  Tony Chang  <tony at chromium.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebKitTools/Scripts/webkitpy/common/net/buildbot.py b/WebKitTools/Scripts/webkitpy/common/net/buildbot.py
index 88cdd4e..3cb6da5 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/buildbot.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/buildbot.py
@@ -28,11 +28,16 @@
 #
 # WebKit's Python module for interacting with WebKit's buildbot
 
+try:
+    import json
+except ImportError:
+    # python 2.5 compatibility
+    import webkitpy.thirdparty.simplejson as json
+
 import operator
 import re
 import urllib
 import urllib2
-import xmlrpclib
 
 from webkitpy.common.net.failuremap import FailureMap
 from webkitpy.common.net.layouttestresults import LayoutTestResults
@@ -67,13 +72,13 @@ class Builder(object):
 
     # This provides a single place to mock
     def _fetch_build(self, build_number):
-        build_dictionary = self._buildbot._fetch_xmlrpc_build_dictionary(self, build_number)
+        build_dictionary = self._buildbot._fetch_build_dictionary(self, build_number)
         if not build_dictionary:
             return None
         return Build(self,
             build_number=int(build_dictionary['number']),
-            revision=int(build_dictionary['revision']),
-            is_green=(build_dictionary['results'] == 0) # Undocumented, buildbot XMLRPC, 0 seems to mean "pass"
+            revision=int(build_dictionary['sourceStamp']['revision']),
+            is_green=(build_dictionary['results'] == 0) # Undocumented, 0 seems to mean "pass"
         )
 
     def build(self, build_number):
@@ -140,7 +145,7 @@ class Builder(object):
             return None
         build = self.build(build_number)
         if not build and allow_failed_lookups:
-            # Builds for old revisions with fail to lookup via buildbot's xmlrpc api.
+            # Builds for old revisions with fail to lookup via buildbot's json api.
             build = Build(self,
                 build_number=build_number,
                 revision=revision,
@@ -345,16 +350,22 @@ class BuildBot(object):
         return not self.red_core_builders()
 
     # FIXME: These _fetch methods should move to a networking class.
-    def _fetch_xmlrpc_build_dictionary(self, builder, build_number):
-        # The buildbot XMLRPC API is super-limited.
-        # For one, you cannot fetch info on builds which are incomplete.
-        proxy = xmlrpclib.ServerProxy("http://%s/xmlrpc" % self.buildbot_host, allow_none=True)
+    def _fetch_build_dictionary(self, builder, build_number):
         try:
-            return proxy.getBuild(builder.name(), int(build_number))
-        except xmlrpclib.Fault, err:
+            base = "http://%s" % self.buildbot_host
+            path = urllib.quote("json/builders/%s/builds/%s" % (builder.name(),
+                                                                build_number))
+            url = "%s/%s" % (base, path)
+            jsondata = urllib2.urlopen(url)
+            return json.load(jsondata)
+        except urllib2.URLError, err:
             build_url = Build.build_url(builder, build_number)
             _log.error("Error fetching data for %s build %s (%s): %s" % (builder.name(), build_number, build_url, err))
             return None
+        except ValueError, err:
+            build_url = Build.build_url(builder, build_number)
+            _log.error("Error decoding json data from %s: %s" % (build_url, err))
+            return None
 
     def _fetch_one_box_per_builder(self):
         build_status_url = "http://%s/one_box_per_builder" % self.buildbot_host
diff --git a/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py b/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py
index 4fdf24c..cb7d719 100644
--- a/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py
+++ b/WebKitTools/Scripts/webkitpy/common/net/buildbot_unittest.py
@@ -297,15 +297,17 @@ class BuildBotTest(unittest.TestCase):
         self.assertEqual(builder.url_encoded_name(), "Test%20Builder")
         self.assertEqual(builder.results_url(), "http://build.webkit.org/results/Test%20Builder")
 
-        # Override _fetch_xmlrpc_build_dictionary function to not touch the network.
-        def mock_fetch_xmlrpc_build_dictionary(self, build_number):
+        # Override _fetch_build_dictionary function to not touch the network.
+        def mock_fetch_build_dictionary(self, build_number):
             build_dictionary = {
-                "revision" : 2 * build_number,
+                "sourceStamp": {
+                    "revision" : 2 * build_number,
+                    },
                 "number" : int(build_number),
                 "results" : build_number % 2, # 0 means pass
             }
             return build_dictionary
-        buildbot._fetch_xmlrpc_build_dictionary = mock_fetch_xmlrpc_build_dictionary
+        buildbot._fetch_build_dictionary = mock_fetch_build_dictionary
 
         build = builder.build(10)
         self.assertEqual(build.builder(), builder)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list