81 lines
1.6 KiB
Lua
Executable File
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 pacakges:")
|
|
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
|
|
|