Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Merging buildout-versions' functionality into buildout #46

Merged
merged 20 commits into from

2 participants

@reinout
Collaborator

As discussed on the mailinglist, I copied buildout-versions' functionality into buildout itself.
The pull request includes tests and documentation.

From the changelog:

  • Integrated the buildout-versions extension into buildout
    itself. For this, a few options were added to buildout:

    • If show-picked-versions is set to true, all picked versions are
      printed at the end of the buildout run. This saves you from running
      buildout in verbose mode and extracting the picked versions from the
      output.

    • If update-versions-file is set to a filename (relative to the buildout
      directory), the show-picked-versions output is appended to that file.

  • Also from buildout-versions: if a python version is given in the
    versions, buildout now checks if it is running with that python
    version. Handy if you know if the buildout only functions with a specific
    python version.

reinout added some commits
@reinout reinout Added notes on what to do for buildout-versions integration.
I need to go through buildout-versions' finish() method, still.
ae2fe26
@reinout reinout Added notes on what to do for buildout-versions integration.
Everything is in place now for actually implementing it.
343e5ac
@reinout reinout Update for show_picked_versions 4eb822a
@reinout reinout Checking python version when specified.
The [versions] section is checked for a 'python' key.
Functionality copied from buildout-versions.
Includes documentation and tests.
03e8aa8
@reinout reinout Added show-picked-versions option (default false).
Included: functionality (copy/pasted from buildout-versions) to
actually record and print the picked versions. For this, two new
class-level attributes on the Installer are added.

TODO: testing whether the printing of what required what also
works.
d3be41f
@reinout reinout Added doctest normalizer for distribute version f45a588
@reinout reinout Added test for not printing versions if nothing has been picked.
Possible problem: distribute is also reported as have-to-pick. So I
pinned it to 0.6.34, the current value. It might bite us later on, I fear.
I don't know enough about the setup to be sure.
c66492d
@reinout reinout Added test for who required which picked version 1dc6e8e
@reinout reinout Added normalizing of distribution names in [versions]
The Python package index is case-insensitive. Both
http://pypi.python.org/simple/Django/ and
http://pypi.python.org/simple/dJaNgO/ work. And distributions aren't always
naming themselves consistently case-wise. So all version names are normalized
and case differences won't impact the pinning.
93c61dd
@reinout reinout Refactored code duplication a08076a
@reinout reinout Using print() function instead of print keyword
I cannot handily use print_ from buildout.py as I get a circular import that way.
837a4ac
@reinout reinout Moved picked version printer so we can use print_() 19165bc
@reinout reinout Got printing of picked versions to file working.
An 'update-versions-file' option points at a file you want updated.
93f9440
@reinout reinout Updated changelog 083e469
@reinout reinout Fixed test: added the new update-versions-file option. 8a29f3a
@reinout reinout Fixed typo e3f1c93
@reinout reinout Cleaned up comments. f9c631a
@reinout reinout Raising an error if buildout-versions or buildout.dumppickedversions …
…is used
dadc163
@reinout reinout Removed exclusion of everything except the master branch.
I guess this was why the pull request wasn't build.
8a8cef1
@reinout reinout referenced this pull request from a commit in reinout/buildout
@reinout reinout Allowing builds for all branches
My pull request #46 doesn't seem to be picked up by travis. I guess that's because travis only builds the master branch.

It is ok in my opinion to test every branch :-)
44ced02
@reinout
Collaborator

Travis doesn't test this pull request (probably because of a .travis.yml setting to only test master; a commit that fixes this is included in this pull request).

But... I set up travis to test my branch on my own account and all the tests for all 4 python versions pass:

https://travis-ci.org/reinout/buildout/builds/4385204

@reinout reinout Removed the python version checking.
As discussed on the mailinglist: better to have python version checking
as a separate buildout option instead of hidden in the [versions] part.
And... the python version checking itself needs to be more robust.
sys.version is too long, minor/major needs explicit checking.
fc1bc5d
@reinout
Collaborator

Hrmf. https://travis-ci.org/reinout/buildout/builds/4428058 has one (python 3.2) failure, but I think that's some travis artefact. The error itself doesn't really make sense.

@jimfulton jimfulton merged commit eeb0c30 into buildout:master
@jimfulton

This test now fails as it seems to depend on 0.6.34 being the current version.

This is bad on 2 levels:

  • It breaks when a new distribute is releases (as it was today)

  • It means that the tests depend on the net.

Collaborator

It doesn't seem to depend on the net. Before I re-ran make build, the tests were failing for me after your change to 0.6.35. :

File "/vagrant/utils/buildout/src/zc/buildout/repeatable.txt", line 369, in repeatable.txt
Failed example:
    print_(system(buildout), end='') # doctest: +ELLIPSIS
Expected:
    Updating foo.
    recipe v2
Got:
    Getting distribution for 'distribute==0.6.35'.
    While:
      Installing.
      Checking for upgrades.
      Getting distribution for 'distribute==0.6.35'.
    Error: Couldn't find a distribution for 'distribute==0.6.35'.

If the tests would hit the net, I'd be able to grab the 0.6.35 just fine, right? My setup was still at .34, so it failed. But that's just my observation on the tests' behaviour, not internal knowledge about the test setup :-)

The solution seems to be to detect the current distribute version in the test setup and use that throughout.

Collaborator

See #78 for a possible fix.

@jimfulton
Owner

Ah, well, maybe it's not hitting the net. So maybe it can be fixed by plugging
the current version into the test. Bad call on my part.

I noticed the tests failing in travis, which I'm guessing runs dev.py, which gets the
current distribute. We need to fix the test so that it doesn't depend on the
installed distribute. I updated the test to 6.35 as a quick hack to get travis
passing (except for the intermittent spurious failure.)

I don't have much time to spend on this this weekend. I was just about
to push out a 2.0.1, but I can delay if you want to make the test more robust.
(If not, I will later. Thanks for the fixes this week!)

Collaborator

See the #78 I just pushed.

Much thanks for a speedy fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jan 23, 2013
  1. @reinout

    Added notes on what to do for buildout-versions integration.

    reinout authored
    I need to go through buildout-versions' finish() method, still.
  2. @reinout

    Added notes on what to do for buildout-versions integration.

    reinout authored
    Everything is in place now for actually implementing it.
Commits on Jan 24, 2013
  1. @reinout
Commits on Jan 25, 2013
  1. @reinout

    Checking python version when specified.

    reinout authored
    The [versions] section is checked for a 'python' key.
    Functionality copied from buildout-versions.
    Includes documentation and tests.
  2. @reinout

    Added show-picked-versions option (default false).

    reinout authored
    Included: functionality (copy/pasted from buildout-versions) to
    actually record and print the picked versions. For this, two new
    class-level attributes on the Installer are added.
    
    TODO: testing whether the printing of what required what also
    works.
  3. @reinout
  4. @reinout

    Added test for not printing versions if nothing has been picked.

    reinout authored
    Possible problem: distribute is also reported as have-to-pick. So I
    pinned it to 0.6.34, the current value. It might bite us later on, I fear.
    I don't know enough about the setup to be sure.
  5. @reinout
  6. @reinout

    Added normalizing of distribution names in [versions]

    reinout authored
    The Python package index is case-insensitive. Both
    http://pypi.python.org/simple/Django/ and
    http://pypi.python.org/simple/dJaNgO/ work. And distributions aren't always
    naming themselves consistently case-wise. So all version names are normalized
    and case differences won't impact the pinning.
  7. @reinout

    Refactored code duplication

    reinout authored
  8. @reinout

    Using print() function instead of print keyword

    reinout authored
    I cannot handily use print_ from buildout.py as I get a circular import that way.
  9. @reinout
  10. @reinout

    Got printing of picked versions to file working.

    reinout authored
    An 'update-versions-file' option points at a file you want updated.
  11. @reinout

    Updated changelog

    reinout authored
  12. @reinout
  13. @reinout

    Fixed typo

    reinout authored
  14. @reinout

    Cleaned up comments.

    reinout authored
  15. @reinout
  16. @reinout

    Removed exclusion of everything except the master branch.

    reinout authored
    I guess this was why the pull request wasn't build.
Commits on Jan 28, 2013
  1. @reinout

    Removed the python version checking.

    reinout authored
    As discussed on the mailinglist: better to have python version checking
    as a separate buildout option instead of hidden in the [versions] part.
    And... the python version checking itself needs to be more robust.
    sys.version is too long, minor/major needs explicit checking.
This page is out of date. Refresh to see the latest.
View
4 .travis.yml
@@ -5,10 +5,6 @@ env:
- PYTHON_VER=3.2
- PYTHON_VER=3.3
-branches:
- only:
- - master
-
notifications:
email:
- buildout-development@googlegroups.com
View
18 CHANGES.rst
@@ -1,10 +1,26 @@
Change History
**************
+2.0.0b2 (unreleased)
+====================
+
+- Integrated the `buildout-versions
+ <http://packages.python.org/buildout-versions/>`_ extension into buildout
+ itself. For this, a few options were added to buildout:
+
+ - If ``show-picked-versions`` is set to true, all picked versions are
+ printed at the end of the buildout run. This saves you from running
+ buildout in verbose mode and extracting the picked versions from the
+ output.
+
+ - If ``update-versions-file`` is set to a filename (relative to the buildout
+ directory), the ``show-picked-versions`` output is appended to that file.
+
+
2.0.0b1 (2013-01-21)
====================
-- buildout options can be given on the command line using the form::
+- Buildout options can be given on the command line using the form::
option_name=value
View
60 src/zc/buildout/buildout.py
@@ -29,6 +29,7 @@
import zc.buildout.configparser
import copy
+import datetime
import distutils.errors
import glob
import itertools
@@ -136,7 +137,9 @@ def _unannotate(data):
'parts-directory': 'parts',
'prefer-final': 'true',
'python': 'buildout',
+ 'show-picked-versions': 'false',
'socket-timeout': '',
+ 'update-versions-file': '',
'use-dependency-links': 'true',
}, 'DEFAULT_VALUE')
@@ -206,7 +209,7 @@ def __init__(self, config_file, cloptions,
# Set up versions section, if necessary
if 'versions' not in data['buildout']:
- data['buildout']['versions'] = 'versions', 'DEFAULT_VALUE'
+ data['buildout']['versions'] = ('versions', 'DEFAULT_VALUE')
if 'versions' not in data:
data['versions'] = {}
@@ -304,7 +307,7 @@ def __init__(self, config_file, cloptions,
# finish w versions
if versions_section_name:
- # refetching section name just to avoid a warnin
+ # refetching section name just to avoid a warning
versions = self[versions_section_name]
else:
# remove annotations
@@ -319,6 +322,11 @@ def __init__(self, config_file, cloptions,
bool_option(options, 'use-dependency-links'))
zc.buildout.easy_install.allow_picked_versions(
bool_option(options, 'allow-picked-versions'))
+ self.show_picked_versions = bool_option(options,
+ 'show-picked-versions')
+ self.update_versions_file = options['update-versions-file']
+ zc.buildout.easy_install.show_picked_versions(
+ self.show_picked_versions)
download_cache = options.get('download-cache')
if download_cache:
@@ -631,6 +639,7 @@ def install(self, install_args):
elif (not installed_parts) and installed_exists:
os.remove(self['buildout']['installed'])
+ self._print_picked_versions()
self._unload_extensions()
def _update_installed(self, **buildout_options):
@@ -944,6 +953,14 @@ def _maybe_upgrade(self):
def _load_extensions(self):
__doing__ = 'Loading extensions.'
specs = self['buildout'].get('extensions', '').split()
+ for superceded_extension in ['buildout-versions',
+ 'buildout.dumppickedversions']:
+ if superceded_extension in specs:
+ msg = ("The extension %s is now included in buildout itself.\n"
+ "Remove the extension from your configuration and "
+ "look at the `show-picked-versions`\n"
+ "option in buildout's documentation.")
+ raise zc.buildout.UserError(msg % superceded_extension)
if specs:
path = [self['buildout']['develop-eggs-directory']]
if self.offline:
@@ -977,6 +994,45 @@ def _unload_extensions(self):
'zc.buildout.unloadextension'):
ep.load()(self)
+ def _print_picked_versions(self):
+ Installer = zc.buildout.easy_install.Installer
+ if not self.show_picked_versions:
+ return
+ if not Installer._picked_versions:
+ # Don't print empty output.
+ return
+ output = ['[versions]']
+ required_output = []
+ for dist_, version in sorted(Installer._picked_versions.items()):
+ if dist_ in Installer._required_by:
+ required_output.append('')
+ required_output.append('# Required by:')
+ for req_ in sorted(Installer._required_by[dist_]):
+ required_output.append('# '+req_)
+ target = required_output
+ else:
+ target = output
+ target.append("%s = %s" % (dist_, version))
+
+ output.extend(required_output)
+
+ print_("Versions had to be automatically picked.")
+ print_("The following part definition lists the versions picked:")
+ print_('\n'.join(output))
+ if self.update_versions_file:
+ # Also write to the versions file.
+ if os.path.exists(self.update_versions_file):
+ output[:1] = [
+ '',
+ '# Added by buildout at %s' % datetime.datetime.now(),
+ ]
+ output.append('')
+ f = open(self.update_versions_file, 'a')
+ f.write('\n'.join(output))
+ f.close()
+ print_("This information has been written to " +
+ self.update_versions_file)
+
def setup(self, args):
if not args:
raise zc.buildout.UserError(
View
6 src/zc/buildout/buildout.txt
@@ -833,8 +833,12 @@ COMMAND_LINE_VALUE).
DEFAULT_VALUE
python= buildout
DEFAULT_VALUE
+ show-picked-versions= false
+ DEFAULT_VALUE
socket-timeout=
DEFAULT_VALUE
+ update-versions-file=
+ DEFAULT_VALUE
use-dependency-links= true
DEFAULT_VALUE
versions= versions
@@ -2373,7 +2377,9 @@ database is shown.
parts-directory = /sample-buildout/parts
prefer-final = true
python = buildout
+ show-picked-versions = false
socket-timeout =
+ update-versions-file =
use-dependency-links = true
verbosity = 20
versions = versions
View
39 src/zc/buildout/easy_install.py
@@ -69,6 +69,7 @@ def realpath(path):
FILE_SCHEME = re.compile('file://', re.I).match
+
class AllowHostsPackageIndex(setuptools.package_index.PackageIndex):
"""Will allow urls that are local to the system.
@@ -120,11 +121,14 @@ def call_subprocess(args, **kw):
class Installer:
_versions = {}
+ _required_by = {}
+ _picked_versions = {}
_download_cache = None
_install_from_cache = False
_prefer_final = True
_use_dependency_links = True
_allow_picked_versions = True
+ _show_picked_versions = False
def __init__(self,
dest=None,
@@ -167,7 +171,7 @@ def __init__(self,
self._index = _get_index(index, links, self._allow_hosts)
if versions is not None:
- self._versions = versions
+ self._versions = normalize_versions(versions)
def _satisfied(self, req, source=None):
dists = [dist for dist in self._env[req.project_name] if dist in req]
@@ -516,6 +520,8 @@ def _get_dist(self, requirement, ws):
):
logger.debug('Picked: %s = %s',
dist.project_name, dist.version)
+ self._picked_versions[dist.project_name] = dist.version
+
if not self._allow_picked_versions:
raise zc.buildout.UserError(
'Picked: %s = %s' % (dist.project_name, dist.version)
@@ -545,10 +551,9 @@ def _maybe_add_distribute(self, ws, dist):
def _constrain(self, requirement):
- constraint = self._versions.get(requirement.project_name)
+ constraint = self._versions.get(requirement.project_name.lower())
if constraint:
requirement = _constrained_requirement(constraint, requirement)
-
return requirement
def install(self, specs, working_set=None):
@@ -680,10 +685,20 @@ def build(self, spec, build_ext):
if tmp != self._download_cache:
shutil.rmtree(tmp)
+
+def normalize_versions(versions):
+ """Return version dict with keys normalized to lowercase.
+
+ PyPI is case-insensitive and not all distributions are consistent in
+ their own naming.
+ """
+ return dict([(k.lower(), v) for (k, v) in versions.items()])
+
+
def default_versions(versions=None):
old = Installer._versions
if versions is not None:
- Installer._versions = versions
+ Installer._versions = normalize_versions(versions)
return old
def download_cache(path=-1):
@@ -718,6 +733,13 @@ def allow_picked_versions(setting=None):
Installer._allow_picked_versions = bool(setting)
return old
+def show_picked_versions(setting=None):
+ old = Installer._show_picked_versions
+ if setting is not None:
+ Installer._show_picked_versions = bool(setting)
+ return old
+
+
def install(specs, dest,
links=(), index=None,
executable=sys.executable,
@@ -1226,9 +1248,10 @@ def __str__(self):
return "Couldn't find a distribution for %r." % str(req)
def _log_requirement(ws, req):
- if not logger.isEnabledFor(logging.DEBUG):
+ if (not logger.isEnabledFor(logging.DEBUG) and
+ not Installer._show_picked_versions):
# Sorting the working set and iterating over it's requirements
- # is expensive, so short cirtuit the work if it won't even be
+ # is expensive, so short circuit the work if it won't even be
# logged. When profiling a simple buildout with 10 parts with
# identical and large working sets, this resulted in a
# decrease of run time from 93.411 to 15.068 seconds, about a
@@ -1240,6 +1263,10 @@ def _log_requirement(ws, req):
for dist in ws:
if req in dist.requires():
logger.debug(" required by %s." % dist)
+ req_ = str(req)
+ if req_ not in Installer._required_by:
+ Installer._required_by[req_] = set()
+ Installer._required_by[req_].add(str(dist.as_requirement()))
def _fix_file_links(links):
for link in links:
View
163 src/zc/buildout/repeatable.txt
@@ -227,3 +227,166 @@ We can also disable checking versions:
Uninstalling foo.
Installing foo.
recipe v2
+
+
+Easier reporting and managing of versions (new in buildout 2.0)
+---------------------------------------------------------------
+
+Since buildout 2.0, the functionality of the `buildout-versions
+<http://packages.python.org/buildout-versions/>`_ extension is part of
+buildout itself. This makes reporting and managing versions easier.
+
+If you set the ``show-picked-versions`` option, buildout will print
+versions it picked at the end of its run:
+
+ >>> write('buildout.cfg',
+ ... '''
+ ... [buildout]
+ ... parts = foo
+ ... find-links = %s
+ ... show-picked-versions = true
+ ...
+ ... [versions]
+ ...
+ ... [foo]
+ ... recipe = spam
+ ... ''' % join('recipe', 'dist'))
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ Updating foo.
+ recipe v2
+ Versions had to be automatically picked.
+ The following part definition lists the versions picked:
+ [versions]
+ distribute = 0.6.99
+ spam = 2
+
+When everything is pinned, no output is generated:
+
+ >>> write('buildout.cfg',
+ ... '''
+ ... [buildout]
+ ... parts = foo
+ ... find-links = %s
+ ... show-picked-versions = true
+ ...
+ ... [versions]
+ ... distribute = 0.6.34
+ ... spam = 2
+ ...
+ ... [foo]
+ ... recipe = spam
+ ... ''' % join('recipe', 'dist'))
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ Updating foo.
+ recipe v2
+
+The Python package index is case-insensitive. Both
+http://pypi.python.org/simple/Django/ and
+http://pypi.python.org/simple/dJaNgO/ work. And distributions aren't always
+naming themselves consistently case-wise. So all version names are normalized
+and case differences won't impact the pinning:
+
+ >>> write('buildout.cfg',
+ ... '''
+ ... [buildout]
+ ... parts = foo
+ ... find-links = %s
+ ... show-picked-versions = true
+ ...
+ ... [versions]
+ ... distriBUTE = 0.6.34
+ ... Spam = 2
+ ...
+ ... [foo]
+ ... recipe = spam
+ ... ''' % join('recipe', 'dist'))
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ Updating foo.
+ recipe v2
+
+Sometimes it is handy to have a separate file with versions. This is a regular
+buildout file with a single ``[versions]`` section. You include it by
+extending from that versions file:
+
+ >>> write('my_versions.cfg',
+ ... '''
+ ... [versions]
+ ... distribute = 0.6.34
+ ... spam = 2
+ ... ''')
+ >>> write('buildout.cfg',
+ ... '''
+ ... [buildout]
+ ... parts = foo
+ ... extends = my_versions.cfg
+ ... find-links = %s
+ ... show-picked-versions = true
+ ...
+ ... [foo]
+ ... recipe = spam
+ ... ''' % join('recipe', 'dist'))
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ Updating foo.
+ recipe v2
+
+If not everything is pinned and buildout has to pick versions, you can tell
+buildout to append the versions to your versions file. It simply appends them
+at the end.
+
+ >>> write('my_versions.cfg',
+ ... '''
+ ... [versions]
+ ... distribute = 0.6.34
+ ... ''')
+ >>> write('buildout.cfg',
+ ... '''
+ ... [buildout]
+ ... parts = foo
+ ... extends = my_versions.cfg
+ ... update-versions-file = my_versions.cfg
+ ... find-links = %s
+ ... show-picked-versions = true
+ ...
+ ... [foo]
+ ... recipe = spam
+ ... ''' % join('recipe', 'dist'))
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ Updating foo.
+ recipe v2
+ Versions had to be automatically picked.
+ The following part definition lists the versions picked:
+ [versions]
+ spam = 2
+ This information has been written to my_versions.cfg
+
+The versions file now contains the extra pin:
+
+ >>> 'spam = 2' in open('my_versions.cfg').read()
+ True
+
+And re-running buildout doesn't report any picked versions anymore:
+
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ Updating foo.
+ recipe v2
+
+Because buildout now includes buildout-versions' (and the older
+buildout.dumppickedversions') functionality, it warns if these extensions are
+configured.
+
+ >>> write(sample_buildout, 'buildout.cfg',
+ ... """
+ ... [buildout]
+ ... parts = foo
+ ... extensions = buildout-versions
+ ...
+ ... [foo]
+ ... recipe = spam
+ ... """)
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ While:
+ Installing.
+ Loading extensions.
+ Error: The extension buildout-versions is now included in buildout itself.
+ Remove the extension from your configuration and look at the `show-picked-versions`
+ option in buildout's documentation.
View
38 src/zc/buildout/tests.py
@@ -404,6 +404,41 @@ def show_who_requires_missing_distributions():
Error: Couldn't find a distribution for 'demoneeded'.
"""
+def show_who_requires_picked_versions():
+ """
+
+The show-picked-versions prints the versions, but it also prints who
+required the picked distributions.
+We do not need to run in verbose mode for that to work:
+
+ >>> make_dist_that_requires(sample_buildout, 'sampley', ['distribute'])
+ >>> make_dist_that_requires(sample_buildout, 'samplea', ['sampleb'])
+ >>> make_dist_that_requires(sample_buildout, 'sampleb',
+ ... ['sampley', 'samplea'])
+ >>> write('buildout.cfg',
+ ... '''
+ ... [buildout]
+ ... parts = eggs
+ ... show-picked-versions = true
+ ... develop = sampley samplea sampleb
+ ...
+ ... [eggs]
+ ... recipe = zc.recipe.egg
+ ... eggs = samplea
+ ... ''')
+
+ >>> print_(system(buildout), end='') # doctest: +ELLIPSIS
+ Develop: ...
+ Installing eggs.
+ Versions had to be automatically picked.
+ The following part definition lists the versions picked:
+ [versions]
+ <BLANKLINE>
+ # Required by:
+ # sampley==1
+ distribute = 0.6.99
+ """
+
def test_comparing_saved_options_with_funny_characters():
"""
If an option has newlines, extra/odd spaces or a %, we need to make sure
@@ -3205,6 +3240,7 @@ def test_suite():
'We have a develop egg: zc.buildout X.X.'),
(re.compile(r'\\[\\]?'), '/'),
(re.compile('WindowsError'), 'OSError'),
+ (re.compile('distribute = \S+'), 'distribute = 0.6.99'),
(re.compile(r'\[Error 17\] Cannot create a file '
r'when that file already exists: '),
'[Errno 17] File exists: '
@@ -3320,6 +3356,7 @@ def test_suite():
'distribute.egg'),
(re.compile('zc.buildout-\S+-'),
'zc.buildout.egg'),
+ (re.compile('distribute = \S+'), 'distribute = 0.6.99'),
(re.compile('File "\S+one.py"'),
'File "one.py"'),
(re.compile(r'We have a develop egg: (\S+) (\S+)'),
@@ -3391,4 +3428,3 @@ def test_suite():
))
return unittest.TestSuite(test_suite)
-
Something went wrong with that request. Please try again.