Commit 021253db by Arun Babu Neelicattu

support subdirectories for vcs dependencies

parent dacb720b
...@@ -87,6 +87,7 @@ def _get_package_from_git( ...@@ -87,6 +87,7 @@ def _get_package_from_git(
branch: str | None = None, branch: str | None = None,
tag: str | None = None, tag: str | None = None,
rev: str | None = None, rev: str | None = None,
subdirectory: str | None = None,
source_root: Path | None = None, source_root: Path | None = None,
) -> Package: ) -> Package:
source = Git.clone( source = Git.clone(
...@@ -99,11 +100,16 @@ def _get_package_from_git( ...@@ -99,11 +100,16 @@ def _get_package_from_git(
) )
revision = Git.get_revision(source) revision = Git.get_revision(source)
package = Provider.get_package_from_directory(Path(source.path)) path = Path(source.path)
if subdirectory:
path = path.joinpath(subdirectory)
package = Provider.get_package_from_directory(path)
package._source_type = "git" package._source_type = "git"
package._source_url = url package._source_url = url
package._source_reference = rev or tag or branch or "HEAD" package._source_reference = rev or tag or branch or "HEAD"
package._source_resolved_reference = revision package._source_resolved_reference = revision
package._source_subdirectory = subdirectory
return package return package
...@@ -230,7 +236,13 @@ class Provider: ...@@ -230,7 +236,13 @@ class Provider:
Basically, we clone the repository in a temporary directory Basically, we clone the repository in a temporary directory
and get the information we need by checking out the specified reference. and get the information we need by checking out the specified reference.
""" """
if dependency in self._deferred_cache: # we ensure subdirectory match here as workaround until poetry-core is updated
# to >1.1.0a7
if (
dependency in self._deferred_cache
and self._deferred_cache[dependency].source_subdirectory
== dependency.source_subdirectory
):
return [self._deferred_cache[dependency]] return [self._deferred_cache[dependency]]
package = self.get_package_from_vcs( package = self.get_package_from_vcs(
...@@ -239,6 +251,7 @@ class Provider: ...@@ -239,6 +251,7 @@ class Provider:
branch=dependency.branch, branch=dependency.branch,
tag=dependency.tag, tag=dependency.tag,
rev=dependency.rev, rev=dependency.rev,
subdirectory=dependency.source_subdirectory,
source_root=self._source_root source_root=self._source_root
or (self._env.path.joinpath("src") if self._env else None), or (self._env.path.joinpath("src") if self._env else None),
) )
...@@ -265,13 +278,19 @@ class Provider: ...@@ -265,13 +278,19 @@ class Provider:
branch: str | None = None, branch: str | None = None,
tag: str | None = None, tag: str | None = None,
rev: str | None = None, rev: str | None = None,
subdirectory: str | None = None,
source_root: Path | None = None, source_root: Path | None = None,
) -> Package: ) -> Package:
if vcs != "git": if vcs != "git":
raise ValueError(f"Unsupported VCS dependency {vcs}") raise ValueError(f"Unsupported VCS dependency {vcs}")
return _get_package_from_git( return _get_package_from_git(
url=url, branch=branch, tag=tag, rev=rev, source_root=source_root url=url,
branch=branch,
tag=tag,
rev=rev,
subdirectory=subdirectory,
source_root=source_root,
) )
def search_for_file(self, dependency: FileDependency) -> list[Package]: def search_for_file(self, dependency: FileDependency) -> list[Package]:
......
...@@ -37,12 +37,20 @@ def _parse_dependency_specification_git_url( ...@@ -37,12 +37,20 @@ def _parse_dependency_specification_git_url(
url = Git.normalize_url(requirement) url = Git.normalize_url(requirement)
pair = {"name": parsed.name, "git": url.url} pair = {"name": parsed.name, "git": url.url}
if parsed.rev: if parsed.rev:
pair["rev"] = url.revision pair["rev"] = url.revision
if parsed.subdirectory:
pair["subdirectory"] = parsed.subdirectory
source_root = env.path.joinpath("src") if env else None source_root = env.path.joinpath("src") if env else None
package = Provider.get_package_from_vcs( package = Provider.get_package_from_vcs(
"git", url=url.url, rev=pair.get("rev"), source_root=source_root "git",
url=url.url,
rev=pair.get("rev"),
subdirectory=parsed.subdirectory,
source_root=source_root,
) )
pair["name"] = package.name pair["name"] = package.name
return pair return pair
......
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