@@ -65,24 +65,10 @@ where
6565*/
6666pub 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.
148128pub 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