Commit 4afa07df by Ashwin Nair Committed by Randy Döring

Add subdirectory refs to pip installer

Co-authored-by: Randy Döring <30527984+radoering@users.noreply.github.com>
parent ed88e34d
......@@ -183,6 +183,9 @@ class PipInstaller(BaseInstaller):
f"#egg={package.name}"
)
if package.source_subdirectory:
req += f"&subdirectory={package.source_subdirectory}"
if package.develop:
return ["-e", req]
......@@ -217,6 +220,9 @@ class PipInstaller(BaseInstaller):
else:
req = Path(package.source_url).resolve(strict=False)
if package.source_subdirectory:
req /= package.source_subdirectory
pyproject = PyProjectTOML(os.path.join(req, "pyproject.toml"))
if pyproject.is_poetry_project():
......@@ -278,9 +284,13 @@ class PipInstaller(BaseInstaller):
)
# Now we just need to install from the source directory
pkg = Package(package.name, package.version)
pkg._source_type = "directory"
pkg._source_url = str(source.path)
pkg.develop = package.develop
pkg = Package(
name=package.name,
version=package.version,
source_type="directory",
source_url=str(source.path),
source_subdirectory=package.source_subdirectory,
develop=package.develop,
)
self.install_directory(pkg)
......@@ -39,6 +39,20 @@ def package_git() -> Package:
@pytest.fixture
def package_git_with_subdirectory() -> Package:
package = Package(
"subdirectories",
"2.0.0",
source_type="git",
source_url="https://github.com/demo/subdirectories.git",
source_reference="master",
source_subdirectory="two",
)
return package
@pytest.fixture
def pool() -> Pool:
return Pool()
......@@ -85,6 +99,24 @@ def test_requirement_source_type_url():
assert result == expected
def test_requirement_git_subdirectory(
pool: Pool, package_git_with_subdirectory: Package
) -> None:
null_env = NullEnv()
installer = PipInstaller(null_env, NullIO(), pool)
result = installer.requirement(package_git_with_subdirectory)
expected = (
"git+https://github.com/demo/subdirectories.git"
"@master#egg=subdirectories&subdirectory=two"
)
assert result == expected
installer.install(package_git_with_subdirectory)
assert len(null_env.executed) == 1
cmd = null_env.executed[0]
assert Path(cmd[-1]).parts[-3:] == ("demo", "subdirectories", "two")
def test_requirement_git_develop_false(installer: PipInstaller, package_git: Package):
package_git.develop = False
result = installer.requirement(package_git)
......
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