summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mueller <30130371+cdce8p@users.noreply.github.com>2021-05-22 12:23:18 +0200
committerMarc Mueller <30130371+cdce8p@users.noreply.github.com>2021-05-23 01:42:45 +0200
commit3d1cce5c6961c2dafc0dc0300c06a0af03e42842 (patch)
treee569a1f2de9311a19ca430c3d6f8ed7935df9eec
parent482e8e7687e3272ca2d0b1d5d73b92c3219f4576 (diff)
downloadpython-setuptools-git-3d1cce5c6961c2dafc0dc0300c06a0af03e42842.tar.gz
Keep user sorting for license files
-rw-r--r--setuptools/dist.py14
-rw-r--r--setuptools/tests/test_egg_info.py26
2 files changed, 29 insertions, 11 deletions
diff --git a/setuptools/dist.py b/setuptools/dist.py
index 5be83d70..4877d36b 100644
--- a/setuptools/dist.py
+++ b/setuptools/dist.py
@@ -581,13 +581,13 @@ class Distribution(_Distribution):
def _finalize_license_files(self):
"""Compute names of all license files which should be included."""
- files = set()
+ files: List[str] = []
license_files: Optional[List[str]] = self.metadata.license_files
- patterns: Set[str] = set(license_files) if license_files else set()
+ patterns: List[str] = license_files if license_files else []
license_file: Optional[str] = self.metadata.license_file
- if license_file:
- patterns.add(license_file)
+ if license_file and license_file not in patterns:
+ patterns.append(license_file)
if license_files is None and license_file is None:
# Default patterns match the ones wheel uses
@@ -596,13 +596,15 @@ class Distribution(_Distribution):
patterns = ('LICEN[CS]E*', 'COPYING*', 'NOTICE*', 'AUTHORS*')
for pattern in patterns:
+ files_pattern: Set[str] = set()
for path in iglob(pattern):
if path.endswith('~'):
continue
if path not in files and os.path.isfile(path):
- files.add(path)
+ files_pattern.add(path)
+ files.extend(sorted(files_pattern))
- self.metadata.license_files = sorted(files)
+ self.metadata.license_files = files
# FIXME: 'Distribution._parse_config_files' is too complex (14)
def _parse_config_files(self, filenames=None): # noqa: C901
diff --git a/setuptools/tests/test_egg_info.py b/setuptools/tests/test_egg_info.py
index 2821a295..1d98d259 100644
--- a/setuptools/tests/test_egg_info.py
+++ b/setuptools/tests/test_egg_info.py
@@ -689,6 +689,17 @@ class TestEggInfo:
'NOTICE-XYZ': "XYZ notice",
}, ['LICENSE-ABC'], ['NOTICE-XYZ'],
id="no_default_glob_patterns"),
+ pytest.param({
+ 'setup.cfg': DALS("""
+ [metadata]
+ license_files =
+ LICENSE-ABC
+ LICENSE*
+ """),
+ 'LICENSE-ABC': "ABC license",
+ }, ['LICENSE-ABC'], [],
+ id="files_only_added_once",
+ ),
])
def test_setup_cfg_license_files(
self, tmpdir_cwd, env, files, incl_licenses, excl_licenses):
@@ -843,11 +854,13 @@ class TestEggInfo:
"setup.cfg": DALS("""
[metadata]
license_files =
+ NOTICE*
LICENSE*
"""),
"LICENSE-ABC": "ABC license",
"LICENSE-XYZ": "XYZ license",
- "NOTICE": "not included",
+ "NOTICE": "included",
+ "IGNORE": "not include",
})
environment.run_setup_py(
@@ -860,10 +873,13 @@ class TestEggInfo:
license_file_lines = [
line for line in pkg_info_lines if line.startswith('License-File:')]
- # Only 'LICENSE-ABC' and 'LICENSE-XYZ' should have been matched
- assert len(license_file_lines) == 2
- assert "License-File: LICENSE-ABC" in license_file_lines
- assert "License-File: LICENSE-XYZ" in license_file_lines
+ # Only 'NOTICE', LICENSE-ABC', and 'LICENSE-XYZ' should have been matched
+ # Also assert that order from license_files is keeped
+ assert license_file_lines == [
+ "License-File: NOTICE",
+ "License-File: LICENSE-ABC",
+ "License-File: LICENSE-XYZ",
+ ]
def test_metadata_version(self, tmpdir_cwd, env):
"""Make sure latest metadata version is used by default."""