cmp-apks-iso 1.63 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
#!/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")

70
print("New packages:")
71 72 73 74 75 76 77 78 79 80
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