Merge lp:~jelmer/loggerhead/drop-python3 into lp:loggerhead

Proposed by Jelmer Vernooij
Status: Merged
Approved by: Colin Watson
Approved revision: no longer in the source branch.
Merge reported by: Otto Co-Pilot
Merged at revision: 520
Proposed branch: lp:~jelmer/loggerhead/drop-python3
Merge into: lp:loggerhead
Prerequisite: lp:~jelmer/loggerhead/fix-tox
Diff against target: 390 lines (+55/-105)
17 files modified
.travis.yml (+0/-2)
loggerhead.wsgi (+2/-4)
loggerhead/__init__.py (+1/-1)
loggerhead/changecache.py (+2/-8)
loggerhead/controllers/filediff_ui.py (+1/-11)
loggerhead/controllers/view_ui.py (+1/-1)
loggerhead/highlight.py (+1/-4)
loggerhead/history.py (+1/-1)
loggerhead/load_test.py (+1/-4)
loggerhead/lsprof.py (+1/-4)
loggerhead/main.py (+1/-4)
loggerhead/tests/test_load_test.py (+1/-4)
loggerhead/tests/test_simple.py (+2/-8)
loggerhead/util.py (+3/-12)
requirements.txt (+10/-11)
setup.py (+24/-20)
tox.ini (+3/-6)
To merge this branch: bzr merge lp:~jelmer/loggerhead/drop-python3
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+411875@code.launchpad.net

Commit message

Drop support for Python < 3 and Breezy < 3.1.

Description of the change

Drop support for Python < 3 and Breezy < 3.1.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) wrote :

Same comment as in https://code.launchpad.net/~jelmer/loggerhead/fix-tox/+merge/411874 - could you adjust this to keep Python 3.5? I'll need to merge these two together, since something (probably a Breezy release or similar) has broken the Python 2 tests.

We'll need to upgrade Launchpad to Breezy >= 3.1, but that should be manageable now.

review: Needs Fixing
Revision history for this message
Jelmer Vernooij (jelmer) wrote :

> Same comment as in https://code.launchpad.net/~jelmer/loggerhead/fix-
> tox/+merge/411874 - could you adjust this to keep Python 3.5? I'll need to
> merge these two together, since something (probably a Breezy release or
> similar) has broken the Python 2 tests.
>
> We'll need to upgrade Launchpad to Breezy >= 3.1, but that should be
> manageable now.
Done.

Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :
Revision history for this message
Colin Watson (cjwatson) :
review: Approve
Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :
Revision history for this message
Colin Watson (cjwatson) wrote :
Download full text (3.3 KiB)

ols-jenkaas is explicitly running "tox -e py27 -e py35". Dropping py27 will have to wait for the new year so that I can get somebody to update the job configuration.

However, there's also another problem that could be fixed before then:

14:40:30 O: py35 create: /workspace/loggerhead/loggerhead/work/.tox/py35
14:40:33 O: py35 installdeps: -rrequirements.txt
14:40:37 O: ERROR: invocation failed (exit code 1), logfile: /workspace/loggerhead/loggerhead/work/.tox/py35/log/py35-1.log
14:40:37 O: ERROR: actionid: py35
14:40:37 O: msg: getenv
14:40:37 O: cmdargs: [local('/workspace/loggerhead/loggerhead/work/.tox/py35/bin/pip'), 'install', '-rrequirements.txt']
14:40:37 O: env: {'_': '/usr/bin/tox', 'LOGNAME': 'ubuntu', 'no_proxy': '0.0.0.0,127.0.0.1,localhost,launchpad.net,ubuntu.com,canonical.com,dashboard.snapcraft.io,dashboard.staging.snapcraft.io', 'SSH_CONNECTION': '10.30.97.1 59316 10.30.97.224 22', 'USER': 'ubuntu', 'PATH': '/workspace/loggerhead/loggerhead/work/.tox/py35/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'OLDPWD': '/home/ubuntu', 'MAIL': '/var/mail/ubuntu', 'http_proxy': 'http://squid.internal:3128/', 'VIRTUALENV_PIP': '20.3.4', 'XDG_RUNTIME_DIR': '/run/user/1000', 'HTTPS_PROXY': 'http://squid.internal:3128/', 'PYTHONHASHSEED': '102812890', 'SSH_CLIENT': '10.30.97.1 59316 22', 'https_proxy': 'http://squid.internal:3128/', 'BRZ_PLUGIN_PATH': '-user:-site', 'XDG_SESSION_ID': 'c3', 'LANG': 'en_US.UTF-8', 'NO_PROXY': '0.0.0.0,127.0.0.1,localhost,launchpad.net,ubuntu.com,canonical.com,dashboard.snapcraft.io,dashboard.staging.snapcraft.io', 'BRZ_PLUGINS_AT': 'loggerhead@/workspace/loggerhead/loggerhead/work', 'VIRTUALENV_DOWNLOAD': '0', 'HOME': '/home/ubuntu', 'SHELL': '/bin/bash', 'PWD': '/workspace/loggerhead/loggerhead/work', 'SHLVL': '1', 'VIRTUAL_ENV': '/workspace/loggerhead/loggerhead/work/.tox/py35', 'HTTP_PROXY': 'http://squid.internal:3128/'}
14:40:37 O:
14:40:37 O: Collecting https://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-5.2.tar.gz (from -r requirements.txt (line 7))
14:40:37 O: Downloading https://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-5.2.tar.gz (96kB)
14:40:37 O: Requirement already satisfied (use --upgrade to upgrade): setuptools in ./.tox/py35/lib/python3.5/site-packages (from -r requirements.txt (line 1))
14:40:37 O: Collecting Paste>=1.6 (from -r requirements.txt (line 2))
14:40:37 O: Downloading https://files.pythonhosted.org/packages/7a/b0/ca8825989b9c6203f36f80fef31be5144df3ff3461efec3f34615b6a7f99/Paste-3.5.0-py2.py3-none-any.whl (593kB)
14:40:37 O: Collecting dulwich (from -r requirements.txt (line 3))
14:40:37 O: Downloading https://files.pythonhosted.org/packages/c7/f0/04e7aae32c5c45666fa94fa146ba3a6f78d44ed9fd11f3fc497bd6a3d13e/dulwich-0.20.26.tar.gz (416kB)
14:40:37 O: Complete output from command python setup.py egg_info:
14:40:37 O: Traceback (most recent call last):
14:40:37 O: File "<string>", line 1, in <module>
14:40:37 O: File "/tmp/pip-build-2uby56gq/dulwich/setup.py", line 22, in <module>
14:40:37 O: 'Dulwich only supports Python 3.6 and later. '
14:40:37 O: Exception: ...

Read more...

Revision history for this message
Jelmer Vernooij (jelmer) wrote :

Updated for Python 3.5, hopefully.

Revision history for this message
Otto Co-Pilot (otto-copilot) wrote :
Revision history for this message
Colin Watson (cjwatson) wrote :

Reproducible using tox in a xenial container: https://paste.ubuntu.com/p/VfCxT6XSgV/

Some other things apparently need pinning as well. I think it makes sense to do this in requirements.txt rather than setup.py: https://paste.ubuntu.com/p/Q6HRkCxdbz/

Revision history for this message
Jelmer Vernooij (jelmer) wrote :

Thanks! I can confirm that it works with those changes - I've imported them in the branch and retried with a clean xenial chroot (rather than python3.5 and whatever libraries were already present on my machine).

Can we try again? Thanks for your patience.

lp:~jelmer/loggerhead/drop-python3 updated
520. By Colin Watson

Drop support for Python < 3 and Breezy < 3.1.

Merged from https://code.launchpad.net/~jelmer/loggerhead/drop-python3/+merge/411875

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.travis.yml'
--- .travis.yml 2020-07-08 17:14:19 +0000
+++ .travis.yml 2022-02-23 19:35:55 +0000
@@ -9,8 +9,6 @@
99
10matrix:10matrix:
11 include:11 include:
12 - python: 2.7
13 env: TAL_VERSION=4.3
14 - python: 3.512 - python: 3.5
15 env: TAL_VERSION=5.213 env: TAL_VERSION=5.2
16 - python: 3.614 - python: 3.6
1715
=== modified file 'loggerhead.wsgi'
--- loggerhead.wsgi 2020-06-04 20:28:15 +0000
+++ loggerhead.wsgi 2022-02-23 19:35:55 +0000
@@ -24,7 +24,6 @@
24from loggerhead.apps.error import ErrorHandlerApp24from loggerhead.apps.error import ErrorHandlerApp
25from loggerhead.config import LoggerheadConfig25from loggerhead.config import LoggerheadConfig
26from breezy import config as bzrconfig26from breezy import config as bzrconfig
27from breezy.sixish import PY3
28from paste.deploy.config import PrefixMiddleware27from paste.deploy.config import PrefixMiddleware
29from breezy.plugin import load_plugins28from breezy.plugin import load_plugins
3029
@@ -46,9 +45,8 @@
46 ' %(user)s with http_root_dir set to the base directory you want'45 ' %(user)s with http_root_dir set to the base directory you want'
47 ' to serve bazaar repositories from' %46 ' to serve bazaar repositories from' %
48 {'user': pwd.getpwuid(os.geteuid()).pw_name})47 {'user': pwd.getpwuid(os.geteuid()).pw_name})
49if not PY3:48prefix = prefix.encode('utf-8', 'ignore')
50 prefix = prefix.encode('utf-8', 'ignore')49root_dir = root_dir.encode('utf-8', 'ignore')
51 root_dir = root_dir.encode('utf-8', 'ignore')
52app = BranchesFromTransportRoot(root_dir, config)50app = BranchesFromTransportRoot(root_dir, config)
53app = PrefixMiddleware(app, prefix=prefix)51app = PrefixMiddleware(app, prefix=prefix)
54app = HTTPExceptionHandler(app)52app = HTTPExceptionHandler(app)
5553
=== modified file 'loggerhead/__init__.py'
--- loggerhead/__init__.py 2018-10-20 16:33:25 +0000
+++ loggerhead/__init__.py 2022-02-23 19:35:55 +0000
@@ -24,7 +24,7 @@
2424
25__version__ = '1.20.0' # Keep in sync with ../__init__.py.25__version__ = '1.20.0' # Keep in sync with ../__init__.py.
26__revision__ = None26__revision__ = None
27required_breezy = (3, 0)27required_breezy = (3, 1)
2828
29pkg_resources.get_distribution('Paste>=1.6')29pkg_resources.get_distribution('Paste>=1.6')
30try:30try:
3131
=== modified file 'loggerhead/changecache.py'
--- loggerhead/changecache.py 2021-07-28 14:57:50 +0000
+++ loggerhead/changecache.py 2022-02-23 19:35:55 +0000
@@ -26,19 +26,13 @@
26cached a change, it's good forever.26cached a change, it's good forever.
27"""27"""
2828
29try:29import pickle
30 import cPickle as pickle
31except ImportError: # Python >= 3
32 import pickle
33import marshal30import marshal
34import os31import os
35import tempfile32import tempfile
36import zlib33import zlib
3734
38try:35from sqlite3 import dbapi2
39 from sqlite3 import dbapi2
40except ImportError:
41 from pysqlite2 import dbapi2
4236
43# We take an optimistic approach to concurrency here: we might do work twice37# We take an optimistic approach to concurrency here: we might do work twice
44# in the case of races, but not crash or corrupt data.38# in the case of races, but not crash or corrupt data.
4539
=== modified file 'loggerhead/controllers/filediff_ui.py'
--- loggerhead/controllers/filediff_ui.py 2020-01-19 20:09:08 +0000
+++ loggerhead/controllers/filediff_ui.py 2022-02-23 19:35:55 +0000
@@ -5,17 +5,7 @@
5 errors,5 errors,
6 urlutils,6 urlutils,
7 )7 )
8try:8from breezy.tree import find_previous_path
9 from breezy.tree import find_previous_path
10except ImportError: # breezy < 3.1
11 def find_previous_path(from_tree, to_tree, path):
12 file_id = from_tree.path2id(path)
13 if file_id is None:
14 raise errors.NoSuchFile(path)
15 try:
16 return to_tree.id2path(file_id)
17 except errors.NoSuchId:
18 return None
199
20from .. import util10from .. import util
21from ..controllers import TemplatedBranchView11from ..controllers import TemplatedBranchView
2212
=== modified file 'loggerhead/controllers/view_ui.py'
--- loggerhead/controllers/view_ui.py 2020-07-09 08:50:19 +0000
+++ loggerhead/controllers/view_ui.py 2022-02-23 19:35:55 +0000
@@ -50,7 +50,7 @@
50 template_name = 'view'50 template_name = 'view'
5151
52 def tree_for(self, path, revid):52 def tree_for(self, path, revid):
53 if not isinstance(path, util.text_type):53 if not isinstance(path, str):
54 raise TypeError(path)54 raise TypeError(path)
55 if not isinstance(revid, bytes):55 if not isinstance(revid, bytes):
56 raise TypeError(revid)56 raise TypeError(revid)
5757
=== modified file 'loggerhead/highlight.py'
--- loggerhead/highlight.py 2020-05-06 19:06:44 +0000
+++ loggerhead/highlight.py 2022-02-23 19:35:55 +0000
@@ -17,10 +17,7 @@
17#17#
1818
19import breezy.osutils19import breezy.osutils
20try:20from html import escape
21 from html import escape
22except ImportError:
23 from cgi import escape
2421
25from pygments import highlight as _highlight_func22from pygments import highlight as _highlight_func
26from pygments.lexers import guess_lexer, guess_lexer_for_filename, TextLexer23from pygments.lexers import guess_lexer, guess_lexer_for_filename, TextLexer
2724
=== modified file 'loggerhead/history.py'
--- loggerhead/history.py 2020-07-08 16:33:07 +0000
+++ loggerhead/history.py 2022-02-23 19:35:55 +0000
@@ -465,7 +465,7 @@
465 # if a "revid" is actually a dotted revno, convert it to a revid465 # if a "revid" is actually a dotted revno, convert it to a revid
466 if revid is None:466 if revid is None:
467 return revid467 return revid
468 if not isinstance(revid, (str, util.text_type)):468 if not isinstance(revid, str):
469 raise TypeError(revid)469 raise TypeError(revid)
470 if revid == 'head:':470 if revid == 'head:':
471 return self.last_revid471 return self.last_revid
472472
=== modified file 'loggerhead/load_test.py'
--- loggerhead/load_test.py 2022-02-23 19:35:55 +0000
+++ loggerhead/load_test.py 2022-02-23 19:35:55 +0000
@@ -65,10 +65,7 @@
6565
66import threading66import threading
67import time67import time
68try:68from queue import Queue, Empty
69 from queue import Queue, Empty
70except ImportError: # Python < 3
71 from Queue import Queue, Empty
7269
73import json70import json
7471
7572
=== modified file 'loggerhead/lsprof.py'
--- loggerhead/lsprof.py 2018-10-20 12:15:22 +0000
+++ loggerhead/lsprof.py 2022-02-23 19:35:55 +0000
@@ -6,10 +6,7 @@
6# instead of just the Stats object6# instead of just the Stats object
77
8import sys8import sys
9try:9from threading import get_ident
10 from threading import get_ident
11except ImportError: # python < 3
12 from thread import get_ident
13import threading10import threading
14from _lsprof import Profiler, profiler_entry11from _lsprof import Profiler, profiler_entry
1512
1613
=== modified file 'loggerhead/main.py'
--- loggerhead/main.py 2020-01-19 20:09:08 +0000
+++ loggerhead/main.py 2022-02-23 19:35:55 +0000
@@ -22,10 +22,7 @@
22import sys22import sys
2323
24from breezy.plugin import load_plugins24from breezy.plugin import load_plugins
25try:25from breezy.location import location_to_url
26 from breezy.location import location_to_url
27except ImportError: # Breezy < 3.1
28 from breezy.transport import location_to_url
2926
30from paste import httpserver27from paste import httpserver
31from paste.httpexceptions import HTTPExceptionHandler, HTTPInternalServerError28from paste.httpexceptions import HTTPExceptionHandler, HTTPInternalServerError
3229
=== modified file 'loggerhead/tests/test_load_test.py'
--- loggerhead/tests/test_load_test.py 2018-10-20 12:15:22 +0000
+++ loggerhead/tests/test_load_test.py 2022-02-23 19:35:55 +0000
@@ -15,10 +15,7 @@
15import socket15import socket
16import time16import time
17import threading17import threading
18try:18from queue import Empty
19 from queue import Empty
20except ImportError: # Python < 3
21 from Queue import Empty
2219
23from breezy import tests20from breezy import tests
24from breezy.tests import http_server21from breezy.tests import http_server
2522
=== modified file 'loggerhead/tests/test_simple.py'
--- loggerhead/tests/test_simple.py 2020-07-08 17:14:19 +0000
+++ loggerhead/tests/test_simple.py 2022-02-23 19:35:55 +0000
@@ -17,20 +17,14 @@
1717
18from __future__ import absolute_import18from __future__ import absolute_import
1919
20try:20from html import escape
21 from html import escape
22except ImportError:
23 from cgi import escape
24import json21import json
25import logging22import logging
26import re23import re
27from io import BytesIO24from io import BytesIO
2825
29from breezy.tests import TestCaseWithTransport26from breezy.tests import TestCaseWithTransport
30try:27from configobj import ConfigObj
31 from breezy.util.configobj.configobj import ConfigObj
32except ImportError:
33 from configobj import ConfigObj
34from breezy import config28from breezy import config
3529
36from ..apps.branch import BranchWSGIApp30from ..apps.branch import BranchWSGIApp
3731
=== modified file 'loggerhead/util.py'
--- loggerhead/util.py 2020-07-08 17:14:19 +0000
+++ loggerhead/util.py 2022-02-23 19:35:55 +0000
@@ -32,10 +32,7 @@
32import os32import os
33import subprocess33import subprocess
3434
35try:35from xml.etree import ElementTree as ET
36 from xml.etree import ElementTree as ET
37except ImportError:
38 from elementtree import ElementTree as ET
3936
40from breezy import urlutils37from breezy import urlutils
4138
@@ -277,7 +274,7 @@
277 except UnicodeDecodeError:274 except UnicodeDecodeError:
278 s = s.decode('iso-8859-15')275 s = s.decode('iso-8859-15')
279 return s276 return s
280 elif isinstance(s, text_type):277 elif isinstance(s, str):
281 return s278 return s
282 else:279 else:
283 return repr(s)280 return repr(s)
@@ -288,7 +285,7 @@
288 expand tabs and turn spaces into "non-breaking spaces", so browsers won't285 expand tabs and turn spaces into "non-breaking spaces", so browsers won't
289 chop up the string.286 chop up the string.
290 """287 """
291 if not isinstance(s, text_type):288 if not isinstance(s, str):
292 # this kinda sucks. file contents are just binary data, and no289 # this kinda sucks. file contents are just binary data, and no
293 # encoding metadata is stored, so we need to guess. this is probably290 # encoding metadata is stored, so we need to guess. this is probably
294 # okay for most code, but for people using things like KOI-8, this291 # okay for most code, but for people using things like KOI-8, this
@@ -675,9 +672,3 @@
675 elif isinstance(obj, datetime.datetime):672 elif isinstance(obj, datetime.datetime):
676 return tuple(obj.utctimetuple())673 return tuple(obj.utctimetuple())
677 raise TypeError(repr(obj) + " is not JSON serializable")674 raise TypeError(repr(obj) + " is not JSON serializable")
678
679
680if sys.version_info[0] > 2:
681 text_type = str
682else:
683 text_type = unicode # noqa: F821
684675
=== modified file 'requirements.txt'
--- requirements.txt 2021-07-28 12:28:09 +0000
+++ requirements.txt 2022-02-23 19:35:55 +0000
@@ -1,12 +1,11 @@
1setuptools < 45; python_version < "3"1setuptools
2packaging < 21.0; python_version < "3.6"
3Paste >= 1.62Paste >= 1.6
4dulwich < 0.20; python_version < "3"3dulwich; python_version > "3.5"
5dulwich; python_version >= "3"4dulwich <= 0.20.25; python_version <= "3.5"
6testtools < 2.5.0; python_version < "3"5testtools
7testtools; python_version >= "3"6breezy >= 3.1; python_version > "3.5"
8breezy < 3.2; python_version < "3.6"7breezy >= 3.1, < 3.2; python_version <= "3.5"
9breezy ; python_version >= "3.6"8bleach; python_version > "3.5"
10bleach9bleach < 4.0.0; python_version <= "3.5"
11https://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-4.3.tar.gz; python_version < "3"10packaging < 21.0; python_version <= "3.5"
12https://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-5.2.tar.gz; python_version >= "3"11https://www.owlfish.com/software/simpleTAL/downloads/SimpleTAL-5.2.tar.gz
1312
=== modified file 'setup.py'
--- setup.py 2020-07-08 17:14:19 +0000
+++ setup.py 2022-02-23 19:35:55 +0000
@@ -28,34 +28,38 @@
2828
2929
30setup(30setup(
31 name = "loggerhead",31 name="loggerhead",
32 version = loggerhead.__version__,32 version=loggerhead.__version__,
33 description = "Loggerhead is a web viewer for projects in bazaar",33 description="Loggerhead is a web viewer for projects in bazaar",
34 long_description=long_description,34 long_description=long_description,
35 long_description_content_type="text/x-rst",35 long_description_content_type="text/x-rst",
36 license = "GNU GPL v2 or later",36 license="GNU GPL v2 or later",
37 maintainer = "Michael Hudson",37 maintainer="Michael Hudson",
38 maintainer_email = "michael.hudson@canonical.com",38 maintainer_email="michael.hudson@canonical.com",
39 scripts = [39 scripts=[
40 "loggerhead-serve",40 "loggerhead-serve",
41 ],41 ],
42 packages = ["loggerhead",42 packages=["loggerhead",
43 "loggerhead/apps",43 "loggerhead/apps",
44 "loggerhead/controllers",44 "loggerhead/controllers",
45 "loggerhead/middleware",45 "loggerhead/middleware",
46 "loggerhead/templates",46 "loggerhead/templates",
47 "breezy.plugins.loggerhead"],47 "breezy.plugins.loggerhead"],
48 package_dir={'breezy.plugins.loggerhead':'.'},48 package_dir={'breezy.plugins.loggerhead': '.'},
49 package_data = {"loggerhead": ["templates/*.pt",49 package_data={"loggerhead": ["templates/*.pt",
50 "static/css/*.css",50 "static/css/*.css",
51 "static/javascript/*.js",51 "static/javascript/*.js",
52 "static/images/*"]},52 "static/images/*"]},
53 data_files = [53 data_files=[
54 ('share/man/man1', ['loggerhead-serve.1']),54 ('share/man/man1', ['loggerhead-serve.1']),
55 ('share/doc/loggerhead', ['apache-loggerhead.conf',55 ('share/doc/loggerhead', ['apache-loggerhead.conf',
56 'loggerheadd',56 'loggerheadd',
57 'breezy.conf']),57 'breezy.conf']),
58 ],58 ],
59 install_requires=['paste', 'bleach'],59 install_requires=[
60 'paste',
61 'bleach',
62 'breezy>=3.1',
63 ],
60 testsuite='loggerhead.tests.test_suite',64 testsuite='loggerhead.tests.test_suite',
61 )65 )
6266
=== removed directory 'tox-scripts'
=== removed file 'tox-scripts/py27-install'
=== modified file 'tox.ini'
--- tox.ini 2022-02-23 19:35:55 +0000
+++ tox.ini 2022-02-23 19:35:55 +0000
@@ -1,15 +1,12 @@
1[tox]1[tox]
2envlist = py27,py36,py37,py38,py392envlist = py35,py36,py37,py38,py39,py310
3skipsdist=True3skipsdist=True
44
5[testenv]5[testenv]
6deps = -rrequirements.txt6deps = -rrequirements.txt
7commands = brz selftest -v breezy.plugins.loggerhead --strict7commands = brz selftest -v breezy.plugins.loggerhead --strict
8setenv =8setenv =
9 py27,py35: VIRTUALENV_DOWNLOAD = 09 py35: VIRTUALENV_DOWNLOAD = 0
10 py27,py35: VIRTUALENV_PIP = 20.3.410 py35: VIRTUALENV_PIP = 20.3.4
11 BRZ_PLUGIN_PATH=-user:-site11 BRZ_PLUGIN_PATH=-user:-site
12 BRZ_PLUGINS_AT = loggerhead@{toxinidir}12 BRZ_PLUGINS_AT = loggerhead@{toxinidir}
13
14[testenv:py27]
15install_command = {toxinidir}/tox-scripts/py27-install {opts} {packages}

Subscribers

People subscribed via source and target branches