X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=jeri;h=91f51930dc9a9e606ea11bc4c692fa7b7ab3d1d6;hb=9540d873fa78598454af57f5f8a4875969ed0439;hp=740f0ed7ace5d769e1ce27dc98a0c7cc1085b831;hpb=4edf024f09a7e8d813804dbba797efb95c3abfe6;p=dak.git diff --git a/jeri b/jeri index 740f0ed7..91f51930 100755 --- a/jeri +++ b/jeri @@ -1,8 +1,8 @@ #!/usr/bin/env python # Dependency check proposed-updates -# Copyright (C) 2001, 2002 James Troup -# $Id: jeri,v 1.7 2002-05-18 23:54:51 troup Exp $ +# Copyright (C) 2001, 2002, 2004 James Troup +# $Id: jeri,v 1.15 2005-02-08 22:43:45 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 @@ -20,17 +20,16 @@ ################################################################################ -# ARRRGGGHHH -# what's wrong with me!?!?!? -# i was just nice to some mormon doorknockers!!! -# AJ?!?! -# i know!!!!! -# I'm gonna have to kick your ass when you come over -# aj: GET THE HELL OUT OF THE CABAL! :P +# | > amd64 is more mature than even some released architectures +# | +# | This might be true of the architecture, unfortunately it seems to be the +# | exact opposite for most of the people involved with it. +# +# <1089213290.24029.6.camel@descent.netsplit.com> ################################################################################ -import pg, sys, os, string +import pg, sys, os; import utils, db_access import apt_pkg, apt_inst; @@ -47,7 +46,7 @@ architectures = None; def usage (exit_code=0): print """Usage: jeri [OPTION] [...] -Remove obsolete changes files from proposed-updates. +(Very) Basic dependency checking for proposed-updates. -q, --quiet be quieter about what is being done -v, --verbose be more verbose about what is being done @@ -58,19 +57,6 @@ Need either changes files, deb files or an admin.txt file with a '.joey' suffix. ################################################################################ -def pp_dep (deps): - pp_deps = []; - for atom in deps: - (pkg, version, constraint) = atom; - if constraint: - pp_dep = "%s (%s %s)" % (pkg, constraint, version); - else: - pp_dep = pkg; - pp_deps.append(pp_dep); - return string.join(pp_deps, " |"); - -################################################################################ - def d_test (dict, key, positive, negative): if not dict: return negative; @@ -93,7 +79,7 @@ def check_dep (depends, dep_type, check_archs, filename, files): if stable[dep].has_key(arch): if apt_pkg.CheckDep(stable[dep][arch], constraint, version): if Options["debug"]: - print "Found %s as a real package." % (pp_dep(parsed_dep)); + print "Found %s as a real package." % (utils.pp_deps(parsed_dep)); unsat = 0; break; # As a virtual? @@ -101,7 +87,7 @@ def check_dep (depends, dep_type, check_archs, filename, files): if stable_virtual[dep].has_key(arch): if not constraint and not version: if Options["debug"]: - print "Found %s as a virtual package." % (pp_dep(parsed_dep)); + print "Found %s as a virtual package." % (utils.pp_deps(parsed_dep)); unsat = 0; break; # As part of the same .changes? @@ -109,37 +95,37 @@ def check_dep (depends, dep_type, check_archs, filename, files): dep_filename = "%s_%s_%s.deb" % (dep, epochless_version, arch); if files.has_key(dep_filename): if Options["debug"]: - print "Found %s in the same upload." % (pp_dep(parsed_dep)); + print "Found %s in the same upload." % (utils.pp_deps(parsed_dep)); unsat = 0; break; # Not found... # [FIXME: must be a better way ... ] - error = "%s not found. [Real: " % (pp_dep(parsed_dep)) + error = "%s not found. [Real: " % (utils.pp_deps(parsed_dep)) if stable.has_key(dep): if stable[dep].has_key(arch): - error = error + "%s:%s:%s" % (dep, arch, stable[dep][arch]); + error += "%s:%s:%s" % (dep, arch, stable[dep][arch]); else: - error = error + "%s:-:-" % (dep); + error += "%s:-:-" % (dep); else: - error = error + "-:-:-"; - error = error + ", Virtual: "; + error += "-:-:-"; + error += ", Virtual: "; if stable_virtual.has_key(dep): if stable_virtual[dep].has_key(arch): - error = error + "%s:%s" % (dep, arch); + error += "%s:%s" % (dep, arch); else: - error = error + "%s:-"; + error += "%s:-"; else: - error = error + "-:-"; - error = error + ", Upload: "; + error += "-:-"; + error += ", Upload: "; if files.has_key(dep_filename): - error = error + "yes"; + error += "yes"; else: - error = error + "no"; - error = error + "]"; + error += "no"; + error += "]"; unsat.append(error); if unsat: - sys.stderr.write("MWAAP! %s: '%s' %s can not be satisifed:\n" % (filename, pp_dep(parsed_dep), dep_type)); + sys.stderr.write("MWAAP! %s: '%s' %s can not be satisifed:\n" % (filename, utils.pp_deps(parsed_dep), dep_type)); for error in unsat: sys.stderr.write(" %s\n" % (error)); pkg_unsat = 1; @@ -164,12 +150,12 @@ def check_package(filename, files): pkg_unsat = 0; if Pre_Depends: - pkg_unsat = pkg_unsat + check_dep(Pre_Depends, "pre-dependency", check_archs, base_file, files); + pkg_unsat += check_dep(Pre_Depends, "pre-dependency", check_archs, base_file, files); if Depends: - pkg_unsat = pkg_unsat + check_dep(Depends, "dependency", check_archs, base_file, files); + pkg_unsat += check_dep(Depends, "dependency", check_archs, base_file, files); #if Recommends: - #pkg_unsat = pkg_unsat + check_dep(Recommends, "recommendation", check_archs, base_file, files); + #pkg_unsat += check_dep(Recommends, "recommendation", check_archs, base_file, files); return pkg_unsat; @@ -203,11 +189,11 @@ def check_changes (filename): changes_result = 0; for file in files.keys(): - if file[-4:] == ".deb": + if file.endswith(".deb"): result = check_package(file, files); if Options["verbose"]: pass_fail(file, result); - changes_result = changes_result + result; + changes_result += result; pass_fail (filename, changes_result); @@ -230,18 +216,19 @@ def check_joey (filename): 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); + file.close(); os.chdir(cwd); @@ -254,10 +241,7 @@ def parse_packages(): suite = "stable"; stable = {}; components = Cnf.ValueList("Suite::%s::Components" % (suite)); - architectures = Cnf.ValueList("Suite::%s::Architectures" % (suite)); - for arch in [ "source", "all" ]: - if architectures.count(arch): - architectures.remove(arch); + architectures = filter(utils.real_arch, Cnf.ValueList("Suite::%s::Architectures" % (suite))); for component in components: for architecture in architectures: filename = "%s/dists/%s/%s/binary-%s/Packages" % (Cnf["Dir::Root"], suite, component, architecture); @@ -271,11 +255,12 @@ def parse_packages(): stable[package] = {}; stable[package][architecture] = version; if provides: - for virtual_pkg in string.split(provides,","): - virtual_pkg = string.strip(virtual_pkg); + for virtual_pkg in provides.split(","): + virtual_pkg = virtual_pkg.strip(); if not stable_virtual.has_key(virtual_pkg): stable_virtual[virtual_pkg] = {}; stable_virtual[virtual_pkg][architecture] = "NA"; + packages.close() ################################################################################ @@ -284,10 +269,11 @@ def main (): Cnf = utils.get_conf() - Arguments = [('q',"quiet","Jeri::Options::Quiet"), + Arguments = [('d', "debug", "Jeri::Options::Debug"), + ('q',"quiet","Jeri::Options::Quiet"), ('v',"verbose","Jeri::Options::Verbose"), ('h',"help","Jeri::Options::Help")]; - for i in [ "quiet", "verbose", "help" ]: + for i in [ "debug", "quiet", "verbose", "help" ]: if not Cnf.has_key("Jeri::Options::%s" % (i)): Cnf["Jeri::Options::%s" % (i)] = ""; @@ -307,11 +293,11 @@ def main (): print "done."; for file in arguments: - if file[-8:] == ".changes": + if file.endswith(".changes"): check_changes(file); - elif file[-4:] == ".deb": + elif file.endswith(".deb"): check_deb(file); - elif file[-5:] == ".joey": + elif file.endswith(".joey"): check_joey(file); else: utils.fubar("Unrecognised file type: '%s'." % (file));