Skip to content

Commit f0cda0b

Browse files
committed
Replace os.system calls with subprocess calls.
1 parent cf18f71 commit f0cda0b

File tree

3 files changed

+27
-29
lines changed

3 files changed

+27
-29
lines changed

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ testing =
7676
tomli
7777
# No Python 3.12 dependencies require importlib_metadata, but needed for type-checking since we import it directly
7878
importlib_metadata
79+
pytest-subprocess
7980

8081
# workaround for pypa/setuptools#4333
8182
pyproject-hooks!=1.1

setuptools/package_index.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""PyPI and direct package downloading."""
22

33
import sys
4+
import subprocess
45
import os
56
import re
67
import io
@@ -865,15 +866,15 @@ def _download_vcs(self, url, spec_filename):
865866
url, rev = self._vcs_split_rev_from_url(url)
866867

867868
self.info(f"Doing {vcs} clone from {url} to {filename}")
868-
os.system(f"{vcs} clone --quiet {url} {filename}")
869+
subprocess.check_call([vcs, 'clone', '--quiet', url, filename])
869870

870871
co_commands = dict(
871-
git=f"git -C {filename} checkout --quiet {rev}",
872-
hg=f"hg --cwd {filename} up -C -r {rev} -q",
872+
git=[vcs, '-C', filename, 'checkout', '--quiet', rev],
873+
hg=[vcs, '--cwd', filename, 'up', '-C', '-r', rev, '-q'],
873874
)
874875
if rev is not None:
875876
self.info(f"Checking out {rev}")
876-
os.system(co_commands[vcs])
877+
subprocess.check_call(co_commands[vcs])
877878

878879
return filename
879880

setuptools/tests/test_packageindex.py

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import urllib.error
44
import http.client
55
from inspect import cleandoc
6-
from unittest import mock
76

87
import pytest
98

@@ -171,41 +170,38 @@ def test_egg_fragment(self):
171170
assert dists[0].version == ''
172171
assert dists[1].version == vc
173172

174-
def test_download_git_with_rev(self, tmpdir):
173+
def test_download_git_with_rev(self, tmpdir, fp):
175174
url = 'git+https://github.example/group/project@master#egg=foo'
176175
index = setuptools.package_index.PackageIndex()
177176

178-
with mock.patch("os.system") as os_system_mock:
179-
result = index.download(url, str(tmpdir))
177+
expected_dir = str(tmpdir / 'project@master')
178+
fp.register([
179+
'git',
180+
'clone',
181+
'--quiet',
182+
'https://github.example/group/project',
183+
expected_dir,
184+
])
185+
fp.register(['git', '-C', expected_dir, 'checkout', '--quiet', 'master'])
180186

181-
os_system_mock.assert_called()
187+
result = index.download(url, str(tmpdir))
182188

183-
expected_dir = str(tmpdir / 'project@master')
184-
expected = (
185-
'git clone --quiet ' 'https://github.example/group/project {expected_dir}'
186-
).format(**locals())
187-
first_call_args = os_system_mock.call_args_list[0][0]
188-
assert first_call_args == (expected,)
189-
190-
tmpl = 'git -C {expected_dir} checkout --quiet master'
191-
expected = tmpl.format(**locals())
192-
assert os_system_mock.call_args_list[1][0] == (expected,)
193189
assert result == expected_dir
190+
assert len(fp.calls) == 2
194191

195-
def test_download_git_no_rev(self, tmpdir):
192+
def test_download_git_no_rev(self, tmpdir, fp):
196193
url = 'git+https://github.example/group/project#egg=foo'
197194
index = setuptools.package_index.PackageIndex()
198195

199-
with mock.patch("os.system") as os_system_mock:
200-
result = index.download(url, str(tmpdir))
201-
202-
os_system_mock.assert_called()
203-
204196
expected_dir = str(tmpdir / 'project')
205-
expected = (
206-
'git clone --quiet ' 'https://github.example/group/project {expected_dir}'
207-
).format(**locals())
208-
os_system_mock.assert_called_once_with(expected)
197+
fp.register([
198+
'git',
199+
'clone',
200+
'--quiet',
201+
'https://github.example/group/project',
202+
expected_dir,
203+
])
204+
index.download(url, str(tmpdir))
209205

210206
def test_download_svn(self, tmpdir):
211207
url = 'svn+https://svn.example/project#egg=foo'

0 commit comments

Comments
 (0)