summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-08-13 14:30:08 +0200
committerDylan Baker <dylan@pnwbakers.com>2025-10-14 09:35:56 -0700
commitf864690f3a74ed4f751e9b6d9a8855ec16030c65 (patch)
treea6c385ca0f938a3390231c687e661467d0119285
parentdfbb1ab78186de259ce759b91d4061b8a246f2b1 (diff)
downloadmeson-f864690f3a74ed4f751e9b6d9a8855ec16030c65.tar.gz
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>
-rw-r--r--mesonbuild/cargo/interpreter.py24
1 files changed, 19 insertions, 5 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py
index ea90f488e..be3d29337 100644
--- a/mesonbuild/cargo/interpreter.py
+++ b/mesonbuild/cargo/interpreter.py
@@ -120,13 +120,22 @@ class Interpreter:
if pkg:
return pkg, True
meson_depname = _dependency_name(package_name, api)
- subdir, _ = self.environment.wrap_resolver.resolve(meson_depname)
+ return self._fetch_package_from_subproject(package_name, meson_depname)
+
+ def _fetch_package_from_subproject(self, package_name: str, meson_depname: str) -> T.Tuple[PackageState, bool]:
+ subp_name, _ = self.environment.wrap_resolver.find_dep_provider(meson_depname)
+ subdir, _ = self.environment.wrap_resolver.resolve(subp_name)
subprojects_dir = os.path.join(subdir, 'subprojects')
self.environment.wrap_resolver.load_and_merge(subprojects_dir, T.cast('SubProject', meson_depname))
manifest = self._load_manifest(subdir)
downloaded = \
- meson_depname in self.environment.wrap_resolver.wraps and \
- self.environment.wrap_resolver.wraps[meson_depname].type is not None
+ subp_name in self.environment.wrap_resolver.wraps and \
+ self.environment.wrap_resolver.wraps[subp_name].type is not None
+ key = PackageKey(package_name, version.api(manifest.package.version))
+
+ pkg = self.packages.get(key)
+ if pkg:
+ return pkg, True
pkg = PackageState(manifest, downloaded)
self.packages[key] = pkg
# Merge target specific dependencies that are enabled
@@ -141,7 +150,12 @@ class Interpreter:
return pkg, False
def _dep_package(self, dep: Dependency) -> PackageState:
- return self.packages[PackageKey(dep.package, dep.api)]
+ if dep.git:
+ _, _, directory = _parse_git_url(dep.git, dep.branch)
+ dep_pkg, _ = self._fetch_package_from_subproject(dep.package, directory)
+ else:
+ dep_pkg, _ = self._fetch_package(dep.package, dep.api)
+ return dep_pkg
def _load_manifest(self, subdir: str) -> Manifest:
manifest_ = self.manifests.get(subdir)
@@ -165,7 +179,7 @@ class Interpreter:
# It could be build/dev/target dependency. Just ignore it.
return
pkg.required_deps.add(depname)
- dep_pkg, _ = self._fetch_package(dep.package, dep.api)
+ dep_pkg = self._dep_package(dep)
if dep.default_features:
self._enable_feature(dep_pkg, 'default')
for f in dep.features: