X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fshow_deferred.py;h=fac1692724f970fa736412506a901335c52bcbb5;hb=4830d9be143c7645ea932b53fae095e275ad7814;hp=6c24c23787aac7ba3162f447515e1435e85c5a60;hpb=4174e2aacdbdfe37dad623ab5c9fe1522255d954;p=dak.git diff --git a/dak/show_deferred.py b/dak/show_deferred.py index 6c24c237..fac16927 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,30 @@ import sys, os, re, time import apt_pkg -from debian_bundle import deb822 -from daklib import database -from daklib import queue + +try: + # starting with squeeze + from debian import deb822 +except: + # up to lenny + from debian_bundle import deb822 + +from daklib.dbconn import * 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) @@ -95,7 +108,6 @@ def table_header(): Closes """ - return res def table_footer(): return '

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


\n' @@ -127,13 +139,15 @@ def get_upload_data(changesfn): uploader = re.sub(r'^\s*(\S.*)\s+<.*>',r'\1',uploader) if Cnf.has_key("Show-Deferred::LinkPath"): isnew = 0 - suites = database.get_suites(achanges['source'],src=1) + suites = get_suites_source_in(achanges['source']) if 'unstable' not in suites and 'experimental' not in suites: isnew = 1 + for b in achanges['binary'].split(): - suites = database.get_suites(b) + suites = get_suites_binary_in(b) if 'unstable' not in suites and 'experimental' not in suites: isnew = 1 + if not isnew: # we don't link .changes because we don't want other people to # upload it with the existing signature. @@ -145,19 +159,40 @@ 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-file: %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: @@ -172,7 +207,7 @@ def usage (exit_code=0): sys.exit(exit_code) def init(): - global Cnf, Options, Upload, projectB + global Cnf, Options Cnf = utils.get_conf() Arguments = [('h',"help","Show-Deferred::Options::Help"), ("p","link-path","Show-Deferred::LinkPath","HasArg"), @@ -189,8 +224,10 @@ def init(): Options = Cnf.SubTree("Show-Deferred::Options") if Options["help"]: usage() - Upload = queue.Upload(Cnf) - projectB = Upload.projectB + + # Initialise database connection + DBConn() + return args def main(): @@ -204,11 +241,12 @@ def main(): 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)