summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debian/changelog62
-rw-r--r--debian/control62
-rw-r--r--debian/copyright30
-rw-r--r--debian/gbp.conf2
-rw-r--r--debian/patches/search-wheels-for-dist-info149
-rw-r--r--debian/patches/series3
-rw-r--r--debian/patches/skip-script-tests34
-rw-r--r--debian/patches/sphinx-default-theme24
-rw-r--r--debian/python-installer-doc.doc-base14
-rw-r--r--debian/python-installer-doc.docs2
-rwxr-xr-xdebian/rules18
-rw-r--r--debian/source/format1
-rw-r--r--debian/tests/control6
-rwxr-xr-xdebian/tests/unittests13
-rw-r--r--debian/upstream/metadata10
-rw-r--r--debian/watch3
16 files changed, 433 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..3006a76
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,62 @@
+python-installer (0.6.0+dfsg1-1) unstable; urgency=medium
+
+ * New upstream release.
+ * Refresh patches.
+ * Bump copyright years.
+ * Update search-wheels-for-dist-info patch to the current state of the PR.
+
+ -- Stefano Rivera <stefanor@debian.org> Mon, 12 Dec 2022 17:00:20 -0400
+
+python-installer (0.5.1+dfsg1-3) unstable; urgency=medium
+
+ * Team upload.
+ * d/control: Building using the pyproject pybuild plugin.
+ * d/tests: run tests with all supported python versions.
+
+ -- Louis-Philippe VĂ©ronneau <pollo@debian.org> Fri, 02 Dec 2022 12:48:46 -0500
+
+python-installer (0.5.1+dfsg1-2) unstable; urgency=medium
+
+ * Patch: Search wheels for .dist-info directories, rather than expecting
+ them to match the wheel name. (Closes: #1008606)
+ * Bump Standards-Version to 4.6.1, no changes needed.
+ * Fix the nodoc build.
+
+ -- Stefano Rivera <stefanor@debian.org> Mon, 17 Oct 2022 16:17:39 +0200
+
+python-installer (0.5.1+dfsg1-1) unstable; urgency=medium
+
+ * New upstream release.
+
+ -- Stefano Rivera <stefanor@debian.org> Fri, 11 Mar 2022 10:39:14 -0400
+
+python-installer (0.5.0+dfsg1-2) unstable; urgency=medium
+
+ * Upload to unstable.
+
+ -- Stefano Rivera <stefanor@debian.org> Sat, 19 Feb 2022 07:40:09 -0400
+
+python-installer (0.5.0+dfsg1-1) experimental; urgency=medium
+
+ * New upstream release.
+ * Refresh patches.
+ * Enable docs build now that python3-myst-parser is available.
+ - Upload to experimental for the new binary package review.
+
+ -- Stefano Rivera <stefanor@debian.org> Fri, 18 Feb 2022 12:10:54 -0400
+
+python-installer (0.4.0+dfsg1-2) unstable; urgency=medium
+
+ * Team upload.
+ * Source-only upload.
+
+ -- Stefano Rivera <stefanor@debian.org> Sun, 12 Dec 2021 14:52:45 -0400
+
+python-installer (0.4.0+dfsg1-1) unstable; urgency=medium
+
+ * Initial release.
+ - build only the python3-installer module package at this stage; a
+ separate package for the documentation will be added later when all the
+ required build-dependencies are available in Debian.
+
+ -- Stuart Prescott <stuart@debian.org> Sat, 13 Nov 2021 17:44:44 +1100
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..6257ea5
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,62 @@
+Source: python-installer
+Section: python
+Priority: optional
+Maintainer: Debian Python Team <team+python@tracker.debian.org>
+Uploaders:
+ Stuart Prescott <stuart@debian.org>,
+ Stefano Rivera <stefanor@debian.org>,
+Homepage: https://github.com/pypa/installer/
+Vcs-Git: https://salsa.debian.org/python-team/packages/python-installer.git
+Vcs-Browser: https://salsa.debian.org/python-team/packages/python-installer/
+Build-Depends:
+ debhelper-compat (= 13),
+ dh-python (>> 5.20211016~),
+ dh-sequence-python3,
+ dh-sequence-sphinxdoc <!nodoc>,
+ flit,
+ pybuild-plugin-pyproject,
+ python3-all,
+ python3-mock <!nocheck>,
+ python3-myst-parser <!nodoc>,
+ python3-pytest <!nocheck>,
+ python3-setuptools,
+ python3-sphinx <!nodoc>,
+ python3-sphinx-argparse <!nodoc>,
+Standards-Version: 4.6.1
+Rules-Requires-Root: no
+
+Package: python3-installer
+Architecture: all
+Depends:
+ ${misc:Depends},
+ ${python3:Depends},
+Suggests:
+ python-installer-doc,
+Description: Python library for unpacking and installing wheels
+ "installer" is a low-level library for installing a Python package from a
+ wheel distribution; the wheel is the basic unit of Python module
+ distribution to end users. It provides basic functionality and abstractions
+ for handling wheels and installing packages from wheels, including:
+ .
+ * Logic for "unpacking" a wheel (i.e. installation).
+ * Abstractions for various parts of the unpacking process.
+ * Extensible simple implementations of the abstractions.
+ * Platform-independent Python script wrapper generation.
+
+Package: python-installer-doc
+Architecture: all
+Section: doc
+Depends:
+ ${sphinxdoc:Depends},
+ ${misc:Depends},
+Multi-Arch: foreign
+Description: Python library for unpacking and installing wheels (documentation)
+ "installer" is a low-level library for installing a Python package from a
+ wheel distribution; the wheel is the basic unit of Python module
+ distribution to end users. It provides basic functionality and abstractions
+ for handling wheels and installing packages from wheels, including:
+ .
+ * Logic for "unpacking" a wheel (i.e. installation).
+ * Abstractions for various parts of the unpacking process.
+ * Extensible simple implementations of the abstractions.
+ * Platform-independent Python script wrapper generation.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..102a89d
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,30 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Files-Excluded: src/installer/_scripts/*.exe
+
+Files: *
+Copyright: 2020-2022, Pradyun Gedam
+License: Expat
+
+Files: debian/*
+Copyright: 2021, Stuart Prescott <stuart@debian.org>
+ 2021-2022, Stefan Rivera <stefanor@debian.org>
+License: Expat
+
+License: Expat
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
diff --git a/debian/gbp.conf b/debian/gbp.conf
new file mode 100644
index 0000000..3879982
--- /dev/null
+++ b/debian/gbp.conf
@@ -0,0 +1,2 @@
+[DEFAULT]
+debian-branch=debian/master
diff --git a/debian/patches/search-wheels-for-dist-info b/debian/patches/search-wheels-for-dist-info
new file mode 100644
index 0000000..0f505d1
--- /dev/null
+++ b/debian/patches/search-wheels-for-dist-info
@@ -0,0 +1,149 @@
+From: Stefano Rivera <stefanor@debian.org>
+Date: Sun, 16 Oct 2022 13:01:21 +0200
+Subject: Search wheels for .dist-info directories
+
+Some wheels don't use normalized names for their .dist-info directories,
+so search the wheel for them.
+
+Fixes: #134
+Bug-Upstream: https://github.com/pypa/installer/issues/134
+Bug-Debian: https://bugs.debian.org/1008606
+Forwarded: https://github.com/pypa/installer/pull/137
+---
+ src/installer/sources.py | 29 ++++++++++++++++++++++++++++-
+ src/installer/utils.py | 8 ++++++++
+ tests/test_sources.py | 17 +++++++++++++++++
+ tests/test_utils.py | 22 ++++++++++++++++++++++
+ 4 files changed, 75 insertions(+), 1 deletion(-)
+
+diff --git a/src/installer/sources.py b/src/installer/sources.py
+index fa0bc34..e3a7c45 100644
+--- a/src/installer/sources.py
++++ b/src/installer/sources.py
+@@ -8,7 +8,7 @@ from contextlib import contextmanager
+ from typing import BinaryIO, Iterator, List, Tuple, cast
+
+ from installer.records import parse_record_file
+-from installer.utils import parse_wheel_filename
++from installer.utils import canonicalize_name, parse_wheel_filename
+
+ WheelContentElement = Tuple[Tuple[str, str, str], BinaryIO, bool]
+
+@@ -122,6 +122,33 @@ class WheelFile(WheelSource):
+ with zipfile.ZipFile(path) as f:
+ yield cls(f)
+
++ @property
++ def dist_info_dir(self) -> str:
++ """Name of the dist-info directory."""
++ if not hasattr(self, "_dist_info_dir"):
++ top_level_directories = {
++ path.split("/", 1)[0] for path in self._zipfile.namelist()
++ }
++ dist_infos = [
++ name for name in top_level_directories if name.endswith(".dist-info")
++ ]
++
++ assert (
++ len(dist_infos) == 1
++ ), "Wheel doesn't contain exactly one .dist-info directory"
++ dist_info_dir = dist_infos[0]
++
++ # NAME-VER.dist-info
++ di_dname = dist_info_dir.rsplit("-", 2)[0]
++ norm_di_dname = canonicalize_name(di_dname)
++ norm_file_dname = canonicalize_name(self.distribution)
++ assert (
++ norm_di_dname == norm_file_dname
++ ), "Wheel .dist-info directory doesn't match wheel filename"
++
++ self._dist_info_dir = dist_info_dir
++ return self._dist_info_dir
++
+ @property
+ def dist_info_filenames(self) -> List[str]:
+ """Get names of all files in the dist-info directory."""
+diff --git a/src/installer/utils.py b/src/installer/utils.py
+index 7b1404d..cef2bd8 100644
+--- a/src/installer/utils.py
++++ b/src/installer/utils.py
+@@ -94,6 +94,14 @@ def parse_metadata_file(contents: str) -> Message:
+ return feed_parser.close()
+
+
++def canonicalize_name(name: str) -> str:
++ """Canonicalize a project name according to PEP-503.
++
++ :param name: The project name to canonicalize
++ """
++ return re.sub(r"[-_.]+", "-", name).lower()
++
++
+ def parse_wheel_filename(filename: str) -> WheelFilename:
+ """Parse a wheel filename, into it's various components.
+
+diff --git a/tests/test_sources.py b/tests/test_sources.py
+index a79cc24..8d71496 100644
+--- a/tests/test_sources.py
++++ b/tests/test_sources.py
+@@ -92,3 +92,20 @@ class TestWheelFile:
+
+ assert sorted(got_records) == sorted(expected_records)
+ assert got_files == files
++
++ def test_finds_dist_info(self, fancy_wheel):
++ denorm = fancy_wheel.rename(fancy_wheel.parent / "Fancy-1.0.0-py3-none-any.whl")
++ # Python 3.7: rename doesn't return the new name:
++ denorm = fancy_wheel.parent / "Fancy-1.0.0-py3-none-any.whl"
++ with WheelFile.open(denorm) as source:
++ assert source.dist_info_filenames
++
++ def test_requires_dist_info_name_match(self, fancy_wheel):
++ misnamed = fancy_wheel.rename(
++ fancy_wheel.parent / "misnamed-1.0.0-py3-none-any.whl"
++ )
++ # Python 3.7: rename doesn't return the new name:
++ misnamed = fancy_wheel.parent / "misnamed-1.0.0-py3-none-any.whl"
++ with pytest.raises(AssertionError):
++ with WheelFile.open(misnamed) as source:
++ source.dist_info_filenames
+diff --git a/tests/test_utils.py b/tests/test_utils.py
+index bfcc089..e4bfb6a 100644
+--- a/tests/test_utils.py
++++ b/tests/test_utils.py
+@@ -16,6 +16,7 @@ from installer.utils import (
+ construct_record_file,
+ copyfileobj_with_hashing,
+ fix_shebang,
++ canonicalize_name,
+ parse_entrypoints,
+ parse_metadata_file,
+ parse_wheel_filename,
+@@ -41,6 +42,27 @@ class TestParseMetadata:
+ assert result.get_all("MULTI-USE-FIELD") == ["1", "2", "3"]
+
+
++class TestCanonicalizeDistributionName:
++ @pytest.mark.parametrize(
++ "string, expected",
++ [
++ # Noop
++ (
++ "package-1",
++ "package-1",
++ ),
++ # PEP 508 canonicalization
++ (
++ "ABC..12",
++ "abc-12",
++ ),
++ ],
++ )
++ def test_valid_cases(self, string, expected):
++ got = canonicalize_name(string)
++ assert expected == got, (expected, got)
++
++
+ class TestParseWheelFilename:
+ @pytest.mark.parametrize(
+ "string, expected",
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..52c4423
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,3 @@
+sphinx-default-theme
+skip-script-tests
+search-wheels-for-dist-info
diff --git a/debian/patches/skip-script-tests b/debian/patches/skip-script-tests
new file mode 100644
index 0000000..64ba208
--- /dev/null
+++ b/debian/patches/skip-script-tests
@@ -0,0 +1,34 @@
+From: Stefano Rivera <stefanor@debian.org>
+Date: Sun, 7 Nov 2021 15:04:10 -0800
+Subject: Skip tests for Windows launchers
+
+We don't include the bundled simple_launcher .exes in our Debian source
+package, for DFSG reasons. They aren't needed outside Windows.
+
+Forwarded: not-needed
+---
+ tests/test_scripts.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/tests/test_scripts.py b/tests/test_scripts.py
+index 2da6577..6442e19 100644
+--- a/tests/test_scripts.py
++++ b/tests/test_scripts.py
+@@ -40,6 +40,8 @@ def _read_launcher_data(section, kind):
+ return f.read()
+
+
++@pytest.mark.skip(
++ "Skipped on Debian, we don't include the simple_launcher .exes")
+ @pytest.mark.parametrize("section", ["console", "gui"])
+ @pytest.mark.parametrize("kind", ["win-ia32", "win-amd64", "win-arm"])
+ def test_script_generate_launcher(section, kind):
+@@ -60,6 +62,8 @@ def test_script_generate_launcher(section, kind):
+ assert b"baz.qux()" in code
+
+
++@pytest.mark.skip(
++ "Skipped on Debian, we don't include the simple_launcher .exes")
+ @pytest.mark.parametrize(
+ "section, kind",
+ [("nonexist", "win-ia32"), ("console", "nonexist"), ("nonexist", "nonexist")],
diff --git a/debian/patches/sphinx-default-theme b/debian/patches/sphinx-default-theme
new file mode 100644
index 0000000..9ceacea
--- /dev/null
+++ b/debian/patches/sphinx-default-theme
@@ -0,0 +1,24 @@
+From: Stuart Prescott <stuart@debian.org>
+Date: Thu, 21 Oct 2021 14:40:17 +1100
+Subject: Disable furo theme for documentation
+
+Furo is not packaged in Debian, yet.
+
+Forwarded: not-needed
+---
+ docs/conf.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/docs/conf.py b/docs/conf.py
+index 22bbe11..3ff6d4d 100644
+--- a/docs/conf.py
++++ b/docs/conf.py
+@@ -24,7 +24,7 @@ extensions = [
+ # -- Options for HTML output -----------------------------------------------------------
+ # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+-html_theme = "furo"
++#html_theme = "furo"
+ html_title = project
+
+ # -- Options for Autodoc --------------------------------------------------------------
diff --git a/debian/python-installer-doc.doc-base b/debian/python-installer-doc.doc-base
new file mode 100644
index 0000000..9e07719
--- /dev/null
+++ b/debian/python-installer-doc.doc-base
@@ -0,0 +1,14 @@
+Document: python-installer
+Title: Debian python-installer Manual
+Author:
+Abstract: This is the manual for python-installer.
+ python-installer will install a Python Wheel (distributable module) on the
+ local system following a PEP517 build.
+Section: Programming/Python
+
+Format: HTML
+Index: /usr/share/doc/python-installer-doc/html/index.html
+Files:
+ /usr/share/doc/python-installer-doc/html/*.html
+ /usr/share/doc/python-installer-doc/html/_sources/*
+ /usr/share/doc/python-installer-doc/html/_static/*
diff --git a/debian/python-installer-doc.docs b/debian/python-installer-doc.docs
new file mode 100644
index 0000000..094cdf4
--- /dev/null
+++ b/debian/python-installer-doc.docs
@@ -0,0 +1,2 @@
+README.md
+build/html/
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..75cfb14
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,18 @@
+#!/usr/bin/make -f
+
+# export DH_VERBOSE = 1
+
+export PYBUILD_NAME = installer
+
+export PYBUILD_TEST_ARGS = -rsx -v
+
+%:
+ dh $@ --buildsystem pybuild
+
+execute_after_dh_auto_build:
+ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
+ PYTHONPATH=$(CURDIR)/src/ \
+ http_proxy=http://127.0.0.1:9 \
+ https_proxy=https://127.0.0.1:9 \
+ python3 -m sphinx -N -bhtml docs/ build/html
+endif
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/tests/control b/debian/tests/control
new file mode 100644
index 0000000..bde3414
--- /dev/null
+++ b/debian/tests/control
@@ -0,0 +1,6 @@
+Tests: unittests
+Depends:
+ python3-all,
+ python3-installer,
+ python3-mock,
+ python3-pytest
diff --git a/debian/tests/unittests b/debian/tests/unittests
new file mode 100755
index 0000000..d2fecdc
--- /dev/null
+++ b/debian/tests/unittests
@@ -0,0 +1,13 @@
+#!/bin/sh
+set -efu
+
+pys="$(py3versions -s 2> /dev/null)"
+
+cp -a tests "$AUTOPKGTEST_TMP"
+
+cd "$AUTOPKGTEST_TMP"
+
+for py in $pys; do
+ echo "=== $py ==="
+ $py -m pytest tests
+done
diff --git a/debian/upstream/metadata b/debian/upstream/metadata
new file mode 100644
index 0000000..d03b8f2
--- /dev/null
+++ b/debian/upstream/metadata
@@ -0,0 +1,10 @@
+---
+Changelog: https://installer.readthedocs.io/en/latest/changelog/
+Documentation: https://installer.readthedocs.io/en/latest/
+Bug-Database: https://github.com/pypa/installer/issues
+Bug-Submit: https://github.com/pypa/installer/issues/new
+Registry:
+ - Name: PyPI
+ Entry: installer
+Repository: https://github.com/pypa/installer.git
+Repository-Browse: https://github.com/pypa/installer
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..14448b5
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,3 @@
+version=4
+opts=filenamemangle=s/.+\/v?(\d\S+)\.tar\.gz/python-installer-$1\.tar\.gz/,dversionmangle=s/.dfsg\d//,repacksuffix=+dfsg1 \
+ https://github.com/pypa/installer/tags .*/v?(\d\S+)\.tar\.gz