]> git.decadent.org.uk Git - dak.git/blobdiff - queue_rss.py
catch and output file write errors
[dak.git] / queue_rss.py
index 2e92dd29fc07f8b9fc620eb87fa99cdc434b15e2..9ca66abbe435ad9654c64a37477bc029bdf10f2e 100755 (executable)
@@ -58,8 +58,6 @@ def purge_old_items(feed, max):
     if feed.items is None or len(feed.items) == 0:
         return False
     
-    # most recent first
-    feed.items.sort(lambda x,y: cmp(y.pubDate, x.pubDate))
     feed.items = feed.items[:max]
     return True
 
@@ -102,7 +100,7 @@ def parse_queuedir(dir):
 
     return res
 
-def append_rss_item(status, msg, direction):
+def add_rss_item(status, msg, direction):
     if direction == "in":
         feed = status.feed_in
         title = "%s %s entered NEW" % (msg['Source'], msg['Version'])
@@ -115,7 +113,7 @@ def append_rss_item(status, msg, direction):
     description = "<pre>Description: %s\nChanges: %s\n</pre>" % \
             (utf2ascii(msg['Description']), utf2ascii(msg['Changes']))
 
-    feed.items.append(
+    feed.items.insert(0,
         PyRSS2Gen.RSSItem(
             title, 
             pubDate = msg['Date'],
@@ -134,12 +132,12 @@ def update_feeds(curqueue, status):
     for (name, parsed) in curqueue.items():
         if not status.queue.has_key(name):
             # new package
-            append_rss_item(status, parsed, "in")
+            add_rss_item(status, parsed, "in")
 
     for (name, parsed) in status.queue.items():
         if not curqueue.has_key(name):
             # removed package
-            append_rss_item(status, parsed, "out")
+            add_rss_item(status, parsed, "out")
 
 
 
@@ -149,10 +147,12 @@ if __name__ == "__main__":
 
     if not os.path.exists(settings.outdir):
         sys.stderr.write("Outdir '%s' does not exists\n" % settings.outdir)
+        parser.print_help()
         sys.exit(1)
 
     if not os.path.exists(settings.datadir):
         sys.stderr.write("Datadir '%s' does not exists\n" % settings.datadir)
+        parser.print_help()
         sys.exit(1)
 
     status_db = os.path.join(settings.datadir, db_filename)
@@ -176,11 +176,19 @@ if __name__ == "__main__":
     feed_in_file = os.path.join(settings.outdir, inrss_filename)
     feed_out_file = os.path.join(settings.outdir, outrss_filename)
 
-    status.feed_in.write_xml(file(feed_in_file, "w+"), "utf-8")
-    status.feed_out.write_xml(file(feed_out_file, "w+"), "utf-8")
+    try:
+        status.feed_in.write_xml(file(feed_in_file, "w+"), "utf-8")
+        status.feed_out.write_xml(file(feed_out_file, "w+"), "utf-8")
+    except IOError, why:
+        sys.stderr.write("Unable to write feeds: %s\n", why)
+        sys.exit(1)
 
     status.queue = current_queue
 
-    cPickle.dump(status, open(status_db, "w+"))
+    try:
+        cPickle.dump(status, open(status_db, "w+"))
+    except IOError, why:
+        sys.stderr.write("Unable to save status: %s\n", why)
+        sys.exit(1)
 
 # vim:et:ts=4