From ecb4da9ffba6f1777f74fce4b445df96d75c9e96 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Fri, 20 Nov 2015 20:41:00 -0300 Subject: [PATCH 01/18] Remove redundant basepython declarations --- tox.ini | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tox.ini b/tox.ini index 902d99d..5e97bab 100644 --- a/tox.ini +++ b/tox.ini @@ -9,12 +9,6 @@ envlist = commands = coverage run setup.py test coveralls -basepython = - py26: python2.6 - py27: python2.7 - py32: python3.2 - py33: python3.3 - py34: python3.4 deps = coverage==3.7.1 coveralls From bdd1a171f24c4611c4b3f3edc55d3854b097f9f0 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Fri, 20 Nov 2015 20:41:10 -0300 Subject: [PATCH 02/18] Add django1.9 to the test matrix --- .travis.yml | 8 ++++++-- tox.ini | 7 ++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index a6ad99c..3494bac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,6 @@ env: # generate list with: $ tox -l | xargs -I ITEM echo " - TOXENV="ITEM - TOXENV=py27-django14 - TOXENV=py27-django15 - TOXENV=py27-django16 - - TOXENV=py27-django17 - - TOXENV=py27-django18 - TOXENV=py32-django15 - TOXENV=py32-django16 - TOXENV=py32-django17 @@ -20,5 +18,11 @@ env: # generate list with: $ tox -l | xargs -I ITEM echo " - TOXENV="ITEM - TOXENV=py33-django16 - TOXENV=py33-django17 - TOXENV=py33-django18 + - TOXENV=py27-django17 + - TOXENV=py27-django18 + - TOXENV=py27-django19 - TOXENV=py34-django17 - TOXENV=py34-django18 + - TOXENV=py34-django19 + - TOXENV=py35-django18 + - TOXENV=py35-django19 diff --git a/tox.ini b/tox.ini index 5e97bab..cc00094 100644 --- a/tox.ini +++ b/tox.ini @@ -1,9 +1,9 @@ [tox] envlist = py{26,27}-django{14,15,16}, - py{32,33}-django{15,16}, - py{27}-django{17,18}, - py{32,33,34}-django{17,18}, + py{32,33}-django{15,16,17,18}, + py{27,34}-django{17,18,19}, + py{35}-django{18,19} [testenv] commands = @@ -17,4 +17,5 @@ deps = django16: Django>=1.6,<1.7 django17: Django>=1.7,<1.8 django18: Django>=1.8,<1.9 + django19: Django>=1.9,<1.10 passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH From 8a16cea35605d630ca5c52ed55518550ac8a533f Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Fri, 20 Nov 2015 20:52:39 -0300 Subject: [PATCH 03/18] Don't fail tests if coverall fails --- tox.ini | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index cc00094..fb4ed53 100644 --- a/tox.ini +++ b/tox.ini @@ -8,7 +8,7 @@ envlist = [testenv] commands = coverage run setup.py test - coveralls + sh -c 'coveralls | true' deps = coverage==3.7.1 coveralls @@ -19,3 +19,4 @@ deps = django18: Django>=1.8,<1.9 django19: Django>=1.9,<1.10 passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH +whitelist_externals = sh From 8742050a0ca089a712253c5f714247404fd0299d Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 5 Dec 2015 12:47:02 -0300 Subject: [PATCH 04/18] Eliminate race condition during test startup --- analytical/tests/__init__.py | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/analytical/tests/__init__.py b/analytical/tests/__init__.py index cf955c0..e69de29 100644 --- a/analytical/tests/__init__.py +++ b/analytical/tests/__init__.py @@ -1,28 +0,0 @@ -""" -Tests for django-analytical. -""" -# flake8: noqa - -from analytical.tests.test_tag_analytical import * -from analytical.tests.test_tag_chartbeat import * -from analytical.tests.test_tag_clickmap import * -from analytical.tests.test_tag_clicky import * -from analytical.tests.test_tag_crazy_egg import * -from analytical.tests.test_tag_gauges import * -from analytical.tests.test_tag_google_analytics import * -from analytical.tests.test_tag_gosquared import * -from analytical.tests.test_tag_hubspot import * -from analytical.tests.test_tag_intercom import * -from analytical.tests.test_tag_kiss_insights import * -from analytical.tests.test_tag_kiss_metrics import * -from analytical.tests.test_tag_mixpanel import * -from analytical.tests.test_tag_olark import * -from analytical.tests.test_tag_optimizely import * -from analytical.tests.test_tag_performable import * -from analytical.tests.test_tag_piwik import * -from analytical.tests.test_tag_reinvigorate import * -from analytical.tests.test_tag_snapengage import * -from analytical.tests.test_tag_spring_metrics import * -from analytical.tests.test_tag_uservoice import * -from analytical.tests.test_tag_woopra import * -from analytical.tests.test_utils import * From 5a336088f6ad749a5196e70e33aacd193f57c9fd Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 5 Dec 2015 12:47:12 -0300 Subject: [PATCH 05/18] List missing dependencies --- analytical/tests/settings.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/analytical/tests/settings.py b/analytical/tests/settings.py index 374530c..ecb42e4 100644 --- a/analytical/tests/settings.py +++ b/analytical/tests/settings.py @@ -10,6 +10,9 @@ DATABASES = { } INSTALLED_APPS = [ + 'django.contrib.sites', + 'django.contrib.contenttypes', + 'django.contrib.auth', 'analytical', ] From 7f039cce3fd76f307a2f968bd8fb87135cc32e0b Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 5 Dec 2015 12:47:22 -0300 Subject: [PATCH 06/18] Remove bogus import --- analytical/tests/test_tag_gosquared.py | 1 - 1 file changed, 1 deletion(-) diff --git a/analytical/tests/test_tag_gosquared.py b/analytical/tests/test_tag_gosquared.py index 3fb05ad..9b946c0 100644 --- a/analytical/tests/test_tag_gosquared.py +++ b/analytical/tests/test_tag_gosquared.py @@ -8,7 +8,6 @@ from django.template import Context from django.test.utils import override_settings from analytical.templatetags.gosquared import GoSquaredNode -from analytical.tests import override_settings from analytical.tests.utils import TagTestCase from analytical.utils import AnalyticalException From 29a18306bb021056cf2e313d46fdfcf4b3886c17 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 5 Dec 2015 12:47:28 -0300 Subject: [PATCH 07/18] Configure django before using it --- setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.py b/setup.py index 5488406..35ba798 100644 --- a/setup.py +++ b/setup.py @@ -47,6 +47,11 @@ def read(fname): return open(os.path.join(os.path.dirname(__file__), fname)).read() +import django + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "analytical.tests.settings") +django.setup() + import analytical setup( From 0725045330c740cbc081242878e5d03c7f0bd9b6 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 5 Dec 2015 12:48:30 -0300 Subject: [PATCH 08/18] Ignore vim swap files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a167afb..f3546f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.*.sw? /*.geany /.idea /.tox From e2f25d43cd13ed19a9ba7b98d3613f8d3f0811ee Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 5 Dec 2015 13:16:35 -0300 Subject: [PATCH 09/18] Fix crash on setup.py when NOT running tests --- setup.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/setup.py b/setup.py index 35ba798..214b84d 100644 --- a/setup.py +++ b/setup.py @@ -47,10 +47,18 @@ def read(fname): return open(os.path.join(os.path.dirname(__file__), fname)).read() -import django - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "analytical.tests.settings") -django.setup() +try: + import django + os.environ.setdefault( + "DJANGO_SETTINGS_MODULE", + "analytical.tests.settings" + ) + django.setup() +except ImportError: + print( + "Could not import django. " + "This is fine, unless you intend to run unit tests." + ) import analytical From 87be940822f42c0cd17d166630b3ea0aebaa4e27 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sun, 6 Dec 2015 11:38:58 -0300 Subject: [PATCH 10/18] Drop support for unsupported django versions Since django 1.8 is an LTS release, we're dropping support for older versions. Since django 1.7 is still relatively recent, we'll be keeping support for it for now. --- .travis.yml | 33 +++++++++++---------------------- requirements.txt | 2 +- setup.py | 2 +- tox.ini | 10 +++------- 4 files changed, 16 insertions(+), 31 deletions(-) diff --git a/.travis.yml b/.travis.yml index 3494bac..2a24126 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,25 +4,14 @@ install: script: - tox env: # generate list with: $ tox -l | xargs -I ITEM echo " - TOXENV="ITEM - - TOXENV=py26-django14 - - TOXENV=py26-django15 - - TOXENV=py26-django16 - - TOXENV=py27-django14 - - TOXENV=py27-django15 - - TOXENV=py27-django16 - - TOXENV=py32-django15 - - TOXENV=py32-django16 - - TOXENV=py32-django17 - - TOXENV=py32-django18 - - TOXENV=py33-django15 - - TOXENV=py33-django16 - - TOXENV=py33-django17 - - TOXENV=py33-django18 - - TOXENV=py27-django17 - - TOXENV=py27-django18 - - TOXENV=py27-django19 - - TOXENV=py34-django17 - - TOXENV=py34-django18 - - TOXENV=py34-django19 - - TOXENV=py35-django18 - - TOXENV=py35-django19 + - TOXENV=py27-django17 + - TOXENV=py27-django18 + - TOXENV=py27-django19 + - TOXENV=py32-django17 + - TOXENV=py33-django17 + - TOXENV=py33-django18 + - TOXENV=py34-django17 + - TOXENV=py34-django18 + - TOXENV=py34-django19 + - TOXENV=py35-django18 + - TOXENV=py35-django19 diff --git a/requirements.txt b/requirements.txt index 94a0e83..fa56c66 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -Django +Django>=1.7.0 diff --git a/setup.py b/setup.py index 214b84d..5e988c2 100644 --- a/setup.py +++ b/setup.py @@ -98,6 +98,6 @@ setup( download_url='https://github.com/jcassee/django-analytical/archive/master.zip', cmdclass=cmdclass, install_requires=[ - 'Django>=1.4', + 'Django>=1.7.0', ], ) diff --git a/tox.ini b/tox.ini index fb4ed53..affba1d 100644 --- a/tox.ini +++ b/tox.ini @@ -1,9 +1,8 @@ [tox] envlist = - py{26,27}-django{14,15,16}, - py{32,33}-django{15,16,17,18}, - py{27,34}-django{17,18,19}, - py{35}-django{18,19} + py{27,32,33,34}-django17 + py33-django18 + py{27,34,35}-django{18,19} [testenv] commands = @@ -12,9 +11,6 @@ commands = deps = coverage==3.7.1 coveralls - django14: Django>=1.4,<1.5 - django15: Django>=1.5,<1.6 - django16: Django>=1.6,<1.7 django17: Django>=1.7,<1.8 django18: Django>=1.8,<1.9 django19: Django>=1.9,<1.10 From b833f37f95a43ae46009f0163f06e76e8ea3ea00 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sun, 6 Dec 2015 11:40:24 -0300 Subject: [PATCH 11/18] Tests migrate instead of syncdb The latter is obsolete and have been replaced by the former. --- analytical/tests/test_tag_chartbeat.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/analytical/tests/test_tag_chartbeat.py b/analytical/tests/test_tag_chartbeat.py index 8444ff7..70b8435 100644 --- a/analytical/tests/test_tag_chartbeat.py +++ b/analytical/tests/test_tag_chartbeat.py @@ -28,9 +28,7 @@ class ChartbeatTagTestCaseNoSites(TestCase): class ChartbeatTagTestCaseWithSites(TestCase): def setUp(self): from django.core.management import call_command - from django.db.models import loading - loading.cache.loaded = False - call_command("syncdb", verbosity=0) + call_command("migrate", verbosity=0) def test_rendering_setup_site(self): site = Site.objects.create(domain="test.com", name="test") From d42e6d348bb8f582206e15896c134bcc4bdc060c Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sun, 6 Dec 2015 12:21:52 -0300 Subject: [PATCH 12/18] Escape performable tags See this entry[1] in the django 1.9 release notes for details. [1]: https://docs.djangoproject.com/en/1.9/releases/1.9/#simple-tag-now-wraps-tag-output-in-conditional-escape --- analytical/templatetags/performable.py | 3 ++- analytical/tests/test_tag_performable.py | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/analytical/templatetags/performable.py b/analytical/templatetags/performable.py index e357783..847f9c9 100644 --- a/analytical/templatetags/performable.py +++ b/analytical/templatetags/performable.py @@ -7,6 +7,7 @@ from __future__ import absolute_import import re from django.template import Library, Node, TemplateSyntaxError +from django.utils.safestring import mark_safe from analytical.utils import is_internal_ip, disable_html, get_identity, \ get_required_setting @@ -71,7 +72,7 @@ def performable_embed(hostname, page_id): """ Include a Performable landing page. """ - return EMBED_CODE % {'hostname': hostname, 'page_id': page_id} + return mark_safe(EMBED_CODE % {'hostname': hostname, 'page_id': page_id}) def contribute_to_analytical(add_node): diff --git a/analytical/tests/test_tag_performable.py b/analytical/tests/test_tag_performable.py index befee4b..2b1e16d 100644 --- a/analytical/tests/test_tag_performable.py +++ b/analytical/tests/test_tag_performable.py @@ -63,8 +63,9 @@ class PerformableEmbedTagTestCase(TagTestCase): def test_tag(self): domain = 'example.com' page = 'test' - r = self.render_tag('performable', 'performable_embed "%s" "%s"' - % (domain, page)) - self.assertTrue( - "$f.initialize({'host': 'example.com', 'page': 'test'});" in r, - r) + tag = self.render_tag( + 'performable', 'performable_embed "%s" "%s"' % (domain, page) + ) + self.assertIn( + "$f.initialize({'host': 'example.com', 'page': 'test'});", tag + ) From d7fcdb0346a1b361518d12d52f0e6e6023b3ae57 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sun, 6 Dec 2015 13:13:11 -0300 Subject: [PATCH 13/18] Make mixpanel dj19-compatible Looks like django>=1.9 uses `token` somewhere for simpletags, so use `_token` for our own to avoid it getting overwritten. --- analytical/templatetags/mixpanel.py | 7 ++++--- analytical/tests/test_tag_mixpanel.py | 12 ++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/analytical/templatetags/mixpanel.py b/analytical/templatetags/mixpanel.py index 34f8efd..0490f76 100644 --- a/analytical/templatetags/mixpanel.py +++ b/analytical/templatetags/mixpanel.py @@ -8,6 +8,7 @@ import json import re from django.template import Library, Node, TemplateSyntaxError +from django.utils.safestring import mark_safe from analytical.utils import is_internal_ip, disable_html, get_identity, \ get_required_setting @@ -46,7 +47,7 @@ def mixpanel(parser, token): class MixpanelNode(Node): def __init__(self): - self.token = get_required_setting( + self._token = get_required_setting( 'MIXPANEL_API_TOKEN', MIXPANEL_API_TOKEN_RE, "must be a string containing a 32-digit hexadecimal number") @@ -65,11 +66,11 @@ class MixpanelNode(Node): 'properties': json.dumps(properties, sort_keys=True)}) except KeyError: pass - html = TRACKING_CODE % {'token': self.token, + html = TRACKING_CODE % {'token': self._token, 'commands': " ".join(commands)} if is_internal_ip(context, 'MIXPANEL'): html = disable_html(html, 'Mixpanel') - return html + return mark_safe(html) def contribute_to_analytical(add_node): diff --git a/analytical/tests/test_tag_mixpanel.py b/analytical/tests/test_tag_mixpanel.py index eceae8d..b43a8d2 100644 --- a/analytical/tests/test_tag_mixpanel.py +++ b/analytical/tests/test_tag_mixpanel.py @@ -20,15 +20,15 @@ class MixpanelTagTestCase(TagTestCase): def test_tag(self): r = self.render_tag('mixpanel', 'mixpanel') - self.assertTrue( - "mixpanel.init('0123456789abcdef0123456789abcdef');" in r, - r) + self.assertIn( + "mixpanel.init('0123456789abcdef0123456789abcdef');", r, + ) def test_node(self): r = MixpanelNode().render(Context()) - self.assertTrue( - "mixpanel.init('0123456789abcdef0123456789abcdef');" in r, - r) + self.assertIn( + "mixpanel.init('0123456789abcdef0123456789abcdef');", r, + ) @override_settings(MIXPANEL_API_TOKEN=None) def test_no_token(self): From f8b820c1dbaa0b95c7034f96fb15e9c404ec328e Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sun, 6 Dec 2015 13:40:52 -0300 Subject: [PATCH 14/18] Only import django.contrib.site if it's in use Since django1.7, importing models for uninitialized apps is not supported, so Site if the app has been configured/initialized. --- analytical/templatetags/chartbeat.py | 2 +- analytical/tests/test_tag_chartbeat.py | 2 +- analytical/utils.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/analytical/templatetags/chartbeat.py b/analytical/templatetags/chartbeat.py index e47f104..3b0e7d8 100644 --- a/analytical/templatetags/chartbeat.py +++ b/analytical/templatetags/chartbeat.py @@ -8,7 +8,6 @@ import json import re from django.conf import settings -from django.contrib.sites.models import Site from django.core.exceptions import ImproperlyConfigured from django.template import Library, Node, TemplateSyntaxError @@ -109,6 +108,7 @@ def _get_domain(context): if 'django.contrib.sites' not in settings.INSTALLED_APPS: return elif getattr(settings, 'CHARTBEAT_AUTO_DOMAIN', True): + from django.contrib.sites.models import Site try: return Site.objects.get_current().domain except (ImproperlyConfigured, Site.DoesNotExist): # pylint: disable=E1101 diff --git a/analytical/tests/test_tag_chartbeat.py b/analytical/tests/test_tag_chartbeat.py index 70b8435..19f062c 100644 --- a/analytical/tests/test_tag_chartbeat.py +++ b/analytical/tests/test_tag_chartbeat.py @@ -4,7 +4,6 @@ Tests for the Chartbeat template tags and filters. import re -from django.contrib.sites.models import Site from django.http import HttpRequest from django.template import Context from django.test import TestCase @@ -31,6 +30,7 @@ class ChartbeatTagTestCaseWithSites(TestCase): call_command("migrate", verbosity=0) def test_rendering_setup_site(self): + from django.contrib.sites.models import Site site = Site.objects.create(domain="test.com", name="test") with override_settings(SITE_ID=site.id): r = ChartbeatBottomNode().render(Context()) diff --git a/analytical/utils.py b/analytical/utils.py index d3b6ecd..14d124b 100644 --- a/analytical/utils.py +++ b/analytical/utils.py @@ -3,7 +3,6 @@ Utility function for django-analytical. """ from django.conf import settings -from django.contrib.sites.models import Site from django.core.exceptions import ImproperlyConfigured @@ -100,6 +99,7 @@ def get_domain(context, prefix): domain = getattr(settings, 'ANALYTICAL_DOMAIN', None) if domain is None: if 'django.contrib.sites' in settings.INSTALLED_APPS: + from django.contrib.sites.models import Site try: domain = Site.objects.get_current().domain except (ImproperlyConfigured, Site.DoesNotExist): From 9144118f808c8588ca72e1eb39bf37fed85d6409 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Fri, 11 Dec 2015 21:41:03 -0300 Subject: [PATCH 15/18] Add missing apps to chartbeat tests settings --- analytical/tests/test_tag_chartbeat.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/analytical/tests/test_tag_chartbeat.py b/analytical/tests/test_tag_chartbeat.py index 19f062c..322fbd6 100644 --- a/analytical/tests/test_tag_chartbeat.py +++ b/analytical/tests/test_tag_chartbeat.py @@ -22,7 +22,12 @@ class ChartbeatTagTestCaseNoSites(TestCase): self.assertTrue('var _sf_async_config={"uid": "12345"};' in r, r) -@override_settings(INSTALLED_APPS=('analytical', 'django.contrib.sites')) +@override_settings(INSTALLED_APPS=( + 'analytical', + 'django.contrib.sites', + 'django.contrib.auth', + 'django.contrib.contenttypes', +)) @override_settings(CHARTBEAT_USER_ID='12345') class ChartbeatTagTestCaseWithSites(TestCase): def setUp(self): From 330949ecb7c4bba96f84b86b2b37c3957bed56e2 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Wed, 16 Dec 2015 13:06:00 -0300 Subject: [PATCH 16/18] Fix python35 failures on travis --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 2a24126..c1ac912 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,6 @@ language: python +python: + - "3.5" install: - pip install coveralls tox script: From 21328da7ba817da097bb382777c54dba5dcfc665 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Wed, 16 Dec 2015 15:24:34 -0300 Subject: [PATCH 17/18] Mention supported django versions in README and docs --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index fa9baa2..705c42e 100644 --- a/README.rst +++ b/README.rst @@ -21,6 +21,9 @@ set-up very simple, while allowing advanced users to customize tracking. Each service is set up as recommended by the services themselves, using an asynchronous version of the Javascript code if possible. +Version 1.0.0 is the last to support Django < 1.7. Users of older django +versions should stick to 1.0.0, and are encouraged to upgrade their setups. + .. end docs include .. |latest-version| image:: https://img.shields.io/pypi/v/django-analytical.svg From d0677699475ded5557db2e586b43a887823a4437 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Mon, 21 Dec 2015 14:22:15 -0300 Subject: [PATCH 18/18] Sort entries in autogenerated travis configuration --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c1ac912..ad171a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ install: - pip install coveralls tox script: - tox -env: # generate list with: $ tox -l | xargs -I ITEM echo " - TOXENV="ITEM +env: # generate list with: $ tox -l | sort | xargs -I ITEM echo " - TOXENV="ITEM - TOXENV=py27-django17 - TOXENV=py27-django18 - TOXENV=py27-django19