@@ -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