summaryrefslogtreecommitdiffstats
path: root/cmp-apks-iso
blob: 76b44d7620d2356bb841bffa436ff1a8e05797f0 (plain)
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
70
71
72
73
74
75
76
77
78
79
80
#!/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