Categorize all versions of a crate according to the given version ranges. :return: unaffected versions, affected versions
(
all_versions: Set[str],
unaffected_version_ranges: List[VersionRange],
affected_version_ranges: List[VersionRange],
resolved_version_ranges: List[VersionRange],
)
| 135 | |
| 136 | |
| 137 | def categorize_versions( |
| 138 | all_versions: Set[str], |
| 139 | unaffected_version_ranges: List[VersionRange], |
| 140 | affected_version_ranges: List[VersionRange], |
| 141 | resolved_version_ranges: List[VersionRange], |
| 142 | ) -> Tuple[Set[str], Set[str]]: |
| 143 | """ |
| 144 | Categorize all versions of a crate according to the given version ranges. |
| 145 | |
| 146 | :return: unaffected versions, affected versions |
| 147 | """ |
| 148 | |
| 149 | unaffected, affected = set(), set() |
| 150 | |
| 151 | if ( |
| 152 | not unaffected_version_ranges |
| 153 | and not affected_version_ranges |
| 154 | and not resolved_version_ranges |
| 155 | ): |
| 156 | return unaffected, affected |
| 157 | |
| 158 | # TODO: This is probably wrong |
| 159 | for version in all_versions: |
| 160 | version_obj = SemverVersion(version) |
| 161 | if affected_version_ranges and all([version_obj in av for av in affected_version_ranges]): |
| 162 | affected.add(version) |
| 163 | elif unaffected_version_ranges and all( |
| 164 | [version_obj in av for av in unaffected_version_ranges] |
| 165 | ): |
| 166 | unaffected.add(version) |
| 167 | elif resolved_version_ranges and all([version_obj in av for av in resolved_version_ranges]): |
| 168 | unaffected.add(version) |
| 169 | |
| 170 | # If some versions were not classified above, one or more of the given ranges might be empty, so |
| 171 | # the remaining versions default to either affected or unaffected. |
| 172 | uncategorized_versions = all_versions - unaffected.union(affected) |
| 173 | if uncategorized_versions: |
| 174 | if not affected_version_ranges: |
| 175 | affected.update(uncategorized_versions) |
| 176 | else: |
| 177 | unaffected.update(uncategorized_versions) |
| 178 | |
| 179 | return unaffected, affected |
| 180 | |
| 181 | |
| 182 | def get_toml_lines(lines): |