X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fshow_deferred.py;h=e9266bcc03f4aa33a60483b9dc24779e5b146323;hb=0d80b258098ff470433efa4d9c1f81b404883195;hp=70468b5a9a6a31efaa143599679c68813e433c9f;hpb=1847db5a5f81b438a5bd5e0fb4376fb31d3696db;p=dak.git diff --git a/dak/show_deferred.py b/dak/show_deferred.py index 70468b5a..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) @@ -98,14 +106,14 @@ def table_header(): return res def table_footer(): - return '

non-NEW uploads are available, use dcut reschedule foo.changes X-day to adjust delays.


\n' + return '

non-NEW uploads are available, see the UploadQueue-README for more information.


\n' def table_row(changesname, delay, changed_by, closes): global row_number res = ''%((row_number%2) and 'odd' or 'even') res += (3*'%s')%tuple(map(html_escape,(changesname,delay,changed_by))) - res += ('%s' % + res += ('%s' % ''.join(map(lambda close: '#%s
' % (close, close),closes))) res += '\n' row_number+=1 @@ -145,42 +153,68 @@ 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) - + 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")] - for i in ["help"]: - if not Cnf.has_key("Show-Deferred::Options::LinkPath"): - Cnf["Show-Deferred::Options::LinkPath"] = "/org/ftp.debian.org/web/deferred/" - if not Cnf.has_key("Show-Deferred::Options::%s" % (i)): - Cnf["Show-Deferred::Options::%s" % (i)] = "" + ("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)] = "" + 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() @@ -190,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)