From: James Troup Date: Fri, 15 Jun 2001 01:18:25 +0000 (+0000) Subject: New script fernanda X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15e88015bcce67148a75c87db823c57c12bd73d5;p=dak New script fernanda --- diff --git a/TODO b/TODO index aa4df5da..209daedb 100644 --- a/TODO +++ b/TODO @@ -54,6 +54,19 @@ Urgent o jt's web stuff, matt's changelog stuff (overlap) + o fernanda: print_copyright should be a lot more intelligent + @ handle copyright.gz + @ handle copyright.ja and copyright + @ handle (detect at least) symlinks to another package's doc directory + @ handle and/or fall back on source files? + @ check only NEW packages out of a source package with some NEW, some old + + o To incorporate from utils: + @ unreject + @ genreport + @ reject + @ newchanges + Less Urgent ----------- diff --git a/docs/README.names b/docs/README.names index 7b02d86d..caf8ff88 100644 --- a/docs/README.names +++ b/docs/README.names @@ -4,6 +4,7 @@ catherine - poolifies packages; i.e. moves them from legacy dists/ locations int charisma - generates Maintainers files used by e.g. the Debian BTS christina - ??? claire - generates compatability symlink tree for legacy dists/ locations +fernanda - checker script for new packages in incoming heidi - manipulates suite tags; i.e. removes/adds packages from any given suite jenna - generates lists of files in suites which are then fed to apt-ftparchive katie - installs packages into the pool @@ -18,7 +19,7 @@ tea - sanity checks the database ziyi - creates Release files With apologies to Alyson Hannigan, Andrea Corr, Catherine Zeta Jones, -Charisma Carpenter, Christina Aguilera, Claire Daines, Heidi Klum, -Jenna Elfman, Katie Holmes, Madison Michele, Melanie Sykes, Natalie -Portman, Neve Campbell, Rene O'Connor, Rhona Mitre, Shania Twain, Tea -Leoni and Ziyi Zhang. +Charisma Carpenter, Christina Aguilera, Claire Forlani, Fernanda +Tervares, Heidi Klum, Jenna Elfman, Katie Holmes, Madison Michele, +Melanie Sykes, Natalie Portman, Neve Campbell, Rene O'Connor, Rhona +Mitre, Shania Twain, Tea Leoni and Ziyi Zhang. diff --git a/fernanda b/fernanda new file mode 100755 index 00000000..6f1a71fb --- /dev/null +++ b/fernanda @@ -0,0 +1,178 @@ +#!/usr/bin/env python + +# Script to automate some parts of checking NEW packages +# Copyright (C) 2000, 2001 James Troup +# $Id: fernanda,v 1.1 2001-06-15 01:18:25 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +################################################################################ + +# elmo wrote docs?!!?!?!?!?!?! +# as if he wasn't scary enough before!! +# * aj imagines a little red furry toy sitting hunched over a computer +# tapping furiously and giggling to himself +# eventually he stops, and his heads slowly spins around and you +# see this really evil grin and then he sees you, and picks up a +# knife from beside the keyboard and throws it at you, and as you +# breathe your last breath, he starts giggling again +# but i should be telling this to my psychiatrist, not you guys, +# right? :) + +################################################################################ + +import errno, os, re, string, sys +import utils +import apt_pkg + +################################################################################ + +Cnf = None; +projectB = None; + +re_package = re.compile(r"^(.+?)_.*"); +re_doc_directory = re.compile(r".*/doc/([^/]*).*"); + +################################################################################ + +def do_command (command, filename): + o = os.popen("%s %s" % (command, filename)); + print o.read(); + +def print_copyright (deb_filename): + package = re_package.sub(r'\1', deb_filename); + o = os.popen("ar p %s data.tar.gz | tar tzvf - | egrep 'usr(/share)?/doc/[^/]*/copyright' | awk '{ print $6 }' | head -n 1" % (deb_filename)); + copyright = o.read()[:-1]; + + if copyright == "": + print "WARNING: No copyright found, please check package manually." + return; + + doc_directory = re_doc_directory.sub(r'\1', copyright); + if package != doc_directory: + print "WARNING: wrong doc directory (expected %s, got %s)." % (package, doc_directory); + return; + + o = os.popen("ar p %s data.tar.gz | tar xzOf - %s" % (deb_filename, copyright)); + print o.read(); + +def check_dsc (dsc_filename): + dsc = utils.parse_changes(dsc_filename, 1); + files = utils.build_file_list(dsc, 1); + + print "---- .dsc file for %s ----" % (dsc_filename); + dsc_file = utils.open_file(dsc_filename, 'r'); + for line in dsc_file.readlines(): + print line[:-1]; + print; + +def check_deb (deb_filename): + filename = os.path.basename(deb_filename); + + if filename[-5:] == ".udeb": + is_a_udeb = 1; + else: + is_a_udeb = 0; + + print "---- control file for %s ----" % (filename); + do_command ("dpkg -I", deb_filename); + + if is_a_udeb: + print "---- skipping lintian check for µdeb ----"; + print ; + else: + print "---- lintian check for %s ----" % (filename); + do_command ("lintian", deb_filename); + + print "---- contents of %s ----" % (filename); + do_command ("dpkg -c", deb_filename); + + if is_a_udeb: + print "---- skipping copyright for µdeb ----"; + else: + print "---- copyright of %s ----" % (filename); + print_copyright(deb_filename); + + print "---- file listing of %s ----" % (filename); + do_command ("ls -l", deb_filename); + +def check_changes (changes_filename): + changes = utils.parse_changes (changes_filename, 0); + + print "---- .changes file for %s ----" % (changes_filename); + file = utils.open_file (changes_filename, 'r'); + for line in file.readlines(): + print line[:-1] + print ; + file.close(); + + files = utils.build_file_list(changes, ""); + + for file in files.keys(): + if file[-4:] == ".deb" or file[-5:] == ".udeb": + check_deb(file); + if file[-4:] == ".dsc": + check_dsc(file); + # else: => byhand + +def main (): + global Cnf, projectB, db_files, waste, excluded; + + apt_pkg.init(); + + Cnf = apt_pkg.newConfiguration(); + apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file()); + + Arguments = [('D',"debug","Jennifer::Options::Debug", "IntVal"), + ('h',"help","Jennifer::Options::Help"), + ('v',"version","Jennifer::Options::Version")]; + + args = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv); + stdout_fd = sys.stdout; + + for file in args: + try: + # Pipe output for each argument through less + less_fd = os.popen("less -", 'w', 0); + sys.stdout = less_fd; + + try: + if file[-8:] == ".changes": + check_changes(file); + elif file[-4:] == ".deb" or file[-5:] == ".udeb": + check_deb(file); + elif file[-4:] == ".dsc": + check_dsc(file); + else: + utils.fubar("Unrecognised file type: '%s'." % (file)); + finally: + # Reset stdout here so future less invocations aren't FUBAR + less_fd.close(); + sys.stdout = stdout_fd; + except IOError, e: + if errno.errorcode[e.errno] == 'EPIPE': + utils.warn("[fernanda] Caught EPIPE; skipping.\n"); + pass; + else: + raise; + except KeyboardInterrupt: + utils.warn("[fernanda] Caught C-c; skipping.\n"); + pass; + +####################################################################################### + +if __name__ == '__main__': + main() +