Merge lp:~kelvin.li/isitdeployable/deployable-wheels-supports into lp:isitdeployable

Proposed by Kelvin Li
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
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

To post a comment you must log in.
Revision history for this message
Kelvin Li (kelvin.li) wrote :

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/isitdeployable/deployable-wheels-supports/+merge/283844

This one is trying to benefit from the tarmac job to be auto merged.

Revision history for this message
Kelvin Li (kelvin.li) wrote :

Due to Michael already reviewed in https://code.launchpad.net/~kelvin.li/isitdeployable/deployable-wheels-supports/+merge/283844 for the same changes.

Self approved.

review: Approve
Revision history for this message
Ubuntu One Auto Pilot (otto-pilot) wrote :
Download full text (8.6 KiB)

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-site-packages /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv
Not deleting /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin
New python executable in /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/python
Installing setuptools, pip...done.
/usr/lib/config-manager/cm.py update config-manager.txt
#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/cache/isitdeployable/merges/trunk/virtualenv/bin/python /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/pip install -U pip --find-links=branches/wheels --no-index
Ignoring indexes: https://pypi.python.org/simple/
Unpacking ./branches/wheels/pip-8.0.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 1.5.4
    Uninstalling pip:
      Successfully uninstalled pip
Successfully installed pip
Cleaning up...
/mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/python /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/pip install --no-binary django --find-links=branches/wheels --no-index -r requirements.txt
Ignoring indexes: https://pypi.python.org/simple
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/python2.7/dist-packages (from -r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): BeautifulSoup==3.2.1 in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 3))
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-celery==3.1.1 (from -r requirements.txt (line 9))
Collecting django-debug-toolbar==0.9.4 (from -r requirements.txt (line 10))
Collecting django-devserver==0.7.0 (from -r requirements.txt (line 11))
Collecting django-factory==0.10 (from -r requirements.txt (line 12))
Collecting django-kombu==0.9.4 (from -r requirements.txt (line 13))
Collecting django-openid-auth==0.4 (from -r requirements.txt (line 14))
Collecting django-ordered-model==0.3.0.jw1 (from -r requirements.txt (line 16))
Collecting django-picklefield==0.2.1 (from -r requirements.txt (line 17))
Collecting django-pgtools==0.2 (from -r requirements.txt (line 18))
Collecting django-waffle==0.9.2 (from -r requirements.txt (line 19))
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...

Read more...

Revision history for this message
Ubuntu One Auto Pilot (otto-pilot) wrote :
Download full text (8.9 KiB)

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-site-packages /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv
Not deleting /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin
New python executable in /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/python
Installing setuptools, pip...done.
/usr/lib/config-manager/cm.py update config-manager.txt
#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/cache/isitdeployable/merges/trunk/virtualenv/bin/python /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/pip install -U pip --find-links=branches/wheels --no-index
Ignoring indexes: https://pypi.python.org/simple/
Unpacking ./branches/wheels/pip-8.0.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 1.5.4
    Uninstalling pip:
      Successfully uninstalled pip
Successfully installed pip
Cleaning up...
/mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/python /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/pip install --no-binary django --find-links=branches/wheels --no-index -r requirements.txt
Ignoring indexes: https://pypi.python.org/simple
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/python2.7/dist-packages (from -r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): BeautifulSoup==3.2.1 in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): billiard>=3.3.0.14 in /usr/lib/python2.7/dist-packages (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-celery==3.1.1 (from -r requirements.txt (line 9))
Collecting django-debug-toolbar==0.9.4 (from -r requirements.txt (line 10))
Collecting django-devserver==0.7.0 (from -r requirements.txt (line 11))
Collecting django-factory==0.10 (from -r requirements.txt (line 12))
Collecting django-kombu==0.9.4 (from -r requirements.txt (line 13))
Collecting django-openid-auth==0.4 (from -r requirements.txt (line 14))
Collecting django-ordered-model==0.3.0.jw1 (from -r requirements.txt (line 16))
Collecting django-picklefield==0.2.1 (from -r requirements.txt (line 17))
Collecting django-pgtools==0.2 (from -r requirements.txt (line 18))
Collecting django-waffle==0.9.2 (from -r requirements.txt (line 19))
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...

Read more...

Revision history for this message
Ubuntu One Auto Pilot (otto-pilot) wrote :
Download full text (8.8 KiB)

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-site-packages /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv
Not deleting /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin
New python executable in /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/python
Installing setuptools, pip...done.
/usr/lib/config-manager/cm.py update config-manager.txt
#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/cache/isitdeployable/merges/trunk/virtualenv/bin/python /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/pip install -U pip --find-links=branches/wheels --no-index
Ignoring indexes: https://pypi.python.org/simple/
Unpacking ./branches/wheels/pip-8.0.0-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 1.5.4
    Uninstalling pip:
      Successfully uninstalled pip
Successfully installed pip
Cleaning up...
/mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/python /mnt/tarmac/cache/isitdeployable/merges/trunk/virtualenv/bin/pip install --no-binary django --find-links=branches/wheels --no-index -r requirements.txt
Ignoring indexes: https://pypi.python.org/simple
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/python2.7/dist-packages (from -r requirements.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): BeautifulSoup==3.2.1 in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): billiard>=3.3.0.14 in /usr/lib/python2.7/dist-packages (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-celery==3.1.1 (from -r requirements.txt (line 9))
Collecting django-debug-toolbar==0.9.4 (from -r requirements.txt (line 10))
Collecting django-devserver==0.7.0 (from -r requirements.txt (line 11))
Collecting django-factory==0.10 (from -r requirements.txt (line 12))
Collecting django-kombu==0.9.4 (from -r requirements.txt (line 13))
Collecting django-openid-auth==0.4 (from -r requirements.txt (line 14))
Collecting django-ordered-model==0.3.0.jw1 (from -r requirements.txt (line 16))
Collecting django-picklefield==0.2.1 (from -r requirements.txt (line 17))
Collecting django-pgtools==0.2 (from -r requirements.txt (line 18))
Collecting django-waffle==0.9.2 (from -r requirements.txt (line 19))
Collecting gorun==1.7 (from -r requirements.txt (line 20))
Requirement already satisfied (use --upgrade to upgrade): gunicorn>=17.5 in /usr/lib/python2.7/dist-packages (from -r requirements.txt (line 21)...

Read more...

251. By Kelvin Li

continue fixing the requirements conflicts on CI env

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
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

Subscribers

People subscribed via source and target branches

to all changes: