X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=halle;h=29fd9240b4a569d636661bf5d88f316e6f597ff0;hb=9540d873fa78598454af57f5f8a4875969ed0439;hp=86d21ddf43f028dac6d0ce8269ad4635613549d9;hpb=2f5e692bfbbb6f8146f50d944f7fcc169a95a0a3;p=dak.git diff --git a/halle b/halle index 86d21ddf..29fd9240 100755 --- a/halle +++ b/halle @@ -1,8 +1,8 @@ #!/usr/bin/env python # Remove obsolete .changes files from proposed-updates -# Copyright (C) 2001 James Troup -# $Id: halle,v 1.3 2001-11-18 19:57:58 rmurray Exp $ +# Copyright (C) 2001, 2002, 2003, 2004 James Troup +# $Id: halle,v 1.13 2005-12-17 10:57:03 rmurray 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 @@ -20,33 +20,43 @@ ################################################################################ -import os, pg, re, sys, string -import utils, db_access -import apt_pkg, apt_inst; +import os, pg, re, sys; +import utils, db_access; +import apt_pkg; ################################################################################ Cnf = None; projectB = None; +Options = None; pu = {}; -re_isdeb = re.compile (r"^(.+)_(.+?)_(.+?).deb$"); +re_isdeb = re.compile (r"^(.+)_(.+?)_(.+?).u?deb$"); ################################################################################ +def usage (exit_code=0): + print """Usage: halle [OPTION] [...] +Remove obsolete changes files from proposed-updates. + + -v, --verbose be more verbose about what is being done + -h, --help show this help and exit + +Need either changes files or an admin.txt file with a '.joey' suffix.""" + sys.exit(exit_code) + +################################################################################ def check_changes (filename): try: - changes = utils.parse_changes(filename, 0) - files = utils.build_file_list(changes, ""); + changes = utils.parse_changes(filename); + files = utils.build_file_list(changes); except: utils.warn("Couldn't read changes file '%s'." % (filename)); return; num_files = len(files.keys()); for file in files.keys(): - re_isadeb = re.compile (r".*\.u?deb$"); - - if utils.re_isadeb.match(file) != None: + if utils.re_isadeb.match(file): m = re_isdeb.match(file); pkg = m.group(1); version = m.group(2); @@ -55,13 +65,13 @@ def check_changes (filename): print "BINARY: %s ==> %s_%s_%s" % (file, pkg, version, arch); else: m = utils.re_issource.match(file) - if m != None: + if m: pkg = m.group(1); version = m.group(2); type = m.group(3); if type != "dsc": del files[file]; - num_files = num_files - 1; + num_files -= 1; continue; arch = "source"; if Options["debug"]: @@ -69,9 +79,13 @@ def check_changes (filename): else: utils.fubar("unknown type, fix me"); if not pu.has_key(pkg): - utils.fubar("%s doesn't seem to exist in p-u?? (from %s [%s])" % (pkg, file, filename)); + # FIXME + utils.warn("%s doesn't seem to exist in p-u?? (from %s [%s])" % (pkg, file, filename)); + continue; if not pu[pkg].has_key(arch): - utils.fubar("%s doesn't seem to exist for %s in p-u?? (from %s [%s])" % (pkg, arch, file, filename)); + # FIXME + utils.warn("%s doesn't seem to exist for %s in p-u?? (from %s [%s])" % (pkg, arch, file, filename)); + continue; pu_version = utils.re_no_epoch.sub('', pu[pkg][arch]); if pu_version == version: if Options["verbose"]: @@ -98,18 +112,18 @@ def check_joey (filename): file = utils.open_file(filename); cwd = os.getcwd(); - os.chdir("%s/dists/proposed-updates" % (Cnf["Dir::RootDir"])); + os.chdir("%s/dists/proposed-updates" % (Cnf["Dir::Root"])); for line in file.readlines(): - line = line[:-1]; - if string.find(line, 'install') != -1: - split_line = string.split(line); + line = line.rstrip(); + if line.find('install') != -1: + split_line = line.split(); + if len(split_line) != 2: + utils.fubar("Parse error (not exactly 2 elements): %s" % (line)); install_type = split_line[0]; - if [ "install", "install-u", "sync-install" ].count(install_type) == 0: + if install_type not in [ "install", "install-u", "sync-install" ]: utils.fubar("Unknown install type ('%s') from: %s" % (install_type, line)); changes_filename = split_line[1] - if len(split_line) != 2: - utils.fubar("Parse error (more than 2 elements): %s" % (line)); if Options["debug"]: print "Processing %s..." % (changes_filename); check_changes(changes_filename); @@ -146,12 +160,10 @@ def main (): Cnf = utils.get_conf() - Arguments = [('q',"quiet","Halle::Options::Quiet"), + Arguments = [('d', "debug", "Halle::Options::Debug"), ('v',"verbose","Halle::Options::Verbose"), - ('D',"debug","Halle::Options::Debug"), - ('h',"help","Halle::Options::Help"), - ('V',"version","Halle::Options::Version")]; - for i in [ "quiet", "verbose", "help", "debug" ]: + ('h',"help","Halle::Options::Help")]; + for i in [ "debug", "verbose", "help" ]: if not Cnf.has_key("Halle::Options::%s" % (i)): Cnf["Halle::Options::%s" % (i)] = ""; @@ -169,9 +181,9 @@ def main (): init_pu(); for file in arguments: - if file[-8:] == ".changes": + if file.endswith(".changes"): check_changes(file); - elif file[-5:] == ".joey": + elif file.endswith(".joey"): check_joey(file); else: utils.fubar("Unrecognised file type: '%s'." % (file));