@ -15,6 +15,9 @@ import zipfile
from ansible . release import __version__
from ansible . release import __version__
fuzzy_match_basenames : set [ str ] = { ' COPYING ' }
""" Account for PEP639 differences in the placement of some files. """
def collect_sdist_files ( complete_file_list : list [ str ] ) - > list [ str ] :
def collect_sdist_files ( complete_file_list : list [ str ] ) - > list [ str ] :
""" Return a list of files which should be present in the sdist. """
""" Return a list of files which should be present in the sdist. """
@ -135,14 +138,32 @@ def list_wheel(path: pathlib.Path) -> list[str]:
return paths
return paths
def filter_fuzzy_matches ( missing : set [ str ] , extra : set [ str ] ) - > None :
"""
Removes entries from ` missing ` and ` extra ` that share a common basename that also appears in ` fuzzy_match_basenames ` .
Accounts for variable placement of non - runtime files by different versions of setuptools .
"""
if not ( missing or extra ) :
return
# calculate a set of basenames that appear in both missing and extra that are also marked as possibly needing fuzzy matching
corresponding_fuzzy_basenames = { os . path . basename ( p ) for p in missing } . intersection ( os . path . basename ( p ) for p in extra ) . intersection ( fuzzy_match_basenames )
# filter successfully fuzzy-matched entries from missing and extra
missing . difference_update ( { p for p in missing if os . path . basename ( p ) in corresponding_fuzzy_basenames } )
extra . difference_update ( { p for p in extra if os . path . basename ( p ) in corresponding_fuzzy_basenames } )
def check_files ( source : str , expected : list [ str ] , actual : list [ str ] ) - > list [ str ] :
def check_files ( source : str , expected : list [ str ] , actual : list [ str ] ) - > list [ str ] :
""" Verify the expected files exist and no extra files exist. """
""" Verify the expected files exist and no extra files exist. """
missing = sorted ( set ( expected ) - set ( actual ) )
missing = set ( expected ) - set ( actual )
extra = sorted ( set ( actual ) - set ( expected ) )
extra = set ( actual ) - set ( expected )
filter_fuzzy_matches ( missing , extra )
errors = (
errors = (
[ f ' { path } : missing from { source } ' for path in missing ] +
[ f ' { path } : missing from { source } ' for path in sorted ( missing ) ] +
[ f ' { path } : unexpected in { source } ' for path in extra ]
[ f ' { path } : unexpected in { source } ' for path in sorted ( extra ) ]
)
)
return errors
return errors