Title: [124928] trunk/Tools
Revision
124928
Author
[email protected]
Date
2012-08-07 15:39:26 -0700 (Tue, 07 Aug 2012)

Log Message

test-webkitpy hangs in a new checkout on snow leopard
https://bugs.webkit.org/show_bug.cgi?id=93301

Reviewed by Ryosuke Niwa.

This change works around what appears to be a bug in Python
2.6.1 (the version that ships on Mac Snow Leopard) that causes
the multiprocessing module to hang after we use the
autoinstaller; I'm guessing it's some sort of python sockets
issue. I was unable to reproduce this with 2.6.5 or newer
versions of Python.

* Scripts/webkitpy/common/system/autoinstall.py:
(AutoInstaller.install):
* Scripts/webkitpy/test/main.py:
(Tester._run_tests):
* Scripts/webkitpy/thirdparty/__init__.py:
(AutoinstallImportHook._install_mechanize):
(AutoinstallImportHook._install_pep8):
(AutoinstallImportHook._install_pylint):
(AutoinstallImportHook._install_buildbot):
(AutoinstallImportHook._install_coverage):
(AutoinstallImportHook._install_eliza):
(AutoinstallImportHook._install_irc):
(AutoinstallImportHook._install_webpagereplay):
(AutoinstallImportHook._install):
(autoinstall_everything):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (124927 => 124928)


--- trunk/Tools/ChangeLog	2012-08-07 22:30:09 UTC (rev 124927)
+++ trunk/Tools/ChangeLog	2012-08-07 22:39:26 UTC (rev 124928)
@@ -1,3 +1,33 @@
+2012-08-07  Dirk Pranke  <[email protected]>
+
+        test-webkitpy hangs in a new checkout on snow leopard
+        https://bugs.webkit.org/show_bug.cgi?id=93301
+
+        Reviewed by Ryosuke Niwa.
+
+        This change works around what appears to be a bug in Python
+        2.6.1 (the version that ships on Mac Snow Leopard) that causes
+        the multiprocessing module to hang after we use the
+        autoinstaller; I'm guessing it's some sort of python sockets
+        issue. I was unable to reproduce this with 2.6.5 or newer
+        versions of Python.
+
+        * Scripts/webkitpy/common/system/autoinstall.py:
+        (AutoInstaller.install):
+        * Scripts/webkitpy/test/main.py:
+        (Tester._run_tests):
+        * Scripts/webkitpy/thirdparty/__init__.py:
+        (AutoinstallImportHook._install_mechanize):
+        (AutoinstallImportHook._install_pep8):
+        (AutoinstallImportHook._install_pylint):
+        (AutoinstallImportHook._install_buildbot):
+        (AutoinstallImportHook._install_coverage):
+        (AutoinstallImportHook._install_eliza):
+        (AutoinstallImportHook._install_irc):
+        (AutoinstallImportHook._install_webpagereplay):
+        (AutoinstallImportHook._install):
+        (autoinstall_everything):
+
 2012-08-07  Xianzhu Wang  <[email protected]>
 
         [Chromium-Android][NRWT] Fix 2 FIXMEs in chromium_android.py

Modified: trunk/Tools/Scripts/webkitpy/common/system/autoinstall.py (124927 => 124928)


--- trunk/Tools/Scripts/webkitpy/common/system/autoinstall.py	2012-08-07 22:30:09 UTC (rev 124927)
+++ trunk/Tools/Scripts/webkitpy/common/system/autoinstall.py	2012-08-07 22:39:26 UTC (rev 124928)
@@ -456,7 +456,7 @@
             _log.debug('URL for %s already downloaded.  Skipping...'
                        % target_name)
             _log.debug('    "%s"' % url)
-            return
+            return False
 
         self._log_transfer("Auto-installing package: %s" % target_name,
                             url, target_path, log_method=_log.info)
@@ -484,6 +484,7 @@
             shutil.rmtree(scratch_dir)
         _log.debug('Auto-installed %s to:' % target_name)
         _log.debug('    "%s"' % target_path)
+        return True
 
 
 if __name__=="__main__":

Modified: trunk/Tools/Scripts/webkitpy/test/main.py (124927 => 124928)


--- trunk/Tools/Scripts/webkitpy/test/main.py	2012-08-07 22:30:09 UTC (rev 124927)
+++ trunk/Tools/Scripts/webkitpy/test/main.py	2012-08-07 22:39:26 UTC (rev 124928)
@@ -126,8 +126,14 @@
         # and not have to worry about autoinstalling packages concurrently.
         self.printer.write_update("Checking autoinstalled packages ...")
         from webkitpy.thirdparty import autoinstall_everything
-        autoinstall_everything()
+        installed_something = autoinstall_everything()
 
+        # FIXME: There appears to be a bug in Python 2.6.1 that is causing multiprocessing
+        # to hang after we install the packages in a clean checkout.
+        if installed_something:
+            _log.warning("We installed new packages, so running things serially at first")
+            self._options.child_processes = 1
+
         if self._options.coverage:
             import webkitpy.thirdparty.autoinstalled.coverage as coverage
             cov = coverage.coverage()

Modified: trunk/Tools/Scripts/webkitpy/thirdparty/__init__.py (124927 => 124928)


--- trunk/Tools/Scripts/webkitpy/thirdparty/__init__.py	2012-08-07 22:30:09 UTC (rev 124927)
+++ trunk/Tools/Scripts/webkitpy/thirdparty/__init__.py	2012-08-07 22:39:26 UTC (rev 124928)
@@ -90,19 +90,20 @@
             self._install_webpagereplay()
 
     def _install_mechanize(self):
-        self._install("http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz",
-                      "mechanize-0.2.5/mechanize")
+        return self._install("http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz",
+                             "mechanize-0.2.5/mechanize")
 
     def _install_pep8(self):
-        self._install("http://pypi.python.org/packages/source/p/pep8/pep8-0.5.0.tar.gz#md5=512a818af9979290cd619cce8e9c2e2b",
-                      "pep8-0.5.0/pep8.py")
+        return self._install("http://pypi.python.org/packages/source/p/pep8/pep8-0.5.0.tar.gz#md5=512a818af9979290cd619cce8e9c2e2b",
+                             "pep8-0.5.0/pep8.py")
 
     def _install_pylint(self):
+        installed_something = False
         if not self._fs.exists(self._fs.join(_AUTOINSTALLED_DIR, "pylint")):
-            self._install('http://pypi.python.org/packages/source/p/pylint/pylint-0.25.1.tar.gz#md5=728bbc2b339bc3749af013709a7f87a5', 'pylint-0.25.1')
+            installed_something = self._install('http://pypi.python.org/packages/source/p/pylint/pylint-0.25.1.tar.gz#md5=728bbc2b339bc3749af013709a7f87a5', 'pylint-0.25.1')
             self._fs.move(self._fs.join(_AUTOINSTALLED_DIR, "pylint-0.25.1"), self._fs.join(_AUTOINSTALLED_DIR, "pylint"))
+        return installed_something
 
-
     # autoinstalled.buildbot is used by BuildSlaveSupport/build.webkit.org-config/mastercfg_unittest.py
     # and should ideally match the version of BuildBot used at build.webkit.org.
     def _install_buildbot(self):
@@ -113,24 +114,24 @@
         # without including other modules as a side effect.
         jinja_dir = self._fs.join(_AUTOINSTALLED_DIR, "jinja2")
         installer = AutoInstaller(append_to_search_path=True, target_dir=jinja_dir)
-        installer.install(url=""
-                          url_subpath="Jinja2-2.6/jinja2")
+        installed_something = installer.install(url=""
+                                                url_subpath="Jinja2-2.6/jinja2")
 
         SQLAlchemy_dir = self._fs.join(_AUTOINSTALLED_DIR, "sqlalchemy")
         installer = AutoInstaller(append_to_search_path=True, target_dir=SQLAlchemy_dir)
-        installer.install(url=""
-                          url_subpath="SQLAlchemy-0.7.7/lib/sqlalchemy")
+        installed_something |= installer.install(url=""
+                                                 url_subpath="SQLAlchemy-0.7.7/lib/sqlalchemy")
 
-        self._install("http://pypi.python.org/packages/source/b/buildbot/buildbot-0.8.6p1.tar.gz#md5=b6727d2810c692062c657492bcbeac6a", "buildbot-0.8.6p1/buildbot")
+        installed_something |= self._install("http://pypi.python.org/packages/source/b/buildbot/buildbot-0.8.6p1.tar.gz#md5=b6727d2810c692062c657492bcbeac6a", "buildbot-0.8.6p1/buildbot")
+        return installed_something
 
     def _install_coverage(self):
         installer = AutoInstaller(target_dir=_AUTOINSTALLED_DIR)
-        installer.install(url="" url_subpath="coverage-3.5.1/coverage")
+        return installer.install(url="" url_subpath="coverage-3.5.1/coverage")
 
     def _install_eliza(self):
         installer = AutoInstaller(target_dir=_AUTOINSTALLED_DIR)
-        installer.install(url=""
-                          target_name="eliza.py")
+        return installer.install(url="" target_name="eliza.py")
 
     def _install_irc(self):
         # Since irclib and ircbot are two top-level packages, we need to import
@@ -138,23 +139,26 @@
         # organization purposes.
         irc_dir = self._fs.join(_AUTOINSTALLED_DIR, "irc")
         installer = AutoInstaller(target_dir=irc_dir)
-        installer.install(url=""
-                          url_subpath="irclib.py")
-        installer.install(url=""
+        installed_something = installer.install(url=""
+                                                url_subpath="irclib.py")
+        installed_something |= installer.install(url=""
                           url_subpath="ircbot.py")
+        return installed_something
 
     def _install_webpagereplay(self):
+        installed_something = False
         if not self._fs.exists(self._fs.join(_AUTOINSTALLED_DIR, "webpagereplay")):
-            self._install("http://web-page-replay.googlecode.com/files/webpagereplay-1.1.2.tar.gz", "webpagereplay-1.1.2")
+            installed_something = self._install("http://web-page-replay.googlecode.com/files/webpagereplay-1.1.2.tar.gz", "webpagereplay-1.1.2")
             self._fs.move(self._fs.join(_AUTOINSTALLED_DIR, "webpagereplay-1.1.2"), self._fs.join(_AUTOINSTALLED_DIR, "webpagereplay"))
 
         init_path = self._fs.join(_AUTOINSTALLED_DIR, "webpagereplay", "__init__.py")
         if not self._fs.exists(init_path):
             self._fs.write_text_file(init_path, "")
+        return installed_something
 
     def _install(self, url, url_subpath):
         installer = AutoInstaller(target_dir=_AUTOINSTALLED_DIR)
-        installer.install(url="" url_subpath=url_subpath)
+        return installer.install(url="" url_subpath=url_subpath)
 
 
 _hook = AutoinstallImportHook()
@@ -163,5 +167,7 @@
 
 def autoinstall_everything():
     install_methods = [method for method in dir(_hook.__class__) if method.startswith('_install_')]
+    installed_something = False
     for method in install_methods:
-        getattr(_hook, method)()
+        installed_something |= getattr(_hook, method)()
+    return installed_something
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to