##### SUMMARY
If you have executable files in your source code they are not kept in the tarball.

Could be related to https://github.com/ansible/ansible/blob/99d7f150873011e7515851db9b44ff486efa9d77/lib/ansible/galaxy/collection.py#L763

This was noticed as I had some auxiliary scripts in my repo.

Need to also consider scripts in `files/` if/when Collections support roles.

This seems to fail the "principal of least suprise"

**Proposal 1: Keep on stripping executable flags**

Add some line to the output
`WARNING: tests/coverage.sh: source file has executable flag, though this will be ignored in generated tar.gz`
Update developing a collection documentation page
Update integration tests to ensure that executable mode is always stripped.
Update code to link to this issue

**Proposal 2: Allow executible flags**

Update developing a collection documentation page
Update integration tests to ensure that executable mode is preserved
Update code to link to this issue
Changelog


##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
ansible-galaxy

##### ANSIBLE VERSION
```paste below
2.10
```

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
```yaml

```

<!--- HINT: You can paste gist.github.com links for larger files -->


display.display("Process install dependency map")
        with _display_progress():
            dependency_map = _build_dependency_map(collections, existing_collections, b_temp_path, apis,
                                                   validate_certs, force, force_deps, no_deps,
                                                   allow_pre_release=allow_pre_release)
        display.display("Starting collection install process")
        with _display_progress():
            for collection in dependency_map.values():
                try:
                    collection.install(output_path, b_temp_path)
                except AnsibleError as err:
                    if ignore_errors:
                        display.warning("Failed to install collection %s but skipping due to --ignore-errors being set. "
                                        "Error: %s" % (to_text(collection), to_text(err)))
                    else:
                        raise
def validate_collection_name(name):
    """
    Validates the collection name as an input from the user or a requirements file fit the requirements.
    :param name: The input name with optional range specifier split by ':'.
    :return: The input value, required for argparse validation.
    """
    collection, dummy, dummy = name.partition(':')
    if AnsibleCollectionRef.is_valid_collection_name(collection):
        return name
    raise AnsibleError("Invalid collection name '%s', "
                       "name must be in the format <namespace>.<collection>. \n"
                       "Please make sure namespace and collection name contains "
                       "characters from [a-zA-Z0-9_] only." % name)
def validate_collection_path(collection_path):