[tahoe-lafs-trac-stream] [Tahoe-LAFS] #2465: build failure: mock vs zetuptoolz

Tahoe-LAFS trac at tahoe-lafs.org
Wed Jul 15 19:01:04 UTC 2015


#2465: build failure: mock vs zetuptoolz
-----------------------+------------------------
 Reporter:  warner     |          Owner:  daira
     Type:  defect     |         Status:  new
 Priority:  critical   |      Milestone:  soon
Component:  packaging  |        Version:  1.10.1
 Keywords:             |  Launchpad Bug:
-----------------------+------------------------
 Zooko and Jun Matsushita reported this one via email (as Trac was
 temporarily broken at the time). Building tahoe (either 1.10.1 or trunk)
 is currently broken.

 The "mock" library (which we use for running unit tests, but not during
 runtime) recently received its first update in two years, and the new
 version (1.1.3) depends upon setuptools 17.1 or newer. Tahoe's forked
 "zsetuptoolz" doesn't meet the requirement.

 I'm not entirely sure why the 17.1 requirement was added: the previous
 mock-1.1.2 didn't have that requirement, and Tahoe builds failed with an
 error like this:

 {{{
   File
 "build/setuptools-0.6c16dev6.egg/setuptools/command/easy_install.py", line
 385, in install_egg_scripts
     self.install_wrapper_scripts(dist)
   File
 "build/setuptools-0.6c16dev6.egg/setuptools/command/easy_install.py", line
 577, in install_wrapper_scripts
     for args in get_script_args(dist, script_dir=self.script_dir):
 TypeError: override_get_script_args() got an unexpected keyword argument
 'script_dir'
 }}}

 It's possible that the dependency is actually imposed by the "pbr" library
 that mock now uses. The current mock-1.1.3 error looks like:

 {{{
   File
 "build/setuptools-0.6c16dev6.egg/setuptools/command/easy_install.py", line
 938, in build_and_install
     self.run_setup(setup_script, setup_base, args)
   File
 "build/setuptools-0.6c16dev6.egg/setuptools/command/easy_install.py", line
 927, in run_setup
     run_setup(setup_script, args)
   File "build/setuptools-0.6c16dev6.egg/setuptools/sandbox.py", line 62,
 in run_setup
     lambda: execfile(
   File "build/setuptools-0.6c16dev6.egg/setuptools/sandbox.py", line 105,
 in run
     return func()
   File "build/setuptools-0.6c16dev6.egg/setuptools/sandbox.py", line 64,
 in <lambda>
     {'__file__':setup_script, '__name__':'__main__'}
   File "setup.py", line 10, in <module>
     #
 AttributeError: 'module' object has no attribute 'version'
 }}}

 And it looks like mock trunk made a change yesterday (which will probably
 be released as 1.1.4) to get the setuptools version from the right place,
 which will probably change that error to something like:

 {{{
 mock requires setuptools>=17.1. Aborting installation
 }}}


 Some potential fixes/improvements:

 * Remove "mock" from the set of things installed by "setup.py build": it's
 only for unit tests, and end-users don't need it. But this won't help
 developers, and might be hard to implement because tahoe has extensive
 (and overgrown, IMO) code to check the versions of all its dependencies,
 and that code doesn't have the notion of "tests_requires".
 * Stop using "mock" altogether. Zooko points out that twisted.trial has a
 patch-during-tests utility that's better (it understands Deferreds). We
 have 9 `test_*.py` files that import mock.
 * Stop forking setuptools. This is obviously the best long-term fix, and
 would be an opportunity to clean up a lot of our build code.
 * Prolong the agony: modify zetuptoolz to handle whatever the newer mock
 needs.

--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2465>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage


More information about the tahoe-lafs-trac-stream mailing list