X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fshow_deferred.py;h=e9266bcc03f4aa33a60483b9dc24779e5b146323;hb=cd5b29ddfd8de263c085f494b9573d683913f6f3;hp=e718f74ad8a8062995c8ff4e077d08fab97e807c;hpb=886e2d22a3b1e0cbb4f1d248a2250571512a185a;p=dak.git diff --git a/dak/show_deferred.py b/dak/show_deferred.py index e718f74a..e9266bcc 100755 --- a/dak/show_deferred.py +++ b/dak/show_deferred.py @@ -1,6 +1,6 @@ #!/usr/bin/env python -# based on queue-report +""" Overview of the DEFERRED queue, based on queue-report """ # Copyright (C) 2001, 2002, 2003, 2005, 2006 James Troup # Copyright (C) 2008 Thomas Viehmann @@ -22,17 +22,25 @@ import sys, os, re, time import apt_pkg +import tempfile from debian_bundle import deb822 from daklib import database from daklib import queue from daklib import utils +from daklib.regexes import re_html_escaping, html_escaping + +################################################################################ +### work around bug #487902 in debian-python 0.1.10 +deb822.Changes._multivalued_fields = { + "files": [ "md5sum", "size", "section", "priority", "name" ], + "checksums-sha1": ["sha1", "size", "name"], + "checksums-sha256": ["sha256", "size", "name"], + } ################################################################################ row_number = 1 -html_escaping = {'"':'"', '&':'&', '<':'<', '>':'>'} -re_html_escaping = re.compile('|'.join(map(re.escape, html_escaping.keys()))) def html_escape(s): return re_html_escaping.sub(lambda x: html_escaping.get(x.group(0)), s) @@ -145,28 +153,50 @@ def get_upload_data(changesfn): if os.path.exists(qfn): os.symlink(qfn,lfn) os.chmod(qfn, 0644) - return (delaydays*24*60*60+remainingtime, changesname, delay, uploader, achanges.get('closes').split()) + return (max(delaydays-1,0)*24*60*60+remainingtime, changesname, delay, uploader, achanges.get('closes','').split(),achanges) def list_uploads(filelist): uploads = map(get_upload_data, filelist) uploads.sort() + # print the summary page print header() if uploads: print table_header() - print ''.join(map(lambda x: table_row(*x[1:]), uploads)) + print ''.join(map(lambda x: table_row(*x[1:5]), uploads)) print table_footer() else: print '

Currently no deferred uploads to Debian

' print footer() + # machine readable summary + if Cnf.has_key("Show-Deferred::LinkPath"): + fn = os.path.join(Cnf["Show-Deferred::LinkPath"],'.status.tmp') + f = open(fn,"w") + try: + for u in uploads: + print >> f, "Changes: %s"%u[1] + fields = """Location: DEFERRED +Delayed-Until: %s +Delay-Remaining: %s"""%(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()+u[0])),u[2]) + print >> f, fields + print >> f, str(u[5]).rstrip() + open(os.path.join(Cnf["Show-Deferred::LinkPath"],u[1]),"w").write(str(u[5])+fields+'\n') + print >> f + f.close() + os.rename(os.path.join(Cnf["Show-Deferred::LinkPath"],'.status.tmp'), + os.path.join(Cnf["Show-Deferred::LinkPath"],'status')) + except: + os.unlink(fn) + raise def usage (exit_code=0): if exit_code: f = sys.stderr else: f = sys.stdout - print >> f, """Usage: dak show-deferred /path/to/DEFERRED - -h, --help show this help and exit. - -p, --html-path [path] override output directory. + print >> f, """Usage: dak show-deferred + -h, --help show this help and exit. + -p, --link-path [path] override output directory. + -d, --deferred-queue [path] path to the deferred queue """ sys.exit(exit_code) @@ -174,11 +204,17 @@ def init(): global Cnf, Options, Upload, projectB Cnf = utils.get_conf() Arguments = [('h',"help","Show-Deferred::Options::Help"), - ("p","link-path","Show-Deferred::LinkPath","HasArg")] + ("p","link-path","Show-Deferred::LinkPath","HasArg"), + ("d","deferred-queue","Show-Deferred::DeferredQueue","HasArg")] + args = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv) for i in ["help"]: if not Cnf.has_key("Show-Deferred::Options::%s" % (i)): Cnf["Show-Deferred::Options::%s" % (i)] = "" - args = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv) + for i,j in [("DeferredQueue","--deferred-queue")]: + if not Cnf.has_key("Show-Deferred::%s" % (i)): + print >> sys.stderr, """Show-Deferred::%s is mandatory. + set via config file or command-line option %s"""%(i,j) + Options = Cnf.SubTree("Show-Deferred::Options") if Options["help"]: usage() @@ -188,20 +224,21 @@ def init(): def main(): args = init() - if len(args)!=1: + if len(args)!=0: usage(1) filelist = [] - for r,d,f in os.walk(args[0]): + for r,d,f in os.walk(Cnf["Show-Deferred::DeferredQueue"]): filelist += map (lambda x: os.path.join(r,x), filter(lambda x: x.endswith('.changes'), f)) list_uploads(filelist) + available_changes = set(map(os.path.basename,filelist)) if Cnf.has_key("Show-Deferred::LinkPath"): # remove dead links for r,d,f in os.walk(Cnf["Show-Deferred::LinkPath"]): for af in f: - af = os.path.join(r,af) - if not os.path.exists(af): - print >> sys.stderr, "obsolete",af - os.unlink(af) + afp = os.path.join(r,af) + if (not os.path.exists(afp) or + (af.endswith('.changes') and af not in available_changes)): + os.unlink(afp)