@@ -120,13 +120,22 @@ def _fetch_package(self, package_name: str, api: str) -> T.Tuple[PackageState, b
120120 if pkg :
121121 return pkg , True
122122 meson_depname = _dependency_name (package_name , api )
123- subdir , _ = self .environment .wrap_resolver .resolve (meson_depname )
123+ return self ._fetch_package_from_subproject (package_name , meson_depname )
124+
125+ def _fetch_package_from_subproject (self , package_name : str , meson_depname : str ) -> T .Tuple [PackageState , bool ]:
126+ subp_name , _ = self .environment .wrap_resolver .find_dep_provider (meson_depname )
127+ subdir , _ = self .environment .wrap_resolver .resolve (subp_name )
124128 subprojects_dir = os .path .join (subdir , 'subprojects' )
125129 self .environment .wrap_resolver .load_and_merge (subprojects_dir , T .cast ('SubProject' , meson_depname ))
126130 manifest = self ._load_manifest (subdir )
127131 downloaded = \
128- meson_depname in self .environment .wrap_resolver .wraps and \
129- self .environment .wrap_resolver .wraps [meson_depname ].type is not None
132+ subp_name in self .environment .wrap_resolver .wraps and \
133+ self .environment .wrap_resolver .wraps [subp_name ].type is not None
134+ key = PackageKey (package_name , version .api (manifest .package .version ))
135+
136+ pkg = self .packages .get (key )
137+ if pkg :
138+ return pkg , True
130139 pkg = PackageState (manifest , downloaded )
131140 self .packages [key ] = pkg
132141 # Merge target specific dependencies that are enabled
@@ -141,7 +150,12 @@ def _fetch_package(self, package_name: str, api: str) -> T.Tuple[PackageState, b
141150 return pkg , False
142151
143152 def _dep_package (self , dep : Dependency ) -> PackageState :
144- return self .packages [PackageKey (dep .package , dep .api )]
153+ if dep .git :
154+ _ , _ , directory = _parse_git_url (dep .git , dep .branch )
155+ dep_pkg , _ = self ._fetch_package_from_subproject (dep .package , directory )
156+ else :
157+ dep_pkg , _ = self ._fetch_package (dep .package , dep .api )
158+ return dep_pkg
145159
146160 def _load_manifest (self , subdir : str ) -> Manifest :
147161 manifest_ = self .manifests .get (subdir )
@@ -165,7 +179,7 @@ def _add_dependency(self, pkg: PackageState, depname: str) -> None:
165179 # It could be build/dev/target dependency. Just ignore it.
166180 return
167181 pkg .required_deps .add (depname )
168- dep_pkg , _ = self ._fetch_package (dep . package , dep . api )
182+ dep_pkg = self ._dep_package (dep )
169183 if dep .default_features :
170184 self ._enable_feature (dep_pkg , 'default' )
171185 for f in dep .features :
0 commit comments