Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ba09a2d

Browse files
authored
Merge pull request #467 from benasher44/basher_swiftpm_support
SwiftPM support
2 parents cc0f40f + b6937f3 commit ba09a2d

16 files changed

Lines changed: 143 additions & 29 deletions

File tree

.coveragerc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ omit =
1414
exclude_lines =
1515
# Have to re-enable the standard pragma
1616
\#\s*pragma: no cover
17+
# We optionally substitute this
18+
${COVERAGE_IGNORE_WINDOWS}
1719

1820
# Don't complain if tests don't hit defensive assertion code:
1921
^\s*raise AssertionError\b

.travis.yml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
language: python
22
python: 3.5
3+
dist: trusty
4+
sudo: required
5+
services:
6+
- docker
37
env: # These should match the tox env list
48
- TOXENV=py27
59
- TOXENV=py34
@@ -18,11 +22,11 @@ before_install:
1822
export PATH="/tmp/git/bin:$PATH"
1923
fi
2024
- git --version
25+
- |
26+
./get-swift.sh
27+
export PATH="/tmp/swift/usr/bin:$PATH"
2128
after_success:
2229
- coveralls
23-
sudo: required
24-
services:
25-
- docker
2630
cache:
2731
directories:
2832
- $HOME/.cache/pip

appveyor.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
environment:
2+
global:
3+
COVERAGE_IGNORE_WINDOWS: '# pragma: windows no cover'
4+
TOX_TESTENV_PASSENV: COVERAGE_IGNORE_WINDOWS
25
matrix:
36
- TOXENV: py27
47
- TOXENV: py35

get-swift.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/usr/bin/env bash
2+
# This is a script used in travis-ci to install swift
3+
set -ex
4+
5+
. /etc/lsb-release
6+
if [ "$DISTRIB_CODENAME" = "trusty" ]; then
7+
SWIFT_URL='https://swift.org/builds/swift-3.0.2-release/ubuntu1404/swift-3.0.2-RELEASE/swift-3.0.2-RELEASE-ubuntu14.04.tar.gz'
8+
else
9+
SWIFT_URL='https://swift.org/builds/swift-3.0.2-release/ubuntu1604/swift-3.0.2-RELEASE/swift-3.0.2-RELEASE-ubuntu16.04.tar.gz'
10+
fi
11+
12+
mkdir -p /tmp/swift
13+
pushd /tmp/swift
14+
wget "$SWIFT_URL" -O swift.tar.gz
15+
tar -xf swift.tar.gz --strip 1
16+
popd

pre_commit/languages/all.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pre_commit.languages import python
77
from pre_commit.languages import ruby
88
from pre_commit.languages import script
9+
from pre_commit.languages import swift
910
from pre_commit.languages import system
1011

1112
# A language implements the following constant and two functions in its module:
@@ -47,6 +48,7 @@
4748
'python': python,
4849
'ruby': ruby,
4950
'script': script,
51+
'swift': swift,
5052
'system': system,
5153
}
5254

pre_commit/languages/docker.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,30 +16,30 @@
1616
PRE_COMMIT_LABEL = 'PRE_COMMIT'
1717

1818

19-
def md5(s):
19+
def md5(s): # pragma: windows no cover
2020
return hashlib.md5(five.to_bytes(s)).hexdigest()
2121

2222

23-
def docker_tag(repo_cmd_runner):
23+
def docker_tag(repo_cmd_runner): # pragma: windows no cover
2424
return 'pre-commit-{}'.format(
2525
md5(os.path.basename(repo_cmd_runner.path()))
2626
).lower()
2727

2828

29-
def docker_is_running():
29+
def docker_is_running(): # pragma: windows no cover
3030
try:
3131
return cmd_output('docker', 'ps')[0] == 0
3232
except CalledProcessError:
3333
return False
3434

3535

36-
def assert_docker_available():
36+
def assert_docker_available(): # pragma: windows no cover
3737
assert docker_is_running(), (
3838
'Docker is either not running or not configured in this environment'
3939
)
4040

4141

42-
def build_docker_image(repo_cmd_runner, **kwargs):
42+
def build_docker_image(repo_cmd_runner, **kwargs): # pragma: windows no cover
4343
pull = kwargs.pop('pull')
4444
assert not kwargs, kwargs
4545
cmd = (
@@ -56,7 +56,7 @@ def install_environment(
5656
repo_cmd_runner,
5757
version='default',
5858
additional_dependencies=(),
59-
):
59+
): # pragma: windows no cover
6060
assert repo_cmd_runner.exists('Dockerfile'), (
6161
'No Dockerfile was found in the hook repository'
6262
)
@@ -65,9 +65,9 @@ def install_environment(
6565
)
6666
assert_docker_available()
6767

68-
directory = repo_cmd_runner.path(helpers.environment_dir(
69-
ENVIRONMENT_DIR, 'default',
70-
))
68+
directory = repo_cmd_runner.path(
69+
helpers.environment_dir(ENVIRONMENT_DIR, 'default'),
70+
)
7171

7272
# Docker doesn't really have relevant disk environment, but pre-commit
7373
# still needs to cleanup it's state files on failure
@@ -76,7 +76,7 @@ def install_environment(
7676
os.mkdir(directory)
7777

7878

79-
def run_hook(repo_cmd_runner, hook, file_args):
79+
def run_hook(repo_cmd_runner, hook, file_args): # pragma: windows no cover
8080
assert_docker_available()
8181
# Rebuild the docker image in case it has gone missing, as many people do
8282
# automated cleanup of docker images.

pre_commit/languages/node.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
ENVIRONMENT_DIR = 'node_env'
1515

1616

17-
def get_env_patch(venv):
17+
def get_env_patch(venv): # pragma: windows no cover
1818
return (
1919
('NODE_VIRTUAL_ENV', venv),
2020
('NPM_CONFIG_PREFIX', venv),
@@ -25,9 +25,8 @@ def get_env_patch(venv):
2525

2626

2727
@contextlib.contextmanager
28-
def in_env(repo_cmd_runner, language_version):
29-
envdir = os.path.join(
30-
repo_cmd_runner.prefix_dir,
28+
def in_env(repo_cmd_runner, language_version): # pragma: windows no cover
29+
envdir = repo_cmd_runner.path(
3130
helpers.environment_dir(ENVIRONMENT_DIR, language_version),
3231
)
3332
with envcontext(get_env_patch(envdir)):
@@ -38,7 +37,7 @@ def install_environment(
3837
repo_cmd_runner,
3938
version='default',
4039
additional_dependencies=(),
41-
):
40+
): # pragma: windows no cover
4241
additional_dependencies = tuple(additional_dependencies)
4342
assert repo_cmd_runner.exists('package.json')
4443
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
@@ -62,6 +61,6 @@ def install_environment(
6261
)
6362

6463

65-
def run_hook(repo_cmd_runner, hook, file_args):
64+
def run_hook(repo_cmd_runner, hook, file_args): # pragma: windows no cover
6665
with in_env(repo_cmd_runner, hook['language_version']):
6766
return xargs(helpers.to_cmd(hook), file_args)

pre_commit/languages/python.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ def get_env_patch(venv):
3232

3333
@contextlib.contextmanager
3434
def in_env(repo_cmd_runner, language_version):
35-
envdir = os.path.join(
36-
repo_cmd_runner.prefix_dir,
35+
envdir = repo_cmd_runner.path(
3736
helpers.environment_dir(ENVIRONMENT_DIR, language_version),
3837
)
3938
with envcontext(get_env_patch(envdir)):

pre_commit/languages/ruby.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
ENVIRONMENT_DIR = 'rbenv'
1919

2020

21-
def get_env_patch(venv, language_version):
21+
def get_env_patch(venv, language_version): # pragma: windows no cover
2222
patches = (
2323
('GEM_HOME', os.path.join(venv, 'gems')),
2424
('RBENV_ROOT', venv),
@@ -34,16 +34,17 @@ def get_env_patch(venv, language_version):
3434

3535

3636
@contextlib.contextmanager
37-
def in_env(repo_cmd_runner, language_version):
38-
envdir = os.path.join(
39-
repo_cmd_runner.prefix_dir,
37+
def in_env(repo_cmd_runner, language_version): # pragma: windows no cover
38+
envdir = repo_cmd_runner.path(
4039
helpers.environment_dir(ENVIRONMENT_DIR, language_version),
4140
)
4241
with envcontext(get_env_patch(envdir, language_version)):
4342
yield
4443

4544

46-
def _install_rbenv(repo_cmd_runner, version='default'):
45+
def _install_rbenv(
46+
repo_cmd_runner, version='default',
47+
): # pragma: windows no cover
4748
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
4849

4950
with tarfile.open(resource_filename('rbenv.tar.gz')) as tf:
@@ -86,7 +87,7 @@ def _install_rbenv(repo_cmd_runner, version='default'):
8687
activate_file.write('export RBENV_VERSION="{}"\n'.format(version))
8788

8889

89-
def _install_ruby(runner, version):
90+
def _install_ruby(runner, version): # pragma: windows no cover
9091
try:
9192
helpers.run_setup_cmd(runner, ('rbenv', 'download', version))
9293
except CalledProcessError: # pragma: no cover (usually find with download)
@@ -98,7 +99,7 @@ def install_environment(
9899
repo_cmd_runner,
99100
version='default',
100101
additional_dependencies=(),
101-
):
102+
): # pragma: windows no cover
102103
additional_dependencies = tuple(additional_dependencies)
103104
directory = helpers.environment_dir(ENVIRONMENT_DIR, version)
104105
with clean_path_on_failure(repo_cmd_runner.path(directory)):
@@ -126,6 +127,6 @@ def install_environment(
126127
)
127128

128129

129-
def run_hook(repo_cmd_runner, hook, file_args):
130+
def run_hook(repo_cmd_runner, hook, file_args): # pragma: windows no cover
130131
with in_env(repo_cmd_runner, hook['language_version']):
131132
return xargs(helpers.to_cmd(hook), file_args)

pre_commit/languages/swift.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from __future__ import unicode_literals
2+
3+
import contextlib
4+
import os
5+
6+
from pre_commit.envcontext import envcontext
7+
from pre_commit.envcontext import Var
8+
from pre_commit.languages import helpers
9+
from pre_commit.util import clean_path_on_failure
10+
from pre_commit.xargs import xargs
11+
12+
ENVIRONMENT_DIR = 'swift_env'
13+
BUILD_DIR = '.build'
14+
BUILD_CONFIG = 'release'
15+
16+
17+
def get_env_patch(venv): # pragma: windows no cover
18+
bin_path = os.path.join(venv, BUILD_DIR, BUILD_CONFIG)
19+
return (('PATH', (bin_path, os.pathsep, Var('PATH'))),)
20+
21+
22+
@contextlib.contextmanager
23+
def in_env(repo_cmd_runner): # pragma: windows no cover
24+
envdir = repo_cmd_runner.path(
25+
helpers.environment_dir(ENVIRONMENT_DIR, 'default'),
26+
)
27+
with envcontext(get_env_patch(envdir)):
28+
yield
29+
30+
31+
def install_environment(
32+
repo_cmd_runner,
33+
version='default',
34+
additional_dependencies=(),
35+
): # pragma: windows no cover
36+
assert version == 'default', (
37+
'Pre-commit does not support language_version for docker '
38+
)
39+
directory = repo_cmd_runner.path(
40+
helpers.environment_dir(ENVIRONMENT_DIR, 'default'),
41+
)
42+
43+
# Build the swift package
44+
with clean_path_on_failure(directory):
45+
os.mkdir(directory)
46+
repo_cmd_runner.run((
47+
'swift', 'build',
48+
'-C', '{prefix}',
49+
'-c', BUILD_CONFIG,
50+
'--build-path', os.path.join(directory, BUILD_DIR),
51+
))
52+
53+
54+
def run_hook(repo_cmd_runner, hook, file_args): # pragma: windows no cover
55+
with in_env(repo_cmd_runner):
56+
return xargs(helpers.to_cmd(hook), file_args)

0 commit comments

Comments
 (0)