@@ -117,7 +117,7 @@ def interpret_package(self, manifest: Manifest, build: builder.Builder, subdir:
117117 member = ws .packages_to_member [manifest .package .name ]
118118 pkg = ws .packages [member ]
119119 else :
120- pkg , cached = self ._fetch_package (manifest . package . name , manifest . package . api )
120+ pkg , cached = self ._fetch_package_from_manifest (manifest )
121121 if not cached :
122122 # This is an entry point, always enable the 'default' feature.
123123 # FIXME: We should have a Meson option similar to `cargo build --no-default-features`
@@ -223,15 +223,15 @@ def _require_workspace_member(self, ws: WorkspaceState, member: str) -> PackageS
223223 ws .required_members .append (member )
224224 return pkg
225225
226- def _fetch_package (self , package_name : str , api : str ) -> T . Tuple [ PackageState , bool ] :
226+ def _fetch_package (self , package_name : str , api : str ) -> PackageState :
227227 key = PackageKey (package_name , api )
228228 pkg = self .packages .get (key )
229229 if pkg :
230- return pkg , True
230+ return pkg
231231 meson_depname = _dependency_name (package_name , api )
232232 return self ._fetch_package_from_subproject (package_name , meson_depname )
233233
234- def _fetch_package_from_subproject (self , package_name : str , meson_depname : str ) -> T . Tuple [ PackageState , bool ] :
234+ def _fetch_package_from_subproject (self , package_name : str , meson_depname : str ) -> PackageState :
235235 subp_name , _ = self .environment .wrap_resolver .find_dep_provider (meson_depname )
236236 if subp_name is None :
237237 # If Cargo.lock has a different version, this could be a resolution
@@ -251,17 +251,28 @@ def _fetch_package_from_subproject(self, package_name: str, meson_depname: str)
251251 downloaded = \
252252 subp_name in self .environment .wrap_resolver .wraps and \
253253 self .environment .wrap_resolver .wraps [subp_name ].type is not None
254+
254255 if isinstance (manifest , Workspace ):
255256 ws = self ._get_workspace (manifest , subdir )
256257 member = ws .packages_to_member [package_name ]
257258 pkg = self ._require_workspace_member (ws , member )
258- return pkg , False
259+ return pkg
260+
259261 key = PackageKey (package_name , version .api (manifest .package .version ))
262+ pkg = self .packages .get (key )
263+ if pkg :
264+ return pkg
265+ pkg = PackageState (manifest , downloaded )
266+ self .packages [key ] = pkg
267+ self ._prepare_package (pkg )
268+ return pkg
260269
270+ def _fetch_package_from_manifest (self , manifest : Manifest ) -> T .Tuple [PackageState , bool ]:
271+ key = PackageKey (manifest .package .name , version .api (manifest .package .version ))
261272 pkg = self .packages .get (key )
262273 if pkg :
263274 return pkg , True
264- pkg = PackageState (manifest , downloaded )
275+ pkg = PackageState (manifest , downloaded = False )
265276 self .packages [key ] = pkg
266277 self ._prepare_package (pkg )
267278 return pkg , False
@@ -287,7 +298,7 @@ def _dep_package(self, pkg: PackageState, dep: Dependency) -> PackageState:
287298 dep_pkg = self ._require_workspace_member (ws , dep_member )
288299 elif dep .git :
289300 _ , _ , directory = _parse_git_url (dep .git , dep .branch )
290- dep_pkg , _ = self ._fetch_package_from_subproject (dep .package , directory )
301+ dep_pkg = self ._fetch_package_from_subproject (dep .package , directory )
291302 else :
292303 # From all available versions from Cargo.lock, pick the most recent
293304 # satisfying the constraints
@@ -302,7 +313,7 @@ def _dep_package(self, pkg: PackageState, dep: Dependency) -> PackageState:
302313 else :
303314 if not dep .meson_version :
304315 raise MesonException (f'Cannot determine version of cargo package { dep .package } ' )
305- dep_pkg , _ = self ._fetch_package (dep .package , dep .api )
316+ dep_pkg = self ._fetch_package (dep .package , dep .api )
306317 return dep_pkg
307318
308319 def _load_manifest (self , subdir : str , workspace : T .Optional [Workspace ] = None , member_path : str = '' ) -> T .Union [Manifest , Workspace ]:
0 commit comments