From ab7ae1a20030f8b3685cca5d4d88ef4062ec423d Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Fri, 27 Mar 2015 15:13:03 +1300 Subject: [PATCH] Rationalise wheel_dir usage. We we normalising it right before making it, after passing it RequirementSet, which means RequirementSet also had to normalise it. And then we passed it to WheelBuilder which as a result had to normalise it too. Instead, pass it as-is to RequirementSet, have that normalise it, and then pull it back out in WheelBuilder. --- pip/commands/wheel.py | 6 ------ pip/req/req_set.py | 5 +++++ pip/wheel.py | 4 ++-- tests/unit/test_wheel.py | 10 ++++++---- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/pip/commands/wheel.py b/pip/commands/wheel.py index 75d7b3156e6..0e62e203ff0 100644 --- a/pip/commands/wheel.py +++ b/pip/commands/wheel.py @@ -186,11 +186,6 @@ def run(self, options, args): wheel_download_dir=options.wheel_dir ) - # make the wheelhouse - options.wheel_dir = normalize_path(options.wheel_dir) - if not os.path.exists(options.wheel_dir): - os.makedirs(options.wheel_dir) - try: populate_requirement_set( requirement_set, args, options, logger, finder, @@ -203,7 +198,6 @@ def run(self, options, args): wb = WheelBuilder( requirement_set, finder, - options.wheel_dir, build_options=options.build_options or [], global_options=options.global_options or [], ) diff --git a/pip/req/req_set.py b/pip/req/req_set.py index 2b252221dc4..5d29b558ec7 100644 --- a/pip/req/req_set.py +++ b/pip/req/req_set.py @@ -443,6 +443,11 @@ def prepare_files(self, finder): """ Prepare process. Create temp directories, download and/or unpack files. """ + # make the wheelhouse + if self.wheel_download_dir: + if not os.path.exists(self.wheel_download_dir): + os.makedirs(self.wheel_download_dir) + self._walk_req_to_install( functools.partial(self._prepare_file, finder)) diff --git a/pip/wheel.py b/pip/wheel.py index 57246cae702..e0b2d844a29 100644 --- a/pip/wheel.py +++ b/pip/wheel.py @@ -543,11 +543,11 @@ def supported(self, tags=None): class WheelBuilder(object): """Build wheels from a RequirementSet.""" - def __init__(self, requirement_set, finder, wheel_dir, build_options=None, + def __init__(self, requirement_set, finder, build_options=None, global_options=None): self.requirement_set = requirement_set self.finder = finder - self.wheel_dir = normalize_path(wheel_dir) + self.wheel_dir = requirement_set.wheel_download_dir self.build_options = build_options or [] self.global_options = global_options or [] diff --git a/tests/unit/test_wheel.py b/tests/unit/test_wheel.py index 37d4123c78d..10bd694192d 100644 --- a/tests/unit/test_wheel.py +++ b/tests/unit/test_wheel.py @@ -374,8 +374,9 @@ class TestWheelBuilder(object): def test_skip_building_wheels(self, caplog): with patch('pip.wheel.WheelBuilder._build_one') as mock_build_one: wheel_req = Mock(is_wheel=True, editable=False) - reqset = Mock(requirements=Mock(values=lambda: [wheel_req])) - wb = wheel.WheelBuilder(reqset, Mock(), '/wheel/dir') + reqset = Mock(requirements=Mock(values=lambda: [wheel_req]), + wheel_download_dir='/wheel/dir') + wb = wheel.WheelBuilder(reqset, Mock()) wb.build() assert "due to already being wheel" in caplog.text() assert mock_build_one.mock_calls == [] @@ -383,8 +384,9 @@ def test_skip_building_wheels(self, caplog): def test_skip_building_editables(self, caplog): with patch('pip.wheel.WheelBuilder._build_one') as mock_build_one: editable_req = Mock(editable=True, is_wheel=False) - reqset = Mock(requirements=Mock(values=lambda: [editable_req])) - wb = wheel.WheelBuilder(reqset, Mock(), '/wheel/dir') + reqset = Mock(requirements=Mock(values=lambda: [editable_req]), + wheel_download_dir='/wheel/dir') + wb = wheel.WheelBuilder(reqset, Mock()) wb.build() assert "due to being editable" in caplog.text() assert mock_build_one.mock_calls == []