]> git.decadent.org.uk Git - dak.git/blobdiff - dak/make_changelog.py
Generate a listing of the exported files
[dak.git] / dak / make_changelog.py
index 7dacf8252afd63f616528099aaa4289edd965110..939e8be106aa3a8ae82d7464f919ff1f6b243a8f 100755 (executable)
@@ -54,6 +54,7 @@ import sys
 import apt_pkg
 from glob import glob
 from shutil import rmtree
+from yaml import safe_dump
 from daklib.dbconn import *
 from daklib import utils
 from daklib.config import Config
@@ -62,6 +63,8 @@ from daklib.regexes import re_no_epoch
 
 ################################################################################
 
+filelist = 'filelist.yaml'
+
 def usage (exit_code=0):
     print """Generate changelog between two suites
 
@@ -194,7 +197,7 @@ def export_files(session, archive, clpool, progress=False):
             if not os.path.exists(path):
                 os.makedirs(path)
             if not os.path.exists(os.path.join(path, \
-                   '%s_%s.changelog' % (p, sources[p][s][0]))):
+                   '%s_%s_changelog' % (p, sources[p][s][0]))):
                 if not unpack.has_key(os.path.join(pool, sources[p][s][1])):
                     unpack[os.path.join(pool, sources[p][s][1])] = (path, set())
                 unpack[os.path.join(pool, sources[p][s][1])][1].add(s)
@@ -222,9 +225,9 @@ def export_files(session, archive, clpool, progress=False):
             for file in files:
                 for f in glob(os.path.join(tempdir, 'debian', '*%s' % file)):
                     for s in unpack[p][1]:
-                        suite = os.path.join(unpack[p][0], '%s.%s' \
+                        suite = os.path.join(unpack[p][0], '%s_%s' \
                                 % (s, os.path.basename(f)))
-                        version = os.path.join(unpack[p][0], '%s_%s.%s' % \
+                        version = os.path.join(unpack[p][0], '%s_%s_%s' % \
                                   (package[0], package[1], os.path.basename(f)))
                         if not os.path.exists(version):
                             os.link(f, version)
@@ -241,19 +244,21 @@ def export_files(session, archive, clpool, progress=False):
             stats['errors'] += 1
 
     for root, dirs, files in os.walk(clpool):
+        files = [f for f in files if f != filelist]
         if len(files):
-            if root.split('/')[-1] not in sources.keys():
-                if os.path.exists(root):
-                    rmtree(root)
-                    stats['removed'] += 1
+            if root != clpool:
+                if root.split('/')[-1] not in sources.keys():
+                    if os.path.exists(root):
+                        stats['removed'] += len(os.listdir(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))
                         stats['removed'] += 1
-
-    for root, dirs, files in os.walk(clpool):
+                        os.unlink(os.path.join(root, file))
         stats['files'] += len(files)
+    stats['files'] -= stats['removed']
+
     print 'make-changelog: file exporting finished'
     print '  * New packages unpacked: %d' % stats['unpack']
     print '  * New files created: %d' % stats['created']
@@ -261,6 +266,26 @@ def export_files(session, archive, clpool, progress=False):
     print '  * Unpack errors: %d' % stats['errors']
     print '  * Files available into changelog pool: %d' % stats['files']
 
+def generate_export_filelist(clpool):
+    clfiles = {}
+    for root, dirs, files in os.walk(clpool):
+        for file in [f for f in files if f != filelist]:
+            clpath = os.path.join(root, file).replace(clpool, '').strip('/')
+            source = clpath.split('/')[2]
+            elements = clpath.split('/')[3].split('_')
+            if source not in clfiles:
+                clfiles[source] = {}
+            if elements[0] == source:
+                if elements[1] not in clfiles[source]:
+                    clfiles[source][elements[1]] = []
+                clfiles[source][elements[1]].append(clpath)
+            else:
+                if elements[0] not in clfiles[source]:
+                    clfiles[source][elements[0]] = []
+                clfiles[source][elements[0]].append(clpath)
+    with open(os.path.join(clpool, filelist), 'w+') as fd:
+        safe_dump(clfiles, fd, default_flow_style=False)
+
 def main():
     Cnf = utils.get_conf()
     cnf = Config()
@@ -298,6 +323,7 @@ def main():
             archive = session.query(Archive).filter_by(archive_name=Options['Archive']).one()
             exportpath = os.path.join(Cnf['Dir::Export'], cnf.exportpath)
             export_files(session, archive, exportpath, progress)
+            generate_export_filelist(exportpath)
         else:
             utils.fubar('No changelog export path defined')
     elif binnmu: