Merge lp:~cjwatson/txpkgupload/pip into lp:~lazr-developers/txpkgupload/trunk

Proposed by Colin Watson
Status: Merged
Merged at revision: 27
Proposed branch: lp:~cjwatson/txpkgupload/pip
Merge into: lp:~lazr-developers/txpkgupload/trunk
Diff against target: 700 lines (+103/-516)
10 files modified
.bzrignore (+1/-5)
MANIFEST.in (+2/-4)
Makefile (+52/-75)
_bootstrap/COPYRIGHT.txt (+0/-9)
_bootstrap/LICENSE.txt (+0/-54)
_bootstrap/bootstrap.py (+0/-277)
bootstrap-requirements.txt (+3/-0)
buildout.cfg (+0/-33)
requirements.txt (+45/-0)
versions.cfg (+0/-59)
To merge this branch: bzr merge lp:~cjwatson/txpkgupload/pip
Reviewer Review Type Date Requested Status
Kit Randel (community) Approve
Review via email: mp+277520@code.launchpad.net

Commit message

Convert from buildout to pip.

Description of the change

Convert from buildout to pip. This will make it easier to upgrade to newer testtools/Twisted releases.

Before deploying this, we'll need to make sure that virtualenv is installed on pepo and haetae, by way of meta-lp-deps changes.

To post a comment you must log in.
Revision history for this message
Kit Randel (blr) :
review: Approve
lp:~cjwatson/txpkgupload/pip updated
27. By Colin Watson

Merge trunk.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2015-01-09 15:55:08 +0000
3+++ .bzrignore 2015-11-17 13:24:41 +0000
4@@ -1,13 +1,9 @@
5 bin
6-develop-eggs
7 download-cache
8-eggs
9-.installed.cfg
10-parts
11+env
12 *.egg-info
13 tags
14 TAGS
15-build
16 *.egg
17 dist
18 src/twisted/plugins/dropin.cache
19
20=== modified file 'MANIFEST.in'
21--- MANIFEST.in 2015-01-13 11:15:52 +0000
22+++ MANIFEST.in 2015-11-17 13:24:41 +0000
23@@ -2,7 +2,5 @@
24 include src/txpkgupload/tests/txpkgupload-sftp
25 include src/txpkgupload/tests/txpkgupload-sftp.pub
26 graft etc
27-exclude MANIFEST.in Makefile buildout.cfg bootstrap.py .bzrignore
28-prune _bootstrap
29-prune eggs
30-prune parts
31+exclude MANIFEST.in Makefile .bzrignore
32+prune env
33
34=== modified file 'Makefile'
35--- Makefile 2015-01-13 17:19:01 +0000
36+++ Makefile 2015-11-17 13:24:41 +0000
37@@ -1,92 +1,69 @@
38 # Copyright 2005-2015 Canonical Ltd. This software is licensed under the
39 # GNU Affero General Public License version 3 (see the file LICENSE).
40
41-PYTHON = python
42-
43-BOOTSTRAP_BIN := bootstrap.py
44-BOOTSTRAP = PYTHONPATH= $(PYTHON) $(BOOTSTRAP_BIN)
45-
46-BUILDOUT_BIN := bin/buildout
47-BUILDOUT_CFG := buildout.cfg
48-BUILDOUT = PYTHONPATH= $(BUILDOUT_BIN) -qc $(BUILDOUT_CFG)
49+ENV = $(CURDIR)/env
50+
51+PIP_ARGS := \
52+ -q \
53+ --no-index \
54+ --find-links=file://$(CURDIR)/download-cache/dist
55+
56+PYTHON = $(ENV)/bin/python
57+TWISTD = $(ENV)/bin/twistd
58
59
60 default: check
61
62
63-compile: bin/twistd
64-
65-
66-# When a built tree is moved this updates absolute paths.
67-build-update-paths:
68- $(BUILDOUT)
69-
70-
71-check: bin/test
72- bin/test
73-
74-
75-dist: $(BUILDOUT_BIN)
76- $(BUILDOUT) setup setup.py egg_info -r sdist
77-
78-
79-TAGS: bin/tags
80- bin/tags --ctags-emacs
81-
82-
83-tags: bin/tags
84- bin/tags --ctags-vi
85+compile: $(ENV)
86+
87+
88+check: $(ENV)
89+ $(PYTHON) -m unittest discover src
90+
91+
92+dist:
93+ python setup.py sdist
94+
95+
96+TAGS:
97+ ctags -e -R src
98+
99+
100+tags:
101+ ctags -R src
102
103
104 download-cache:
105- mkdir -p download-cache
106-
107-
108-eggs:
109- mkdir -p eggs
110-
111-
112-$(BUILDOUT_BIN): download-cache eggs
113- $(BOOTSTRAP) \
114- --setup-source=download-cache/dist/ez_setup.py \
115- --download-base=download-cache/dist \
116- --eggs=eggs --version=1.5.2
117- touch --no-create $@
118-
119-
120-bin/twistd: $(BUILDOUT_BIN) $(BUILDOUT_CFG) setup.py
121- $(BUILDOUT) install runtime
122-
123-
124-bin/test: $(BUILDOUT_BIN) $(BUILDOUT_CFG) setup.py
125- $(BUILDOUT) install test
126-
127-
128-bin/tags: $(BUILDOUT_BIN) $(BUILDOUT_CFG) setup.py
129- $(BUILDOUT) install tags
130-
131-
132-clean_buildout:
133+ifeq ($(PIP_SOURCE_DIR),)
134+ @echo "Set PIP_SOURCE_DIR to the path of a checkout of" >&2
135+ @echo "lp:lp-source-dependencies." >&2
136+ @exit 1
137+endif
138+ ln -nsf $(PIP_SOURCE_DIR) download-cache
139+
140+
141+$(ENV): download-cache
142+ mkdir -p $(ENV)
143+ (echo '[easy_install]'; \
144+ echo "allow_hosts = ''"; \
145+ echo 'find_links = file://$(CURDIR)/download-cache/dist/') \
146+ >$(ENV)/.pydistutils.cfg
147+ VIRTUALENV_SETUPTOOLS=1 virtualenv $(ENV)
148+ $(ENV)/bin/pip install $(PIP_ARGS) -r bootstrap-requirements.txt
149+ $(ENV)/bin/pip install $(PIP_ARGS) -r requirements.txt -e .
150+ $(ENV)/bin/python -m compileall -q src
151+ ln -nsf $(ENV)/bin bin
152+
153+
154+clean_pip:
155 $(RM) -r bin
156- $(RM) -r parts
157- $(RM) -r develop-eggs
158- $(RM) .installed.cfg
159- $(RM) -r build
160+ $(RM) -r $(ENV)
161 $(RM) -r dist
162
163
164-clean_eggs:
165- $(RM) -r download-cache
166- $(RM) -r *.egg-info
167- $(RM) -r eggs
168-
169-
170-clean: clean_buildout
171+clean: clean_pip
172 find src -name '*.py[co]' -print0 | xargs -r0 $(RM)
173
174-clean_all: clean_buildout clean_eggs
175-
176-
177-.PHONY: \
178- compile build-update-paths check clean clean_all clean_buildout \
179- clean_eggs default dist
180+
181+.PHONY: compile check clean clean_pip default dist
182
183=== removed directory '_bootstrap'
184=== removed file '_bootstrap/COPYRIGHT.txt'
185--- _bootstrap/COPYRIGHT.txt 2015-01-06 12:03:45 +0000
186+++ _bootstrap/COPYRIGHT.txt 1970-01-01 00:00:00 +0000
187@@ -1,9 +0,0 @@
188-Copyright (c) 2004-2009 Zope Corporation and Contributors.
189-All Rights Reserved.
190-
191-This software is subject to the provisions of the Zope Public License,
192-Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
193-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
194-WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
195-WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
196-FOR A PARTICULAR PURPOSE.
197
198=== removed file '_bootstrap/LICENSE.txt'
199--- _bootstrap/LICENSE.txt 2015-01-06 12:03:45 +0000
200+++ _bootstrap/LICENSE.txt 1970-01-01 00:00:00 +0000
201@@ -1,54 +0,0 @@
202-Zope Public License (ZPL) Version 2.1
203--------------------------------------
204-
205-A copyright notice accompanies this license document that
206-identifies the copyright holders.
207-
208-This license has been certified as open source. It has also
209-been designated as GPL compatible by the Free Software
210-Foundation (FSF).
211-
212-Redistribution and use in source and binary forms, with or
213-without modification, are permitted provided that the
214-following conditions are met:
215-
216-1. Redistributions in source code must retain the
217- accompanying copyright notice, this list of conditions,
218- and the following disclaimer.
219-
220-2. Redistributions in binary form must reproduce the accompanying
221- copyright notice, this list of conditions, and the
222- following disclaimer in the documentation and/or other
223- materials provided with the distribution.
224-
225-3. Names of the copyright holders must not be used to
226- endorse or promote products derived from this software
227- without prior written permission from the copyright
228- holders.
229-
230-4. The right to distribute this software or to use it for
231- any purpose does not give you the right to use
232- Servicemarks (sm) or Trademarks (tm) of the copyright
233- holders. Use of them is covered by separate agreement
234- with the copyright holders.
235-
236-5. If any files are modified, you must cause the modified
237- files to carry prominent notices stating that you changed
238- the files and the date of any change.
239-
240-Disclaimer
241-
242- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS''
243- AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
244- NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
245- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
246- NO EVENT SHALL THE COPYRIGHT HOLDERS BE
247- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
248- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
249- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
250- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
251- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
252- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
253- OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
254- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
255- DAMAGE.
256\ No newline at end of file
257
258=== removed file '_bootstrap/bootstrap.py'
259--- _bootstrap/bootstrap.py 2015-01-06 12:03:45 +0000
260+++ _bootstrap/bootstrap.py 1970-01-01 00:00:00 +0000
261@@ -1,277 +0,0 @@
262-##############################################################################
263-#
264-# Copyright (c) 2006 Zope Foundation and Contributors.
265-# All Rights Reserved.
266-#
267-# This software is subject to the provisions of the Zope Public License,
268-# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
269-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
270-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
271-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
272-# FOR A PARTICULAR PURPOSE.
273-#
274-##############################################################################
275-"""Bootstrap a buildout-based project
276-
277-Simply run this script in a directory containing a buildout.cfg.
278-The script accepts buildout command-line options, so you can
279-use the -c option to specify an alternate configuration file.
280-"""
281-
282-import os, shutil, sys, tempfile, urllib, urllib2, subprocess
283-from optparse import OptionParser
284-
285-if sys.platform == 'win32':
286- def quote(c):
287- if ' ' in c:
288- return '"%s"' % c # work around spawn lamosity on windows
289- else:
290- return c
291-else:
292- quote = str
293-
294-# See zc.buildout.easy_install._has_broken_dash_S for motivation and comments.
295-stdout, stderr = subprocess.Popen(
296- [sys.executable, '-Sc',
297- 'try:\n'
298- ' import ConfigParser\n'
299- 'except ImportError:\n'
300- ' print 1\n'
301- 'else:\n'
302- ' print 0\n'],
303- stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
304-has_broken_dash_S = bool(int(stdout.strip()))
305-
306-# In order to be more robust in the face of system Pythons, we want to
307-# run without site-packages loaded. This is somewhat tricky, in
308-# particular because Python 2.6's distutils imports site, so starting
309-# with the -S flag is not sufficient. However, we'll start with that:
310-if not has_broken_dash_S and 'site' in sys.modules:
311- # We will restart with python -S.
312- args = sys.argv[:]
313- args[0:0] = [sys.executable, '-S']
314- args = map(quote, args)
315- os.execv(sys.executable, args)
316-# Now we are running with -S. We'll get the clean sys.path, import site
317-# because distutils will do it later, and then reset the path and clean
318-# out any namespace packages from site-packages that might have been
319-# loaded by .pth files.
320-clean_path = sys.path[:]
321-import site # imported because of its side effects
322-sys.path[:] = clean_path
323-for k, v in sys.modules.items():
324- if k in ('setuptools', 'pkg_resources') or (
325- hasattr(v, '__path__') and
326- len(v.__path__) == 1 and
327- not os.path.exists(os.path.join(v.__path__[0], '__init__.py'))):
328- # This is a namespace package. Remove it.
329- sys.modules.pop(k)
330-
331-is_jython = sys.platform.startswith('java')
332-
333-setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py'
334-distribute_source = 'http://python-distribute.org/distribute_setup.py'
335-distribute_source = 'https://bitbucket.org/pypa/setuptools/raw/f657df1f1ed46596d236376649c99a470662b4ba/distribute_setup.py'
336-
337-# parsing arguments
338-def normalize_to_url(option, opt_str, value, parser):
339- if value:
340- if '://' not in value: # It doesn't smell like a URL.
341- value = 'file://%s' % (
342- urllib.pathname2url(
343- os.path.abspath(os.path.expanduser(value))),)
344- if opt_str == '--download-base' and not value.endswith('/'):
345- # Download base needs a trailing slash to make the world happy.
346- value += '/'
347- else:
348- value = None
349- name = opt_str[2:].replace('-', '_')
350- setattr(parser.values, name, value)
351-
352-usage = '''\
353-[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]
354-
355-Bootstraps a buildout-based project.
356-
357-Simply run this script in a directory containing a buildout.cfg, using the
358-Python that you want bin/buildout to use.
359-
360-Note that by using --setup-source and --download-base to point to
361-local resources, you can keep this script from going over the network.
362-'''
363-
364-parser = OptionParser(usage=usage)
365-parser.add_option("-v", "--version", dest="version",
366- help="use a specific zc.buildout version")
367-parser.add_option("-d", "--distribute",
368- action="store_true", dest="use_distribute", default=False,
369- help="Use Distribute rather than Setuptools.")
370-parser.add_option("--setup-source", action="callback", dest="setup_source",
371- callback=normalize_to_url, nargs=1, type="string",
372- help=("Specify a URL or file location for the setup file. "
373- "If you use Setuptools, this will default to " +
374- setuptools_source + "; if you use Distribute, this "
375- "will default to " + distribute_source + "."))
376-parser.add_option("--download-base", action="callback", dest="download_base",
377- callback=normalize_to_url, nargs=1, type="string",
378- help=("Specify a URL or directory for downloading "
379- "zc.buildout and either Setuptools or Distribute. "
380- "Defaults to PyPI."))
381-parser.add_option("--eggs",
382- help=("Specify a directory for storing eggs. Defaults to "
383- "a temporary directory that is deleted when the "
384- "bootstrap script completes."))
385-parser.add_option("-t", "--accept-buildout-test-releases",
386- dest='accept_buildout_test_releases',
387- action="store_true", default=False,
388- help=("Normally, if you do not specify a --version, the "
389- "bootstrap script and buildout gets the newest "
390- "*final* versions of zc.buildout and its recipes and "
391- "extensions for you. If you use this flag, "
392- "bootstrap and buildout will get the newest releases "
393- "even if they are alphas or betas."))
394-parser.add_option("-c", None, action="store", dest="config_file",
395- help=("Specify the path to the buildout configuration "
396- "file to be used."))
397-
398-options, args = parser.parse_args()
399-
400-if options.eggs:
401- eggs_dir = os.path.abspath(os.path.expanduser(options.eggs))
402-else:
403- eggs_dir = tempfile.mkdtemp()
404-
405-if options.setup_source is None:
406- if options.use_distribute:
407- options.setup_source = distribute_source
408- else:
409- options.setup_source = setuptools_source
410-
411-if options.accept_buildout_test_releases:
412- args.insert(0, 'buildout:accept-buildout-test-releases=true')
413-
414-try:
415- import pkg_resources
416- import setuptools # A flag. Sometimes pkg_resources is installed alone.
417- if not hasattr(pkg_resources, '_distribute'):
418- raise ImportError
419-except ImportError:
420- ez_code = urllib2.urlopen(
421- options.setup_source).read().replace('\r\n', '\n')
422- ez = {}
423- exec ez_code in ez
424- setup_args = dict(to_dir=eggs_dir, download_delay=0)
425- if options.download_base:
426- setup_args['download_base'] = options.download_base
427- if options.use_distribute:
428- setup_args['no_fake'] = True
429- if sys.version_info[:2] == (2, 4):
430- setup_args['version'] = '0.6.32'
431- ez['use_setuptools'](**setup_args)
432- if 'pkg_resources' in sys.modules:
433- reload(sys.modules['pkg_resources'])
434- import pkg_resources
435- # This does not (always?) update the default working set. We will
436- # do it.
437- for path in sys.path:
438- if path not in pkg_resources.working_set.entries:
439- pkg_resources.working_set.add_entry(path)
440-
441-cmd = [quote(sys.executable),
442- '-c',
443- quote('from setuptools.command.easy_install import main; main()'),
444- '-mqNxd',
445- quote(eggs_dir)]
446-
447-if not has_broken_dash_S:
448- cmd.insert(1, '-S')
449-
450-find_links = options.download_base
451-if not find_links:
452- find_links = os.environ.get('bootstrap-testing-find-links')
453-if not find_links and options.accept_buildout_test_releases:
454- find_links = 'http://downloads.buildout.org/'
455-if find_links:
456- cmd.extend(['-f', quote(find_links)])
457-
458-if options.use_distribute:
459- setup_requirement = 'distribute'
460-else:
461- setup_requirement = 'setuptools'
462-ws = pkg_resources.working_set
463-setup_requirement_path = ws.find(
464- pkg_resources.Requirement.parse(setup_requirement)).location
465-env = dict(
466- os.environ,
467- PYTHONPATH=setup_requirement_path)
468-
469-requirement = 'zc.buildout'
470-version = options.version
471-if version is None and not options.accept_buildout_test_releases:
472- # Figure out the most recent final version of zc.buildout.
473- import setuptools.package_index
474- _final_parts = '*final-', '*final'
475-
476- def _final_version(parsed_version):
477- for part in parsed_version:
478- if (part[:1] == '*') and (part not in _final_parts):
479- return False
480- return True
481- index = setuptools.package_index.PackageIndex(
482- search_path=[setup_requirement_path])
483- if find_links:
484- index.add_find_links((find_links,))
485- req = pkg_resources.Requirement.parse(requirement)
486- if index.obtain(req) is not None:
487- best = []
488- bestv = None
489- for dist in index[req.project_name]:
490- distv = dist.parsed_version
491- if distv >= pkg_resources.parse_version('2dev'):
492- continue
493- if _final_version(distv):
494- if bestv is None or distv > bestv:
495- best = [dist]
496- bestv = distv
497- elif distv == bestv:
498- best.append(dist)
499- if best:
500- best.sort()
501- version = best[-1].version
502-
503-if version:
504- requirement += '=='+version
505-else:
506- requirement += '<2dev'
507-
508-cmd.append(requirement)
509-
510-if is_jython:
511- import subprocess
512- exitcode = subprocess.Popen(cmd, env=env).wait()
513-else: # Windows prefers this, apparently; otherwise we would prefer subprocess
514- exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env]))
515-if exitcode != 0:
516- sys.stdout.flush()
517- sys.stderr.flush()
518- print ("An error occurred when trying to install zc.buildout. "
519- "Look above this message for any errors that "
520- "were output by easy_install.")
521- sys.exit(exitcode)
522-
523-ws.add_entry(eggs_dir)
524-ws.require(requirement)
525-import zc.buildout.buildout
526-
527-# If there isn't already a command in the args, add bootstrap
528-if not [a for a in args if '=' not in a]:
529- args.append('bootstrap')
530-
531-
532-# if -c was provided, we push it back into args for buildout's main function
533-if options.config_file is not None:
534- args[0:0] = ['-c', options.config_file]
535-
536-zc.buildout.buildout.main(args)
537-if not options.eggs: # clean up temporary egg directory
538- shutil.rmtree(eggs_dir)
539
540=== added file 'bootstrap-requirements.txt'
541--- bootstrap-requirements.txt 1970-01-01 00:00:00 +0000
542+++ bootstrap-requirements.txt 2015-11-17 13:24:41 +0000
543@@ -0,0 +1,3 @@
544+pip==7.1.2
545+setuptools==18.4
546+wheel==0.24.0
547
548=== removed symlink 'bootstrap.py'
549=== target was u'_bootstrap/bootstrap.py'
550=== removed file 'buildout.cfg'
551--- buildout.cfg 2015-01-06 12:03:45 +0000
552+++ buildout.cfg 1970-01-01 00:00:00 +0000
553@@ -1,33 +0,0 @@
554-[buildout]
555-extends = versions.cfg
556-parts =
557- runtime
558- test
559- tags
560-unzip = true
561-include-site-packages = false
562-allowed-eggs-from-site-packages = pyyaml
563-exec-sitecustomize = true
564-develop = .
565-download-cache = download-cache
566-eggs-directory = eggs
567-# Relative paths are useful when deploying built trees.
568-relative-paths = true
569-# Disable this option temporarily if you want buildout to find
570-# software dependencies *other* than those in our download-cache.
571-# Once you have the desired software, re-enable this option.
572-install-from-cache = true
573-
574-[runtime]
575-recipe = z3c.recipe.scripts
576-eggs = txpkgupload
577-entry-points = twistd=twisted.scripts.twistd:run
578-
579-[test]
580-recipe = zc.recipe.testrunner
581-eggs = txpkgupload [test]
582-defaults = '--tests-pattern ^tests --exit-with-status --suite-name additional_tests'.split()
583-
584-[tags]
585-recipe = z3c.recipe.tag:tags
586-eggs = txpkgupload
587
588=== added file 'requirements.txt'
589--- requirements.txt 1970-01-01 00:00:00 +0000
590+++ requirements.txt 2015-11-17 13:24:41 +0000
591@@ -0,0 +1,45 @@
592+bson==0.3.3
593+extras==0.0.3
594+fixtures==0.3.12
595+FormEncode==1.2.4
596+httplib2==0.8
597+iso8601==0.1.4
598+keyring==0.6.2
599+launchpadlib==1.10.2
600+lazr.authentication==0.1.1
601+lazr.restfulclient==0.13.2
602+lazr.sshserver==0.1.1
603+lazr.uri==1.0.2
604+oauth==1.0
605+oops==0.0.10
606+oops-datedir-repo==0.0.14
607+oops-twisted==0.0.6
608+oops-wsgi==0.0.8
609+paste==1.7.5.1
610+pyasn1==0.1.6
611+pycrypto==2.6
612+python-mimeparse==0.1.4
613+PyYAML==3.10
614+pytz==2014.10
615+simplejson==3.1.3
616+testresources==0.2.7
617+testtools==0.9.30
618+Twisted==13.0.0
619+wadllib==1.3.2
620+wsgi-intercept==0.5.1
621+zope.browser==1.3
622+zope.component==3.10.0
623+zope.configuration==3.7.4
624+zope.contenttype==3.5.5
625+zope.event==3.5.2
626+zope.exceptions==3.6.2
627+zope.i18n==3.7.4
628+zope.i18nmessageid==3.5.3
629+zope.interface==3.8.0
630+zope.location==3.9.1
631+zope.proxy==3.6.1
632+zope.publisher==3.12.6
633+zope.schema==3.7.1
634+zope.security==3.8.3
635+zope.server==3.8.6
636+zope.testrunner==4.0.3
637
638=== removed file 'versions.cfg'
639--- versions.cfg 2015-01-21 13:38:43 +0000
640+++ versions.cfg 1970-01-01 00:00:00 +0000
641@@ -1,59 +0,0 @@
642-[buildout]
643-versions = versions
644-allow-picked-versions = false
645-use-dependency-links = false
646-
647-[versions]
648-# Alphabetical, case-SENSITIVE, blank line after this comment
649-
650-bson = 0.3.3
651-extras = 0.0.3
652-fixtures = 0.3.12
653-FormEncode = 1.2.4
654-httplib2 = 0.8
655-iso8601 = 0.1.4
656-keyring = 0.6.2
657-launchpadlib = 1.10.2
658-lazr.authentication = 0.1.1
659-lazr.restfulclient = 0.13.2
660-lazr.sshserver = 0.1.1
661-lazr.uri = 1.0.2
662-oauth = 1.0
663-oops = 0.0.10
664-oops-datedir-repo = 0.0.14
665-oops-twisted = 0.0.6
666-oops-wsgi = 0.0.8
667-paste = 1.7.5.1
668-pyasn1 = 0.1.6
669-pycrypto = 2.6
670-python-mimeparse = 0.1.4
671-PyYAML = 3.10
672-pytz = 2014.10
673-setuptools = 0.6c11
674-simplejson = 3.1.3
675-testresources = 0.2.7
676-testtools = 0.9.30
677-Twisted = 13.0.0
678-wadllib = 1.3.2
679-wsgi-intercept = 0.5.1
680-z3c.recipe.scripts = 1.0.1
681-z3c.recipe.tag = 0.6
682-zc.buildout = 1.5.2
683-zc.recipe.egg = 1.3.2
684-zc.recipe.testrunner = 1.4.0
685-zope.browser = 1.3
686-zope.component = 3.10.0
687-zope.configuration = 3.7.4
688-zope.contenttype = 3.5.5
689-zope.event = 3.5.2
690-zope.exceptions = 3.6.2
691-zope.i18n = 3.7.4
692-zope.i18nmessageid = 3.5.3
693-zope.interface = 3.8.0
694-zope.location = 3.9.1
695-zope.proxy = 3.6.1
696-zope.publisher = 3.12.6
697-zope.schema = 3.7.1
698-zope.security = 3.8.3
699-zope.server = 3.8.6
700-zope.testrunner = 4.0.3

Subscribers

People subscribed via source and target branches

to all changes: