Utility function to get upgradable packages Sample return data: { 'pkgname': '1.2.3-45', ... }
(dist_upgrade=True, **kwargs)
| 1434 | |
| 1435 | |
| 1436 | def _get_upgradable(dist_upgrade=True, **kwargs): |
| 1437 | """ |
| 1438 | Utility function to get upgradable packages |
| 1439 | |
| 1440 | Sample return data: |
| 1441 | { 'pkgname': '1.2.3-45', ... } |
| 1442 | """ |
| 1443 | |
| 1444 | cmd = ["apt-get", "--just-print"] |
| 1445 | if dist_upgrade: |
| 1446 | cmd.append("dist-upgrade") |
| 1447 | else: |
| 1448 | cmd.append("upgrade") |
| 1449 | try: |
| 1450 | cmd.extend(["-o", f"APT::Default-Release={kwargs['fromrepo']}"]) |
| 1451 | except KeyError: |
| 1452 | pass |
| 1453 | |
| 1454 | call = _call_apt(cmd) |
| 1455 | if call["retcode"] != 0: |
| 1456 | msg = "Failed to get upgrades" |
| 1457 | for key in ("stderr", "stdout"): |
| 1458 | if call[key]: |
| 1459 | msg += ": " + call[key] |
| 1460 | break |
| 1461 | raise CommandExecutionError(msg) |
| 1462 | else: |
| 1463 | out = call["stdout"] |
| 1464 | |
| 1465 | # rexp parses lines that look like the following: |
| 1466 | # Conf libxfont1 (1:1.4.5-1 Debian:testing [i386]) |
| 1467 | rexp = re.compile(r"(?m)^Conf ([^ ]+) \(([^ ]+)") # Package name # Version |
| 1468 | keys = ["name", "version"] |
| 1469 | |
| 1470 | def _get(line, k): |
| 1471 | return line[keys.index(k)] |
| 1472 | |
| 1473 | upgrades = rexp.findall(out) |
| 1474 | |
| 1475 | ret = {} |
| 1476 | for line in upgrades: |
| 1477 | name = _get(line, "name") |
| 1478 | version_num = _get(line, "version") |
| 1479 | ret[name] = version_num |
| 1480 | |
| 1481 | return ret |
| 1482 | |
| 1483 | |
| 1484 | def list_upgrades(refresh=True, dist_upgrade=True, **kwargs): |
no test coverage detected