diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-08-13 14:30:08 +0200 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-10-14 09:35:56 -0700 |
| commit | f864690f3a74ed4f751e9b6d9a8855ec16030c65 (patch) | |
| tree | a6c385ca0f938a3390231c687e661467d0119285 | |
| parent | dfbb1ab78186de259ce759b91d4061b8a246f2b1 (diff) | |
| download | meson-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.py | 24 |
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: |
