2022-05-15 20:31:22 +00:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import subprocess
|
|
|
|
import json
|
|
|
|
|
|
|
|
old_drv = sys.argv[1]
|
|
|
|
new_drv = sys.argv[2]
|
|
|
|
|
|
|
|
# Read both derivations recursively
|
|
|
|
|
2022-05-15 20:54:48 +00:00
|
|
|
old_derivation = json.load(open(old_drv))
|
|
|
|
new_derivation = json.load(open(new_drv))
|
2022-05-15 20:31:22 +00:00
|
|
|
|
|
|
|
packages = {}
|
|
|
|
|
|
|
|
for drv in old_derivation:
|
|
|
|
drvData = old_derivation[drv]
|
2022-06-19 05:56:08 +00:00
|
|
|
if not "pname" in drvData["env"] and not "name" in drvData["env"]:
|
|
|
|
continue
|
2022-06-19 05:46:18 +00:00
|
|
|
used_name = drvData["env"]["pname"] if "pname" in drvData["env"] else drvData["env"]["name"]
|
|
|
|
version = drvData["env"]["version"] if "version" in drvData["env"] else drv
|
|
|
|
if used_name in packages:
|
|
|
|
packages[used_name]["old"].add(version)
|
|
|
|
else:
|
|
|
|
packages[used_name] = {"old": {version}}
|
2022-05-15 20:31:22 +00:00
|
|
|
|
|
|
|
for drv in new_derivation:
|
|
|
|
drvData = new_derivation[drv]
|
2022-06-19 05:56:08 +00:00
|
|
|
if not "pname" in drvData["env"] and not "name" in drvData["env"]:
|
|
|
|
continue
|
2022-06-19 05:46:18 +00:00
|
|
|
used_name = drvData["env"]["pname"] if "pname" in drvData["env"] else drvData["env"]["name"]
|
|
|
|
version = drvData["env"]["version"] if "version" in drvData["env"] else drv
|
|
|
|
if used_name in packages:
|
|
|
|
if "new" in packages[used_name]:
|
|
|
|
packages[used_name]["new"].add(version)
|
2022-05-15 20:31:22 +00:00
|
|
|
else:
|
2022-06-19 05:46:18 +00:00
|
|
|
packages[used_name]["new"] = {version}
|
|
|
|
else:
|
|
|
|
packages[used_name] = {"new": {version}}
|
2022-05-15 20:31:22 +00:00
|
|
|
|
|
|
|
for package in packages:
|
|
|
|
if "old" in packages[package] and "new" in packages[package]:
|
|
|
|
if packages[package]["old"] != packages[package]["new"]:
|
2022-05-18 20:19:41 +00:00
|
|
|
print(
|
2022-06-19 05:46:18 +00:00
|
|
|
f"{package}: {sorted(packages[package]['old'])} -> {sorted(packages[package]['new'])}"
|
2022-05-18 20:19:41 +00:00
|
|
|
)
|
2022-05-15 20:31:22 +00:00
|
|
|
elif "old" in packages[package]:
|
2022-06-19 05:46:18 +00:00
|
|
|
print(f"{package}: {sorted(packages[package]['old'])} -> removed")
|
2022-05-15 20:31:22 +00:00
|
|
|
elif "new" in packages[package]:
|
2022-06-19 05:46:18 +00:00
|
|
|
print(f"{package}: added -> {sorted(packages[package]['new'])}")
|