X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=helena;h=7337461013320e5e370a2169ea7735be131111f4;hb=c78ddc733c8c4a372d0ab7fd904a30f6065661bb;hp=60b655c85803f23756517105098f793502ae77bc;hpb=434ec3a6423fd589b21eff825f6bc58aa8587550;p=dak.git diff --git a/helena b/helena index 60b655c8..73374610 100755 --- a/helena +++ b/helena @@ -1,8 +1,8 @@ #!/usr/bin/env python # Produces a report on NEW and BYHAND packages -# Copyright (C) 2001, 2002 James Troup -# $Id: helena,v 1.1 2002-06-05 00:17:22 troup Exp $ +# Copyright (C) 2001, 2002, 2003 James Troup +# $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 @@ -35,7 +35,7 @@ ################################################################################ -import copy, glob, os, stat, string, sys, time; +import copy, glob, os, stat, sys, time; import apt_pkg; import katie, utils; @@ -44,7 +44,16 @@ Katie = None; ################################################################################ -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: @@ -56,23 +65,23 @@ def time_pp(x): 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)); @@ -126,7 +135,7 @@ def process_changes_files(changes_files, type): 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 @@ -136,31 +145,50 @@ def process_changes_files(changes_files, type): 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 @@ -170,13 +198,26 @@ def main(): 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); ################################################################################