Handler for overlapping attributes

This commit is contained in:
Philip Sakievich 2025-03-12 21:19:24 -06:00 committed by psakiev
parent c713c5567f
commit 9b328772a6
2 changed files with 20 additions and 15 deletions

View File

@ -1617,24 +1617,17 @@ def for_package_version(pkg, version=None):
else:
ref_type = "commit" if version.is_commit else "tag"
ref_value = version.ref
kwargs = {ref_type: ref_value, "no_cache": True}
kwargs["git"] = pkg.git
version_attrs = pkg.versions.get(version)
if version_attrs and version_attrs.get("git"):
kwargs["git"] = version_attrs["git"]
kwargs["submodules"] = getattr(pkg, "submodules", False)
kwargs = {ref_type: ref_value, "no_cache": ref_type != "commit"}
kwargs["git"] = pkg.version_or_package_attr("git", version)
kwargs["submodules"] = pkg.version_or_package_attr("submodules", version, False)
# if the ref_version is a known version from the package, use that version's
# submodule specifications
if hasattr(pkg.version, "ref_version"):
ref_version_attributes = pkg.versions.get(pkg.version.ref_version)
if ref_version_attributes:
kwargs["submodules"] = ref_version_attributes.get(
"submodules", kwargs["submodules"]
)
kwargs["git"] = ref_version_attributes.get("git", kwargs["git"])
# attributes
ref_version = getattr(pkg.version, "ref_version")
if ref_version:
kwargs["git"] = pkg.version_or_package_attr("git", ref_version)
kwargs["submodules"] = pkg.version_or_package_attr("submodules", ref_version, False)
fetcher = GitFetchStrategy(**kwargs)
return fetcher

View File

@ -989,6 +989,18 @@ def detect_dev_src_change(self) -> bool:
assert dev_path_var and record, "dev_path variant and record must be present"
return fsys.recursive_mtime_greater_than(dev_path_var.value, record.installation_time)
def version_or_package_attr(self, attr, version, default=None):
"""
Get an attribute that could be on the version or package with preference to the version
"""
version_attrs = self.versions.get(version)
if version_attrs and attr in version_attrs:
return version_attrs.get(attr)
value = getattr(self, attr, default)
if value is None:
raise PackageError(f"{attr} attribute not defined on {self.name}")
return value
@property
def needs_commit(self) -> bool:
"""