Merge lp:~kelvin.li/isitdeployable/deployable-wheels-supports into lp:isitdeployable
- deployable-wheels-supports
- Merge into trunk
Status: | Merged |
---|---|
Approved by: | Kelvin Li |
Approved revision: | 251 |
Merged at revision: | 189 |
Proposed branch: | lp:~kelvin.li/isitdeployable/deployable-wheels-supports |
Merge into: | lp:isitdeployable |
Diff against target: |
1912 lines (+714/-905) 32 files modified
.bzrignore (+6/-1) Makefile (+108/-5) bootstrap.py (+0/-262) buildout.cfg (+0/-66) combo.py (+0/-7) config-manager.txt (+2/-0) dependencies.txt (+50/-0) dev_config/gorun_settings.py (+0/-7) dev_config/supervisor.conf (+20/-4) django_project/celeryapp.py (+8/-1) django_project/manage.py (+3/-0) django_project/paths.py (+42/-0) django_project/settings.py (+0/-238) django_project/settings_base.py (+221/-0) django_project/urls.py (+7/-0) django_project/wsgi.py (+31/-0) makefiles/buildout.mk (+0/-81) makefiles/css.mk (+2/-2) makefiles/deploy.mk (+0/-48) makefiles/js.mk (+11/-7) makefiles/services.mk (+0/-50) requirements.txt (+45/-0) revtracker/tasks.py (+2/-2) revtracker/views.py (+27/-0) revtracker/wsgi.py (+71/-0) scripts/deploy.sh (+0/-16) scripts/settings-to-conncheck.py (+37/-0) scripts/start-database.sh (+0/-36) setup.py (+6/-0) tarball_exclude.txt (+9/-0) tarmac_verify.sh (+6/-0) versions.cfg (+0/-72) |
To merge this branch: | bzr merge lp:~kelvin.li/isitdeployable/deployable-wheels-supports |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Kelvin Li (community) | Approve | ||
Review via email: mp+284123@code.launchpad.net |
Commit message
1. refactoring isitdeployable to work with charm/spec.
2. Removed the buildout, use virtualenv wheels and cm to manage the dependencies.
3. use single gunicorn to host all the assets and combo assets
4. added the oops
Description of the change
1. refactoring isitdeployable to work with charm/spec.
2. Removed the buildout, use virtualenv wheels and cm to manage the dependencies.
3. use single gunicorn to host all the assets and combo assets
4. added the oops
Kelvin Li (kelvin.li) wrote : | # |
Kelvin Li (kelvin.li) wrote : | # |
Due to Michael already reviewed in https:/
Self approved.
Ubuntu One Auto Pilot (otto-pilot) wrote : | # |
The attempt to merge lp:~kelvin.li/isitdeployable/deployable-wheels-supports into lp:isitdeployable failed. Below is the output from the failed tests.
echo 'creating new virtualenv...'
creating new virtualenv...
virtualenv --clear --system-
Not deleting /mnt/tarmac/
New python executable in /mnt/tarmac/
Installing setuptools, pip...done.
/usr/lib/
#touch branches/last_build
[ -d branches/wheels ] && (cd branches/wheels && bzr pull) || (bzr branch lp:~ubuntuone-pqm-team/isitdeployable/dependencies branches/wheels)
bzr version-info --format=python > lib/versioninfo.py
/mnt/tarmac/
Ignoring indexes: https:/
Unpacking ./branches/
Installing collected packages: pip
Found existing installation: pip 1.5.4
Uninstalling pip:
Successfully uninstalled pip
Successfully installed pip
Cleaning up...
/mnt/tarmac/
Ignoring indexes: https:/
Collecting amqp==1.4.1 (from -r requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): anyjson==0.3.3 in /usr/lib/
Requirement already satisfied (use --upgrade to upgrade): BeautifulSoup=
Collecting billiard==3.3.0.14 (from -r requirements.txt (line 4))
Collecting bson==0.3.3 (from -r requirements.txt (line 5))
Collecting celery==3.1.8 (from -r requirements.txt (line 6))
Collecting convoy==0.2.4 (from -r requirements.txt (line 7))
Collecting Django==1.5.1 (from -r requirements.txt (line 8))
Collecting django-
Collecting django-
Collecting django-
Collecting django-
Collecting django-kombu==0.9.4 (from -r requirements.txt (line 13))
Collecting django-
Collecting django-
Collecting django-
Collecting django-pgtools==0.2 (from -r requirements.txt (line 18))
Collecting django-
Collecting gorun==1.7 (from -r requirements.txt (line 20))
Collecting gunicorn==19.3.0 (from -r requirements.txt (line 21))
Collecting jsmin==2.0.2 (from -r requirements.txt (line 22))
Collecting keyring==0.9.2 (from -r requirements.txt (line 23))
Collecting kombu==3.0.10 (from -r requ...
Ubuntu One Auto Pilot (otto-pilot) wrote : | # |
The attempt to merge lp:~kelvin.li/isitdeployable/deployable-wheels-supports into lp:isitdeployable failed. Below is the output from the failed tests.
echo 'creating new virtualenv...'
creating new virtualenv...
virtualenv --clear --system-
Not deleting /mnt/tarmac/
New python executable in /mnt/tarmac/
Installing setuptools, pip...done.
/usr/lib/
#touch branches/last_build
[ -d branches/wheels ] && (cd branches/wheels && bzr pull) || (bzr branch lp:~ubuntuone-pqm-team/isitdeployable/dependencies branches/wheels)
bzr version-info --format=python > lib/versioninfo.py
/mnt/tarmac/
Ignoring indexes: https:/
Unpacking ./branches/
Installing collected packages: pip
Found existing installation: pip 1.5.4
Uninstalling pip:
Successfully uninstalled pip
Successfully installed pip
Cleaning up...
/mnt/tarmac/
Ignoring indexes: https:/
Collecting amqp==1.4.1 (from -r requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): anyjson==0.3.3 in /usr/lib/
Requirement already satisfied (use --upgrade to upgrade): BeautifulSoup=
Requirement already satisfied (use --upgrade to upgrade): billiard>=3.3.0.14 in /usr/lib/
Collecting bson==0.3.3 (from -r requirements.txt (line 5))
Collecting celery==3.1.8 (from -r requirements.txt (line 6))
Collecting convoy==0.2.4 (from -r requirements.txt (line 7))
Collecting Django==1.5.1 (from -r requirements.txt (line 8))
Collecting django-
Collecting django-
Collecting django-
Collecting django-
Collecting django-kombu==0.9.4 (from -r requirements.txt (line 13))
Collecting django-
Collecting django-
Collecting django-
Collecting django-pgtools==0.2 (from -r requirements.txt (line 18))
Collecting django-
Collecting gorun==1.7 (from -r requirements.txt (line 20))
Collecting gunicorn==19.3.0 (from -r requirements.txt (line 21))
Collecting jsmin==2.0.2 (from -r requirements.txt (line 22))
Collecting keyring...
Ubuntu One Auto Pilot (otto-pilot) wrote : | # |
The attempt to merge lp:~kelvin.li/isitdeployable/deployable-wheels-supports into lp:isitdeployable failed. Below is the output from the failed tests.
echo 'creating new virtualenv...'
creating new virtualenv...
virtualenv --clear --system-
Not deleting /mnt/tarmac/
New python executable in /mnt/tarmac/
Installing setuptools, pip...done.
/usr/lib/
#touch branches/last_build
[ -d branches/wheels ] && (cd branches/wheels && bzr pull) || (bzr branch lp:~ubuntuone-pqm-team/isitdeployable/dependencies branches/wheels)
bzr version-info --format=python > lib/versioninfo.py
/mnt/tarmac/
Ignoring indexes: https:/
Unpacking ./branches/
Installing collected packages: pip
Found existing installation: pip 1.5.4
Uninstalling pip:
Successfully uninstalled pip
Successfully installed pip
Cleaning up...
/mnt/tarmac/
Ignoring indexes: https:/
Collecting amqp==1.4.1 (from -r requirements.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): anyjson==0.3.3 in /usr/lib/
Requirement already satisfied (use --upgrade to upgrade): BeautifulSoup=
Requirement already satisfied (use --upgrade to upgrade): billiard>=3.3.0.14 in /usr/lib/
Collecting bson==0.3.3 (from -r requirements.txt (line 5))
Collecting celery==3.1.8 (from -r requirements.txt (line 6))
Collecting convoy==0.2.4 (from -r requirements.txt (line 7))
Collecting Django==1.5.1 (from -r requirements.txt (line 8))
Collecting django-
Collecting django-
Collecting django-
Collecting django-
Collecting django-kombu==0.9.4 (from -r requirements.txt (line 13))
Collecting django-
Collecting django-
Collecting django-
Collecting django-pgtools==0.2 (from -r requirements.txt (line 18))
Collecting django-
Collecting gorun==1.7 (from -r requirements.txt (line 20))
Requirement already satisfied (use --upgrade to upgrade): gunicorn>=17.5 in /usr/lib/
Preview Diff
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2014-03-28 20:01:18 +0000 |
3 | +++ .bzrignore 2016-01-27 16:38:37 +0000 |
4 | @@ -1,4 +1,4 @@ |
5 | -branches |
6 | +branches/* |
7 | test.db |
8 | ./.installed.cfg |
9 | ./bin |
10 | @@ -15,3 +15,8 @@ |
11 | ./tmp/supervisor-childlogs/* |
12 | ./.sass-cache |
13 | ./revtracker/static/css/* |
14 | +./virtualenv |
15 | +./lib/versioninfo.py |
16 | +./static |
17 | +./logs/* |
18 | + |
19 | |
20 | === modified file 'Makefile' |
21 | --- Makefile 2014-03-30 03:19:53 +0000 |
22 | +++ Makefile 2016-01-27 16:38:37 +0000 |
23 | @@ -12,15 +12,118 @@ |
24 | # You should have received a copy of the GNU General Public License |
25 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
26 | |
27 | -include makefiles/buildout.mk |
28 | -include makefiles/deploy.mk |
29 | -include makefiles/services.mk |
30 | include makefiles/css.mk |
31 | include makefiles/gem.mk |
32 | include makefiles/js.mk |
33 | |
34 | |
35 | -MANAGE=$(PY) django_project/manage.py |
36 | -TEST_COMMAND=$(MANAGE) test revtracker |
37 | +HERE := $(shell pwd) |
38 | +PYTHONPATH := ${HERE}/revtracker:${HERE}/lib:${HERE}:${PYTHONPATH} |
39 | + |
40 | +CM ?= /usr/lib/config-manager/cm.py |
41 | +CONFIGMANAGER = config-manager.txt |
42 | +PYTHON = $(VIRTUALENV_DIR)/bin/python |
43 | +# use env's python to run pip in order to overcome shebang's max line length limitation |
44 | +PIP = $(PYTHON) $(VIRTUALENV_DIR)/bin/pip |
45 | + |
46 | +WHEELS_BRANCH_URL ?= lp:~ubuntuone-pqm-team/isitdeployable/dependencies |
47 | +WHEELS_DIR = branches/wheels |
48 | + |
49 | +DJANGO_MANAGE=$(PYTHON) django_project/manage.py |
50 | +TEST_COMMAND=$(DJANGO_MANAGE) test revtracker |
51 | + |
52 | +CONN_CHECK_CONFIG_PATH ?= /tmp/deployable_conn_check_config.yaml |
53 | |
54 | TMP_DIR = tmp |
55 | + |
56 | +JUJU_ENV ?= local |
57 | +JUJU_REPO ?= ../.juju-repo |
58 | +PROJECT_NAME = deployable |
59 | + |
60 | +# Create archives in labelled directories (ie. r27/deployable.tbz2) |
61 | +TARBALL_BUILD_LABEL ?= r$(shell bzr revno) |
62 | +TARBALL_FILE_NAME = deployable.tbz2 |
63 | +TARBALL_BUILDS_DIR ?= $(JUJU_REPO)/builds |
64 | +TARBALL_BUILD_DIR = $(TARBALL_BUILDS_DIR)/$(TARBALL_BUILD_LABEL) |
65 | +TARBALL_BUILD_PATH = $(TARBALL_BUILD_DIR)/$(TARBALL_FILE_NAME) |
66 | + |
67 | +VIRTUALENV_DIR ?= ${HERE}/virtualenv |
68 | +VIRTUALENV_BIN := ${VIRTUALENV_DIR}/bin |
69 | + |
70 | + |
71 | +$(VIRTUALENV_DIR): |
72 | + echo 'creating new virtualenv...' |
73 | + virtualenv --clear --system-site-packages $(VIRTUALENV_DIR) |
74 | + |
75 | +clean-virtualenv: |
76 | + echo 'cleaning virtualenv...' |
77 | + rm -rf $(VIRTUALENV_DIR) |
78 | + |
79 | +version: |
80 | + bzr version-info --format=python > lib/versioninfo.py |
81 | + |
82 | +branches/last_build: $(CONFIGMANAGER) |
83 | + $(CM) update $(CONFIGMANAGER) |
84 | + #touch $@ |
85 | + |
86 | +# use the flag file to avoid re-run config-manager if nothing changed |
87 | +fetch-sourcedeps: branches/last_build wheels version |
88 | + |
89 | +sourcedeps: fetch-sourcedeps install-wheels |
90 | + |
91 | +bootstrap: $(VIRTUALENV_DIR) sourcedeps |
92 | + |
93 | + |
94 | +### wheels ### |
95 | +wheels: |
96 | + [ -d $(WHEELS_DIR) ] && (cd $(WHEELS_DIR) && bzr pull) || (bzr branch $(WHEELS_BRANCH_URL) $(WHEELS_DIR)) |
97 | + |
98 | +update-wheels: ARGS=-r requirements-devel.txt |
99 | +update-wheels: $(VIRTUALENV_DIR) |
100 | + $(PIP) wheel -w $(WHEELS_DIR) -f $(WHEELS_DIR) $(ARGS) |
101 | + |
102 | +install-wheels: ARGS=-r requirements.txt |
103 | +install-wheels: $(VIRTUALENV_DIR) |
104 | + $(PIP) install -U pip --find-links=$(WHEELS_DIR) --no-index |
105 | + $(PIP) install --no-binary django --find-links=$(WHEELS_DIR) --no-index $(ARGS) |
106 | + |
107 | +install-wheels-dev: $(VIRTUALENV_DIR) install-wheels |
108 | + $(MAKE) install-wheels ARGS="-r requirements-devel.txt --pre" |
109 | + |
110 | + |
111 | + |
112 | + |
113 | +#Tarball |
114 | +$(TARBALL_BUILD_DIR): |
115 | + @mkdir -p $(TARBALL_BUILD_DIR) |
116 | + |
117 | +STATIC_ROOT ?= $(CURDIR)/static |
118 | +REV_DIR=$(STATIC_ROOT)/combo/rev-r$$(cat $(STATIC_ROOT)/combo/revno) |
119 | + |
120 | +collectstatic: |
121 | + DJANGO_SETTINGS_MODULE=django_project.settings_base $(DJANGO_MANAGE) collectstatic --noinput \ |
122 | + > logs/collectstatic.log 2>&1 || (cat logs/collectstatic.log && false) |
123 | + cd $(STATIC_ROOT)/combo |
124 | + [ -L $(REV_DIR) ] && (echo 'existing rev symbolink, removing' && rm $(REV_DIR)) \ |
125 | + || (echo 'empty rev symbolink') |
126 | + ln -sf . $(REV_DIR) |
127 | + |
128 | + |
129 | +$(TARBALL_BUILD_PATH): $(TARBALL_BUILD_DIR) tarball_exclude.txt collectstatic |
130 | + @echo "creating deployment tarball at $(TARBALL_BUILD_PATH)" |
131 | + @tar -cj --exclude-from tarball_exclude.txt -f $(TARBALL_BUILD_PATH) ./ |
132 | + |
133 | +build-tarball: install-wheels clean_js js css $(TARBALL_BUILD_PATH) |
134 | + |
135 | +clean: clean_js clean-virtualenv |
136 | + rm -rf $(STATIC_ROOT) |
137 | + |
138 | +conn-check: |
139 | + @echo "Generating conn-check config from Django settings..." |
140 | + @sudo -u $$(ls -ld $(CURDIR) | awk '{print $$3}') PYTHONPATH=$(PYTHONPATH) \ |
141 | + python scripts/settings-to-conncheck.py -m $(DJANGO_SETTINGS_MODULE) -f $(CONN_CHECK_CONFIG_PATH) |
142 | + @echo "Running conn-check..." |
143 | + conn-check $(CONN_CHECK_CONFIG_PATH) |
144 | + |
145 | + |
146 | +.PHONY: build-tarball install-wheels |
147 | |
148 | === removed file 'bootstrap.py' |
149 | --- bootstrap.py 2012-09-26 01:02:57 +0000 |
150 | +++ bootstrap.py 1970-01-01 00:00:00 +0000 |
151 | @@ -1,262 +0,0 @@ |
152 | -############################################################################## |
153 | -# |
154 | -# Copyright (c) 2006 Zope Foundation and Contributors. |
155 | -# All Rights Reserved. |
156 | -# |
157 | -# This software is subject to the provisions of the Zope Public License, |
158 | -# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. |
159 | -# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED |
160 | -# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
161 | -# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS |
162 | -# FOR A PARTICULAR PURPOSE. |
163 | -# |
164 | -############################################################################## |
165 | -"""Bootstrap a buildout-based project |
166 | - |
167 | -Simply run this script in a directory containing a buildout.cfg. |
168 | -The script accepts buildout command-line options, so you can |
169 | -use the -c option to specify an alternate configuration file. |
170 | -""" |
171 | - |
172 | -import os, shutil, sys, tempfile, urllib, urllib2, subprocess |
173 | -from optparse import OptionParser |
174 | - |
175 | -if sys.platform == 'win32': |
176 | - def quote(c): |
177 | - if ' ' in c: |
178 | - return '"%s"' % c # work around spawn lamosity on windows |
179 | - else: |
180 | - return c |
181 | -else: |
182 | - quote = str |
183 | - |
184 | -# See zc.buildout.easy_install._has_broken_dash_S for motivation and comments. |
185 | -stdout, stderr = subprocess.Popen( |
186 | - [sys.executable, '-Sc', |
187 | - 'try:\n' |
188 | - ' import ConfigParser\n' |
189 | - 'except ImportError:\n' |
190 | - ' print 1\n' |
191 | - 'else:\n' |
192 | - ' print 0\n'], |
193 | - stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() |
194 | -has_broken_dash_S = bool(int(stdout.strip())) |
195 | - |
196 | -# In order to be more robust in the face of system Pythons, we want to |
197 | -# run without site-packages loaded. This is somewhat tricky, in |
198 | -# particular because Python 2.6's distutils imports site, so starting |
199 | -# with the -S flag is not sufficient. However, we'll start with that: |
200 | -if not has_broken_dash_S and 'site' in sys.modules: |
201 | - # We will restart with python -S. |
202 | - args = sys.argv[:] |
203 | - args[0:0] = [sys.executable, '-S'] |
204 | - args = map(quote, args) |
205 | - os.execv(sys.executable, args) |
206 | -# Now we are running with -S. We'll get the clean sys.path, import site |
207 | -# because distutils will do it later, and then reset the path and clean |
208 | -# out any namespace packages from site-packages that might have been |
209 | -# loaded by .pth files. |
210 | -clean_path = sys.path[:] |
211 | -import site # imported because of its side effects |
212 | -sys.path[:] = clean_path |
213 | -for k, v in sys.modules.items(): |
214 | - if k in ('setuptools', 'pkg_resources') or ( |
215 | - hasattr(v, '__path__') and |
216 | - len(v.__path__) == 1 and |
217 | - not os.path.exists(os.path.join(v.__path__[0], '__init__.py'))): |
218 | - # This is a namespace package. Remove it. |
219 | - sys.modules.pop(k) |
220 | - |
221 | -is_jython = sys.platform.startswith('java') |
222 | - |
223 | -setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py' |
224 | -distribute_source = 'http://python-distribute.org/distribute_setup.py' |
225 | - |
226 | - |
227 | -# parsing arguments |
228 | -def normalize_to_url(option, opt_str, value, parser): |
229 | - if value: |
230 | - if '://' not in value: # It doesn't smell like a URL. |
231 | - value = 'file://%s' % ( |
232 | - urllib.pathname2url( |
233 | - os.path.abspath(os.path.expanduser(value))),) |
234 | - if opt_str == '--download-base' and not value.endswith('/'): |
235 | - # Download base needs a trailing slash to make the world happy. |
236 | - value += '/' |
237 | - else: |
238 | - value = None |
239 | - name = opt_str[2:].replace('-', '_') |
240 | - setattr(parser.values, name, value) |
241 | - |
242 | -usage = '''\ |
243 | -[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options] |
244 | - |
245 | -Bootstraps a buildout-based project. |
246 | - |
247 | -Simply run this script in a directory containing a buildout.cfg, using the |
248 | -Python that you want bin/buildout to use. |
249 | - |
250 | -Note that by using --setup-source and --download-base to point to |
251 | -local resources, you can keep this script from going over the network. |
252 | -''' |
253 | - |
254 | -parser = OptionParser(usage=usage) |
255 | -parser.add_option("-v", "--version", dest="version", |
256 | - help="use a specific zc.buildout version") |
257 | -parser.add_option("-d", "--distribute", |
258 | - action="store_true", dest="use_distribute", default=False, |
259 | - help="Use Distribute rather than Setuptools.") |
260 | -parser.add_option("--setup-source", action="callback", dest="setup_source", |
261 | - callback=normalize_to_url, nargs=1, type="string", |
262 | - help=("Specify a URL or file location for the setup file. " |
263 | - "If you use Setuptools, this will default to " + |
264 | - setuptools_source + "; if you use Distribute, this " |
265 | - "will default to " + distribute_source + ".")) |
266 | -parser.add_option("--download-base", action="callback", dest="download_base", |
267 | - callback=normalize_to_url, nargs=1, type="string", |
268 | - help=("Specify a URL or directory for downloading " |
269 | - "zc.buildout and either Setuptools or Distribute. " |
270 | - "Defaults to PyPI.")) |
271 | -parser.add_option("--eggs", |
272 | - help=("Specify a directory for storing eggs. Defaults to " |
273 | - "a temporary directory that is deleted when the " |
274 | - "bootstrap script completes.")) |
275 | -parser.add_option("-t", "--accept-buildout-test-releases", |
276 | - dest='accept_buildout_test_releases', |
277 | - action="store_true", default=False, |
278 | - help=("Normally, if you do not specify a --version, the " |
279 | - "bootstrap script and buildout gets the newest " |
280 | - "*final* versions of zc.buildout and its recipes and " |
281 | - "extensions for you. If you use this flag, " |
282 | - "bootstrap and buildout will get the newest releases " |
283 | - "even if they are alphas or betas.")) |
284 | -parser.add_option("-c", None, action="store", dest="config_file", |
285 | - help=("Specify the path to the buildout configuration " |
286 | - "file to be used.")) |
287 | - |
288 | -options, args = parser.parse_args() |
289 | - |
290 | -# if -c was provided, we push it back into args for buildout's main function |
291 | -if options.config_file is not None: |
292 | - args += ['-c', options.config_file] |
293 | - |
294 | -if options.eggs: |
295 | - eggs_dir = os.path.abspath(os.path.expanduser(options.eggs)) |
296 | -else: |
297 | - eggs_dir = tempfile.mkdtemp() |
298 | - |
299 | -if options.setup_source is None: |
300 | - if options.use_distribute: |
301 | - options.setup_source = distribute_source |
302 | - else: |
303 | - options.setup_source = setuptools_source |
304 | - |
305 | -if options.accept_buildout_test_releases: |
306 | - args.append('buildout:accept-buildout-test-releases=true') |
307 | -args.append('bootstrap') |
308 | - |
309 | -try: |
310 | - import pkg_resources |
311 | - import setuptools # A flag. Sometimes pkg_resources is installed alone. |
312 | - if not hasattr(pkg_resources, '_distribute'): |
313 | - raise ImportError |
314 | -except ImportError: |
315 | - ez_code = urllib2.urlopen( |
316 | - options.setup_source).read().replace('\r\n', '\n') |
317 | - ez = {} |
318 | - exec ez_code in ez |
319 | - setup_args = dict(to_dir=eggs_dir, download_delay=0) |
320 | - if options.download_base: |
321 | - setup_args['download_base'] = options.download_base |
322 | - if options.use_distribute: |
323 | - setup_args['no_fake'] = True |
324 | - ez['use_setuptools'](**setup_args) |
325 | - if 'pkg_resources' in sys.modules: |
326 | - reload(sys.modules['pkg_resources']) |
327 | - import pkg_resources |
328 | - # This does not (always?) update the default working set. We will |
329 | - # do it. |
330 | - for path in sys.path: |
331 | - if path not in pkg_resources.working_set.entries: |
332 | - pkg_resources.working_set.add_entry(path) |
333 | - |
334 | -cmd = [quote(sys.executable), |
335 | - '-c', |
336 | - quote('from setuptools.command.easy_install import main; main()'), |
337 | - '-mqNxd', |
338 | - quote(eggs_dir)] |
339 | - |
340 | -if not has_broken_dash_S: |
341 | - cmd.insert(1, '-S') |
342 | - |
343 | -find_links = options.download_base |
344 | -if not find_links: |
345 | - find_links = os.environ.get('bootstrap-testing-find-links') |
346 | -if find_links: |
347 | - cmd.extend(['-f', quote(find_links)]) |
348 | - |
349 | -if options.use_distribute: |
350 | - setup_requirement = 'distribute' |
351 | -else: |
352 | - setup_requirement = 'setuptools' |
353 | -ws = pkg_resources.working_set |
354 | -setup_requirement_path = ws.find( |
355 | - pkg_resources.Requirement.parse(setup_requirement)).location |
356 | -env = dict( |
357 | - os.environ, |
358 | - PYTHONPATH=setup_requirement_path) |
359 | - |
360 | -requirement = 'zc.buildout' |
361 | -version = options.version |
362 | -if version is None and not options.accept_buildout_test_releases: |
363 | - # Figure out the most recent final version of zc.buildout. |
364 | - import setuptools.package_index |
365 | - _final_parts = '*final-', '*final' |
366 | - |
367 | - def _final_version(parsed_version): |
368 | - for part in parsed_version: |
369 | - if (part[:1] == '*') and (part not in _final_parts): |
370 | - return False |
371 | - return True |
372 | - index = setuptools.package_index.PackageIndex( |
373 | - search_path=[setup_requirement_path]) |
374 | - if find_links: |
375 | - index.add_find_links((find_links,)) |
376 | - req = pkg_resources.Requirement.parse(requirement) |
377 | - if index.obtain(req) is not None: |
378 | - best = [] |
379 | - bestv = None |
380 | - for dist in index[req.project_name]: |
381 | - distv = dist.parsed_version |
382 | - if _final_version(distv): |
383 | - if bestv is None or distv > bestv: |
384 | - best = [dist] |
385 | - bestv = distv |
386 | - elif distv == bestv: |
387 | - best.append(dist) |
388 | - if best: |
389 | - best.sort() |
390 | - version = best[-1].version |
391 | -if version: |
392 | - requirement = '=='.join((requirement, version)) |
393 | -cmd.append(requirement) |
394 | - |
395 | -if is_jython: |
396 | - import subprocess |
397 | - exitcode = subprocess.Popen(cmd, env=env).wait() |
398 | -else: # Windows prefers this, apparently; otherwise we would prefer subprocess |
399 | - exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env])) |
400 | -if exitcode != 0: |
401 | - sys.stdout.flush() |
402 | - sys.stderr.flush() |
403 | - print ("An error occurred when trying to install zc.buildout. " |
404 | - "Look above this message for any errors that " |
405 | - "were output by easy_install.") |
406 | - sys.exit(exitcode) |
407 | - |
408 | -ws.add_entry(eggs_dir) |
409 | -ws.require(requirement) |
410 | -import zc.buildout.buildout |
411 | -zc.buildout.buildout.main(args) |
412 | -if not options.eggs: # clean up temporary egg directory |
413 | - shutil.rmtree(eggs_dir) |
414 | |
415 | === added directory 'branches' |
416 | === removed file 'buildout.cfg' |
417 | --- buildout.cfg 2014-02-01 15:46:25 +0000 |
418 | +++ buildout.cfg 1970-01-01 00:00:00 +0000 |
419 | @@ -1,66 +0,0 @@ |
420 | -# Copyright 2009-2012 Canonical Ltd. This software is licensed under the |
421 | -# GNU Affero General Public License version 3 (see the file LICENSE). |
422 | - |
423 | -[buildout] |
424 | -parts = |
425 | - scripts |
426 | - django |
427 | - deploy |
428 | -unzip = true |
429 | -use-dependency-links = false |
430 | -eggs-directory = eggs |
431 | -download-cache = download-cache |
432 | -relative-paths = true |
433 | - |
434 | -# Disable this option temporarily if you want buildout to find software |
435 | -# dependencies *other* than those in our versions file. Once you have the |
436 | -# desired software, enable it again (and check the new software in to |
437 | -# lp:ca-dependencies if this is going to be reviewed/merged/deployed.) |
438 | -install-from-cache = true |
439 | - |
440 | -# This also will need to be temporarily enabled. Newly-added packages should |
441 | -# then add their desired version number to versions.cfg. |
442 | -allow-picked-versions = false |
443 | - |
444 | -extensions = |
445 | - buildout-versions |
446 | -buildout_versions_file = versions.cfg |
447 | -versions = versions |
448 | -extends = versions.cfg |
449 | - |
450 | -prefer-final = true |
451 | - |
452 | -develop = . |
453 | - |
454 | -[scripts] |
455 | -recipe = z3c.recipe.scripts |
456 | -# Test dependencies get added here |
457 | -eggs = isitdeployable |
458 | - convoy |
459 | - jsmin |
460 | - gunicorn |
461 | - gorun |
462 | - supervisor |
463 | -include-site-packages = false |
464 | -interpreter = py |
465 | - |
466 | -[django] |
467 | -recipe = djangorecipe |
468 | -settings = settings |
469 | -project = django_project |
470 | -projectegg = django_project |
471 | -eggs = |
472 | - ${scripts:eggs} |
473 | -test = |
474 | - revtracker |
475 | - |
476 | -[deploy] |
477 | -recipe = djangorecipe |
478 | -settings = settings |
479 | -project = django_project |
480 | -projectegg = django_project |
481 | -eggs = |
482 | - ${scripts:eggs} |
483 | -test = |
484 | - revtracker |
485 | -wsgi = true |
486 | |
487 | === removed file 'combo.py' |
488 | --- combo.py 2012-10-04 21:33:13 +0000 |
489 | +++ combo.py 1970-01-01 00:00:00 +0000 |
490 | @@ -1,7 +0,0 @@ |
491 | -"""WSGI file to serve the combo JS out of convoy""" |
492 | -import os |
493 | -from convoy.combo import combo_app |
494 | - |
495 | -root_dir = os.path.dirname(__file__) |
496 | -JS_FILES = root_dir + '/build/revtracker/js' |
497 | -application = combo_app(JS_FILES) |
498 | |
499 | === added file 'config-manager.txt' |
500 | --- config-manager.txt 1970-01-01 00:00:00 +0000 |
501 | +++ config-manager.txt 2016-01-27 16:38:37 +0000 |
502 | @@ -0,0 +1,2 @@ |
503 | +branches/yui-min bzr+ssh://bazaar.launchpad.net/~ubuntuone-pqm-team/yui/stable-min;revno=3 |
504 | +branches/conn-check-config bzr+ssh://bazaar.launchpad.net/~ubuntuone-hackers/conn-check/configs;revno=23 |
505 | |
506 | === added file 'dependencies.txt' |
507 | --- dependencies.txt 1970-01-01 00:00:00 +0000 |
508 | +++ dependencies.txt 2016-01-27 16:38:37 +0000 |
509 | @@ -0,0 +1,50 @@ |
510 | +bzr |
511 | +gettext |
512 | +iso-codes |
513 | +librsvg2-common |
514 | +python3-apt |
515 | +python3-chardet |
516 | +python3-debian |
517 | +python3-lxml |
518 | +python3-magic |
519 | +python3-pkg-resources |
520 | +python3-six |
521 | +python3-xdg |
522 | +python3-yaml |
523 | +python-amqplib |
524 | +python-apt |
525 | +python-crypto |
526 | +python-dateutil |
527 | +python-debian |
528 | +python-docutils |
529 | +python-epydoc |
530 | +python-gtk2 |
531 | +python-imaging |
532 | +python-iso8601 |
533 | +python-keystoneclient |
534 | +python-launchpadlib |
535 | +python-lazr.restfulclient |
536 | +python-lxml |
537 | +python-markdown |
538 | +python-memcache |
539 | +python-oauth |
540 | +python-openid |
541 | +python-paste |
542 | +python-piston-mini-client |
543 | +python-polib |
544 | +python-psycopg2 |
545 | +python-pygooglechart |
546 | +python-reportlab |
547 | +python-restrictedpython |
548 | +python-sphinx |
549 | +python-swiftclient |
550 | +python-tz |
551 | +python-xlwt |
552 | +python-yaml |
553 | +ruby |
554 | +ruby-dev |
555 | +ruby-compass |
556 | +supervisor |
557 | +squashfs-tools |
558 | +ttf-ubuntu-font-family |
559 | +unzip |
560 | |
561 | === added file 'dev_config/gorun_settings.py' |
562 | --- dev_config/gorun_settings.py 1970-01-01 00:00:00 +0000 |
563 | +++ dev_config/gorun_settings.py 2016-01-27 16:38:37 +0000 |
564 | @@ -0,0 +1,11 @@ |
565 | +import os |
566 | + |
567 | +BASE_DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__))) |
568 | + |
569 | +DIRECTORIES = ( |
570 | + (os.path.join(BASE_DIR, 'django_project'), 'make restart_app'), |
571 | + (os.path.join(BASE_DIR, 'revtracker'), 'make restart_app'), |
572 | + (os.path.join(BASE_DIR, 'checklist'), 'make restart_app'), |
573 | + (os.path.join(BASE_DIR, 'revtracker/static/'), 'make js'), |
574 | + (os.path.join(BASE_DIR, 'revtracker/static/scss/'), 'make css'), |
575 | +) |
576 | |
577 | === removed file 'dev_config/gorun_settings.py' |
578 | --- dev_config/gorun_settings.py 2014-03-28 20:01:18 +0000 |
579 | +++ dev_config/gorun_settings.py 1970-01-01 00:00:00 +0000 |
580 | @@ -1,7 +0,0 @@ |
581 | -DIRECTORIES = ( |
582 | - ('django_project', 'make restart_app'), |
583 | - ('revtracker', 'make restart_app'), |
584 | - ('checklist', 'make restart_app'), |
585 | - ('revtracker/static/', 'make js'), |
586 | - ('revtracker/static/scss/', 'make css'), |
587 | -) |
588 | |
589 | === modified file 'dev_config/supervisor.conf' |
590 | --- dev_config/supervisor.conf 2014-03-30 16:54:02 +0000 |
591 | +++ dev_config/supervisor.conf 2016-01-27 16:38:37 +0000 |
592 | @@ -11,7 +11,7 @@ |
593 | [supervisorctl] |
594 | serverurl=unix:///%(here)s/../tmp/supervisord.sock |
595 | |
596 | -[program:appserver] |
597 | +[program:appserver_dev] |
598 | command=%(here)s/../bin/django runserver --noreload --werkzeug |
599 | stopsignal=KILL |
600 | killasgroup=true |
601 | @@ -19,10 +19,26 @@ |
602 | autostart=false |
603 | redirect_stderr=true |
604 | |
605 | +[program:appserver] |
606 | +command=%(here)s/../bin/gunicorn_django -b 127.0.0.1:8000 |
607 | +autostart=true |
608 | +redirect_stderr=true |
609 | + |
610 | [program:celeryd] |
611 | -command=%(here)s/../bin/django celerybeat --pidfile %(here)s/../tmp/celeryd.pid |
612 | -autostart=false |
613 | -redirect_stderr=true |
614 | +command=%(here)s/../bin/django celery worker --pidfile %(here)s/../tmp/celeryd.pid |
615 | +stdout_logfile=%(here)s/../tmp/celeryd.log |
616 | +stderr_logfile=%(here)s/../tmp/celeryd.log |
617 | +autostart=true |
618 | +autorestart=true |
619 | +startsecs=10 |
620 | + |
621 | +[program:celerybeat] |
622 | +command=%(here)s/../bin/django celerybeat --pidfile %(here)s/../tmp/celerybeat.pid |
623 | +stdout_logfile=%(here)s/../tmp/celerybeat.log |
624 | +stderr_logfile=%(here)s/../tmp/celerybeat.log |
625 | +autostart=true |
626 | +autorestart=true |
627 | +startsecs=10 |
628 | |
629 | [program:combo] |
630 | command=%(here)s/../bin/gunicorn combo:application -b 127.0.0.1:8001 |
631 | |
632 | === modified file 'django_project/celeryapp.py' |
633 | --- django_project/celeryapp.py 2014-02-01 15:46:25 +0000 |
634 | +++ django_project/celeryapp.py 2016-01-27 16:38:37 +0000 |
635 | @@ -2,8 +2,10 @@ |
636 | |
637 | import os |
638 | |
639 | +import paths |
640 | +paths.setup_paths() |
641 | + |
642 | from celery import Celery |
643 | - |
644 | from django.conf import settings |
645 | |
646 | # set the default Django settings module for the 'celery' program. |
647 | @@ -15,3 +17,8 @@ |
648 | # pickle the object when using Windows. |
649 | app.config_from_object('django.conf:settings') |
650 | app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) |
651 | + |
652 | + |
653 | +if __name__ == '__main__': |
654 | + from celery.bin.celery import main |
655 | + main() |
656 | |
657 | === modified file 'django_project/manage.py' |
658 | --- django_project/manage.py 2014-01-31 20:09:20 +0000 |
659 | +++ django_project/manage.py 2016-01-27 16:38:37 +0000 |
660 | @@ -2,6 +2,9 @@ |
661 | import os |
662 | import sys |
663 | |
664 | +import paths |
665 | +paths.setup_paths() |
666 | + |
667 | if __name__ == "__main__": |
668 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") |
669 | |
670 | |
671 | === added file 'django_project/paths.py' |
672 | --- django_project/paths.py 1970-01-01 00:00:00 +0000 |
673 | +++ django_project/paths.py 2016-01-27 16:38:37 +0000 |
674 | @@ -0,0 +1,42 @@ |
675 | +#! /usr/bin/env python |
676 | + |
677 | +import sys |
678 | +import os |
679 | + |
680 | +PATHS = [ |
681 | + # src and config |
682 | + '.', |
683 | + 'revtracker', |
684 | + # dependencies |
685 | + 'lib', |
686 | +] |
687 | + |
688 | +CURRENT_DIR = os.path.dirname(os.path.realpath(__file__)) |
689 | +PROJECT_ROOT_DIR = os.path.abspath(os.path.join(CURRENT_DIR, os.pardir)) |
690 | + |
691 | +LOCAL_SETTINGS_DIR = os.path.abspath( |
692 | + os.path.join(PROJECT_ROOT_DIR, os.pardir, 'local_config')) |
693 | +LOCAL_SETTINGS_PATH = os.path.join(LOCAL_SETTINGS_DIR, 'settings.py') |
694 | + |
695 | + |
696 | +def get_paths(paths): |
697 | + """Sets up necessary python paths for Pay in prod/staging""" |
698 | + # only include a path if not already in sys.path to avoid duplication of |
699 | + # paths when using code reloading |
700 | + path_set = set(sys.path) |
701 | + for p in paths: |
702 | + path = os.path.abspath(os.path.join(PROJECT_ROOT_DIR, p)) |
703 | + if path not in path_set: |
704 | + yield path |
705 | + |
706 | + |
707 | +def setup_paths(): |
708 | + sys.path = list(get_paths(PATHS)) + sys.path |
709 | + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_project.settings') |
710 | + |
711 | + |
712 | +if __name__ == '__main__': |
713 | + # For use in shell scripting |
714 | + # e.g. $(python paths.py) |
715 | + print "export PYTHONPATH=%s" % ":".join(get_paths(PATHS)) |
716 | + print "export DJANGO_SETTINGS_MODULE=django_project.settings" |
717 | |
718 | === modified file 'django_project/settings.py' |
719 | --- django_project/settings.py 2014-03-27 02:06:42 +0000 |
720 | +++ django_project/settings.py 1970-01-01 00:00:00 +0000 |
721 | @@ -1,238 +0,0 @@ |
722 | -# Django settings for deploy_tracker project. |
723 | - |
724 | -import os |
725 | - |
726 | -# Needed to have celery work from management commands |
727 | -import djcelery |
728 | -djcelery.setup_loader() |
729 | - |
730 | -from datetime import timedelta |
731 | - |
732 | -DEBUG = True |
733 | -TEMPLATE_DEBUG = DEBUG |
734 | - |
735 | -ADMINS = ( |
736 | - # ('Your Name', 'your_email@example.com'), |
737 | -) |
738 | - |
739 | -MANAGERS = ADMINS |
740 | - |
741 | -DB_HOST = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'tmp', 'db') |
742 | - |
743 | -DATABASES = { |
744 | - 'default': { |
745 | - 'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. |
746 | - 'NAME': 'revtracker', # Or path to database file if using sqlite3. |
747 | - 'USER': '', # Not used with sqlite3. |
748 | - 'PASSWORD': '', # Not used with sqlite3. |
749 | - 'HOST': DB_HOST, |
750 | - 'PORT': '', # Set to empty string for default. Not used with sqlite3. |
751 | - } |
752 | -} |
753 | - |
754 | -# Local time zone for this installation. Choices can be found here: |
755 | -# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name |
756 | -# although not all choices may be available on all operating systems. |
757 | -# On Unix systems, a value of None will cause Django to use the same |
758 | -# timezone as the operating system. |
759 | -# If running in a Windows environment this must be set to the same as your |
760 | -# system time zone. |
761 | -TIME_ZONE = 'America/Chicago' |
762 | - |
763 | -# Language code for this installation. All choices can be found here: |
764 | -# http://www.i18nguy.com/unicode/language-identifiers.html |
765 | -LANGUAGE_CODE = 'en-us' |
766 | - |
767 | -SITE_ID = 1 |
768 | - |
769 | -# If you set this to False, Django will make some optimizations so as not |
770 | -# to load the internationalization machinery. |
771 | -USE_I18N = True |
772 | - |
773 | -# If you set this to False, Django will not format dates, numbers and |
774 | -# calendars according to the current locale |
775 | -USE_L10N = True |
776 | - |
777 | -# Absolute filesystem path to the directory that will hold user-uploaded files. |
778 | -# Example: "/home/media/media.lawrence.com/media/" |
779 | -MEDIA_ROOT = '' |
780 | - |
781 | -# URL that handles the media served from MEDIA_ROOT. Make sure to use a |
782 | -# trailing slash. |
783 | -# Examples: "http://media.lawrence.com/media/", "http://example.com/media/" |
784 | -MEDIA_URL = '' |
785 | - |
786 | -# Absolute path to the directory static files should be collected to. |
787 | -# Don't put anything in this directory yourself; store your static files |
788 | -# in apps' "static/" subdirectories and in STATICFILES_DIRS. |
789 | -# Example: "/home/media/media.lawrence.com/static/" |
790 | -STATIC_ROOT = '' |
791 | - |
792 | -# URL prefix for static files. |
793 | -# Example: "http://media.lawrence.com/static/" |
794 | -STATIC_URL = '/static/' |
795 | - |
796 | -# URL prefix for admin static files -- CSS, JavaScript and images. |
797 | -# Make sure to use a trailing slash. |
798 | -# Examples: "http://foo.com/static/admin/", "/static/admin/". |
799 | -ADMIN_MEDIA_PREFIX = '/static/admin/' |
800 | - |
801 | -# Additional locations of static files |
802 | -STATICFILES_DIRS = ( |
803 | - # Put strings here, like "/home/html/static" or "C:/www/django/static". |
804 | - # Always use forward slashes, even on Windows. |
805 | - # Don't forget to use absolute paths, not relative paths. |
806 | -) |
807 | - |
808 | -# List of finder classes that know how to find static files in |
809 | -# various locations. |
810 | -STATICFILES_FINDERS = ( |
811 | - 'django.contrib.staticfiles.finders.FileSystemFinder', |
812 | - 'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
813 | -# 'django.contrib.staticfiles.finders.DefaultStorageFinder', |
814 | -) |
815 | - |
816 | -# Make this unique, and don't share it with anybody. |
817 | -SECRET_KEY = '6s!*-&#t8mks^8+7_2w%!oh8wh9uzzm-vzh5)l+7r2403+tm^!' |
818 | - |
819 | -# List of callables that know how to import templates from various sources. |
820 | -TEMPLATE_LOADERS = ( |
821 | - 'django.template.loaders.filesystem.Loader', |
822 | - 'django.template.loaders.app_directories.Loader', |
823 | - 'django.template.loaders.eggs.Loader', |
824 | -) |
825 | - |
826 | -MIDDLEWARE_CLASSES = ( |
827 | - 'django.middleware.common.CommonMiddleware', |
828 | - 'django.contrib.sessions.middleware.SessionMiddleware', |
829 | - 'django.middleware.csrf.CsrfViewMiddleware', |
830 | - 'django.contrib.auth.middleware.AuthenticationMiddleware', |
831 | - 'django.contrib.messages.middleware.MessageMiddleware', |
832 | - 'waffle.middleware.WaffleMiddleware', |
833 | - #'debug_toolbar.middleware.DebugToolbarMiddleware', |
834 | -) |
835 | - |
836 | -INTERNAL_IPS = ('127.0.0.1',) |
837 | - |
838 | -ROOT_URLCONF = 'django_project.urls' |
839 | - |
840 | -TEMPLATE_DIRS = ( |
841 | - # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". |
842 | - # Always use forward slashes, even on Windows. |
843 | - # Don't forget to use absolute paths, not relative paths. |
844 | -) |
845 | - |
846 | -TEMPLATE_CONTEXT_PROCESSORS = ( |
847 | - "django.contrib.auth.context_processors.auth", |
848 | - "django.core.context_processors.csrf", |
849 | - "django.core.context_processors.static", |
850 | - "django.core.context_processors.request", |
851 | -) |
852 | - |
853 | -INSTALLED_APPS = ( |
854 | - 'django.contrib.auth', |
855 | - 'django.contrib.contenttypes', |
856 | - 'django.contrib.sessions', |
857 | - 'django.contrib.sites', |
858 | - 'django.contrib.messages', |
859 | - 'django.contrib.staticfiles', |
860 | - 'django.contrib.comments', |
861 | - 'django.contrib.admin', |
862 | - 'south', |
863 | - 'devserver', |
864 | - 'django_openid_auth', |
865 | - 'djcelery', |
866 | - 'revtracker', |
867 | - 'waffle', |
868 | - 'ordered_model', |
869 | - 'checklist', |
870 | - #'debug_toolbar', |
871 | -) |
872 | - |
873 | -# A sample logging configuration. The only tangible logging |
874 | -# performed by this configuration is to send an email to |
875 | -# the site admins on every HTTP 500 error. |
876 | -# See http://docs.djangoproject.com/en/dev/topics/logging for |
877 | -# more details on how to customize your logging configuration. |
878 | -LOGGING = { |
879 | - 'version': 1, |
880 | - 'disable_existing_loggers': False, |
881 | - 'handlers': { |
882 | - 'mail_admins': { |
883 | - 'level': 'ERROR', |
884 | - 'class': 'django.utils.log.AdminEmailHandler', |
885 | - 'filters': ['require_debug_false'], |
886 | - }, |
887 | - 'file': { |
888 | - 'level': 'INFO', |
889 | - 'class': 'logging.handlers.WatchedFileHandler', |
890 | - 'formatter': 'verbose', |
891 | - 'filename': 'django.log', |
892 | - }, |
893 | - }, |
894 | - 'loggers': { |
895 | - 'django.request': { |
896 | - 'handlers': ['mail_admins'], |
897 | - 'level': 'ERROR', |
898 | - 'propagate': True, |
899 | - }, |
900 | - 'django': { |
901 | - 'handlers': ['file'], |
902 | - 'level': 'WARNING', |
903 | - }, |
904 | - }, |
905 | - 'formatters': { |
906 | - 'verbose': { |
907 | - 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s', |
908 | - }, |
909 | - }, |
910 | - 'filters': { |
911 | - 'require_debug_false': { |
912 | - '()': 'django.utils.log.RequireDebugFalse', |
913 | - }, |
914 | - } |
915 | -} |
916 | - |
917 | -DEBUG_TOOLBAR_CONFIG = { |
918 | - 'INTERCEPT_REDIRECTS': False, |
919 | -} |
920 | - |
921 | -BRANCH_CACHE_DIR = "branches" |
922 | - |
923 | -CELERYBEAT_SCHEDULE = { |
924 | - "update_all_projects": { |
925 | - "task": "revtracker.tasks.update_all_projects", |
926 | - "schedule": timedelta(minutes=5), |
927 | - }, |
928 | - } |
929 | -# Only reserve one task per worker, so that workers don't sit idle |
930 | -# during long running tasks. |
931 | -CELERYD_PREFETCH_MULTIPLIER = 1 |
932 | -CELERYBEAT_SCHEDULE_FILENAME = 'tmp/celerybeat-schedule' |
933 | - |
934 | -LOGIN_URL = '/openid/login' |
935 | -LOGIN_REDIRECT_URL = '/' |
936 | - |
937 | -AUTHENTICATION_BACKENDS = ( |
938 | - 'django_openid_auth.auth.OpenIDBackend', |
939 | - 'django.contrib.auth.backends.ModelBackend', |
940 | - ) |
941 | - |
942 | -OPENID_SSO_SERVER_URL = 'https://login.ubuntu.com/' |
943 | -OPENID_CREATE_USERS = True |
944 | -OPENID_UPDATE_DETAILS_FROM_SREG = True |
945 | -MULTILANG_OP_ENDPOINTS = False |
946 | -OPENID_SREG_REQUIRED_FIELDS = ['nickname'] |
947 | -OPENID_LAUNCHPAD_TEAMS_MAPPING_AUTO = True |
948 | - |
949 | -COMBO_URL = 'http://127.0.0.1:8001/' |
950 | - |
951 | -WAFFLE_OVERRIDE = True |
952 | - |
953 | -import os |
954 | -import sys |
955 | -sys.path.insert(0, os.path.dirname(__file__)) |
956 | -try: |
957 | - from local_settings import * |
958 | -except ImportError: |
959 | - pass |
960 | |
961 | === target is u'../../local_config/settings.py' |
962 | === added file 'django_project/settings_base.py' |
963 | --- django_project/settings_base.py 1970-01-01 00:00:00 +0000 |
964 | +++ django_project/settings_base.py 2016-01-27 16:38:37 +0000 |
965 | @@ -0,0 +1,221 @@ |
966 | +# Django settings for deploy_tracker project. |
967 | + |
968 | +import os |
969 | +import sys |
970 | + |
971 | +# Needed to have celery work from management commands |
972 | +import djcelery |
973 | +djcelery.setup_loader() |
974 | + |
975 | +from datetime import timedelta |
976 | + |
977 | +DEBUG = True |
978 | +TEMPLATE_DEBUG = DEBUG |
979 | + |
980 | + |
981 | +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) |
982 | +SRC_DIR = os.path.join(BASE_DIR, 'revtracker') |
983 | +HOST_DIR = os.path.abspath( |
984 | + os.getenv('DPA_LP_CACHE_HOST_DIR', os.path.abspath( |
985 | + os.path.join(BASE_DIR, os.path.pardir, os.path.pardir)))) |
986 | +LOGS_DIR = os.path.abspath( |
987 | + os.getenv('DPA_LOGS_DIR', os.path.join(BASE_DIR, 'tmp'))) |
988 | +OOPS_DIR = os.path.join(LOGS_DIR, 'www-oops') |
989 | + |
990 | + |
991 | +ADMINS = ( |
992 | + # ('Your Name', 'your_email@example.com'), |
993 | +) |
994 | + |
995 | +MANAGERS = ADMINS |
996 | + |
997 | +DB_HOST = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'tmp', 'db') |
998 | + |
999 | +DATABASES = { |
1000 | + 'default': { |
1001 | + 'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. |
1002 | + 'NAME': 'revtracker', # Or path to database file if using sqlite3. |
1003 | + 'USER': '', # Not used with sqlite3. |
1004 | + 'PASSWORD': '', # Not used with sqlite3. |
1005 | + 'HOST': DB_HOST, |
1006 | + 'PORT': '', # Set to empty string for default. Not used with sqlite3. |
1007 | + } |
1008 | +} |
1009 | + |
1010 | +TIME_ZONE = 'UTC' |
1011 | + |
1012 | +LANGUAGE_CODE = 'en-us' |
1013 | + |
1014 | +SITE_ID = 1 |
1015 | + |
1016 | +USE_I18N = True |
1017 | + |
1018 | +USE_L10N = True |
1019 | + |
1020 | +MEDIA_ROOT = '' |
1021 | + |
1022 | +MEDIA_URL = '' |
1023 | + |
1024 | +STATIC_ROOT = 'static' |
1025 | + |
1026 | +STATIC_URL = '/static/' |
1027 | + |
1028 | +ADMIN_MEDIA_PREFIX = '/static/admin/' |
1029 | + |
1030 | +STATICFILES_DIRS = ( |
1031 | + os.path.join(BASE_DIR, 'build/revtracker/js'), |
1032 | +) |
1033 | + |
1034 | +STATICFILES_FINDERS = ( |
1035 | + 'django.contrib.staticfiles.finders.FileSystemFinder', |
1036 | + 'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
1037 | +# 'django.contrib.staticfiles.finders.DefaultStorageFinder', |
1038 | +) |
1039 | + |
1040 | +SECRET_KEY = '6s!*-&#t8mks^8+7_2w%!oh8wh9uzzm-vzh5)l+7r2403+tm^!' |
1041 | + |
1042 | +TEMPLATE_LOADERS = ( |
1043 | + 'django.template.loaders.filesystem.Loader', |
1044 | + 'django.template.loaders.app_directories.Loader', |
1045 | + 'django.template.loaders.eggs.Loader', |
1046 | +) |
1047 | + |
1048 | +MIDDLEWARE_CLASSES = ( |
1049 | + 'django.middleware.common.CommonMiddleware', |
1050 | + 'django.contrib.sessions.middleware.SessionMiddleware', |
1051 | + 'django.middleware.csrf.CsrfViewMiddleware', |
1052 | + 'django.contrib.auth.middleware.AuthenticationMiddleware', |
1053 | + 'django.contrib.messages.middleware.MessageMiddleware', |
1054 | + 'waffle.middleware.WaffleMiddleware', |
1055 | + #'debug_toolbar.middleware.DebugToolbarMiddleware', |
1056 | +) |
1057 | + |
1058 | +INTERNAL_IPS = ('127.0.0.1',) |
1059 | + |
1060 | +ROOT_URLCONF = 'django_project.urls' |
1061 | + |
1062 | +TEMPLATE_DIRS = ( |
1063 | + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". |
1064 | + # Always use forward slashes, even on Windows. |
1065 | + # Don't forget to use absolute paths, not relative paths. |
1066 | +) |
1067 | + |
1068 | +TEMPLATE_CONTEXT_PROCESSORS = ( |
1069 | + "django.contrib.auth.context_processors.auth", |
1070 | + "django.core.context_processors.csrf", |
1071 | + "django.core.context_processors.static", |
1072 | + "django.core.context_processors.request", |
1073 | +) |
1074 | + |
1075 | +INSTALLED_APPS = ( |
1076 | + 'django.contrib.auth', |
1077 | + 'django.contrib.contenttypes', |
1078 | + 'django.contrib.sessions', |
1079 | + 'django.contrib.sites', |
1080 | + 'django.contrib.messages', |
1081 | + 'django.contrib.staticfiles', |
1082 | + 'django.contrib.comments', |
1083 | + 'django.contrib.admin', |
1084 | + 'south', |
1085 | + 'devserver', |
1086 | + 'django_openid_auth', |
1087 | + 'djcelery', |
1088 | + 'revtracker', |
1089 | + 'waffle', |
1090 | + 'ordered_model', |
1091 | + 'checklist', |
1092 | + 'pgtools', |
1093 | + #'debug_toolbar', |
1094 | +) |
1095 | + |
1096 | +LOGGING = { |
1097 | + 'version': 1, |
1098 | + 'disable_existing_loggers': False, |
1099 | + 'handlers': { |
1100 | + 'mail_admins': { |
1101 | + 'level': 'ERROR', |
1102 | + 'class': 'django.utils.log.AdminEmailHandler', |
1103 | + 'filters': ['require_debug_false'], |
1104 | + }, |
1105 | + 'file': { |
1106 | + 'level': 'INFO', |
1107 | + 'class': 'logging.handlers.WatchedFileHandler', |
1108 | + 'formatter': 'verbose', |
1109 | + 'filename': 'django.log', |
1110 | + }, |
1111 | + }, |
1112 | + 'loggers': { |
1113 | + 'django.request': { |
1114 | + 'handlers': ['mail_admins'], |
1115 | + 'level': 'ERROR', |
1116 | + 'propagate': True, |
1117 | + }, |
1118 | + 'django': { |
1119 | + 'handlers': ['file'], |
1120 | + 'level': 'WARNING', |
1121 | + }, |
1122 | + }, |
1123 | + 'formatters': { |
1124 | + 'verbose': { |
1125 | + 'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s', |
1126 | + }, |
1127 | + }, |
1128 | + 'filters': { |
1129 | + 'require_debug_false': { |
1130 | + '()': 'django.utils.log.RequireDebugFalse', |
1131 | + }, |
1132 | + } |
1133 | +} |
1134 | + |
1135 | +DEBUG_TOOLBAR_CONFIG = { |
1136 | + 'INTERCEPT_REDIRECTS': False, |
1137 | +} |
1138 | + |
1139 | +BRANCH_CACHE_DIR = "branches" |
1140 | + |
1141 | +CELERYBEAT_SCHEDULE = { |
1142 | + "update_all_projects": { |
1143 | + "task": "revtracker.tasks.update_all_projects", |
1144 | + "schedule": timedelta(minutes=5), |
1145 | + }, |
1146 | + } |
1147 | +# Only reserve one task per worker, so that workers don't sit idle |
1148 | +# during long running tasks. |
1149 | +CELERYD_PREFETCH_MULTIPLIER = 1 |
1150 | +CELERYBEAT_SCHEDULE_FILENAME = 'tmp/celerybeat-schedule' |
1151 | + |
1152 | +LOGIN_URL = '/openid/login' |
1153 | +LOGIN_REDIRECT_URL = '/' |
1154 | + |
1155 | +AUTHENTICATION_BACKENDS = ( |
1156 | + 'django_openid_auth.auth.OpenIDBackend', |
1157 | + 'django.contrib.auth.backends.ModelBackend', |
1158 | + ) |
1159 | + |
1160 | +OOPSES = { |
1161 | + 'publishers': [{ |
1162 | + 'inherit_id': False, |
1163 | + 'error_dir': OOPS_DIR, |
1164 | + 'type': 'datedir', |
1165 | + 'new_only': False, |
1166 | + }], |
1167 | + 'template': {'reporter': 'DEFAULT'}, |
1168 | +} |
1169 | + |
1170 | +USE_HTTPS = True |
1171 | + |
1172 | +OPENID_SSO_SERVER_URL = 'https://login.ubuntu.com/' |
1173 | +OPENID_CREATE_USERS = True |
1174 | +OPENID_UPDATE_DETAILS_FROM_SREG = True |
1175 | +OPENID_SREG_REQUIRED_FIELDS = ['nickname'] |
1176 | +OPENID_LAUNCHPAD_TEAMS_MAPPING_AUTO = True |
1177 | + |
1178 | +MULTILANG_OP_ENDPOINTS = False |
1179 | + |
1180 | +COMBO_URL = 'http://127.0.0.1:8001/' |
1181 | + |
1182 | +CONVOY_ROOT = os.path.join(STATIC_ROOT, 'combo') |
1183 | + |
1184 | +WAFFLE_OVERRIDE = True |
1185 | + |
1186 | +sys.path.insert(0, os.path.dirname(__file__)) |
1187 | |
1188 | === modified file 'django_project/urls.py' |
1189 | --- django_project/urls.py 2014-03-27 20:10:52 +0000 |
1190 | +++ django_project/urls.py 2016-01-27 16:38:37 +0000 |
1191 | @@ -15,7 +15,14 @@ |
1192 | url(r'^admin/', include(admin.site.urls)), |
1193 | url(r'^openid/', include(django_openid_auth.urls)), |
1194 | url(r'^checklist/', include('checklist.urls')), |
1195 | + # combo view for serving css outside dev/ prefi |
1196 | + url(r'^combo/rev-\w+/$', 'revtracker.views.combo_view', name='dpa-combo-link'), |
1197 | + url(r'^combo/$', 'revtracker.views.combo_view', name='dpa-combo'), |
1198 | (r'^favicon\.ico$', RedirectView.as_view(url='%s/favicon.ico' % settings.STATIC_URL)), |
1199 | ) |
1200 | |
1201 | +urlpatterns += patterns('', |
1202 | + (r'^assets/(.*)', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}), |
1203 | +) |
1204 | + |
1205 | urlpatterns += staticfiles_urlpatterns() |
1206 | |
1207 | === added file 'django_project/wsgi.py' |
1208 | --- django_project/wsgi.py 1970-01-01 00:00:00 +0000 |
1209 | +++ django_project/wsgi.py 2016-01-27 16:38:37 +0000 |
1210 | @@ -0,0 +1,31 @@ |
1211 | +import os |
1212 | +import sys |
1213 | + |
1214 | +# before doing anything else, patch stdout to avoid breakage in production |
1215 | +# see LP: #1099459 for details |
1216 | +sys.stdout = sys.stderr |
1217 | + |
1218 | +# add current dir to system path if not already there |
1219 | +# check if path is already there to avoid path duplication when |
1220 | +# modwsgi is configured for code reloading |
1221 | +curdir = os.path.abspath(os.path.dirname(__file__)) |
1222 | +if curdir not in sys.path: |
1223 | + sys.path.append(curdir) |
1224 | +import paths |
1225 | +paths.setup_paths() |
1226 | + |
1227 | +from django.conf import settings |
1228 | + |
1229 | + |
1230 | +from revtracker.wsgi import make_app |
1231 | + |
1232 | +app = make_app() |
1233 | + |
1234 | + |
1235 | +def application(environ, start_response): |
1236 | + # Patch environment if we should be serving https |
1237 | + if getattr(settings, 'USE_HTTPS'): |
1238 | + environ['HTTPS'] = 'on' |
1239 | + environ['wsgi.url_scheme'] = 'https' |
1240 | + |
1241 | + return app(environ, start_response) |
1242 | |
1243 | === added directory 'lib' |
1244 | === added symlink 'lib/conn_check_configs' |
1245 | === target is u'../branches/conn-check-config/conn_check_configs' |
1246 | === added directory 'logs' |
1247 | === removed file 'makefiles/buildout.mk' |
1248 | --- makefiles/buildout.mk 2014-03-30 03:19:53 +0000 |
1249 | +++ makefiles/buildout.mk 1970-01-01 00:00:00 +0000 |
1250 | @@ -1,81 +0,0 @@ |
1251 | -# Copyright (C) 2012 Canonical Ltd. |
1252 | -# |
1253 | -# This program is free software: you can redistribute it and/or modify |
1254 | -# it under the terms of the GNU General Public License as published by |
1255 | -# the Free Software Foundation, version 3 of the License. |
1256 | -# |
1257 | -# This program is distributed in the hope that it will be useful, |
1258 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1259 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1260 | -# GNU General Public License for more details. |
1261 | -# |
1262 | -# You should have received a copy of the GNU General Public License |
1263 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1264 | - |
1265 | -EXTERNAL_PY?=python2.7 |
1266 | -PY=./bin/py |
1267 | - |
1268 | -EXTERNAL_BUILDOUT?=$(EXTERNAL_PY) bootstrap.py |
1269 | -BUILDOUT=./bin/buildout |
1270 | - |
1271 | -CA_EGGS_DIR?=../eggs |
1272 | -CA_DOWNLOAD_CACHE_DIR?=../download-cache |
1273 | - |
1274 | -clean: |
1275 | - $(RM) -r bin/buildout |
1276 | - $(RM) -r bin/py |
1277 | - $(RM) -r bin/discover |
1278 | - $(RM) -r develop-eggs |
1279 | - $(RM) -r parts |
1280 | - $(RM) -r .installed.cfg |
1281 | -ifeq ($(CA_EGGS_DIR),eggs) |
1282 | - $(RM) -r eggs |
1283 | -else |
1284 | - $(RM) eggs |
1285 | -endif |
1286 | -ifeq ($(CA_DOWNLOAD_CACHE_DIR),download-cache) |
1287 | - $(RM) -r download-cache |
1288 | -else |
1289 | - $(RM) download-cache |
1290 | -endif |
1291 | - |
1292 | -download-cache: |
1293 | -ifeq ($(CA_DOWNLOAD_CACHE_DIR),$@) |
1294 | - bzr checkout lp:ca-download-cache $@ |
1295 | -else |
1296 | - [ -d $(CA_DOWNLOAD_CACHE_DIR) ] || bzr checkout lp:ca-download-cache $(CA_DOWNLOAD_CACHE_DIR) |
1297 | - ln -s $(CA_DOWNLOAD_CACHE_DIR) $@ |
1298 | -endif |
1299 | - |
1300 | -eggs: |
1301 | -ifeq ($(CA_EGGS_DIR),$@) |
1302 | - mkdir $@ |
1303 | -else |
1304 | - [ -d $(CA_EGGS_DIR) ] || mkdir $(CA_EGGS_DIR) |
1305 | - ln -s $(CA_EGGS_DIR) $@ |
1306 | -endif |
1307 | - |
1308 | -$(BUILDOUT): bootstrap.py buildout.cfg setup.py versions.cfg eggs download-cache |
1309 | - $(EXTERNAL_BUILDOUT) --distribute --version 1.5.1 \ |
1310 | - --download-base=download-cache/dist --eggs=eggs \ |
1311 | - --setup-source distribute_setup.py |
1312 | - touch --no-create $@ |
1313 | - |
1314 | -$(PY): $(BUILDOUT) |
1315 | - $(BUILDOUT) |
1316 | - touch --no-create $@ |
1317 | - |
1318 | -bootstrap: clean $(PY) |
1319 | - |
1320 | -test: $(PY) |
1321 | - $(TEST_COMMAND) |
1322 | - |
1323 | -check: test |
1324 | - |
1325 | -# Can be used to update the dependencies when you change something |
1326 | -# in versions.cfg. |
1327 | -update-deps: $(BUILDOUT) |
1328 | - $(BUILDOUT) buildout:install-from-cache=false buildout:allow-picked-versions=true |
1329 | - |
1330 | -.PHONY: bootstrap check clean test update-deps |
1331 | -.DEFAULT_GOAL := $(PY) |
1332 | |
1333 | === modified file 'makefiles/css.mk' |
1334 | --- makefiles/css.mk 2014-04-23 15:45:36 +0000 |
1335 | +++ makefiles/css.mk 2016-01-27 16:38:37 +0000 |
1336 | @@ -1,6 +1,6 @@ |
1337 | -COMPASS = tmp/bin/compass |
1338 | +COMPASS = /usr/bin/compass |
1339 | |
1340 | -css: $(COMPASS) |
1341 | +css: |
1342 | $(RUN_GEM) $(COMPASS) compile . |
1343 | |
1344 | $(COMPASS): |
1345 | |
1346 | === removed file 'makefiles/deploy.mk' |
1347 | --- makefiles/deploy.mk 2014-03-30 03:19:53 +0000 |
1348 | +++ makefiles/deploy.mk 1970-01-01 00:00:00 +0000 |
1349 | @@ -1,48 +0,0 @@ |
1350 | -REVNO = $(shell bzr revno) |
1351 | -DIRNAME = isitdeployable-$(REVNO) |
1352 | -TARBALL = $(DIRNAME).tar.bz2 |
1353 | -BASEDIR = /srv/isitdeployable.net/production/ |
1354 | -CODE_DIR = $(BASEDIR)/$(DIRNAME) |
1355 | -HOST ?= isitdeployable.net |
1356 | - |
1357 | -prod: $(PY) js css $(JS_BUILD_PATH)/combo $(JS_BUILD_PATH)/revno js_revno_link |
1358 | - |
1359 | -$(JS_BUILD_PATH)/combo: |
1360 | - # Because we have to strip out the prefix that |
1361 | - # convoy sees because it's not at the root |
1362 | - ln -sf . $(JS_BUILD_PATH)/combo |
1363 | - |
1364 | -$(JS_BUILD_PATH)/revno: |
1365 | - bzr log $(REVTRACKER_JS) --limit 1 | head -n2 | tail -n1 | sed 's/[^0-9]*//' > $(JS_BUILD_PATH)/revno |
1366 | - |
1367 | -js_revno_link: $(JS_BUILD_PATH)/revno |
1368 | - ln -sf . $(JS_BUILD_PATH)/rev-$$(cat $(JS_BUILD_PATH)/revno) |
1369 | - |
1370 | -push: prod |
1371 | - tar --exclude 'download-cache/*' --exclude 'build/yui/*' -cjf $(TARBALL) * .bzr .bzrignore |
1372 | - scp $(TARBALL) $(HOST): |
1373 | - ssh $(HOST) 'sudo mkdir -p $(CODE_DIR) && sudo chown ubuntu $(CODE_DIR) && \ |
1374 | - sudo apt-get install -y puppet && \ |
1375 | - tar xf /home/ubuntu/$(TARBALL) -C $(CODE_DIR) && \ |
1376 | - (rm $(CODE_DIR)/download-cache && mkdir -p $(CODE_DIR)/download-cache/dist) && \ |
1377 | - (cd $(CODE_DIR) && ./bin/buildout)' |
1378 | - |
1379 | -remote_prod_deploy: |
1380 | - ssh $(HOST) 'sudo /etc/init.d/deploy-tracker-celeryd stop && \ |
1381 | - $(CODE_DIR)/dev_config/apply && \ |
1382 | - sudo chown deploytracker:deploytracker -R $(CODE_DIR) && \ |
1383 | - sudo -u deploytracker $(CODE_DIR)/bin/deploy collectstatic --noinput && \ |
1384 | - sudo -u deploytracker $(CODE_DIR)/bin/deploy syncdb --noinput && \ |
1385 | - sudo -u deploytracker $(CODE_DIR)/bin/deploy migrate --noinput && \ |
1386 | - sudo /etc/init.d/deploy-tracker-celeryd start && \ |
1387 | - (sudo stop deploy-tracker-combo || true) && \ |
1388 | - sudo start deploy-tracker-combo && \ |
1389 | - (sudo stop squid3 || true) && \ |
1390 | - sudo start squid3 && \ |
1391 | - sudo /etc/init.d/apache2 reload && \ |
1392 | - sudo ln -snf $(CODE_DIR) $(BASEDIR)/isitdeployable-current' |
1393 | - for i in seq 4; do wget -O/dev/null -q http://$(HOST); done |
1394 | - |
1395 | -deploy: push remote_prod_deploy |
1396 | - |
1397 | -.PHONY: prod push remote_prod_deploy deploy js_revno_link |
1398 | |
1399 | === modified file 'makefiles/js.mk' |
1400 | --- makefiles/js.mk 2014-03-30 03:19:53 +0000 |
1401 | +++ makefiles/js.mk 2016-01-27 16:38:37 +0000 |
1402 | @@ -1,12 +1,15 @@ |
1403 | YUIRELEASES := http://yui.zenfs.com/releases/yui3/ |
1404 | YUI := yui_3.15.0.zip |
1405 | -JS_BUILD_PATH = build/revtracker/js/ |
1406 | -JS_META_SCRIPT = $(PY) scripts/js/generate_meta.py |
1407 | +JS_BUILD_PATH = build/revtracker/js/combo |
1408 | +JS_META_SCRIPT = $(PYTHON) scripts/js/generate_meta.py |
1409 | REVTRACKER_JS = revtracker/static/js/ |
1410 | DEV_JS_FILES := $(wildcard $(REVTRACKER_JS)/*.js) |
1411 | BUILD_JS_FILES := $(patsubst $(REVTRACKER_JS)/%.js,$(JS_BUILD_PATH)/i/%.js,$(DEV_JS_FILES)) |
1412 | |
1413 | -js: js_dirs jsmin $(JS_BUILD_PATH)/i/meta.js |
1414 | +$(JS_BUILD_PATH)/revno: |
1415 | + bzr log --limit 1 | head -n2 | tail -n1 | sed 's/[^0-9]*//' | sed 's/\[merge\]//' > $(JS_BUILD_PATH)/revno |
1416 | + |
1417 | +js: js_dirs jsmin $(JS_BUILD_PATH)/i/meta.js $(JS_BUILD_PATH)/revno |
1418 | |
1419 | js_dirs: $(JS_BUILD_PATH)/i $(JS_BUILD_PATH)/y |
1420 | |
1421 | @@ -15,16 +18,17 @@ |
1422 | |
1423 | $(JS_BUILD_PATH)/y: build/yui |
1424 | mkdir -p $(JS_BUILD_PATH)/y |
1425 | - cp -r build/yui/build/* $(JS_BUILD_PATH)/y |
1426 | + cp -r branches/yui-min/build/* $(JS_BUILD_PATH)/y |
1427 | + rm -rf branches/yui-min |
1428 | |
1429 | build/yui: |
1430 | mkdir -p build/yui |
1431 | - wget $(YUIRELEASES)$(YUI) -O /tmp/$(YUI) |
1432 | - unzip /tmp/$(YUI) -d build |
1433 | + #wget $(YUIRELEASES)$(YUI) -O /tmp/$(YUI) |
1434 | + #unzip /tmp/$(YUI) -d build |
1435 | |
1436 | jsmin: $(BUILD_JS_FILES) |
1437 | rm $(JS_BUILD_PATH)/i/meta.js || true |
1438 | - $(PY) scripts/js/jsmin_all.py $(JS_BUILD_PATH)/i |
1439 | + $(PYTHON) scripts/js/jsmin_all.py $(JS_BUILD_PATH)/i |
1440 | |
1441 | $(BUILD_JS_FILES): $(DEV_JS_FILES) |
1442 | cp $(REVTRACKER_JS)/$(@F) $@ |
1443 | |
1444 | === removed file 'makefiles/services.mk' |
1445 | --- makefiles/services.mk 2014-03-30 03:19:53 +0000 |
1446 | +++ makefiles/services.mk 1970-01-01 00:00:00 +0000 |
1447 | @@ -1,50 +0,0 @@ |
1448 | -DB_DIR = $(TMP_DIR)/db |
1449 | -export PGHOST=$(DB_DIR) |
1450 | -export PGDATA=$(DB_DIR)/data |
1451 | -PG_BIN_DIR = /usr/lib/postgresql/9.1/bin |
1452 | -SUPERVISOR_CONFIG = $(PWD)/dev_config/supervisor.conf |
1453 | -SUPERVISORD = bin/supervisord |
1454 | -SUPERVISORCTL = bin/supervisorctl -c $(SUPERVISOR_CONFIG) |
1455 | -SUPERVISORD_SOCK = tmp/supervisord.sock |
1456 | -GUNICORN := bin/gunicorn |
1457 | - |
1458 | -SERVICES = appserver combo celeryd gorun |
1459 | -RUN_RULES = $(patsubst %,run_%,$(SERVICES)) |
1460 | -STOP_RULES = $(patsubst %,stop_%,$(SERVICES)) |
1461 | -TAIL_RULES = $(patsubst %,tail_%,$(SERVICES)) |
1462 | - |
1463 | -run: run_db $(RUN_RULES) |
1464 | - |
1465 | -start: run |
1466 | - |
1467 | -$(RUN_RULES): run_%: $(SUPERVISORD_SOCK) |
1468 | - $(SUPERVISORCTL) start $* |
1469 | - |
1470 | -run_db: |
1471 | - scripts/start-database.sh |
1472 | - $(MANAGE) syncdb --noinput |
1473 | - $(MANAGE) migrate --noinput |
1474 | - |
1475 | -$(SUPERVISORD_SOCK): |
1476 | - $(SUPERVISORD) -c $(SUPERVISOR_CONFIG) |
1477 | - |
1478 | -stop: $(STOP_RULES) stop_db stop_supervisord |
1479 | - |
1480 | -$(STOP_RULES): stop_%: $(SUPERVISORD_SOCK) |
1481 | - $(SUPERVISORCTL) stop $* |
1482 | - |
1483 | -stop_db: |
1484 | - $(PG_BIN_DIR)/pg_ctl status > /dev/null && $(PG_BIN_DIR)/pg_ctl stop -t 60 -w -m fast |
1485 | - |
1486 | -stop_supervisord: |
1487 | - $(SUPERVISORCTL) shutdown |
1488 | - |
1489 | -restart_app: stop_app run_app |
1490 | - |
1491 | -reload_supervisord: |
1492 | - $(SUPERVISORCTL) reread |
1493 | - |
1494 | -$(TAIL_RULES): tail_%: $(SUPERVISORD_SOCK) |
1495 | - $(SUPERVISORCTL) tail -f $* |
1496 | - |
1497 | -.PHONY: run start run_db $(RUN_RULES) stop stop_db $(STOP_RULES) run_supervisord stop_supervisord reload_supervisord $(TAIL_RULES) |
1498 | |
1499 | === added file 'requirements-devel.txt' |
1500 | === added file 'requirements.txt' |
1501 | --- requirements.txt 1970-01-01 00:00:00 +0000 |
1502 | +++ requirements.txt 2016-01-27 16:38:37 +0000 |
1503 | @@ -0,0 +1,45 @@ |
1504 | +amqp>=1.3.3 |
1505 | +anyjson==0.3.3 |
1506 | +BeautifulSoup==3.2.1 |
1507 | +billiard>=3.3.0.14 |
1508 | +bson==0.3.3 |
1509 | +celery==3.1.8 |
1510 | +convoy==0.2.4 |
1511 | +Django==1.5.1 |
1512 | +django-celery==3.1.1 |
1513 | +django-debug-toolbar==0.9.4 |
1514 | +django-devserver==0.7.0 |
1515 | +django-factory==0.10 |
1516 | +django-kombu==0.9.4 |
1517 | +django-openid-auth==0.4 |
1518 | +# A checkout of https://github.com/bfirsh/django-ordered-model at 2998740eeda348473d8a8965b40b2292c31efd85 |
1519 | +django-ordered-model==0.3.0.jw1 |
1520 | +django-picklefield==0.2.1 |
1521 | +django-pgtools==0.2 |
1522 | +django-waffle==0.9.2 |
1523 | +gorun==1.7 |
1524 | +gunicorn>=17.5 |
1525 | +jsmin==2.0.2 |
1526 | +keyring>=0.9.2 |
1527 | +kombu>=3.0.7 |
1528 | +lazr.authentication==0.1.2 |
1529 | +lazr.uri==1.0.3 |
1530 | +meld3==0.6.10 |
1531 | +oops==0.0.13 |
1532 | +oops-amqp>=0.0.7 |
1533 | +oops-celery>=0.0.1 |
1534 | +oops-datedir-repo>=0.0.20 |
1535 | +oops-dictconfig>=0.0.2 |
1536 | +oops-wsgi==0.0.10 |
1537 | +Paste==1.7.5.1 |
1538 | +psycopg2==2.4.5 |
1539 | +pybars==0.0.4 |
1540 | +PyMeta==0.5.0 |
1541 | +pyinotify>=0.9.3 |
1542 | +South==0.7.3 |
1543 | +soupmatchers==0.2 |
1544 | +testresources==0.2.5 |
1545 | +testtools>=0.9.16 |
1546 | +wadllib==1.3.1 |
1547 | +werkzeug==0.9.4 |
1548 | +txstatsd==1.0.0 |
1549 | |
1550 | === modified file 'revtracker/tasks.py' |
1551 | --- revtracker/tasks.py 2014-02-01 05:25:13 +0000 |
1552 | +++ revtracker/tasks.py 2016-01-27 16:38:37 +0000 |
1553 | @@ -41,7 +41,7 @@ |
1554 | branch_from = Branch.open(branch_url) |
1555 | branch_from.lock_read() |
1556 | try: |
1557 | - branch_from_revs = branch_from.revision_history() |
1558 | + branch_from_revs = branch_from._revision_history() |
1559 | branch_from_revs_count = len(branch_from_revs) |
1560 | branch_to_revno = branch_to.revno() |
1561 | if branch_from_revs_count >= branch_to_revno: |
1562 | @@ -68,7 +68,7 @@ |
1563 | to_transport = transport.get_transport(project_dir) |
1564 | to_transport.mkdir('.') |
1565 | revision_id = None |
1566 | - branch_from_revs = branch_from.revision_history() |
1567 | + branch_from_revs = branch_from._revision_history() |
1568 | branch_from_revs_count = len(branch_from_revs) |
1569 | if not all_revs and branch_from_revs_count > 1000: |
1570 | revision_id = branch_from_revs[1000] |
1571 | |
1572 | === modified file 'revtracker/views.py' |
1573 | --- revtracker/views.py 2014-03-28 16:30:03 +0000 |
1574 | +++ revtracker/views.py 2016-01-27 16:38:37 +0000 |
1575 | @@ -1,6 +1,9 @@ |
1576 | from datetime import datetime |
1577 | +import os |
1578 | |
1579 | +from convoy.combo import combine_files, parse_qs |
1580 | from checklist import data as checklist_data |
1581 | +from django.conf import settings |
1582 | from django.contrib.auth.models import User |
1583 | from django.contrib.comments.forms import CommentForm |
1584 | from django.core.urlresolvers import reverse |
1585 | @@ -541,3 +544,27 @@ |
1586 | return ajax_response({'status': 'ok', 'description': info['description']}) |
1587 | else: |
1588 | return ajax_response({'status': 'failed', 'errors': errors}) |
1589 | + |
1590 | + |
1591 | +# combo view is only used for YUI, which will never change, so save to cache |
1592 | +# this for a long time (1 year). |
1593 | +def combo_view(request): |
1594 | + """Handle a request for combining a set of files.""" |
1595 | + fnames = parse_qs(request.META.get("QUERY_STRING", "")) |
1596 | + content_type = "text/plain" |
1597 | + |
1598 | + if fnames: |
1599 | + if fnames[0].endswith(".js"): |
1600 | + content_type = "text/javascript" |
1601 | + elif fnames[0].endswith(".css"): |
1602 | + content_type = "text/css" |
1603 | + content = combine_files(fnames, os.path.abspath(settings.CONVOY_ROOT), |
1604 | + resource_prefix=settings.STATIC_URL, |
1605 | + rewrite_urls=True) |
1606 | + # We're turning the generator returned by combine_files into a string |
1607 | + # here since GZipMiddleware would consume it if not. See Bug #822888. |
1608 | + return HttpResponse( |
1609 | + content_type=content_type, status=200, |
1610 | + content="".join(content)) |
1611 | + return HttpResponse(content_type=content_type, status=404) |
1612 | + |
1613 | |
1614 | === added file 'revtracker/wsgi.py' |
1615 | --- revtracker/wsgi.py 1970-01-01 00:00:00 +0000 |
1616 | +++ revtracker/wsgi.py 2016-01-27 16:38:37 +0000 |
1617 | @@ -0,0 +1,71 @@ |
1618 | +import oops_dictconfig |
1619 | +import oops_wsgi |
1620 | +import uuid |
1621 | + |
1622 | +from django.conf import settings |
1623 | +from django.core.handlers import wsgi |
1624 | + |
1625 | +from versioninfo import version_info |
1626 | + |
1627 | + |
1628 | +class EagerOOPSWSGIHandler(wsgi.WSGIHandler): |
1629 | + """Pre-generates an oops id on exception.""" |
1630 | + def handle_uncaught_exception(self, request, resolver, exc_info): |
1631 | + # This will pass the exception information back to oops. It |
1632 | + # should not be necessary once |
1633 | + # https://code.djangoproject.com/ticket/16674 has been merged. |
1634 | + if 'oops.context' in request.environ: |
1635 | + request.environ['oops.context']['exc_info'] = exc_info |
1636 | + # Generate OOPS id early so that we can render the error page right |
1637 | + # away and not depend on passing thread locals around. |
1638 | + if 'oops.report' in request.environ: |
1639 | + unique_id = uuid.uuid4().hex |
1640 | + request.environ['oops.report']['id'] = "OOPS-%s" % unique_id |
1641 | + |
1642 | + return super(EagerOOPSWSGIHandler, self).handle_uncaught_exception( |
1643 | + request, resolver, exc_info) |
1644 | + |
1645 | + def __call__(self, environ, start_response): |
1646 | + def start_response_with_exc_info(status, headers, exc_info=None): |
1647 | + """Custom start_response callback for wsgi.""" |
1648 | + # This will pass the exception information back to oops_wgi. It |
1649 | + # should not be necessary once |
1650 | + # https://code.djangoproject.com/ticket/16674 has been merged. |
1651 | + if exc_info is None: |
1652 | + exc_info = environ['oops.context'].get('exc_info', None) |
1653 | + return start_response(status, headers, exc_info) |
1654 | + return super(EagerOOPSWSGIHandler, self).__call__( |
1655 | + environ, start_response_with_exc_info) |
1656 | + |
1657 | + |
1658 | +class BzrRevnoMiddleware(object): |
1659 | + REVNO_HEADER = ('X-Bzr-Revision-Number', version_info['revno']) |
1660 | + |
1661 | + def __init__(self, app): |
1662 | + self.app = app |
1663 | + |
1664 | + def __call__(self, environ, start_response): |
1665 | + |
1666 | + def custom_start_response(status, headers, exc_info=None): |
1667 | + headers.append(self.REVNO_HEADER) |
1668 | + return start_response(status, headers, exc_info) |
1669 | + |
1670 | + return self.app(environ, custom_start_response) |
1671 | + |
1672 | + |
1673 | +def make_app(): |
1674 | + """Encapsulate our RNR handler in an OOPS app for error reporting.""" |
1675 | + |
1676 | + non_oops_app = EagerOOPSWSGIHandler() |
1677 | + |
1678 | + non_oops_app = BzrRevnoMiddleware(non_oops_app) |
1679 | + |
1680 | + config = oops_dictconfig.config_from_dict(settings.OOPSES) |
1681 | + oops_wsgi.install_hooks(config) |
1682 | + soft_timeout = settings.SOFT_TIMEOUT_MILLISECONDS |
1683 | + oops_app = oops_wsgi.make_app(non_oops_app, config, oops_on_status=['500'], |
1684 | + soft_start_timeout=soft_timeout) |
1685 | + return oops_app |
1686 | + |
1687 | + |
1688 | +application = make_app() |
1689 | |
1690 | === removed file 'scripts/deploy.sh' |
1691 | --- scripts/deploy.sh 2012-10-05 13:46:00 +0000 |
1692 | +++ scripts/deploy.sh 1970-01-01 00:00:00 +0000 |
1693 | @@ -1,16 +0,0 @@ |
1694 | -#!/bin/bash |
1695 | - |
1696 | -set -e |
1697 | - |
1698 | -TEMPDIR=$(mktemp -d) |
1699 | -trap "rm -r $TEMPDIR" EXIT SIGINT SIGTERM |
1700 | -CODE_DIR=${TEMPDIR}/isitdeployable |
1701 | - |
1702 | -bzr push ${CODE_DIR} |
1703 | - |
1704 | -if [ -n "$CA_EGGS_DIR" ]; then |
1705 | - cp -a "$CA_EGGS_DIR" "${CODE_DIR}/eggs" |
1706 | -fi |
1707 | - |
1708 | -make -C ${CODE_DIR} deploy "$@" CA_EGGS_DIR=eggs |
1709 | - |
1710 | |
1711 | === added file 'scripts/settings-to-conncheck.py' |
1712 | --- scripts/settings-to-conncheck.py 1970-01-01 00:00:00 +0000 |
1713 | +++ scripts/settings-to-conncheck.py 2016-01-27 16:38:37 +0000 |
1714 | @@ -0,0 +1,37 @@ |
1715 | +#!/usr/bin/env python |
1716 | + |
1717 | +from conn_check_configs.django import * # noqa |
1718 | + |
1719 | +STATSD_CHECK['send'] = 'Hakuna' |
1720 | +STATSD_CHECK['expect'] = 'Matata' |
1721 | + |
1722 | +def make_http_checks(settings, options): |
1723 | + checks = [] |
1724 | + urls = ( |
1725 | + ( |
1726 | + settings['OPENID_SSO_SERVER_URL'], |
1727 | + '', |
1728 | + 200, |
1729 | + 'HEAD', |
1730 | + ), |
1731 | + ) |
1732 | + |
1733 | + for url in urls: |
1734 | + if not url[0]: |
1735 | + continue |
1736 | + |
1737 | + checks.append({ |
1738 | + 'type': 'http', |
1739 | + 'url': '{0}{1}'.format(url[0], url[1]), |
1740 | + 'method': url[3], |
1741 | + 'expected_code': url[2], |
1742 | + }) |
1743 | + |
1744 | + return checks |
1745 | + |
1746 | +EXTRA_CHECK_MAKERS.append(make_http_checks) |
1747 | + |
1748 | + |
1749 | +if __name__ == '__main__': |
1750 | + run() |
1751 | + |
1752 | |
1753 | === removed file 'scripts/start-database.sh' |
1754 | --- scripts/start-database.sh 2014-01-31 18:04:49 +0000 |
1755 | +++ scripts/start-database.sh 1970-01-01 00:00:00 +0000 |
1756 | @@ -1,36 +0,0 @@ |
1757 | -#! /bin/bash |
1758 | - |
1759 | -ROOTDIR=${ROOTDIR:-`bzr root`} |
1760 | -if [ ! -d "$ROOTDIR" ]; then |
1761 | - echo "ROOTDIR '$ROOTDIR' doesn't exist" >&2 |
1762 | - exit 1 |
1763 | -fi |
1764 | - |
1765 | -function setup_database() { |
1766 | - local TESTDIR=$1 |
1767 | - |
1768 | - echo "## Starting postgres in $TESTDIR ##" |
1769 | - mkdir -p "$TESTDIR/data" |
1770 | - chmod 700 "$TESTDIR/data" |
1771 | - |
1772 | - export PGHOST="$TESTDIR" |
1773 | - export PGDATA="$TESTDIR/data" |
1774 | - if [ -d /usr/lib/postgresql/9.1 ]; then |
1775 | - export PGBINDIR=/usr/lib/postgresql/9.1/bin |
1776 | - elif [ -d /usr/lib/postgresql/8.4 ]; then |
1777 | - export PGBINDIR=/usr/lib/postgresql/8.4/bin |
1778 | - else |
1779 | - echo "Cannot find valid parent for PGBINDIR" |
1780 | - fi |
1781 | - $PGBINDIR/initdb -E UNICODE -D $PGDATA |
1782 | - $PGBINDIR/initdb -A trust &>/dev/null |
1783 | - $PGBINDIR/pg_ctl start -w -D $TESTDIR/data -l $TESTDIR/postgres.log -o "-F -k $TESTDIR -h ''" |
1784 | - $PGBINDIR/createdb --encoding UNICODE "revtracker" &>/dev/null |
1785 | - $PGBINDIR/createlang plpgsql "revtracker" |
1786 | - $PGBINDIR/createuser --superuser --createdb "postgres" &>/dev/null |
1787 | - echo "To set your environment so psql will connect to this DB instance type:" |
1788 | - echo " export PGHOST=$TESTDIR" |
1789 | - echo "## Done. ##" |
1790 | -} |
1791 | - |
1792 | -setup_database $ROOTDIR/tmp/db |
1793 | |
1794 | === modified file 'setup.py' |
1795 | --- setup.py 2014-03-27 02:35:23 +0000 |
1796 | +++ setup.py 2016-01-27 16:38:37 +0000 |
1797 | @@ -25,7 +25,13 @@ |
1798 | 'django-waffle', |
1799 | 'django-devserver', |
1800 | 'django-ordered-model', |
1801 | + 'django-pgtools', |
1802 | 'werkzeug', |
1803 | + #'oops', |
1804 | + 'oops_dictconfig', |
1805 | + 'oops_datedir_repo', |
1806 | + 'oops_celery', |
1807 | + 'oops-wsgi', |
1808 | ], |
1809 | zip_safe=False, |
1810 | packages=find_packages(), |
1811 | |
1812 | === added file 'tarball_exclude.txt' |
1813 | --- tarball_exclude.txt 1970-01-01 00:00:00 +0000 |
1814 | +++ tarball_exclude.txt 2016-01-27 16:38:37 +0000 |
1815 | @@ -0,0 +1,9 @@ |
1816 | +.env |
1817 | +*.pyc |
1818 | + |
1819 | +tmp/ |
1820 | +tmp/* |
1821 | +download-cache/* |
1822 | +build/yui/* |
1823 | +debian/* |
1824 | +isitdeployable.egg-info/* |
1825 | |
1826 | === added file 'tarmac_verify.sh' |
1827 | --- tarmac_verify.sh 1970-01-01 00:00:00 +0000 |
1828 | +++ tarmac_verify.sh 2016-01-27 16:38:37 +0000 |
1829 | @@ -0,0 +1,6 @@ |
1830 | +#! /bin/bash |
1831 | + |
1832 | +set -e |
1833 | +set -u |
1834 | + |
1835 | +make bootstrap |
1836 | |
1837 | === removed file 'versions.cfg' |
1838 | --- versions.cfg 2015-05-13 17:32:19 +0000 |
1839 | +++ versions.cfg 1970-01-01 00:00:00 +0000 |
1840 | @@ -1,72 +0,0 @@ |
1841 | -[buildout] |
1842 | -versions = versions |
1843 | - |
1844 | -# Update the version number here to upgrade to a new version. |
1845 | -# |
1846 | -# If you are forking a dependency then make sure you include a pointer |
1847 | -# to the branch where the fork is maintained. |
1848 | -# |
1849 | -# Alphabetical, case-insensitive, please! :-) |
1850 | -[versions] |
1851 | -amqp = 1.4.1 |
1852 | -amqplib = 1.0.2 |
1853 | -anyjson = 0.3.3 |
1854 | -BeautifulSoup = 3.2.1 |
1855 | -billiard = 3.3.0.14 |
1856 | -bson = 0.3.3 |
1857 | -buildout-versions = 1.7 |
1858 | -bzr = 2.5.1 |
1859 | -celery = 3.1.8 |
1860 | -convoy = 0.2.4 |
1861 | -distribute = 0.6.28 |
1862 | -Django = 1.5.1 |
1863 | -django-celery = 3.1.1 |
1864 | -django-debug-toolbar = 0.9.4 |
1865 | -django-devserver = 0.7.0 |
1866 | -django-factory = 0.10 |
1867 | -django-kombu = 0.9.4 |
1868 | -django-openid-auth = 0.4 |
1869 | -# A checkout of https://github.com/bfirsh/django-ordered-model at 2998740eeda348473d8a8965b40b2292c31efd85 |
1870 | -django-ordered-model = 0.3.0.jw1 |
1871 | -django-picklefield = 0.2.1 |
1872 | -django-waffle = 0.9.2 |
1873 | -djangorecipe = 1.3 |
1874 | -gorun = 1.7 |
1875 | -gunicorn = 0.14.6 |
1876 | -httplib2 = 0.9.1 |
1877 | -jsmin = 2.0.2 |
1878 | -keyring = 0.9.2 |
1879 | -kombu = 3.0.10 |
1880 | -launchpadlib = 1.10.2 |
1881 | -lazr.authentication = 0.1.2 |
1882 | -lazr.restfulclient = 0.13.0 |
1883 | -lazr.uri = 1.0.3 |
1884 | -Markdown = 2.2.0 |
1885 | -meld3 = 0.6.10 |
1886 | -oauth = 1.0.1 |
1887 | -oops = 0.0.10 |
1888 | -oops_celery = 0.0.1 |
1889 | -oops_datedir_repo = 0.0.15 |
1890 | -oops_dictconfig = 0.0.1 |
1891 | -Paste = 1.7.5.1 |
1892 | -psycopg2 = 2.4.5 |
1893 | -pybars = 0.0.4 |
1894 | -PyMeta = 0.5.0 |
1895 | -pyinotify = 0.9.3 |
1896 | -python-dateutil = 1.5 |
1897 | -python-openid = 2.2.5 |
1898 | -pytz = 2013.9 |
1899 | -simplejson = 2.6.1 |
1900 | -South = 0.7.3 |
1901 | -soupmatchers = 0.2 |
1902 | -supervisor = 3.0 |
1903 | -testresources = 0.2.5 |
1904 | -testtools = 0.9.16 |
1905 | -wadllib = 1.3.1 |
1906 | -werkzeug = 0.9.4 |
1907 | -wsgi-intercept = 0.5.1 |
1908 | -z3c.recipe.scripts = 1.0.1 |
1909 | -# Also upgrade the zc.buildout version in the Makefile's bin/buildout section. |
1910 | -zc.buildout = 1.5.1 |
1911 | -zc.recipe.egg = 1.3.2 |
1912 | -zope.interface = 4.0.1 |
As we just changed the trunk from lp:~james-w/isitdeployable/trunk to lp:isitdeployable, (due to change the owner from jamesw to ~ubuntuone- pqm-team)
This is a duplicate MP from: https:/ /code.launchpad .net/~kelvin. li/isitdeployab le/deployable- wheels- supports/ +merge/ 283844
This one is trying to benefit from the tarmac job to be auto merged.