+def testing_summary(summary, session):
+ """
+ Returns changes introduced in packages entering testing.
+ """
+
+ query = 'SELECT source, changelog FROM changelogs WHERE'
+ fd = open(summary, 'r')
+ for package in fd.read().splitlines():
+ package = package.split()
+ if package[1] != package[2]:
+ if package[1] == '(not_in_testing)':
+ package[1] = 0
+ query += " source = '%s' AND version > '%s' AND version <= '%s'" \
+ % (package[0], package[1], package[2])
+ query += " AND architecture LIKE '%source%' OR"
+ fd.close()
+ query += ' False ORDER BY source, version DESC;'
+
+ return session.execute(query)
+
+def display_changes(uploads, index):
+ prev_upload = None
+ for upload in uploads:
+ if prev_upload and prev_upload != upload[0]:
+ print
+ print upload[index]
+ prev_upload = upload[0]
+
+def export_files(session, pool, clpool, temppath):
+ """
+ Export interesting files from source packages.
+ """
+
+ sources = {}
+ query = """SELECT s.source, su.suite_name AS suite, s.version, f.filename
+ FROM source s
+ JOIN src_associations sa ON sa.source = s.id
+ JOIN suite su ON su.id = sa.suite
+ JOIN files f ON f.id = s.file
+ ORDER BY s.source, suite"""
+
+ for p in session.execute(query):
+ if not sources.has_key(p[0]):
+ sources[p[0]] = {}
+ sources[p[0]][p[1]] = (p[2], p[3])
+
+ tempdir = utils.temp_dirname(parent=temppath)
+ os.rmdir(tempdir)
+
+ for p in sources.keys():
+ for s in sources[p].keys():
+ files = (('changelog', True),
+ ('copyright', True),
+ ('NEWS.Debian', False),
+ ('README.Debian', False))
+ path = os.path.join(clpool, sources[p][s][1].split('/')[0], \
+ split('(^lib\S|^\S)', p)[1], p)
+ if not os.path.exists(path):
+ os.makedirs(path)
+ for file in files:
+ for f in glob(os.path.join(path, s + '.*')):
+ os.unlink(f)
+ try:
+ for file in files:
+ t = os.path.join(path, '%s_%s.*%s' % (p, sources[p][s][0], file[0]))
+ if file[1] and not glob(t):
+ raise OSError
+ else:
+ for f in glob(t):
+ os.link(f, os.path.join(path, '%s.%s' % \
+ (s, os.path.basename(f).split('%s_%s.' \
+ % (p, sources[p][s][0]))[1])))
+ except OSError:
+ cmd = 'dpkg-source --no-check --no-copy -x %s %s' \
+ % (os.path.join(pool, sources[p][s][1]), tempdir)
+ (result, output) = getstatusoutput(cmd)
+ if not result:
+ for file in files:
+ try:
+ for f in glob(os.path.join(tempdir, 'debian', '*' + file[0])):
+ for dest in os.path.join(path, '%s_%s.%s' \
+ % (p, sources[p][s][0], os.path.basename(f))), \
+ os.path.join(path, '%s.%s' % (s, os.path.basename(f))):
+ if not os.path.exists(dest):
+ os.link(f, dest)
+ except:
+ print 'make-changelog: unable to extract %s for %s_%s' \
+ % (os.path.basename(f), p, sources[p][s][0])
+ else:
+ print 'make-changelog: unable to unpack %s_%s' % (p, sources[p][s][0])
+ continue
+
+ rmtree(tempdir)
+
+ for root, dirs, files in os.walk(clpool):
+ if len(files):
+ if root.split('/')[-1] not in sources.keys():
+ if os.path.exists(root):
+ rmtree(root)
+ for file in files:
+ if os.path.exists(os.path.join(root, file)):
+ if os.stat(os.path.join(root, file)).st_nlink == 1:
+ os.unlink(os.path.join(root, file))
+