##### 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 -->


manifest_path = os.path.join(collection_artifact[0], b'MANIFEST.json')
    manifest_value = json.dumps({
        'collection_info': {
            'namespace': 'namespace',
            'name': 'name',
            'version': '',
            'dependencies': {}
        }
    })
    with open(manifest_path, 'wb') as manifest_obj:
        manifest_obj.write(to_bytes(manifest_value))
    mock_display = MagicMock()
    monkeypatch.setattr(Display, 'display', mock_display)
    actual = collection.CollectionRequirement.from_path(collection_artifact[0], True)
    # While the folder name suggests a different collection, we treat MANIFEST.json as the source of truth.
    assert actual.namespace == u'namespace'
    assert actual.name == u'name'
    assert actual.b_path == collection_artifact[0]
    assert actual.api is None
    assert actual.skip is True
    assert actual.versions == set(['*'])
    assert actual.latest_version == u'*'
    assert actual.dependencies == {}
    assert mock_display.call_count == 1
    actual_warn = ' '.join(mock_display.mock_calls[0][1][0].split('\n'))
    expected_warn = "Collection at '%s' does not have a valid version set, falling back to '*'. Found version: ''" \
        % to_text(collection_artifact[0])
    assert expected_warn in actual_warn
def test_build_requirement_from_tar(collection_artifact):