+ for sec, sep in (('mirrors', ' '),
+ ('mirror names', ' - ')):
+ entries = ['%s%s%s' % (mirror, sep, cfg.get(sec, mirror))
+ for mirror in cfg.options('mirrors')]
+ f = open(os.path.join(outdir, 'mirmon-%s.txt' % sec.replace(' ', '-')),
+ 'w')
+ f.write('\n'.join(entries + ['']))
+ f.close()
+
+
+def sort_by_tasks(db):
+ tasks = {}
+ for pkg in db.keys():
+ if not 'blends' in db[pkg]:
+ # no blend info
+ continue
+ blendinfo = db[pkg]['blends']
+ if not 'tasks' in blendinfo:
+ # no task info in blend data
+ continue
+ taskinfo = blendinfo['tasks']
+ for task in taskinfo:
+ taskname = task[1]
+ if not taskname in tasks:
+ tasks[taskname] = []
+ else:
+ tasks[taskname].append(pkg)
+ return tasks
+
+
+def sort_by_maintainer(db):
+ maints = {}
+ maint_ids = {}
+ for pkg in db.keys():
+ maint = None
+ pkginfo = db[pkg]
+ # start with the blends info
+ if 'blends' in pkginfo and 'responsible' in pkginfo['blends']:
+ maint = pkginfo['blends']['responsible']
+ if not 'main' in db[pkg] and maint is None:
+ # no info
+ continue
+ info = db[pkg]['main']
+ if not 'maintainer' in info and maint is None:
+ # no maintainer info
+ continue
+ if 'original_maintainer' in info and not info['original_maintainer'] is None:
+ maint = info['original_maintainer']
+ elif 'maintainer' in info and not info['maintainer'] is None:
+ maint = info['maintainer']
+ if maint is None:
+ # no sane maintainer info
+ continue
+ # safeguard: <> confuses sphinx and we don't care about different emails
+ maint = maint[:maint.find('<')].strip()
+ # kick out non-ascii ones (should not be, but too tired to find the bug)
+ try:
+ codecs.ascii_decode(maint)
+ except UnicodeEncodeError:
+ continue
+ if not maint.lower() in maints:
+ maints[maint.lower()] = []
+ maint_ids[maint.lower()] = [maint]
+ else:
+ maint_ids[maint.lower()].append(maint)
+ maints[maint.lower()].append(pkg)
+ # remove duplicates
+ out = {}
+ for m in maints:
+ out[maint_ids[m][0]] = np.unique(maints[m])
+ return out
+
+
+def sort_by_release(db):
+ rels = {}
+ for pkg in db.keys():
+ pkginfo = db[pkg]
+ for sec in pkginfo:
+ if not isinstance(sec, tuple):
+ # only releases are of interest
+ continue
+ relname = sec[0]
+ if not relname in rels:
+ rels[relname] = []
+ else:
+ rels[relname].append(pkg)
+ # remove duplicates
+ for r in rels:
+ rels[r] = np.unique(rels[r])
+ return rels
+
+
+def write_pkgpages(jinja_env, cfg, db, outdir, addenum_dir, extracts_dir):
+ create_dir(outdir)
+ create_dir(os.path.join(outdir, 'pkgs'))
+ create_dir(os.path.join(outdir, 'pkglists'))
+ # template for individual package listings