!38 [sync] PR-28: Support unpacking wheels that contain files with commas in their names
From: @openeuler-sync-bot Reviewed-by: @lyn1001 Signed-off-by: @lyn1001
This commit is contained in:
commit
4408e5d70a
144
0001-Support-unpacking-wheels-that-contain-files-with-com.patch
Normal file
144
0001-Support-unpacking-wheels-that-contain-files-with-com.patch
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
From 5846dacf8d4d48ad9278ded327cbb5f0917a238b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Hood Chatham <roberthoodchatham@gmail.com>
|
||||||
|
Date: Wed, 22 Dec 2021 02:13:50 -0800
|
||||||
|
Subject: [PATCH] Support unpacking wheels that contain files with commas in
|
||||||
|
their names (#427)
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The csv module is now being used to read RECORD.
|
||||||
|
|
||||||
|
Co-authored-by: Alex Grönholm <alex.gronholm@nextday.fi>
|
||||||
|
---
|
||||||
|
src/wheel/wheelfile.py | 46 ++++++++++++-------
|
||||||
|
tests/conftest.py | 2 +-
|
||||||
|
.../mypackage/__init__.py | 0
|
||||||
|
.../mypackage/data/1,2,3.txt | 0
|
||||||
|
.../mypackage/data/__init__.py | 0
|
||||||
|
.../testdata/commasinfilenames.dist/setup.py | 12 +++++
|
||||||
|
.../testrepo-0.1.0/mypackage/__init__.py | 0
|
||||||
|
7 files changed, 42 insertions(+), 18 deletions(-)
|
||||||
|
create mode 100644 tests/testdata/commasinfilenames.dist/mypackage/__init__.py
|
||||||
|
create mode 100644 tests/testdata/commasinfilenames.dist/mypackage/data/1,2,3.txt
|
||||||
|
create mode 100644 tests/testdata/commasinfilenames.dist/mypackage/data/__init__.py
|
||||||
|
create mode 100644 tests/testdata/commasinfilenames.dist/setup.py
|
||||||
|
create mode 100644 tests/testdata/commasinfilenames.dist/testrepo-0.1.0/mypackage/__init__.py
|
||||||
|
|
||||||
|
diff --git a/src/wheel/wheelfile.py b/src/wheel/wheelfile.py
|
||||||
|
index 3ee97dd..21e7361 100644
|
||||||
|
--- a/src/wheel/wheelfile.py
|
||||||
|
+++ b/src/wheel/wheelfile.py
|
||||||
|
@@ -5,6 +5,7 @@ import hashlib
|
||||||
|
import os.path
|
||||||
|
import re
|
||||||
|
import stat
|
||||||
|
+import sys
|
||||||
|
import time
|
||||||
|
from collections import OrderedDict
|
||||||
|
from distutils import log as logger
|
||||||
|
@@ -13,6 +14,16 @@ from zipfile import ZIP_DEFLATED, ZipInfo, ZipFile
|
||||||
|
from wheel.cli import WheelError
|
||||||
|
from wheel.util import urlsafe_b64decode, as_unicode, native, urlsafe_b64encode, as_bytes, StringIO
|
||||||
|
|
||||||
|
+if sys.version_info >= (3,):
|
||||||
|
+ from io import TextIOWrapper
|
||||||
|
+
|
||||||
|
+ def read_csv(fp):
|
||||||
|
+ return csv.reader(TextIOWrapper(fp, newline='', encoding='utf-8'))
|
||||||
|
+else:
|
||||||
|
+ def read_csv(fp):
|
||||||
|
+ for line in csv.reader(fp):
|
||||||
|
+ yield [column.decode('utf-8') for column in line]
|
||||||
|
+
|
||||||
|
# Non-greedy matching of an optional build number may be too clever (more
|
||||||
|
# invalid wheel filenames will match). Separate regex for .dist-info?
|
||||||
|
WHEEL_INFO_RE = re.compile(
|
||||||
|
@@ -60,23 +71,24 @@ class WheelFile(ZipFile):
|
||||||
|
raise WheelError('Missing {} file'.format(self.record_path))
|
||||||
|
|
||||||
|
with record:
|
||||||
|
- for line in record:
|
||||||
|
- line = line.decode('utf-8')
|
||||||
|
- path, hash_sum, size = line.rsplit(u',', 2)
|
||||||
|
- if hash_sum:
|
||||||
|
- algorithm, hash_sum = hash_sum.split(u'=')
|
||||||
|
- try:
|
||||||
|
- hashlib.new(algorithm)
|
||||||
|
- except ValueError:
|
||||||
|
- raise WheelError('Unsupported hash algorithm: {}'.format(algorithm))
|
||||||
|
-
|
||||||
|
- if algorithm.lower() in {'md5', 'sha1'}:
|
||||||
|
- raise WheelError(
|
||||||
|
- 'Weak hash algorithm ({}) is not permitted by PEP 427'
|
||||||
|
- .format(algorithm))
|
||||||
|
-
|
||||||
|
- self._file_hashes[path] = (
|
||||||
|
- algorithm, urlsafe_b64decode(hash_sum.encode('ascii')))
|
||||||
|
+ for line in read_csv(record):
|
||||||
|
+ path, hash_sum, size = line
|
||||||
|
+ if not hash_sum:
|
||||||
|
+ continue
|
||||||
|
+
|
||||||
|
+ algorithm, hash_sum = hash_sum.split(u'=')
|
||||||
|
+ try:
|
||||||
|
+ hashlib.new(algorithm)
|
||||||
|
+ except ValueError:
|
||||||
|
+ raise WheelError('Unsupported hash algorithm: {}'.format(algorithm))
|
||||||
|
+
|
||||||
|
+ if algorithm.lower() in {'md5', 'sha1'}:
|
||||||
|
+ raise WheelError(
|
||||||
|
+ 'Weak hash algorithm ({}) is not permitted by PEP 427'
|
||||||
|
+ .format(algorithm))
|
||||||
|
+
|
||||||
|
+ self._file_hashes[path] = (
|
||||||
|
+ algorithm, urlsafe_b64decode(hash_sum.encode('ascii')))
|
||||||
|
|
||||||
|
def open(self, name_or_info, mode="r", pwd=None):
|
||||||
|
def _update_crc(newdata, eof=None):
|
||||||
|
diff --git a/tests/conftest.py b/tests/conftest.py
|
||||||
|
index 7c3698c..d9821b8 100644
|
||||||
|
--- a/tests/conftest.py
|
||||||
|
+++ b/tests/conftest.py
|
||||||
|
@@ -12,7 +12,7 @@ import pytest
|
||||||
|
@pytest.fixture(scope='session')
|
||||||
|
def wheels_and_eggs(tmpdir_factory):
|
||||||
|
"""Build wheels and eggs from test distributions."""
|
||||||
|
- test_distributions = "complex-dist", "simple.dist", "headers.dist"
|
||||||
|
+ test_distributions = "complex-dist", "simple.dist", "headers.dist", "commasinfilenames.dist"
|
||||||
|
if sys.version_info >= (3, 6):
|
||||||
|
# Only Python 3.6+ can handle packaging unicode file names reliably
|
||||||
|
# across different platforms
|
||||||
|
diff --git a/tests/testdata/commasinfilenames.dist/mypackage/__init__.py b/tests/testdata/commasinfilenames.dist/mypackage/__init__.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..e69de29
|
||||||
|
diff --git a/tests/testdata/commasinfilenames.dist/mypackage/data/1,2,3.txt b/tests/testdata/commasinfilenames.dist/mypackage/data/1,2,3.txt
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..e69de29
|
||||||
|
diff --git a/tests/testdata/commasinfilenames.dist/mypackage/data/__init__.py b/tests/testdata/commasinfilenames.dist/mypackage/data/__init__.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..e69de29
|
||||||
|
diff --git a/tests/testdata/commasinfilenames.dist/setup.py b/tests/testdata/commasinfilenames.dist/setup.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..8cf9e4e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/testdata/commasinfilenames.dist/setup.py
|
||||||
|
@@ -0,0 +1,12 @@
|
||||||
|
+from setuptools import setup
|
||||||
|
+
|
||||||
|
+setup(
|
||||||
|
+ name='testrepo',
|
||||||
|
+ version='0.1',
|
||||||
|
+ packages=["mypackage"],
|
||||||
|
+ description='A test package with commas in file names',
|
||||||
|
+ include_package_data=True,
|
||||||
|
+ package_data={
|
||||||
|
+ "mypackage.data": ["*"]
|
||||||
|
+ },
|
||||||
|
+)
|
||||||
|
diff --git a/tests/testdata/commasinfilenames.dist/testrepo-0.1.0/mypackage/__init__.py b/tests/testdata/commasinfilenames.dist/testrepo-0.1.0/mypackage/__init__.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..e69de29
|
||||||
|
--
|
||||||
|
2.42.0.windows.2
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
%bcond_with bootstrap
|
%bcond_with bootstrap
|
||||||
Name: python-wheel
|
Name: python-wheel
|
||||||
Version: 0.37.0
|
Version: 0.37.0
|
||||||
Release: 4
|
Release: 5
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Summary: Built-package format for Python
|
Summary: Built-package format for Python
|
||||||
License: MIT
|
License: MIT
|
||||||
@ -10,6 +10,7 @@ Source0: %{url}/archive/%{version}/wheel-%{version}.tar.gz
|
|||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
Patch01: 0001-Fixed-wheel-pack-duplicating-WHEEL-contents-on-build.patch
|
Patch01: 0001-Fixed-wheel-pack-duplicating-WHEEL-contents-on-build.patch
|
||||||
|
Patch02: 0001-Support-unpacking-wheels-that-contain-files-with-com.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
A built-package format for Python.
|
A built-package format for Python.
|
||||||
@ -81,6 +82,9 @@ PYTHONPATH=%{buildroot}%{python3_sitelib} py.test-3 -v --ignore build
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Nov 8 2023 liubo <liubo1@xfusion.com> - 1:0.37.0-5
|
||||||
|
- Support unpacking wheels that contain files with commas in their names
|
||||||
|
|
||||||
* Tue Oct 17 2023 liubo <liubo1@xfusion.com> - 1:0.37.0-4
|
* Tue Oct 17 2023 liubo <liubo1@xfusion.com> - 1:0.37.0-4
|
||||||
- Fixed the non-standard format of changelog
|
- Fixed the non-standard format of changelog
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user