summaryrefslogtreecommitdiffstats
path: root/cmp-apks-iso
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2009-04-13 14:54:44 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2009-04-13 14:54:44 +0000
commit93ada374bc97e413da72f4ab4026246ca5398dfe (patch)
treea4a1ad052489e4f882b36432d86cab868e979e67 /cmp-apks-iso
parent236620ca8d62618161e3c255cf008bdee30960d0 (diff)
downloadalpine-iso-93ada374bc97e413da72f4ab4026246ca5398dfe.tar.bz2
alpine-iso-93ada374bc97e413da72f4ab4026246ca5398dfe.tar.xz
added utility to compare packages versions on iso images
Diffstat (limited to 'cmp-apks-iso')
-rwxr-xr-xcmp-apks-iso80
1 files changed, 80 insertions, 0 deletions
diff --git a/cmp-apks-iso b/cmp-apks-iso
new file mode 100755
index 0000000..2c7951f
--- /dev/null
+++ b/cmp-apks-iso
@@ -0,0 +1,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 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
+