ansible-galaxy - fix installing dir sources with a trailing path separator (#79110)

* strip trailing path separator from type=dir sources
pull/71707/merge
Sloane Hertel 2 years ago committed by GitHub
parent 676b731e6f
commit 964e678a7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- ansible-galaxy - fix installing collections from directories that have a trailing path separator (https://github.com/ansible/ansible/issues/77803).

@ -211,6 +211,8 @@ class _ComputedReqKindsMixin:
@classmethod @classmethod
def from_dir_path(cls, dir_path, art_mgr): def from_dir_path(cls, dir_path, art_mgr):
"""Make collection from an directory with metadata.""" """Make collection from an directory with metadata."""
if dir_path.endswith(to_bytes(os.path.sep)):
dir_path = dir_path.rstrip(to_bytes(os.path.sep))
b_dir_path = to_bytes(dir_path, errors='surrogate_or_strict') b_dir_path = to_bytes(dir_path, errors='surrogate_or_strict')
if not _is_collection_dir(b_dir_path): if not _is_collection_dir(b_dir_path):
display.warning( display.warning(
@ -261,6 +263,8 @@ class _ComputedReqKindsMixin:
regardless of whether any of known metadata files are present. regardless of whether any of known metadata files are present.
""" """
# There is no metadata, but it isn't required for a functional collection. Determine the namespace.name from the path. # There is no metadata, but it isn't required for a functional collection. Determine the namespace.name from the path.
if dir_path.endswith(to_bytes(os.path.sep)):
dir_path = dir_path.rstrip(to_bytes(os.path.sep))
u_dir_path = to_text(dir_path, errors='surrogate_or_strict') u_dir_path = to_text(dir_path, errors='surrogate_or_strict')
path_list = u_dir_path.split(os.path.sep) path_list = u_dir_path.split(os.path.sep)
req_name = '.'.join(path_list[-2:]) req_name = '.'.join(path_list[-2:])
@ -420,6 +424,9 @@ class _ComputedReqKindsMixin:
format(not_url=req_source.api_server), format(not_url=req_source.api_server),
) )
if req_type == 'dir' and req_source.endswith(os.path.sep):
req_source = req_source.rstrip(os.path.sep)
tmp_inst_req = cls(req_name, req_version, req_source, req_type, req_signature_sources) tmp_inst_req = cls(req_name, req_version, req_source, req_type, req_signature_sources)
if req_type not in {'galaxy', 'subdirs'} and req_name is None: if req_type not in {'galaxy', 'subdirs'} and req_name is None:

@ -794,7 +794,7 @@
force: yes force: yes
- name: install symlink_dirs collection from source - name: install symlink_dirs collection from source
command: ansible-galaxy collection install {{ galaxy_dir }}/scratch/symlink_dirs/ command: ansible-galaxy collection install {{ galaxy_dir }}/scratch/symlink_dirs/symlink_dirs/
environment: environment:
ANSIBLE_COLLECTIONS_PATHS: '{{ galaxy_dir }}/ansible_collections' ANSIBLE_COLLECTIONS_PATHS: '{{ galaxy_dir }}/ansible_collections'
register: install_symlink_dirs register: install_symlink_dirs

Loading…
Cancel
Save