]> git.decadent.org.uk Git - dak.git/commitdiff
New script fernanda
authorJames Troup <james@nocrew.org>
Fri, 15 Jun 2001 01:18:25 +0000 (01:18 +0000)
committerJames Troup <james@nocrew.org>
Fri, 15 Jun 2001 01:18:25 +0000 (01:18 +0000)
TODO
docs/README.names
fernanda [new file with mode: 0755]

diff --git a/TODO b/TODO
index aa4df5da7cc001b2c2aa6ca39f72480411d4efdf..209daedb3dca1000d5d81dd38d989a2137e30381 100644 (file)
--- 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
 -----------
 
index 7b02d86d84bba284658e4ca4310c0094b3d69eab..caf8ff884e0ef790fd82921edebb884528841314 100644 (file)
@@ -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 (executable)
index 0000000..6f1a71f
--- /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 <james@nocrew.org>
+# $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
+
+################################################################################
+
+# <Omnic> elmo wrote docs?!!?!?!?!?!?!
+# <aj> 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
+# <aj> 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
+# <aj> 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()
+