diff options
author | Marc Mueller <30130371+cdce8p@users.noreply.github.com> | 2021-05-22 12:23:18 +0200 |
---|---|---|
committer | Marc Mueller <30130371+cdce8p@users.noreply.github.com> | 2021-05-23 01:42:45 +0200 |
commit | 3d1cce5c6961c2dafc0dc0300c06a0af03e42842 (patch) | |
tree | e569a1f2de9311a19ca430c3d6f8ed7935df9eec | |
parent | 482e8e7687e3272ca2d0b1d5d73b92c3219f4576 (diff) | |
download | python-setuptools-git-3d1cce5c6961c2dafc0dc0300c06a0af03e42842.tar.gz |
Keep user sorting for license files
-rw-r--r-- | setuptools/dist.py | 14 | ||||
-rw-r--r-- | setuptools/tests/test_egg_info.py | 26 |
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.""" |