abuild/cmp-apks-iso

81 lines
1.6 KiB
Lua
Executable File

#!/usr/bin/env lua
-- script to compare the packages versions in 2 iso images
-- usage: compare-apks
maxlen = 0
function read_package_list(file)
local a = {}
local h
-- h = io.popen("tar -O -zxf ".. file.." -- apks/INDEX.md5.gz | gunzip -c | awk '{ print $2}'")
h = io.popen("isoinfo -R -f -i "..file.." | grep '.apk$' | sed 's:.*/::'")
for line in h:lines() do
p, v = string.match(line, "^(.+)-(%d.*).apk")
a[p] = v
if maxlen < #p + #v + 2 then
maxlen = #p + #v + 2
end
end
h:close()
return a
end
-- print all packages that exist in a1 but not in a2
function missing_packages(a1, a2)
local ret = {}
local p,v
for p,v in pairs(a1) do
if a2[p] == nil then
table.insert(ret, p.."-"..v)
end
end
table.sort(ret)
return ret
end
function unexpand_tabs(s, tab)
tab = tab or 8
local pat = string.rep(".", tab)
s = string.gsub(s, pat, "%0\1")
s = string.gsub(s, " +\1", "\t")
s = string.gsub(s, "\1", "")
return s
end
function upgraded_packages(a1, a2)
local p,v, tmp
local a = {}
for p,v in pairs(a2) do
if a1[p] and a1[p] ~= v then
tmp = unexpand_tabs(string.format("%-"..tostring(maxlen).."s(%s)",
p.."-"..v, a1[p]))
table.insert(a, tmp)
end
end
table.sort(a)
return a
end
apks1 = read_package_list(arg[1])
apks2 = read_package_list(arg[2])
print("Removed packages:")
for dummy,line in ipairs(missing_packages(apks1, apks2)) do
print(line)
end
print("\n")
print("New packages:")
for dummy,line in ipairs(missing_packages(apks2, apks1)) do
print(line)
end
print("\n")
print("Upgraded/downgraded packages (from version):")
for dummy,line in ipairs(upgraded_packages(apks1, apks2)) do
print(line)
end