2 # -*- coding: utf-8 -*-
6 def deb_size_map(iso_path):
7 map = {} # package -> (version, size)
8 isoinfo = subprocess.Popen(['isoinfo', '-lR', '-i', iso_path],
9 stdout=subprocess.PIPE)
10 out = isoinfo.communicate()[0]
11 assert isoinfo.returncode == 0
13 for l in out.splitlines():
15 if not l.endswith('.deb'):
22 (pkg, version, _) = fname.split('_')
23 map[pkg] = (version, size)
31 if len(sys.argv) != 3:
32 print >> sys.stderr, 'Usage: %s <old iso> <new iso>' % sys.argv[0]
35 old_map = deb_size_map(sys.argv[1])
36 new_map = deb_size_map(sys.argv[2])
38 print '== Removed packages =='
40 for p, (v, s) in old_map.iteritems():
42 print '%s (%.1f MB)' % (p, s / 1000000.)
44 print 'TOTAL: -%.1f MB' % (sum/1000000.)
47 print '\n== Added packages =='
48 for p, (v, s) in new_map.iteritems():
50 print '%s (%.1f MB)' % (p, s / 1000000.)
52 print 'TOTAL: +%.1f MB' % (sum/1000000.)
54 print '\n== Changed packages =='
56 for p, (v, s) in old_map.iteritems():
63 # only show differences > 100 kB to filter out noise
64 if new_s - s > 100000:
65 print '%s (Δ %.1f MB - %s: %.1f MB %s: %.1f MB)' % (
66 p, (new_s-s)/1000000., v, s/1000000., new_map[p][0], new_s/1000000.)
68 print 'TOTAL difference: %.1f MB' % (sum/1000000.)