Skip to content

Commit d1a7d7b

Browse files
vshakitskiylpil
authored andcommitted
include transitive dependencies
1 parent c4d2b29 commit d1a7d7b

File tree

1 file changed

+38
-47
lines changed

1 file changed

+38
-47
lines changed

compiler-core/src/dependency.rs

Lines changed: 38 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -65,24 +65,10 @@ where
6565
*/
6666
pub type PackageVersionDiffs = HashMap<String, (Version, Version)>;
6767

68-
/// Get the resolved versions of the direct dependencies
69-
fn resolve_versions_from_manifest(manifest: &manifest::Manifest) -> PackageVersions {
70-
manifest
71-
.packages
72-
.iter()
73-
.filter(|manifest_package| {
74-
manifest
75-
.requirements
76-
.iter()
77-
.any(|(required_pkg, _)| manifest_package.name == *required_pkg)
78-
})
79-
.map(|manifest_pkg| (manifest_pkg.name.to_string(), manifest_pkg.version.clone()))
80-
.collect()
81-
}
82-
83-
fn resolve_major_versions(
68+
fn resolve_versions_diffs(
8469
package_fetcher: &impl PackageFetcher,
8570
versions: PackageVersions,
71+
check_major_versions: bool,
8672
) -> PackageVersionDiffs {
8773
versions
8874
.iter()
@@ -98,8 +84,17 @@ fn resolve_major_versions(
9884
.filter(|version| !version.is_pre())
9985
.max()?;
10086

101-
if latest.major <= version.major {
102-
return None;
87+
match check_major_versions {
88+
true => {
89+
if latest.major <= version.major {
90+
return None;
91+
}
92+
}
93+
false => {
94+
if latest <= version {
95+
return None;
96+
}
97+
}
10398
}
10499

105100
Some((package.to_string(), (version.clone(), latest.clone())))
@@ -113,44 +108,40 @@ pub fn check_for_major_version_updates(
113108
manifest: &manifest::Manifest,
114109
package_fetcher: &impl PackageFetcher,
115110
) -> PackageVersionDiffs {
116-
let versions = resolve_versions_from_manifest(manifest);
117-
resolve_major_versions(package_fetcher, versions)
118-
}
119-
120-
fn resolve_all_versions(
121-
package_fetcher: &impl PackageFetcher,
122-
versions: PackageVersions,
123-
) -> PackageVersionDiffs {
124-
versions
111+
let versions: PackageVersions = manifest
112+
.packages
125113
.iter()
126-
.filter_map(|(package, version)| {
127-
let Ok(hex_package) = package_fetcher.get_dependencies(package) else {
128-
return None;
129-
};
130-
131-
let latest = hex_package
132-
.releases
114+
.filter(|manifest_package| {
115+
manifest
116+
.requirements
133117
.iter()
134-
.map(|release| &release.version)
135-
.filter(|version| !version.is_pre())
136-
.max()?;
137-
138-
if latest <= version {
139-
return None;
140-
}
141-
142-
Some((package.to_string(), (version.clone(), latest.clone())))
118+
.any(|(required_pkg, _)| manifest_package.name == *required_pkg)
143119
})
144-
.collect()
120+
.map(|manifest_pkg| (manifest_pkg.name.to_string(), manifest_pkg.version.clone()))
121+
.collect();
122+
123+
resolve_versions_diffs(package_fetcher, versions, true)
145124
}
146125

147-
/// Check for version updates for direct dependencies.
126+
/// Check for version updates for direct and transitive dependencies that are being blocked by some version
127+
/// constraints.
148128
pub fn check_for_version_updates(
149129
manifest: &manifest::Manifest,
150130
package_fetcher: &impl PackageFetcher,
151131
) -> PackageVersionDiffs {
152-
let versions = resolve_versions_from_manifest(manifest);
153-
resolve_all_versions(package_fetcher, versions)
132+
let versions = manifest
133+
.packages
134+
.iter()
135+
.filter(|manifest_package| {
136+
matches!(
137+
manifest_package.source,
138+
manifest::ManifestPackageSource::Hex { .. }
139+
)
140+
})
141+
.map(|manifest_pkg| (manifest_pkg.name.to_string(), manifest_pkg.version.clone()))
142+
.collect();
143+
144+
resolve_versions_diffs(package_fetcher, versions, false)
154145
}
155146

156147
// If the string would parse to an exact version then return the version

0 commit comments

Comments
 (0)