#!/usr/bin/env python
# Produces a report on NEW and BYHAND packages
-# Copyright (C) 2001, 2002 James Troup <james@nocrew.org>
-# $Id: helena,v 1.1 2002-06-05 00:17:22 troup Exp $
+# Copyright (C) 2001, 2002, 2003 James Troup <james@nocrew.org>
+# $Id: helena,v 1.5 2003-07-15 17:29:26 troup Exp $
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
################################################################################
-import copy, glob, os, stat, string, sys, time;
+import copy, glob, os, stat, sys, time;
import apt_pkg;
import katie, utils;
################################################################################
-def plural (x):
+def usage(exit_code=0):
+ print """Usage: helena
+Prints a report of packages in queue directories (usually new and byhand).
+
+ -h, --help show this help and exit."""
+ sys.exit(exit_code)
+
+################################################################################
+
+def plural(x):
if x > 1:
return "s";
else:
if x < 60:
unit="second";
elif x < 3600:
- x = x / 60;
+ x /= 60;
unit="minute";
elif x < 86400:
- x = x / 3600;
+ x /= 3600;
unit="hour";
elif x < 604800:
- x = x / 86400;
+ x /= 86400;
unit="day";
elif x < 2419200:
- x = x / 604800;
+ x /= 604800;
unit="week";
elif x < 29030400:
- x = x / 2419200;
+ x /= 2419200;
unit="month";
else:
- x = x / 29030400;
- unit="years";
+ x /= 29030400;
+ unit="year";
x = int(x);
return "%s %s%s" % (x, unit, plural(x));
ctime = os.stat(d["filename"])[stat.ST_CTIME];
if ctime < oldest:
oldest = ctime;
- have_note = have_note + (d.has_key("lisa note"));
+ have_note += (d.has_key("lisa note"));
per_source[source]["oldest"] = oldest;
if not have_note:
per_source[source]["note_state"] = 0; # none
per_source[source]["note_state"] = 2; # all
per_source_items = per_source.items();
per_source_items.sort(sg_compare);
- msg = "";
+
+ entries = [];
+ max_source_len = 0;
+ max_version_len = 0;
+ max_arch_len = 0;
for i in per_source_items:
last_modified = time.time()-i[1]["oldest"];
source = i[1]["list"][0]["source"];
+ if len(source) > max_source_len:
+ max_source_len = len(source);
arches = {};
versions = {};
for j in i[1]["list"]:
for arch in j["architecture"].keys():
arches[arch] = "";
- versions[j["version"]] = "";
- arch_list = string.join(arches.keys(), ", ");
- version_list = string.join(versions.keys(), ", ");
+ version = j["version"];
+ versions[version] = "";
+ arches_list = arches.keys();
+ arches_list.sort(utils.arch_compare_sw);
+ arch_list = " ".join(arches_list);
+ version_list = " ".join(versions.keys());
+ if len(version_list) > max_version_len:
+ max_version_len = len(version_list);
+ if len(arch_list) > max_arch_len:
+ max_arch_len = len(arch_list);
if i[1]["note_state"]:
- note = " | [note]";
+ note = " | [N]";
else:
note = "";
- msg = msg + "%10s | %10s | %10s%s | %s old\n" % (source, version_list, arch_list, note, time_pp(last_modified));
+ entries.append([source, version_list, arch_list, note, time_pp(last_modified)]);
+
+ format="%%-%ds | %%-%ds | %%-%ds%%s | %%s old\n" % (max_source_len, max_version_len, max_arch_len)
+ msg = "";
+ for entry in entries:
+ (source, version_list, arch_list, note, last_modified) = entry;
+ msg += format % (source, version_list, arch_list, note, last_modified);
if msg:
total_count = len(changes_files);
source_count = len(per_source_items);
- print string.upper(type)
- print "-"*len(type)
+ print type.upper();
+ print "-"*len(type);
print
- print msg
+ print msg;
print "%s %s source package%s / %s %s package%s in total." % (source_count, type, plural(source_count), total_count, type, plural(total_count));
print
global Cnf, Katie;
Cnf = utils.get_conf();
- apt_pkg.ParseCommandLine(Cnf,[],sys.argv);
+ Arguments = [('h',"help","Helena::Options::Help")];
+ for i in [ "help" ]:
+ if not Cnf.has_key("Helena::Options::%s" % (i)):
+ Cnf["Helena::Options::%s" % (i)] = "";
+
+ apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv);
+
+ Options = Cnf.SubTree("Helena::Options")
+ if Options["Help"]:
+ usage();
+
Katie = katie.Katie(Cnf);
- changes_files = glob.glob("%s/*.changes" % (Cnf["Dir::Queue::Byhand"]));
- process_changes_files(changes_files, "byhand");
- changes_files = glob.glob("%s/*.changes" % (Cnf["Dir::Queue::New"]));
- process_changes_files(changes_files, "new");
+ directories = Cnf.ValueList("Helena::Directories");
+ if not directories:
+ directories = [ "byhand", "new" ];
+
+ for directory in directories:
+ changes_files = glob.glob("%s/*.changes" % (Cnf["Dir::Queue::%s" % (directory)]));
+ process_changes_files(changes_files, directory);
################################################################################