Calculate the differences between two Pyodide lockfiles. Returns a tuple of three lists: - Added packages - Removed packages - Changed packages (with old and new versions)
(
old_lockfile_path: Path, new_lockfile_path: Path
)
| 161 | |
| 162 | |
| 163 | def calculate_diff( |
| 164 | old_lockfile_path: Path, new_lockfile_path: Path |
| 165 | ) -> tuple[list[PackageDiff], list[PackageDiff], list[PackageDiff]]: |
| 166 | """ |
| 167 | Calculate the differences between two Pyodide lockfiles. |
| 168 | |
| 169 | Returns a tuple of three lists: |
| 170 | - Added packages |
| 171 | - Removed packages |
| 172 | - Changed packages (with old and new versions) |
| 173 | """ |
| 174 | old_lockfile = PyodideLockSpec.from_json(Path(old_lockfile_path)) |
| 175 | new_lockfile = PyodideLockSpec.from_json(Path(new_lockfile_path)) |
| 176 | |
| 177 | old_packages = { |
| 178 | pkg.name: pkg |
| 179 | for pkg in old_lockfile.packages.values() |
| 180 | if is_normal_python_package(pkg) |
| 181 | } |
| 182 | new_packages = { |
| 183 | pkg.name: pkg |
| 184 | for pkg in new_lockfile.packages.values() |
| 185 | if is_normal_python_package(pkg) |
| 186 | } |
| 187 | |
| 188 | added = [ |
| 189 | PackageDiff(name=pkg.name, old_version=None, new_version=pkg.version) |
| 190 | for name, pkg in new_packages.items() |
| 191 | if name not in old_packages |
| 192 | ] |
| 193 | |
| 194 | removed = [ |
| 195 | PackageDiff(name=pkg.name, old_version=pkg.version, new_version=None) |
| 196 | for name, pkg in old_packages.items() |
| 197 | if name not in new_packages |
| 198 | ] |
| 199 | |
| 200 | changed = [ |
| 201 | PackageDiff( |
| 202 | name=name, |
| 203 | old_version=old_packages[name].version, |
| 204 | new_version=new_packages[name].version, |
| 205 | ) |
| 206 | for name in set(old_packages) & set(new_packages) |
| 207 | if old_packages[name].version != new_packages[name].version |
| 208 | ] |
| 209 | |
| 210 | return added, removed, changed |
| 211 | |
| 212 | |
| 213 | def main(): |
searching dependent graphs…