Skip to content

Commit b570aaf

Browse files
committed
cargo: move fetching to _dep_package
This allows modifying the version number before the package is fetched. Extracted from a patch by Xavier Claessens <xclaessens@netflix.com>. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent dca8b07 commit b570aaf

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

mesonbuild/cargo/interpreter.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)