Commit f27308fa by Harry Mander Committed by GitHub

fix: append subdirectory to archive path (#7580)

parent 6a0087b4
...@@ -506,7 +506,7 @@ class Executor: ...@@ -506,7 +506,7 @@ class Executor:
elif package.source_type == "file": elif package.source_type == "file":
archive = self._prepare_archive(operation) archive = self._prepare_archive(operation)
elif package.source_type == "directory": elif package.source_type == "directory":
archive = self._prepare_directory_archive(operation) archive = self._prepare_archive(operation)
cleanup_archive = True cleanup_archive = True
elif package.source_type == "url": elif package.source_type == "url":
assert package.source_url is not None assert package.source_url is not None
...@@ -569,6 +569,8 @@ class Executor: ...@@ -569,6 +569,8 @@ class Executor:
assert package.source_url is not None assert package.source_url is not None
archive = Path(package.source_url) archive = Path(package.source_url)
if package.source_subdirectory:
archive = archive / package.source_subdirectory
if not Path(package.source_url).is_absolute() and package.root_dir: if not Path(package.source_url).is_absolute() and package.root_dir:
archive = package.root_dir / archive archive = package.root_dir / archive
...@@ -576,27 +578,6 @@ class Executor: ...@@ -576,27 +578,6 @@ class Executor:
return self._chef.prepare(archive, editable=package.develop) return self._chef.prepare(archive, editable=package.develop)
def _prepare_directory_archive(self, operation: Install | Update) -> Path:
package = operation.package
operation_message = self.get_operation_message(operation)
message = (
f" <fg=blue;options=bold>•</> {operation_message}:"
" <info>Building...</info>"
)
self._write(operation, message)
assert package.source_url is not None
if package.root_dir:
req = package.root_dir / package.source_url
else:
req = Path(package.source_url).resolve(strict=False)
if package.source_subdirectory:
req /= package.source_subdirectory
return self._prepare_archive(operation)
def _prepare_git_archive(self, operation: Install | Update) -> Path: def _prepare_git_archive(self, operation: Install | Update) -> Path:
from poetry.vcs.git import Git from poetry.vcs.git import Git
...@@ -619,7 +600,7 @@ class Executor: ...@@ -619,7 +600,7 @@ class Executor:
original_url = package.source_url original_url = package.source_url
package._source_url = str(source.path) package._source_url = str(source.path)
archive = self._prepare_directory_archive(operation) archive = self._prepare_archive(operation)
package._source_url = original_url package._source_url = original_url
......
...@@ -776,6 +776,37 @@ def test_executor_should_write_pep610_url_references_for_git( ...@@ -776,6 +776,37 @@ def test_executor_should_write_pep610_url_references_for_git(
) )
def test_executor_should_append_subdirectory_for_git(
mocker: MockerFixture,
tmp_venv: VirtualEnv,
pool: RepositoryPool,
config: Config,
io: BufferedIO,
mock_file_downloads: None,
wheel: Path,
) -> None:
package = Package(
"demo",
"0.1.2",
source_type="git",
source_reference="master",
source_resolved_reference="123456",
source_url="https://github.com/demo/subdirectories.git",
source_subdirectory="two",
)
chef = Chef(config, tmp_venv, Factory.create_pool(config))
chef.set_directory_wheel(wheel)
spy = mocker.spy(chef, "prepare")
executor = Executor(tmp_venv, pool, config, io)
executor._chef = chef
executor.execute([Install(package)])
archive_arg = spy.call_args[0][0]
assert archive_arg == tmp_venv.path / "src/demo/subdirectories/two"
def test_executor_should_write_pep610_url_references_for_git_with_subdirectories( def test_executor_should_write_pep610_url_references_for_git_with_subdirectories(
tmp_venv: VirtualEnv, tmp_venv: VirtualEnv,
pool: RepositoryPool, pool: RepositoryPool,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment