devpi-builder 6.0.0__tar.gz → 7.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/.github/workflows/tests.yml +13 -3
- devpi_builder-7.0.0/.python-version +1 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/CHANGELOG.rst +34 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/PKG-INFO +58 -5
- devpi_builder-7.0.0/core-requirements.txt +8 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder/cli.py +4 -3
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder/requirements.py +16 -13
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder/wheeler.py +10 -3
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder.egg-info/PKG-INFO +58 -5
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder.egg-info/SOURCES.txt +3 -1
- devpi_builder-7.0.0/devpi_builder.egg-info/requires.txt +8 -0
- devpi_builder-7.0.0/pyproject.toml +8 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/requirements.in +2 -1
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/requirements.txt +116 -111
- devpi_builder-7.0.0/setup.cfg +4 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/setup.py +3 -6
- devpi_builder-7.0.0/tests/fixture/sample_vcs.txt +3 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/test_cli.py +22 -13
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/test_requirements.py +10 -1
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/test_wheeler.py +12 -2
- devpi-builder-6.0.0/core-requirements.txt +0 -7
- devpi-builder-6.0.0/devpi_builder.egg-info/requires.txt +0 -7
- devpi-builder-6.0.0/setup.cfg +0 -10
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/.coveragerc +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/.github/workflows/publish.yml +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/.gitignore +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/.pyup.yml +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/COPYING +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/MANIFEST.in +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/README.rst +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder/__init__.py +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder.egg-info/dependency_links.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder.egg-info/entry_points.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/devpi_builder.egg-info/top_level.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/non-ascii_package/dist/non-ascii-package-0.1.dev1.tar.gz +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/non-ascii_package/setup.cfg +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/non-ascii_package/setup.py +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/non-pure_package/dist/test_package-0.1.dev1-cp27-none-linux_x86_64.whl +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/non-pure_package/setup.cfg +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/non-pure_package/setup.py +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/pure_package/dist/test_package-0.1.dev1-py2.py3-none-any.whl +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/pure_package/setup.cfg +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/pure_package/setup.py +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/pure_package/test_package/__init__.py +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_blacklist.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_comments.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_continue_on_failed.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_different_styles.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_inexact_version.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_junit.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_multiple_versions.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_multiple_versions_on_line.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_no_version.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_non-ascii.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_pure_and_non-pure.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_simple.txt +0 -0
- {devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_test_package.txt +0 -0
|
@@ -10,8 +10,9 @@ jobs:
|
|
|
10
10
|
test:
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
strategy:
|
|
13
|
+
fail-fast: false
|
|
13
14
|
matrix:
|
|
14
|
-
python-version: ['3.
|
|
15
|
+
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
|
|
15
16
|
steps:
|
|
16
17
|
- uses: actions/checkout@v3
|
|
17
18
|
- name: Set up Python ${{ matrix.python-version }}
|
|
@@ -21,16 +22,25 @@ jobs:
|
|
|
21
22
|
- name: Install dependencies
|
|
22
23
|
run: |
|
|
23
24
|
python -m pip install --upgrade pip
|
|
25
|
+
# requirements.txt omits setuptools (pip-compile); setuptools<82 needed for pkg_resources (devpi-server)
|
|
26
|
+
python -m pip install 'setuptools<82'
|
|
24
27
|
python -m pip install -r requirements.txt
|
|
25
28
|
python -m pip install --no-deps -e .
|
|
26
|
-
python
|
|
29
|
+
if [ "${{ matrix.python-version }}" != "3.13" ]; then # workaround for TheKevJames/coveralls-python#523
|
|
30
|
+
python -m pip install coveralls
|
|
31
|
+
fi
|
|
27
32
|
python -m pip freeze
|
|
28
33
|
python -m pip --version
|
|
29
34
|
python -c 'import setuptools; print(f"setuptools=={setuptools.__version__}")'
|
|
30
35
|
- name: Test with pytest
|
|
31
36
|
run: |
|
|
32
|
-
|
|
37
|
+
if [ "${{ matrix.python-version }}" == "3.13" ]; then
|
|
38
|
+
pytest --no-cov # workaround for TheKevJames/coveralls-python#523
|
|
39
|
+
else
|
|
40
|
+
pytest
|
|
41
|
+
fi
|
|
33
42
|
- name: Upload coverage data
|
|
43
|
+
if: matrix.python-version != '3.13' # workaround for TheKevJames/coveralls-python#523
|
|
34
44
|
run: |
|
|
35
45
|
coveralls --service=github
|
|
36
46
|
env:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.9
|
|
@@ -5,6 +5,40 @@ Changelog
|
|
|
5
5
|
This lists the most important changes for each release.
|
|
6
6
|
|
|
7
7
|
|
|
8
|
+
Version 7.0.0 - 2026-02-16
|
|
9
|
+
==========================
|
|
10
|
+
|
|
11
|
+
Added
|
|
12
|
+
-----
|
|
13
|
+
|
|
14
|
+
* Support for Python 3.12 and 3.13.
|
|
15
|
+
* Compatibility with junit-xml >= 2.0.
|
|
16
|
+
|
|
17
|
+
Fixed
|
|
18
|
+
-----
|
|
19
|
+
|
|
20
|
+
* Ensure Setuptools and ``wheel-filename`` are installed in compatible versions.
|
|
21
|
+
|
|
22
|
+
Removed
|
|
23
|
+
-------
|
|
24
|
+
|
|
25
|
+
* Python 3.6 to 3.8 are no longer supported. They likely still works but we will no longer run CI against it.
|
|
26
|
+
* Compatibility with junit-xml < 1.9. Junit-xml 1.9 was released more than three years ago.
|
|
27
|
+
|
|
28
|
+
Version 6.1.0 — 2023-09-22
|
|
29
|
+
==========================
|
|
30
|
+
|
|
31
|
+
Added
|
|
32
|
+
-----
|
|
33
|
+
|
|
34
|
+
* Support using VCS URLs in requirements files.
|
|
35
|
+
|
|
36
|
+
Fixed
|
|
37
|
+
-----
|
|
38
|
+
|
|
39
|
+
* Building wheels for packages like ``zope-event`` that normalise the project name using dots instead of underscores is no longer broken.
|
|
40
|
+
|
|
41
|
+
|
|
8
42
|
Version 6.0.0 — 2023-06-09
|
|
9
43
|
==========================
|
|
10
44
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: devpi-builder
|
|
3
|
-
Version:
|
|
3
|
+
Version: 7.0.0
|
|
4
4
|
Summary: Devpi-builder takes a requirements.txt and incrementally fills a devpi index with wheels of the listed python packages.
|
|
5
5
|
Home-page: https://github.com/blue-yonder/devpi-builder
|
|
6
6
|
Author: Matthias Bach
|
|
@@ -13,14 +13,33 @@ Classifier: Intended Audience :: System Administrators
|
|
|
13
13
|
Classifier: License :: OSI Approved :: BSD License
|
|
14
14
|
Classifier: Topic :: System :: Archiving :: Packaging
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
18
16
|
Classifier: Programming Language :: Python :: 3.9
|
|
19
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
-
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Requires-Python: >=3.9
|
|
22
22
|
Description-Content-Type: text/x-rst
|
|
23
23
|
License-File: COPYING
|
|
24
|
+
Requires-Dist: devpi-plumber>=0.2.14
|
|
25
|
+
Requires-Dist: setuptools<82
|
|
26
|
+
Requires-Dist: wheel
|
|
27
|
+
Requires-Dist: wheel-filename<2
|
|
28
|
+
Requires-Dist: wheel-inspect>=1.6.0
|
|
29
|
+
Requires-Dist: pip>=1.5.3
|
|
30
|
+
Requires-Dist: junit-xml>=1.9
|
|
31
|
+
Requires-Dist: pip-requirements-parser>=32.0.1
|
|
32
|
+
Dynamic: author
|
|
33
|
+
Dynamic: author-email
|
|
34
|
+
Dynamic: classifier
|
|
35
|
+
Dynamic: description
|
|
36
|
+
Dynamic: description-content-type
|
|
37
|
+
Dynamic: home-page
|
|
38
|
+
Dynamic: license
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
Dynamic: requires-dist
|
|
41
|
+
Dynamic: requires-python
|
|
42
|
+
Dynamic: summary
|
|
24
43
|
|
|
25
44
|
=========================
|
|
26
45
|
Brandon the Devpi Builder
|
|
@@ -129,6 +148,40 @@ Changelog
|
|
|
129
148
|
This lists the most important changes for each release.
|
|
130
149
|
|
|
131
150
|
|
|
151
|
+
Version 7.0.0 - 2026-02-16
|
|
152
|
+
==========================
|
|
153
|
+
|
|
154
|
+
Added
|
|
155
|
+
-----
|
|
156
|
+
|
|
157
|
+
* Support for Python 3.12 and 3.13.
|
|
158
|
+
* Compatibility with junit-xml >= 2.0.
|
|
159
|
+
|
|
160
|
+
Fixed
|
|
161
|
+
-----
|
|
162
|
+
|
|
163
|
+
* Ensure Setuptools and ``wheel-filename`` are installed in compatible versions.
|
|
164
|
+
|
|
165
|
+
Removed
|
|
166
|
+
-------
|
|
167
|
+
|
|
168
|
+
* Python 3.6 to 3.8 are no longer supported. They likely still works but we will no longer run CI against it.
|
|
169
|
+
* Compatibility with junit-xml < 1.9. Junit-xml 1.9 was released more than three years ago.
|
|
170
|
+
|
|
171
|
+
Version 6.1.0 — 2023-09-22
|
|
172
|
+
==========================
|
|
173
|
+
|
|
174
|
+
Added
|
|
175
|
+
-----
|
|
176
|
+
|
|
177
|
+
* Support using VCS URLs in requirements files.
|
|
178
|
+
|
|
179
|
+
Fixed
|
|
180
|
+
-----
|
|
181
|
+
|
|
182
|
+
* Building wheels for packages like ``zope-event`` that normalise the project name using dots instead of underscores is no longer broken.
|
|
183
|
+
|
|
184
|
+
|
|
132
185
|
Version 6.0.0 — 2023-06-09
|
|
133
186
|
==========================
|
|
134
187
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
devpi-plumber>=0.2.14
|
|
2
|
+
setuptools<82 # setuptools 82 drops pkg_resources
|
|
3
|
+
wheel
|
|
4
|
+
wheel-filename<2 # wheel-filename 2 breaks imports of InvalidFilenameError, parse_wheel_filename
|
|
5
|
+
wheel-inspect>=1.6.0
|
|
6
|
+
pip>=1.5.3
|
|
7
|
+
junit-xml>=1.9 # First version to support to_xml_report_file
|
|
8
|
+
pip-requirements-parser>=32.0.1
|
|
@@ -11,7 +11,7 @@ import locale
|
|
|
11
11
|
import logging
|
|
12
12
|
import os
|
|
13
13
|
|
|
14
|
-
from junit_xml import TestSuite, TestCase
|
|
14
|
+
from junit_xml import TestSuite, TestCase, to_xml_report_file
|
|
15
15
|
from devpi_plumber.client import DevpiClient, DevpiClientError
|
|
16
16
|
|
|
17
17
|
from devpi_builder import requirements, wheeler
|
|
@@ -114,7 +114,8 @@ class Processor(object):
|
|
|
114
114
|
|
|
115
115
|
for package, version in packages:
|
|
116
116
|
if self._should_package_be_build(package, version):
|
|
117
|
-
|
|
117
|
+
msg = ('Building %s %s', package, version) if version else ('Building %s', package)
|
|
118
|
+
logger.info(*msg)
|
|
118
119
|
try:
|
|
119
120
|
wheel_file = self._builder(package, version)
|
|
120
121
|
self._upload_package(package, version, wheel_file)
|
|
@@ -126,7 +127,7 @@ class Processor(object):
|
|
|
126
127
|
encoding = locale.getpreferredencoding()
|
|
127
128
|
with codecs.open(self._junit_xml, 'w', encoding) as output:
|
|
128
129
|
test_suite = TestSuite('devpi-builder results', self._results)
|
|
129
|
-
|
|
130
|
+
to_xml_report_file(output, [test_suite], encoding=encoding)
|
|
130
131
|
|
|
131
132
|
|
|
132
133
|
def main(args=None):
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
Functionality for reading specifications of required packages.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import pip_requirements_parser
|
|
7
8
|
import pkg_resources
|
|
8
9
|
|
|
9
10
|
|
|
@@ -14,23 +15,25 @@ def _extract_project_version(requirement):
|
|
|
14
15
|
:param requirement: A pkg_config Requirement
|
|
15
16
|
:return: Pair of project_name and version
|
|
16
17
|
"""
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return requirement.project_name, spec[1]
|
|
22
|
-
else:
|
|
23
|
-
raise ValueError('Versions must be specified exactly. "{}" is not an exact version specification.'.format(requirement))
|
|
24
|
-
elif len(specs) > 1:
|
|
25
|
-
raise ValueError('Multiple version specifications on a single line are not supported.')
|
|
18
|
+
if requirement.is_vcs_url:
|
|
19
|
+
return requirement.line, None
|
|
20
|
+
if not requirement.specifier:
|
|
21
|
+
raise ValueError('Version specification is missing for "{}".'.format(requirement.line))
|
|
26
22
|
else:
|
|
27
|
-
|
|
23
|
+
if len(requirement.specifier) == 1 and requirement.is_pinned:
|
|
24
|
+
return requirement.name, requirement.get_pinned_version
|
|
25
|
+
elif len(requirement.specifier) == 1 and not requirement.is_pinned:
|
|
26
|
+
raise ValueError('Versions must be specified exactly. "{}" is not an exact version specification.'.format(requirement.line))
|
|
27
|
+
elif len(requirement.specifier) > 1:
|
|
28
|
+
raise ValueError('Multiple version specifications on a single line are not supported.')
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
def read_raw(filename):
|
|
31
32
|
if filename:
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
rf = pip_requirements_parser.RequirementsFile.from_file(filename)
|
|
34
|
+
if rf.invalid_lines:
|
|
35
|
+
raise ValueError("There are invalid lines in requirements file: \n", "\n".join(line.dumps() for line in rf.invalid_lines))
|
|
36
|
+
return rf.requirements
|
|
34
37
|
else:
|
|
35
38
|
return []
|
|
36
39
|
|
|
@@ -61,7 +64,7 @@ def matched_by_list(package, version, requirements):
|
|
|
61
64
|
version = pkg_resources.safe_version('{}'.format(version))
|
|
62
65
|
package = pkg_resources.safe_name(package)
|
|
63
66
|
matches = (
|
|
64
|
-
package.lower() == requirement.
|
|
67
|
+
package.lower() == pkg_resources.safe_name(requirement.name) and (requirement.specifier.contains(version) if requirement.specifier else 1)
|
|
65
68
|
for requirement in requirements
|
|
66
69
|
)
|
|
67
70
|
return any(matches)
|
|
@@ -19,6 +19,7 @@ from wheel_inspect.classes import WheelFile
|
|
|
19
19
|
|
|
20
20
|
class BuildError(Exception):
|
|
21
21
|
def __init__(self, package, version, root_exception=None):
|
|
22
|
+
version = version or ""
|
|
22
23
|
super(BuildError, self).__init__('Failed to create wheel for {} {}:\n{}\nOutput:\n{}'.format(
|
|
23
24
|
package,
|
|
24
25
|
version,
|
|
@@ -40,6 +41,10 @@ class Builder(object):
|
|
|
40
41
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
41
42
|
shutil.rmtree(self.scratch_dir)
|
|
42
43
|
|
|
44
|
+
@staticmethod
|
|
45
|
+
def _standardize_package_name(name):
|
|
46
|
+
return name.replace(".", "-")
|
|
47
|
+
|
|
43
48
|
def _matches_requirement(self, requirement, wheels):
|
|
44
49
|
"""
|
|
45
50
|
List wheels matching a requirement.
|
|
@@ -52,7 +57,7 @@ class Builder(object):
|
|
|
52
57
|
matching = []
|
|
53
58
|
for wheel in wheels:
|
|
54
59
|
w = wheel.parsed_filename
|
|
55
|
-
dist = Distribution(project_name=w.project, version=w.version)
|
|
60
|
+
dist = Distribution(project_name=self._standardize_package_name(w.project), version=w.version)
|
|
56
61
|
if dist in req:
|
|
57
62
|
matching.append(wheel.path)
|
|
58
63
|
return matching
|
|
@@ -63,7 +68,9 @@ class Builder(object):
|
|
|
63
68
|
Find a wheel with the given name and version
|
|
64
69
|
"""
|
|
65
70
|
candidates = [WheelFile(filename) for filename in glob.iglob(path.join(self.wheelhouse, '*.whl'))]
|
|
66
|
-
|
|
71
|
+
name = self._standardize_package_name(name)
|
|
72
|
+
requirement = '{}=={}'.format(name, version) if version else name
|
|
73
|
+
matches = self._matches_requirement(requirement, candidates)
|
|
67
74
|
if len(matches) > 0:
|
|
68
75
|
return str(matches[0])
|
|
69
76
|
else:
|
|
@@ -81,7 +88,7 @@ class Builder(object):
|
|
|
81
88
|
subprocess.check_output([
|
|
82
89
|
'pip', 'wheel',
|
|
83
90
|
'--wheel-dir=' + self.wheelhouse,
|
|
84
|
-
'{}=={}'.format(package, version)
|
|
91
|
+
'{}=={}'.format(package, version) if version else package,
|
|
85
92
|
], stderr=subprocess.STDOUT)
|
|
86
93
|
return self._find_wheel(package, version)
|
|
87
94
|
except subprocess.CalledProcessError as e:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: devpi-builder
|
|
3
|
-
Version:
|
|
3
|
+
Version: 7.0.0
|
|
4
4
|
Summary: Devpi-builder takes a requirements.txt and incrementally fills a devpi index with wheels of the listed python packages.
|
|
5
5
|
Home-page: https://github.com/blue-yonder/devpi-builder
|
|
6
6
|
Author: Matthias Bach
|
|
@@ -13,14 +13,33 @@ Classifier: Intended Audience :: System Administrators
|
|
|
13
13
|
Classifier: License :: OSI Approved :: BSD License
|
|
14
14
|
Classifier: Topic :: System :: Archiving :: Packaging
|
|
15
15
|
Classifier: Programming Language :: Python :: 3
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
18
16
|
Classifier: Programming Language :: Python :: 3.9
|
|
19
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
20
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
-
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Requires-Python: >=3.9
|
|
22
22
|
Description-Content-Type: text/x-rst
|
|
23
23
|
License-File: COPYING
|
|
24
|
+
Requires-Dist: devpi-plumber>=0.2.14
|
|
25
|
+
Requires-Dist: setuptools<82
|
|
26
|
+
Requires-Dist: wheel
|
|
27
|
+
Requires-Dist: wheel-filename<2
|
|
28
|
+
Requires-Dist: wheel-inspect>=1.6.0
|
|
29
|
+
Requires-Dist: pip>=1.5.3
|
|
30
|
+
Requires-Dist: junit-xml>=1.9
|
|
31
|
+
Requires-Dist: pip-requirements-parser>=32.0.1
|
|
32
|
+
Dynamic: author
|
|
33
|
+
Dynamic: author-email
|
|
34
|
+
Dynamic: classifier
|
|
35
|
+
Dynamic: description
|
|
36
|
+
Dynamic: description-content-type
|
|
37
|
+
Dynamic: home-page
|
|
38
|
+
Dynamic: license
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
Dynamic: requires-dist
|
|
41
|
+
Dynamic: requires-python
|
|
42
|
+
Dynamic: summary
|
|
24
43
|
|
|
25
44
|
=========================
|
|
26
45
|
Brandon the Devpi Builder
|
|
@@ -129,6 +148,40 @@ Changelog
|
|
|
129
148
|
This lists the most important changes for each release.
|
|
130
149
|
|
|
131
150
|
|
|
151
|
+
Version 7.0.0 - 2026-02-16
|
|
152
|
+
==========================
|
|
153
|
+
|
|
154
|
+
Added
|
|
155
|
+
-----
|
|
156
|
+
|
|
157
|
+
* Support for Python 3.12 and 3.13.
|
|
158
|
+
* Compatibility with junit-xml >= 2.0.
|
|
159
|
+
|
|
160
|
+
Fixed
|
|
161
|
+
-----
|
|
162
|
+
|
|
163
|
+
* Ensure Setuptools and ``wheel-filename`` are installed in compatible versions.
|
|
164
|
+
|
|
165
|
+
Removed
|
|
166
|
+
-------
|
|
167
|
+
|
|
168
|
+
* Python 3.6 to 3.8 are no longer supported. They likely still works but we will no longer run CI against it.
|
|
169
|
+
* Compatibility with junit-xml < 1.9. Junit-xml 1.9 was released more than three years ago.
|
|
170
|
+
|
|
171
|
+
Version 6.1.0 — 2023-09-22
|
|
172
|
+
==========================
|
|
173
|
+
|
|
174
|
+
Added
|
|
175
|
+
-----
|
|
176
|
+
|
|
177
|
+
* Support using VCS URLs in requirements files.
|
|
178
|
+
|
|
179
|
+
Fixed
|
|
180
|
+
-----
|
|
181
|
+
|
|
182
|
+
* Building wheels for packages like ``zope-event`` that normalise the project name using dots instead of underscores is no longer broken.
|
|
183
|
+
|
|
184
|
+
|
|
132
185
|
Version 6.0.0 — 2023-06-09
|
|
133
186
|
==========================
|
|
134
187
|
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
.coveragerc
|
|
2
2
|
.gitignore
|
|
3
|
+
.python-version
|
|
3
4
|
.pyup.yml
|
|
4
5
|
CHANGELOG.rst
|
|
5
6
|
COPYING
|
|
6
7
|
MANIFEST.in
|
|
7
8
|
README.rst
|
|
8
9
|
core-requirements.txt
|
|
10
|
+
pyproject.toml
|
|
9
11
|
requirements.in
|
|
10
12
|
requirements.txt
|
|
11
|
-
setup.cfg
|
|
12
13
|
setup.py
|
|
13
14
|
.github/workflows/publish.yml
|
|
14
15
|
.github/workflows/tests.yml
|
|
@@ -38,6 +39,7 @@ tests/fixture/sample_non-ascii.txt
|
|
|
38
39
|
tests/fixture/sample_pure_and_non-pure.txt
|
|
39
40
|
tests/fixture/sample_simple.txt
|
|
40
41
|
tests/fixture/sample_test_package.txt
|
|
42
|
+
tests/fixture/sample_vcs.txt
|
|
41
43
|
tests/fixture/non-ascii_package/setup.cfg
|
|
42
44
|
tests/fixture/non-ascii_package/setup.py
|
|
43
45
|
tests/fixture/non-ascii_package/dist/non-ascii-package-0.1.dev1.tar.gz
|
|
@@ -1,184 +1,187 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This file is autogenerated by pip-compile with Python 3.
|
|
2
|
+
# This file is autogenerated by pip-compile with Python 3.9
|
|
3
3
|
# by the following command:
|
|
4
4
|
#
|
|
5
|
-
# pip-compile --no-emit-index-url
|
|
5
|
+
# pip-compile --no-emit-index-url --strip-extras
|
|
6
6
|
#
|
|
7
|
-
|
|
8
|
-
# via
|
|
9
|
-
|
|
10
|
-
# via aiohttp
|
|
11
|
-
argon2-cffi==21.3.0
|
|
7
|
+
anyio==4.9.0
|
|
8
|
+
# via httpx
|
|
9
|
+
argon2-cffi==23.1.0
|
|
12
10
|
# via
|
|
13
11
|
# devpi-server
|
|
14
12
|
# passlib
|
|
15
13
|
argon2-cffi-bindings==21.2.0
|
|
16
14
|
# via argon2-cffi
|
|
17
|
-
|
|
18
|
-
# via aiohttp
|
|
19
|
-
attrs==21.4.0
|
|
15
|
+
attrs==25.3.0
|
|
20
16
|
# via
|
|
21
|
-
# aiohttp
|
|
22
17
|
# devpi-server
|
|
23
|
-
#
|
|
18
|
+
# headerparser
|
|
24
19
|
# wheel-inspect
|
|
25
|
-
|
|
26
|
-
# via readme-renderer
|
|
27
|
-
build==0.8.0
|
|
28
|
-
# via check-manifest
|
|
29
|
-
certifi==2022.12.7
|
|
30
|
-
# via requests
|
|
31
|
-
cffi==1.15.0
|
|
32
|
-
# via argon2-cffi-bindings
|
|
33
|
-
charset-normalizer==2.0.12
|
|
20
|
+
build==1.2.2.post1
|
|
34
21
|
# via
|
|
35
|
-
#
|
|
22
|
+
# check-manifest
|
|
23
|
+
# devpi-client
|
|
24
|
+
certifi==2025.1.31
|
|
25
|
+
# via
|
|
26
|
+
# httpcore
|
|
27
|
+
# httpx
|
|
36
28
|
# requests
|
|
37
|
-
|
|
29
|
+
cffi==1.17.1
|
|
30
|
+
# via argon2-cffi-bindings
|
|
31
|
+
charset-normalizer==3.4.1
|
|
32
|
+
# via requests
|
|
33
|
+
check-manifest==0.50
|
|
38
34
|
# via devpi-client
|
|
39
|
-
coverage
|
|
35
|
+
coverage==7.8.0
|
|
40
36
|
# via pytest-cov
|
|
41
37
|
defusedxml==0.7.1
|
|
42
38
|
# via devpi-server
|
|
43
|
-
|
|
39
|
+
deprecated==1.2.18
|
|
40
|
+
# via headerparser
|
|
41
|
+
devpi-client==7.2.0
|
|
44
42
|
# via devpi-plumber
|
|
45
|
-
devpi-common==
|
|
43
|
+
devpi-common==4.0.4
|
|
46
44
|
# via
|
|
47
45
|
# devpi-client
|
|
48
46
|
# devpi-server
|
|
49
|
-
devpi-plumber
|
|
47
|
+
devpi-plumber==0.7.0
|
|
50
48
|
# via
|
|
51
49
|
# -r core-requirements.txt
|
|
52
50
|
# -r requirements.in
|
|
53
|
-
devpi-server==6.
|
|
51
|
+
devpi-server==6.14.0
|
|
54
52
|
# via devpi-plumber
|
|
55
|
-
|
|
56
|
-
# via virtualenv
|
|
57
|
-
docutils==0.19
|
|
53
|
+
docutils==0.21.2
|
|
58
54
|
# via readme-renderer
|
|
59
|
-
entry-points-txt==0.1
|
|
55
|
+
entry-points-txt==0.2.1
|
|
60
56
|
# via wheel-inspect
|
|
61
|
-
|
|
62
|
-
# via
|
|
63
|
-
# tox
|
|
64
|
-
# virtualenv
|
|
65
|
-
frozenlist==1.3.3
|
|
57
|
+
exceptiongroup==1.2.2
|
|
66
58
|
# via
|
|
67
|
-
#
|
|
68
|
-
#
|
|
69
|
-
|
|
59
|
+
# anyio
|
|
60
|
+
# pytest
|
|
61
|
+
h11==0.16.0
|
|
62
|
+
# via httpcore
|
|
63
|
+
headerparser==0.5.2
|
|
70
64
|
# via wheel-inspect
|
|
71
|
-
|
|
65
|
+
httpcore==1.0.9
|
|
66
|
+
# via httpx
|
|
67
|
+
httpx==0.28.1
|
|
68
|
+
# via devpi-server
|
|
69
|
+
hupper==1.12.1
|
|
72
70
|
# via pyramid
|
|
73
|
-
idna==3.
|
|
71
|
+
idna==3.10
|
|
74
72
|
# via
|
|
73
|
+
# anyio
|
|
74
|
+
# httpx
|
|
75
75
|
# requests
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
#
|
|
79
|
-
|
|
76
|
+
importlib-metadata==8.6.1
|
|
77
|
+
# via
|
|
78
|
+
# build
|
|
79
|
+
# setuptools-scm
|
|
80
|
+
iniconfig==2.1.0
|
|
81
|
+
# via
|
|
82
|
+
# devpi-client
|
|
83
|
+
# pytest
|
|
84
|
+
itsdangerous==2.2.0
|
|
80
85
|
# via devpi-server
|
|
81
86
|
junit-xml==1.9
|
|
82
87
|
# via -r core-requirements.txt
|
|
83
|
-
lazy==1.
|
|
88
|
+
lazy==1.6
|
|
84
89
|
# via
|
|
85
90
|
# devpi-common
|
|
86
91
|
# devpi-server
|
|
87
|
-
|
|
92
|
+
legacy-cgi==2.6.4
|
|
88
93
|
# via -r requirements.in
|
|
89
|
-
|
|
90
|
-
# via
|
|
91
|
-
|
|
92
|
-
#
|
|
93
|
-
packaging==
|
|
94
|
+
mock==5.2.0
|
|
95
|
+
# via -r requirements.in
|
|
96
|
+
nh3==0.2.21
|
|
97
|
+
# via readme-renderer
|
|
98
|
+
packaging==25.0
|
|
94
99
|
# via
|
|
95
100
|
# build
|
|
101
|
+
# packaging-legacy
|
|
102
|
+
# pip-requirements-parser
|
|
96
103
|
# pytest
|
|
97
104
|
# setuptools-scm
|
|
98
|
-
#
|
|
105
|
+
# wheel
|
|
99
106
|
# wheel-inspect
|
|
100
|
-
|
|
107
|
+
packaging-legacy==23.0.post0
|
|
108
|
+
# via devpi-common
|
|
109
|
+
passlib==1.7.4
|
|
101
110
|
# via devpi-server
|
|
102
|
-
pastedeploy==
|
|
111
|
+
pastedeploy==3.1.0
|
|
103
112
|
# via plaster-pastedeploy
|
|
104
|
-
|
|
105
|
-
# via
|
|
106
|
-
pkginfo==1.
|
|
113
|
+
pip-requirements-parser==32.0.1
|
|
114
|
+
# via -r core-requirements.txt
|
|
115
|
+
pkginfo==1.12.1.2
|
|
107
116
|
# via devpi-client
|
|
108
|
-
plaster==1.
|
|
117
|
+
plaster==1.1.2
|
|
109
118
|
# via
|
|
110
119
|
# plaster-pastedeploy
|
|
111
120
|
# pyramid
|
|
112
|
-
plaster-pastedeploy==0.
|
|
121
|
+
plaster-pastedeploy==1.0.1
|
|
113
122
|
# via pyramid
|
|
114
|
-
platformdirs==
|
|
115
|
-
# via
|
|
116
|
-
# devpi-server
|
|
117
|
-
# virtualenv
|
|
118
|
-
pluggy==1.0.0
|
|
123
|
+
platformdirs==4.3.7
|
|
119
124
|
# via
|
|
120
125
|
# devpi-client
|
|
121
126
|
# devpi-server
|
|
122
|
-
|
|
123
|
-
# tox
|
|
124
|
-
py==1.11.0
|
|
127
|
+
pluggy==1.5.0
|
|
125
128
|
# via
|
|
126
129
|
# devpi-client
|
|
127
|
-
# devpi-common
|
|
128
130
|
# devpi-server
|
|
129
131
|
# pytest
|
|
130
|
-
|
|
131
|
-
|
|
132
|
+
py==1.11.0
|
|
133
|
+
# via devpi-server
|
|
134
|
+
pycparser==2.22
|
|
132
135
|
# via cffi
|
|
133
|
-
pygments==2.
|
|
136
|
+
pygments==2.19.1
|
|
134
137
|
# via readme-renderer
|
|
135
|
-
pyparsing==3.
|
|
136
|
-
# via
|
|
137
|
-
|
|
138
|
+
pyparsing==3.2.3
|
|
139
|
+
# via pip-requirements-parser
|
|
140
|
+
pyproject-hooks==1.2.0
|
|
141
|
+
# via build
|
|
142
|
+
pyramid==2.0.2
|
|
138
143
|
# via devpi-server
|
|
139
|
-
pytest==
|
|
144
|
+
pytest==8.3.5
|
|
140
145
|
# via
|
|
141
146
|
# -r requirements.in
|
|
142
147
|
# pytest-cov
|
|
143
148
|
# pytest-mock
|
|
144
|
-
pytest-cov==
|
|
149
|
+
pytest-cov==6.1.1
|
|
145
150
|
# via -r requirements.in
|
|
146
|
-
pytest-mock==3.
|
|
151
|
+
pytest-mock==3.14.0
|
|
147
152
|
# via -r requirements.in
|
|
148
|
-
python-dateutil==2.
|
|
153
|
+
python-dateutil==2.9.0.post0
|
|
149
154
|
# via strictyaml
|
|
150
|
-
readme-renderer==
|
|
155
|
+
readme-renderer==44.0
|
|
151
156
|
# via wheel-inspect
|
|
152
157
|
repoze-lru==0.7
|
|
153
158
|
# via devpi-server
|
|
154
|
-
requests==2.
|
|
159
|
+
requests==2.32.4
|
|
155
160
|
# via
|
|
156
161
|
# devpi-common
|
|
157
162
|
# devpi-plumber
|
|
158
|
-
ruamel-yaml==0.
|
|
163
|
+
ruamel-yaml==0.18.10
|
|
159
164
|
# via devpi-server
|
|
160
|
-
|
|
165
|
+
ruamel-yaml-clib==0.2.12
|
|
166
|
+
# via ruamel-yaml
|
|
167
|
+
setuptools-scm==8.3.1
|
|
161
168
|
# via -r requirements.in
|
|
162
|
-
six==1.
|
|
169
|
+
six==1.17.0
|
|
163
170
|
# via
|
|
164
|
-
# bleach
|
|
165
|
-
# headerparser
|
|
166
171
|
# junit-xml
|
|
167
172
|
# python-dateutil
|
|
168
|
-
|
|
169
|
-
#
|
|
170
|
-
strictyaml==1.
|
|
173
|
+
sniffio==1.3.1
|
|
174
|
+
# via anyio
|
|
175
|
+
strictyaml==1.7.3
|
|
171
176
|
# via devpi-server
|
|
172
|
-
|
|
173
|
-
# via tox
|
|
174
|
-
tomli==2.0.1
|
|
177
|
+
tomli==2.2.1
|
|
175
178
|
# via
|
|
179
|
+
# build
|
|
176
180
|
# check-manifest
|
|
177
|
-
#
|
|
181
|
+
# coverage
|
|
182
|
+
# devpi-client
|
|
178
183
|
# pytest
|
|
179
184
|
# setuptools-scm
|
|
180
|
-
tox==3.25.0
|
|
181
|
-
# via devpi-client
|
|
182
185
|
translationstring==1.4
|
|
183
186
|
# via pyramid
|
|
184
187
|
twitter-common-contextutil==0.3.11
|
|
@@ -187,31 +190,33 @@ twitter-common-dirutil==0.3.11
|
|
|
187
190
|
# via twitter-common-contextutil
|
|
188
191
|
twitter-common-lang==0.3.11
|
|
189
192
|
# via twitter-common-dirutil
|
|
190
|
-
|
|
193
|
+
typing-extensions==4.13.2
|
|
194
|
+
# via
|
|
195
|
+
# anyio
|
|
196
|
+
# setuptools-scm
|
|
197
|
+
urllib3==2.6.3
|
|
191
198
|
# via requests
|
|
192
|
-
venusian==3.
|
|
199
|
+
venusian==3.1.1
|
|
193
200
|
# via pyramid
|
|
194
|
-
|
|
195
|
-
# via tox
|
|
196
|
-
waitress==2.1.2
|
|
201
|
+
waitress==3.0.2
|
|
197
202
|
# via devpi-server
|
|
198
|
-
|
|
199
|
-
# via bleach
|
|
200
|
-
webob==1.8.7
|
|
203
|
+
webob==1.8.9
|
|
201
204
|
# via pyramid
|
|
202
|
-
wheel==0.
|
|
205
|
+
wheel==0.46.2
|
|
203
206
|
# via -r core-requirements.txt
|
|
204
|
-
wheel-filename==1.4.
|
|
207
|
+
wheel-filename==1.4.2
|
|
205
208
|
# via
|
|
206
209
|
# -r core-requirements.txt
|
|
207
210
|
# wheel-inspect
|
|
208
|
-
wheel-inspect==1.7.
|
|
211
|
+
wheel-inspect==1.7.2
|
|
209
212
|
# via -r core-requirements.txt
|
|
210
|
-
|
|
211
|
-
# via
|
|
212
|
-
|
|
213
|
+
wrapt==1.17.2
|
|
214
|
+
# via deprecated
|
|
215
|
+
zipp==3.21.0
|
|
216
|
+
# via importlib-metadata
|
|
217
|
+
zope-deprecation==5.1
|
|
213
218
|
# via pyramid
|
|
214
|
-
zope-interface==
|
|
219
|
+
zope-interface==7.2
|
|
215
220
|
# via pyramid
|
|
216
221
|
|
|
217
222
|
# The following packages are considered to be unsafe in a requirements file:
|
|
@@ -19,10 +19,7 @@ setup(
|
|
|
19
19
|
long_description_content_type='text/x-rst',
|
|
20
20
|
license='new BSD',
|
|
21
21
|
install_requires=requirements,
|
|
22
|
-
python_requires='>=3.
|
|
23
|
-
setup_requires=[
|
|
24
|
-
'setuptools_scm',
|
|
25
|
-
],
|
|
22
|
+
python_requires='>=3.9',
|
|
26
23
|
classifiers=[
|
|
27
24
|
'Development Status :: 5 - Production/Stable',
|
|
28
25
|
'Environment :: Console',
|
|
@@ -31,11 +28,11 @@ setup(
|
|
|
31
28
|
'License :: OSI Approved :: BSD License',
|
|
32
29
|
'Topic :: System :: Archiving :: Packaging',
|
|
33
30
|
'Programming Language :: Python :: 3',
|
|
34
|
-
'Programming Language :: Python :: 3.7',
|
|
35
|
-
'Programming Language :: Python :: 3.8',
|
|
36
31
|
'Programming Language :: Python :: 3.9',
|
|
37
32
|
'Programming Language :: Python :: 3.10',
|
|
38
33
|
'Programming Language :: Python :: 3.11',
|
|
34
|
+
'Programming Language :: Python :: 3.12',
|
|
35
|
+
'Programming Language :: Python :: 3.13',
|
|
39
36
|
],
|
|
40
37
|
entry_points={
|
|
41
38
|
'console_scripts': [
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import xml.etree.ElementTree as ET
|
|
4
4
|
|
|
5
5
|
import pytest
|
|
6
|
+
import requests
|
|
6
7
|
|
|
7
8
|
from mock import patch
|
|
8
9
|
from devpi_plumber.server import TestServer
|
|
@@ -26,7 +27,7 @@ INDICES = {
|
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
@pytest.
|
|
30
|
+
@pytest.fixture()
|
|
30
31
|
def devpi():
|
|
31
32
|
with TestServer(USERS, INDICES) as _devpi:
|
|
32
33
|
yield _devpi
|
|
@@ -162,7 +163,7 @@ def _assert_junit_xml_content(junit_filename, run_id=None):
|
|
|
162
163
|
root = ET.parse(junit_filename)
|
|
163
164
|
ET.dump(root)
|
|
164
165
|
|
|
165
|
-
_assert_test_case(root, 'failure', '
|
|
166
|
+
_assert_test_case(root, 'failure', 'package_that_hopefully_not_exists 99.999' + run_id_str)
|
|
166
167
|
_assert_test_case(root, 'skipped', 'test-package 0.1.dev1' + run_id_str)
|
|
167
168
|
|
|
168
169
|
pb_elems = root.findall(".//testcase[@name='progressbar 2.2{}']".format(run_id_str))
|
|
@@ -187,20 +188,28 @@ def test_reports_junit_xml(devpi, tmpdir):
|
|
|
187
188
|
_assert_junit_xml_content(junit_filename)
|
|
188
189
|
|
|
189
190
|
|
|
190
|
-
def test_handles_non_ascii_build_output(
|
|
191
|
-
monkeypatch.setenv('PIP_INDEX_URL', devpi.url + '/' + PURE_INDEX)
|
|
191
|
+
def test_handles_non_ascii_build_output(tmpdir, monkeypatch):
|
|
192
192
|
|
|
193
|
-
with
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
with TestServer(USERS, {
|
|
194
|
+
PURE_INDEX: {'bases': '/root/pypi'},
|
|
195
|
+
INDEX: {'bases': ''},
|
|
196
|
+
}) as devpi:
|
|
197
|
+
sdist_index = devpi.url + '/' + PURE_INDEX
|
|
197
198
|
|
|
198
|
-
|
|
199
|
+
monkeypatch.setenv('PIP_INDEX_URL', sdist_index)
|
|
199
200
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
201
|
+
# trigger retrieval of setuptools from upstream as that can take forever
|
|
202
|
+
requests.get(sdist_index + '/+simple/setuptools/', timeout=300).raise_for_status()
|
|
203
|
+
|
|
204
|
+
with DevpiClient(sdist_index, USER, PASSWORD) as client:
|
|
205
|
+
client.upload('tests/fixture/non-ascii_package/dist/non-ascii-package-0.1.dev1.tar.gz')
|
|
206
|
+
|
|
207
|
+
junit_filename = str(tmpdir.join('junit.xml'))
|
|
208
|
+
|
|
209
|
+
# our main assertion is that the main does not fail
|
|
210
|
+
main(['tests/fixture/sample_non-ascii.txt', devpi.url + '/' + INDEX,
|
|
211
|
+
'--user={}'.format(USER),
|
|
212
|
+
'--password={}'.format(PASSWORD), '--junit-xml', junit_filename])
|
|
204
213
|
|
|
205
214
|
# check that the build failure shows up in the build output
|
|
206
215
|
assert 'No non-ascii 4 you!' in open(junit_filename).read()
|
|
@@ -8,10 +8,19 @@ from devpi_builder import requirements
|
|
|
8
8
|
def test_read_requirements():
|
|
9
9
|
expected = [
|
|
10
10
|
('progressbar', '2.2'),
|
|
11
|
-
('six', '1.7.3')
|
|
11
|
+
('six', '1.7.3'),
|
|
12
12
|
]
|
|
13
13
|
assert expected == requirements.read_exact_versions('tests/fixture/sample_simple.txt')
|
|
14
14
|
|
|
15
|
+
def test_read_vcs_requirements():
|
|
16
|
+
expected = [
|
|
17
|
+
('requests @ git+https://github.com/kennethreitz/requests@master', None),
|
|
18
|
+
('requests @ git+ssh://github.com/kennethreitz/requests@master', None),
|
|
19
|
+
('requests @ git+https://github.com/kennethreitz/requests@2.16.0', None),
|
|
20
|
+
]
|
|
21
|
+
assert expected == requirements.read_exact_versions('tests/fixture/sample_vcs.txt')
|
|
22
|
+
|
|
23
|
+
|
|
15
24
|
|
|
16
25
|
def test_multiple_versions():
|
|
17
26
|
expected = [
|
|
@@ -9,9 +9,19 @@ from devpi_builder import wheeler
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class TestBuilder:
|
|
12
|
-
|
|
12
|
+
@pytest.mark.parametrize(
|
|
13
|
+
'args', (
|
|
14
|
+
('progressbar', '2.2'),
|
|
15
|
+
('progressbar', None),
|
|
16
|
+
('requests @ git+https://github.com/kennethreitz/requests@2.16.0', None),
|
|
17
|
+
('requests @ git+https://github.com/kennethreitz/requests@master', None),
|
|
18
|
+
('zope-event', '5.0'),
|
|
19
|
+
('devpi-common', '3.6.0'),
|
|
20
|
+
)
|
|
21
|
+
)
|
|
22
|
+
def test_build(self, args):
|
|
13
23
|
with wheeler.Builder() as builder:
|
|
14
|
-
wheel_file = builder(
|
|
24
|
+
wheel_file = builder(*args)
|
|
15
25
|
assert re.match(r'.*\.whl$', wheel_file)
|
|
16
26
|
assert path.exists(wheel_file)
|
|
17
27
|
|
devpi-builder-6.0.0/setup.cfg
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/pure_package/test_package/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devpi-builder-6.0.0 → devpi_builder-7.0.0}/tests/fixture/sample_multiple_versions_on_line.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|