X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fshow_deferred.py;h=833cad282992fe94b1f400294627f8de9dba4b32;hb=d80d1f9473ed63a08404a23c04a9d8eabedc76a6;hp=81c117b148e64c3c9b9b1fee844188720c2a7d1e;hpb=b478500c58727a40b9ce6de765012160e93fd095;p=dak.git diff --git a/dak/show_deferred.py b/dak/show_deferred.py index 81c117b1..833cad28 100755 --- a/dak/show_deferred.py +++ b/dak/show_deferred.py @@ -22,11 +22,20 @@ 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 +################################################################################ +### 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 @@ -105,7 +114,7 @@ def table_row(changesname, delay, changed_by, closes): 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,40 +154,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")] + ("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 +225,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)