X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fshow_deferred.py;h=4ffa5e6ec021ca2cd591a5c6ac9b83e51a21f432;hb=fe251f39e14ab78f06ad750fa0a24f9d7666e97b;hp=695292251e8d18c86e0a0e6e91f3ae33c0186411;hpb=8b0e4bf656f94b203421627051a5d38f02ae7220;p=dak.git
diff --git a/dak/show_deferred.py b/dak/show_deferred.py
index 69529225..4ffa5e6e 100755
--- a/dak/show_deferred.py
+++ b/dak/show_deferred.py
@@ -22,6 +22,7 @@
import sys, os, re, time
import apt_pkg
+import tempfile
from debian_bundle import deb822
from daklib import database
from daklib import queue
@@ -105,7 +106,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,42 +146,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 (delaydays*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
+Location: DEFERRED
+Delayed-Until: %s
+Delay-Remaining: %s"""%(u[1],time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()+u[0])),u[2])
+ for k,v in u[5].items():
+ if not k.startswith('Checksums-') and k != 'Files':
+ print >> f, "%s: %s"%(k,v)
+ 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 +217,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
+ if (not os.path.exists(af) or
+ (af.endswith('.changes') and af not in available_changes)):
os.unlink(af)